diff options
author | Aaron Kennedy <aaron.kennedy@nokia.com> | 2009-07-23 05:01:40 (GMT) |
---|---|---|
committer | Aaron Kennedy <aaron.kennedy@nokia.com> | 2009-07-23 05:01:40 (GMT) |
commit | d1072c333225ded9e46cf857bef701cc67f6fc1d (patch) | |
tree | d20b15a94385a78f907350a0f74b9faa905eff3d | |
parent | 4f35294d737d9059398b2c8f714c8e0ea37079ed (diff) | |
parent | c42f7058dfd7ea551b2d3bca5651b0c802c91259 (diff) | |
download | Qt-d1072c333225ded9e46cf857bef701cc67f6fc1d.zip Qt-d1072c333225ded9e46cf857bef701cc67f6fc1d.tar.gz Qt-d1072c333225ded9e46cf857bef701cc67f6fc1d.tar.bz2 |
Merge branch 'master' of git@scm.dev.nokia.troll.no:qt/qt into kinetic-declarativeui
Conflicts:
configure
configure.exe
src/gui/kernel/qaction.h
772 files changed, 53185 insertions, 5317 deletions
diff --git a/config.tests/x11/xsync/xsync.cpp b/config.tests/x11/xsync/xsync.cpp new file mode 100644 index 0000000..a23fb08 --- /dev/null +++ b/config.tests/x11/xsync/xsync.cpp @@ -0,0 +1,11 @@ +#include <X11/Xlib.h> +#include <X11/Xutil.h> +#include <X11/extensions/sync.h> + +int main(int, char **) +{ + XSyncValue value; + (void*)&XSyncIntToValue; + (void*)&XSyncCreateCounter; + return 0; +} diff --git a/config.tests/x11/xsync/xsync.pro b/config.tests/x11/xsync/xsync.pro new file mode 100644 index 0000000..58b8238 --- /dev/null +++ b/config.tests/x11/xsync/xsync.pro @@ -0,0 +1,3 @@ +CONFIG += x11 +CONFIG -= qt +SOURCES = xsync.cpp @@ -570,6 +570,7 @@ CFG_DEBUG_RELEASE=no CFG_SHARED=yes CFG_SM=auto CFG_XSHAPE=auto +CFG_XSYNC=auto CFG_XINERAMA=runtime CFG_XFIXES=runtime CFG_ZLIB=auto @@ -839,7 +840,7 @@ while [ "$#" -gt 0 ]; do VAL=no ;; #Qt style yes options - -incremental|-qvfb|-profile|-shared|-static|-sm|-xinerama|-xshape|-xinput|-reduce-exports|-pch|-separate-debug-info|-stl|-freetype|-xcursor|-xfixes|-xrandr|-xrender|-mitshm|-fontconfig|-xkb|-nis|-qdbus|-dbus|-dbus-linked|-glib|-gstreamer|-gtkstyle|-cups|-iconv|-largefile|-h|-help|-v|-verbose|-debug|-release|-fast|-accessibility|-confirm-license|-gnumake|-framework|-qt3support|-debug-and-release|-exceptions|-cocoa|-universal|-prefix-install|-silent|-armfpa|-optimized-qmake|-dwarf2|-reduce-relocations|-sse|-openssl|-openssl-linked|-ptmalloc|-xmlpatterns|-phonon|-phonon-backend|-svg|-declarative|-webkit|-scripttools|-rpath|-force-pkg-config) + -incremental|-qvfb|-profile|-shared|-static|-sm|-xinerama|-xshape|-xshape|-xinput|-reduce-exports|-pch|-separate-debug-info|-stl|-freetype|-xcursor|-xfixes|-xrandr|-xrender|-mitshm|-fontconfig|-xkb|-nis|-qdbus|-dbus|-dbus-linked|-glib|-gstreamer|-gtkstyle|-cups|-iconv|-largefile|-h|-help|-v|-verbose|-debug|-release|-fast|-accessibility|-confirm-license|-gnumake|-framework|-qt3support|-debug-and-release|-exceptions|-cocoa|-universal|-prefix-install|-silent|-armfpa|-optimized-qmake|-dwarf2|-reduce-relocations|-sse|-openssl|-openssl-linked|-ptmalloc|-xmlpatterns|-phonon|-phonon-backend|-svg|-declarative|-webkit|-scripttools|-rpath|-force-pkg-config) VAR=`echo $1 | sed "s,^-\(.*\),\1,"` VAL=yes ;; @@ -1166,6 +1167,8 @@ while [ "$#" -gt 0 ]; do else if [ "$VAL" = "opengl" ]; then CFG_GRAPHICS_SYSTEM="opengl" + elif [ "$VAL" = "openvg" ]; then + CFG_GRAPHICS_SYSTEM="openvg" elif [ "$VAL" = "raster" ]; then CFG_GRAPHICS_SYSTEM="raster" else @@ -1445,6 +1448,13 @@ while [ "$#" -gt 0 ]; do UNKNOWN_OPT=yes fi ;; + xsync) + if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then + CFG_XSYNC="$VAL" + else + UNKNOWN_OPT=yes + fi + ;; xinput) if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ] || [ "$VAL" = "runtime" ]; then CFG_XINPUT="$VAL" @@ -3532,6 +3542,10 @@ Qt/X11 only: $SHY -xshape ............ Compile XShape support. Requires X11/extensions/shape.h. + $SHN -no-xsync .......... Do not compile XSync support. + $SHY -xsync ............. Compile XSync support. + Requires X11/extensions/sync.h. + $XAN -no-xinerama ....... Do not compile Xinerama (multihead) support. $XAY -xinerama .......... Compile Xinerama support. Requires X11/extensions/Xinerama.h and libXinerama. @@ -3772,7 +3786,7 @@ elif [ "$Edition" = "OpenSource" ]; then read acceptance fi echo - if [ "$acceptance" = "yes" ]; then + if [ "$acceptance" = "yes" ] || [ "$acceptance" = "y" ]; then break elif [ "$acceptance" = "no" ]; then echo "You are not licensed to use this software." @@ -5079,6 +5093,23 @@ if [ "$PLATFORM_X11" = "yes" ]; then fi fi + # auto-detect XSync support + if [ "$CFG_XSYNC" != "no" ]; then + if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/x11/xsync "XSync" $L_FLAGS $I_FLAGS $l_FLAGS $X11TESTS_FLAGS; then + CFG_XSYNC=yes + else + if [ "$CFG_XSYNC" = "yes" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then + echo "XSync support cannot be enabled due to functionality tests!" + echo " Turn on verbose messaging (-v) to $0 to see the final report." + echo " If you believe this message is in error you may use the continue" + echo " switch (-continue) to $0 to continue." + exit 101 + else + CFG_XSYNC=no + fi + fi + fi + # auto-detect Xinerama support if [ "$CFG_XINERAMA" != "no" ]; then if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/x11/xinerama "Xinerama" $L_FLAGS $I_FLAGS $l_FLAGS $X11TESTS_FLAGS; then @@ -5598,6 +5629,12 @@ if [ "$CFG_OPENVG" != "no" ]; then fi fi +# if openvg is disabled and the user specified graphicssystem vg, disable it... +if [ "$CFG_GRAPHICS_SYSTEM" = "openvg" ] && [ "$CFG_OPENVG" = "no" ]; then + echo "OpenVG Graphics System is disabled due to missing OpenVG support..." + CFG_GRAPHICS_SYSTEM=default +fi + if [ "$CFG_PTMALLOC" != "no" ]; then # build ptmalloc, copy .a file to lib/ echo "Building ptmalloc. Please wait..." @@ -5939,6 +5976,9 @@ if [ "$PLATFORM_X11" = "yes" ]; then if [ "$CFG_XSHAPE" = "yes" ]; then QT_CONFIG="$QT_CONFIG xshape" fi + if [ "$CFG_XSYNC" = "yes" ]; then + QT_CONFIG="$QT_CONFIG xsync" + fi if [ "$CFG_XINERAMA" = "yes" ]; then QT_CONFIG="$QT_CONFIG xinerama" QMakeVar set QMAKE_LIBS_X11 '-lXinerama $$QMAKE_LIBS_X11' @@ -6040,6 +6080,7 @@ fi # canBuildQtXmlPatterns="yes" canBuildWebKit="$HAVE_STL" +canBuildQtConcurrent="yes" # WebKit requires stdint.h "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/stdint "Stdint" $L_FLAGS $I_FLAGS $l_FLAGS @@ -6071,9 +6112,9 @@ case "$XPLATFORM" in case "$(${QMAKE_CONF_COMPILER} -dumpversion)" in 4*|3.4*) ;; - 3.3*) - canBuildWebKit="no" - ;; + 3.3*) + canBuildWebKit="no" + ;; *) canBuildWebKit="no" canBuildQtXmlPatterns="no" @@ -6081,30 +6122,72 @@ case "$XPLATFORM" in esac ;; solaris-cc*) - # Check the compiler version - case `${QMAKE_CONF_COMPILER} -V 2>&1 | awk '{print $4}'` in - *) - canBuildWebKit="no" - canBuildQtXmlPatterns="no" - ;; - esac - ;; + # Check the compiler version + case `${QMAKE_CONF_COMPILER} -V 2>&1 | awk '{print $4}'` in + 5.[012345678]) + canBuildWebKit="no" + canBuildQtXmlPatterns="no" + canBuildQtConcurrent="no" + ;; + 5.9) + canBuildWebKit="no" + ;; + esac + ;; hpux-acc*) canBuildWebKit="no" canBuildQtXmlPatterns="no" + canBuildQtConcurrent="no" ;; hpuxi-acc*) canBuildWebKit="no" ;; aix-xlc*) - canBuildWebKit="no" - canBuildQtXmlPatterns="no" - ;; + # Get the xlC version + cat > xlcver.c <<EOF +#include <stdio.h> +int main() +{ + printf("%d.%d\n", __xlC__ >> 8, __xlC__ & 0xFF); + return 0; +} +EOF + xlcver= + if ${QMAKE_CONF_COMPILER} -o xlcver xlcver.c >/dev/null 2>/dev/null; then + xlcver=`./xlcver 2>/dev/null` + rm -f ./xlcver + fi + if [ "$OPT_VERBOSE" = "yes" ]; then + if [ -n "$xlcver" ]; then + echo Found IBM xlC version: $xlcver. + else + echo Could not determine IBM xlC version, assuming oldest supported. + fi + fi + + case "$xlcver" in + [123456].*) + canBuildWebKit="no" + canBuildQtXmlPatterns="no" + canBuildQtConcurrent="no" + ;; + *) + canBuildWebKit="no" + ;; + esac + ;; irix-cc*) canBuildWebKit="no" + canBuildQtConcurrent="no" ;; esac +CFG_CONCURRENT="yes" +if [ "$canBuildQtConcurrent" = "no" ]; then + QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_CONCURRENT" + CFG_CONCURRENT="no" +fi + if [ "$CFG_XMLPATTERNS" = "yes" -a "$CFG_EXCEPTIONS" = "no" ]; then echo "QtXmlPatterns was requested, but it can't be built due to exceptions being disabled." exit 1 @@ -6627,6 +6710,7 @@ QMakeVar set sql-plugins "$SQL_PLUGINS" if [ "$PLATFORM_QWS" != "yes" ]; then [ "$CFG_GRAPHICS_SYSTEM" = "raster" ] && QCONFIG_FLAGS="$QCONFIG_FLAGS QT_GRAPHICSSYSTEM_RASTER" [ "$CFG_GRAPHICS_SYSTEM" = "opengl" ] && QCONFIG_FLAGS="$QCONFIG_FLAGS QT_GRAPHICSSYSTEM_OPENGL" + [ "$CFG_GRAPHICS_SYSTEM" = "openvg" ] && QCONFIG_FLAGS="$QCONFIG_FLAGS QT_GRAPHICSSYSTEM_OPENVG" fi # X11/Unix/Mac only configs @@ -6656,6 +6740,7 @@ fi [ "$CFG_XRENDER" = "no" ] && QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_XRENDER" [ "$CFG_MITSHM" = "no" ] && QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_MITSHM" [ "$CFG_XSHAPE" = "no" ] && QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_SHAPE" +[ "$CFG_XSYNC" = "no" ] && QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_XSYNC" [ "$CFG_XINPUT" = "no" ] && QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_XINPUT QT_NO_TABLET" [ "$CFG_XCURSOR" = "runtime" ] && QCONFIG_FLAGS="$QCONFIG_FLAGS QT_RUNTIME_XCURSOR" @@ -7018,6 +7103,7 @@ echo "Qt 3 compatibility .. $CFG_QT3SUPPORT" [ "$CFG_DBUS" = "no" ] && echo "QtDBus module ....... no" [ "$CFG_DBUS" = "yes" ] && echo "QtDBus module ....... yes (run-time)" [ "$CFG_DBUS" = "linked" ] && echo "QtDBus module ....... yes (linked)" +echo "QtConcurrent code.... $CFG_CONCURRENT" echo "QtScriptTools module $CFG_SCRIPTTOOLS" echo "QtXmlPatterns module $CFG_XMLPATTERNS" echo "Phonon module ....... $CFG_PHONON" @@ -7118,6 +7204,7 @@ fi if [ "$PLATFORM_X11" = "yes" ]; then echo "NAS sound support ... $CFG_NAS" echo "XShape support ...... $CFG_XSHAPE" + echo "XSync support ....... $CFG_XSYNC" echo "Xinerama support .... $CFG_XINERAMA" echo "Xcursor support ..... $CFG_XCURSOR" echo "Xfixes support ...... $CFG_XFIXES" diff --git a/demos/browser/browsermainwindow.cpp b/demos/browser/browsermainwindow.cpp index 88abb6a..0636f1d 100644 --- a/demos/browser/browsermainwindow.cpp +++ b/demos/browser/browsermainwindow.cpp @@ -81,6 +81,7 @@ BrowserMainWindow::BrowserMainWindow(QWidget *parent, Qt::WindowFlags flags) , m_stop(0) , m_reload(0) { + setToolButtonStyle(Qt::ToolButtonFollowStyle); setAttribute(Qt::WA_DeleteOnClose, true); statusBar()->setSizeGripEnabled(true); setupMenu(); diff --git a/demos/qtdemo/qtdemo.rc b/demos/qtdemo/qtdemo.rc index 4cf2a63..882b355 100644 --- a/demos/qtdemo/qtdemo.rc +++ b/demos/qtdemo/qtdemo.rc @@ -1,2 +1,32 @@ +#include "winver.h" + IDI_ICON1 ICON DISCARDABLE "qtdemo.ico" +VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,0,0,0 + PRODUCTVERSION 1,0,0,0 + FILEFLAGS 0x0L + FILEFLAGSMASK 0x3fL + FILEOS 0x00040004L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "000004b0" + BEGIN + VALUE "CompanyName", "Nokia Corporation and/or its subsidiary(-ies)" + VALUE "FileDescription", "Qt Examples and Demos" + VALUE "FileVersion", "1.0.0.0" + VALUE "LegalCopyright", "Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies)." + VALUE "InternalName", "qtdemo" + VALUE "OriginalFilename", "qtdemo.exe" + VALUE "ProductName", "Qt Examples and Demos" + VALUE "ProductVersion", "1.0.0.0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0, 1200 + END +END diff --git a/demos/textedit/textedit.cpp b/demos/textedit/textedit.cpp index 5eee855..d1e12bb 100644 --- a/demos/textedit/textedit.cpp +++ b/demos/textedit/textedit.cpp @@ -75,6 +75,7 @@ const QString rsrcPath = ":/images/win"; TextEdit::TextEdit(QWidget *parent) : QMainWindow(parent) { + setToolButtonStyle(Qt::ToolButtonFollowStyle); setupFileActions(); setupEditActions(); setupTextActions(); @@ -158,6 +159,7 @@ void TextEdit::setupFileActions() QAction *a; a = new QAction(QIcon(rsrcPath + "/filenew.png"), tr("&New"), this); + a->setPriority(QAction::LowPriority); a->setShortcut(QKeySequence::New); connect(a, SIGNAL(triggered()), this, SLOT(fileNew())); tb->addAction(a); @@ -179,6 +181,7 @@ void TextEdit::setupFileActions() menu->addAction(a); a = new QAction(tr("Save &As..."), this); + a->setPriority(QAction::LowPriority); connect(a, SIGNAL(triggered()), this, SLOT(fileSaveAs())); menu->addAction(a); menu->addSeparator(); @@ -195,6 +198,7 @@ void TextEdit::setupFileActions() menu->addAction(a); a = new QAction(QIcon(rsrcPath + "/exportpdf.png"), tr("&Export PDF..."), this); + a->setPriority(QAction::LowPriority); a->setShortcut(Qt::CTRL + Qt::Key_D); connect(a, SIGNAL(triggered()), this, SLOT(filePrintPdf())); tb->addAction(a); @@ -224,19 +228,23 @@ void TextEdit::setupEditActions() tb->addAction(a); menu->addAction(a); a = actionRedo = new QAction(QIcon(rsrcPath + "/editredo.png"), tr("&Redo"), this); + a->setPriority(QAction::LowPriority); a->setShortcut(QKeySequence::Redo); tb->addAction(a); menu->addAction(a); menu->addSeparator(); a = actionCut = new QAction(QIcon(rsrcPath + "/editcut.png"), tr("Cu&t"), this); + a->setPriority(QAction::LowPriority); a->setShortcut(QKeySequence::Cut); tb->addAction(a); menu->addAction(a); a = actionCopy = new QAction(QIcon(rsrcPath + "/editcopy.png"), tr("&Copy"), this); + a->setPriority(QAction::LowPriority); a->setShortcut(QKeySequence::Copy); tb->addAction(a); menu->addAction(a); a = actionPaste = new QAction(QIcon(rsrcPath + "/editpaste.png"), tr("&Paste"), this); + a->setPriority(QAction::LowPriority); a->setShortcut(QKeySequence::Paste); tb->addAction(a); menu->addAction(a); @@ -253,6 +261,7 @@ void TextEdit::setupTextActions() menuBar()->addMenu(menu); actionTextBold = new QAction(QIcon(rsrcPath + "/textbold.png"), tr("&Bold"), this); + actionTextBold->setPriority(QAction::LowPriority); actionTextBold->setShortcut(Qt::CTRL + Qt::Key_B); QFont bold; bold.setBold(true); @@ -263,6 +272,7 @@ void TextEdit::setupTextActions() actionTextBold->setCheckable(true); actionTextItalic = new QAction(QIcon(rsrcPath + "/textitalic.png"), tr("&Italic"), this); + actionTextItalic->setPriority(QAction::LowPriority); actionTextItalic->setShortcut(Qt::CTRL + Qt::Key_I); QFont italic; italic.setItalic(true); @@ -273,6 +283,7 @@ void TextEdit::setupTextActions() actionTextItalic->setCheckable(true); actionTextUnderline = new QAction(QIcon(rsrcPath + "/textunder.png"), tr("&Underline"), this); + actionTextUnderline->setPriority(QAction::LowPriority); actionTextUnderline->setShortcut(Qt::CTRL + Qt::Key_U); QFont underline; underline.setUnderline(true); @@ -301,12 +312,16 @@ void TextEdit::setupTextActions() actionAlignLeft->setShortcut(Qt::CTRL + Qt::Key_L); actionAlignLeft->setCheckable(true); + actionAlignLeft->setPriority(QAction::LowPriority); actionAlignCenter->setShortcut(Qt::CTRL + Qt::Key_E); actionAlignCenter->setCheckable(true); + actionAlignCenter->setPriority(QAction::LowPriority); actionAlignRight->setShortcut(Qt::CTRL + Qt::Key_R); actionAlignRight->setCheckable(true); + actionAlignRight->setPriority(QAction::LowPriority); actionAlignJustify->setShortcut(Qt::CTRL + Qt::Key_J); actionAlignJustify->setCheckable(true); + actionAlignJustify->setPriority(QAction::LowPriority); tb->addActions(grp->actions()); menu->addActions(grp->actions()); diff --git a/dist/changes-4.6.0 b/dist/changes-4.6.0 index 4c7bf52..6c7e450 100644 --- a/dist/changes-4.6.0 +++ b/dist/changes-4.6.0 @@ -31,6 +31,8 @@ information about a particular change. * Platform Specific Changes * **************************************************************************** + - Significant external contribution from Milan Burda for planned removal + of (non-unicode) Windows 9x/ME support. **************************************************************************** @@ -68,3 +70,20 @@ information about a particular change. to the item's position and transformation, you can set the flag QGraphicsItem::ItemSendsGeometryChanges (which is enabled by default by QGraphicsWidget and QGraphicsProxyWidget). + +- QDesktopWidget on X11 no longer emits the resized(int) signal when screens + are added or removed. This was not done on other platforms. Use the + screenCountChanged signal instead + +- QUrl's parser is more strict when for hostnames in URLs. QUrl now + enforces STD 3 rules: + + * each individual hostname section (between dots) must be at most + 63 ASCII characters in length; + + * only letters, digits, and the hyphen character are allowed in the + ASCII range; letters outside the ASCII range follow the normal + IDN rules + + That means QUrl no longer accepts some URLs that were invalid + before, but weren't interpreted as such. diff --git a/doc/src/classes.qdoc b/doc/src/classes.qdoc index dddc96f..9a5d3ec 100644 --- a/doc/src/classes.qdoc +++ b/doc/src/classes.qdoc @@ -44,13 +44,15 @@ \title Qt's Classes \ingroup classlists - This is a list of all Qt classes excluding the \l{Qt 3 - compatibility classes}. For a shorter list that only includes the - most frequently used classes, see \l{Qt's Main Classes}. + This is a list of all Qt classes. For a shorter list of the most + frequently used Qt classes, see \l{Qt's Main Classes}. For a list + of the classes provided for compatibility with Qt3, see \l{Qt 3 + compatibility classes}. For classes that have been deprecated, see + the \l{Obsolete Classes} list. \generatelist classes - \sa {Qt 3 Compatibility Classes}, {Qt's Modules} + \sa {Qt 3 Compatibility Classes}, {Qt's Modules}, {Obsolete Classes} */ /*! diff --git a/doc/src/credits.qdoc b/doc/src/credits.qdoc index 81ded04..15bf1e2 100644 --- a/doc/src/credits.qdoc +++ b/doc/src/credits.qdoc @@ -247,6 +247,7 @@ Mike Perik <mikep at crt.com>\br Mike Sharkey <msharkey at softarc.com>\br Mikko Ala-Fossi <mikko.ala-fossi at vaisala.com>\br + Milan Burda <milan.burda at gmail.com>\br Miroslav Flidr <flidr at kky.zcu.cz>\br Miyata Shigeru <miyata at kusm.kyoto-u.ac.jp>\br Myron Uecker <muecker at csd.net>\br diff --git a/doc/src/designer-manual.qdoc b/doc/src/designer-manual.qdoc index 25e7455..c67865d 100644 --- a/doc/src/designer-manual.qdoc +++ b/doc/src/designer-manual.qdoc @@ -1360,7 +1360,7 @@ inside. Both widgets and spacers can be used inside containers. Stacked widgets, tab widgets, and toolboxes are handled specially in \QD. - Norwally, when adding pages (tabs, pages, compartments) to these containers + Normally, when adding pages (tabs, pages, compartments) to these containers in your own code, you need to supply existing widgets, either as placeholders or containing child widgets. In \QD, these are automatically created for you, so you can add child objects to each page straight away. diff --git a/doc/src/diagrams/programs/easingcurve/main.cpp b/doc/src/diagrams/programs/easingcurve/main.cpp index 8a2d53b..f249dbc 100644 --- a/doc/src/diagrams/programs/easingcurve/main.cpp +++ b/doc/src/diagrams/programs/easingcurve/main.cpp @@ -85,32 +85,37 @@ void createCurveIcons() qreal curveScale = iconSize.height()/2; - painter.drawLine(yAxis - 2, xAxis - curveScale, yAxis + 2, xAxis - curveScale); // hor + painter.drawLine(yAxis - 2, xAxis - curveScale, yAxis + 2, xAxis - curveScale); // hor painter.drawLine(yAxis + curveScale, xAxis + 2, yAxis + curveScale, xAxis - 2); // ver painter.drawText(yAxis + curveScale - 8, xAxis - curveScale - 4, QLatin1String("(1,1)")); - + painter.drawText(yAxis + 42, xAxis + 10, QLatin1String("progress")); - painter.drawText(15, xAxis - curveScale - 10, QLatin1String("ease")); - - painter.setPen(QPen(Qt::red, 1, Qt::DotLine)); + painter.drawText(15, xAxis - curveScale - 10, QLatin1String("value")); + + painter.setPen(QPen(Qt::red, 1, Qt::DotLine)); painter.drawLine(yAxis, xAxis - curveScale, yAxis + curveScale, xAxis - curveScale); // hor painter.drawLine(yAxis + curveScale, xAxis, yAxis + curveScale, xAxis - curveScale); // ver - - QPoint currentPos(yAxis, xAxis); - + + QPoint start(yAxis, xAxis - curveScale * curve.valueForProgress(0)); + painter.setPen(Qt::black); QFont font = oldFont; font.setPixelSize(oldFont.pixelSize() + 15); painter.setFont(font); painter.drawText(0, iconSize.height() - 20, iconSize.width(), 20, Qt::AlignHCenter, name); - - for (qreal t = 0; t < 1.0; t+=1.0/curveScale) { + + QPainterPath curvePath; + curvePath.moveTo(start); + for (qreal t = 0; t <= 1.0; t+=1.0/curveScale) { QPoint to; to.setX(yAxis + curveScale * t); to.setY(xAxis - curveScale * curve.valueForProgress(t)); - painter.drawLine(currentPos, to); - currentPos = to; + curvePath.lineTo(to); } + painter.setRenderHint(QPainter::Antialiasing, true); + painter.strokePath(curvePath, QColor(32, 32, 32)); + painter.setRenderHint(QPainter::Antialiasing, false); + QString fileName(QString::fromAscii("qeasingcurve-%1.png").arg(name.toLower())); printf("%s\n", qPrintable(fileName)); pix.save(QString::fromAscii("%1/%2").arg(output).arg(fileName), "PNG"); diff --git a/doc/src/examples.qdoc b/doc/src/examples.qdoc index f6bb877..2861c90 100644 --- a/doc/src/examples.qdoc +++ b/doc/src/examples.qdoc @@ -417,6 +417,7 @@ \o \l{xmlpatterns/qobjectxmlmodel}{QObject XML Model Example} \o \l{xmlpatterns/xquery/globalVariables}{C++ Source Code Analyzer Example} \o \l{xmlpatterns/trafficinfo}{Traffic Info}\raisedaster + \o \l{xmlpatterns/schema}{XML Schema Validation}\raisedaster \endlist \section1 Inter-Process Communication diff --git a/doc/src/examples/completer.qdoc b/doc/src/examples/completer.qdoc index 9aaaf66..3805a7c 100644 --- a/doc/src/examples/completer.qdoc +++ b/doc/src/examples/completer.qdoc @@ -100,9 +100,9 @@ \section1 MainWindow Class Definition - The \c MainWindow class is a subclass of QMainWindow and implements four - private slots - \c about(), \c changeCase(), \c changeMode(), and - \c changeModel(). + The \c MainWindow class is a subclass of QMainWindow and implements five + private slots - \c about(), \c changeCase(), \c changeMode(), \c changeModel(), + and \c changeMaxVisible(). \snippet examples/tools/completer/mainwindow.h 0 @@ -126,6 +126,9 @@ \snippet examples/tools/completer/mainwindow.cpp 0 + The \c maxVisibleSpinBox is created and determines the number of visible + item in the completer + The \c wrapCheckBox is then set up. This \c checkBox determines if the \c{completer}'s \l{QCompleter::setWrapAround()}{setWrapAround()} property is enabled or disabled. @@ -242,10 +245,15 @@ \snippet examples/tools/completer/mainwindow.cpp 14 - The \c about() function provides a brief description about the example. + The \c changeMaxVisible() update the maximum number of visible items in + the completer. \snippet examples/tools/completer/mainwindow.cpp 15 + The \c about() function provides a brief description about the example. + + \snippet examples/tools/completer/mainwindow.cpp 16 + \section1 \c main() Function The \c main() function instantiates QApplication and \c MainWindow and diff --git a/doc/src/examples/moveblocks.qdoc b/doc/src/examples/moveblocks.qdoc index 2bdcca5..7e42307 100644 --- a/doc/src/examples/moveblocks.qdoc +++ b/doc/src/examples/moveblocks.qdoc @@ -34,7 +34,7 @@ ** met: http://www.gnu.org/copyleft/gpl.html. ** ** If you are unsure which license is appropriate for your use, please -** contact the sales department at qt-sales@nokia.com. +** contact the sales department at http://www.qtsoftware.com/contact. ** $QT_END_LICENSE$ ** ****************************************************************************/ diff --git a/doc/src/examples/schema.qdoc b/doc/src/examples/schema.qdoc new file mode 100644 index 0000000..df42832 --- /dev/null +++ b/doc/src/examples/schema.qdoc @@ -0,0 +1,143 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \example xmlpatterns/schema + \title XML Schema Validation Example + + This example shows how to use QtXmlPatterns to validate XML with + a W3C XML Schema. + + \tableofcontents + + \section1 Introduction + + The example application shows different XML schema definitions and + for every definition two XML instance documents, one that is valid + according to the schema and one that is not. + The user can select the valid or invalid instance document, change + it and validate it again. + + \section2 The User Interface + + The UI for this example was created using \l{Qt Designer Manual} {Qt + Designer}: + + \image schema-example.png + + The UI consists of three parts, at the top the XML schema \l{QComboBox} {selection} + and the schema \l{QTextBrowser} {viewer}, below the XML instance \l{QComboBox} {selection} + and the instance \l{QTextEdit} {editor} and at the bottom the validation status \l{QLabel} {label} + next to the validation \l{QPushButton} {button}. + + \section2 Validating XML Instance Documents + + You can select one of the three predefined XML schemas and for each schema + an valid or invalid instance document. A click on the 'Validate' button will + validate the content of the XML instance editor against the schema from the + XML schema viewer. As you can modify the content of the instance editor, different + instances can be tested and validation error messages analysed. + + \section1 Code Walk-Through + + The example's main() function creates the standard instance of + QApplication. Then it creates an instance of the mainwindow class, shows it, + and starts the Qt event loop: + + \snippet examples/xmlpatterns/schema/main.cpp 0 + + \section2 The UI Class: MainWindow + + The example's UI is a conventional Qt GUI application inheriting + QMainWindow and the class generated by \l{Qt Designer Manual} {Qt + Designer}: + + \snippet examples/xmlpatterns/schema/mainwindow.h 0 + + The constructor fills the schema and instance \l{QComboBox} selections with the predefined + schemas and instances and connects their \l{QComboBox::currentIndexChanged()} {currentIndexChanged()} + signals to the window's \c{schemaSelected()} resp. \c{instanceSelected()} slot. + Furthermore the signal-slot connections for the validation \l{QPushButton} {button} + and the instance \l{QTextEdit} {editor} are set up. + + The call to \c{schemaSelected(0)} and \c{instanceSelected(0)} will trigger the validation + of the initial Contact Schema example. + + \snippet examples/xmlpatterns/schema/mainwindow.cpp 0 + + In the \c{schemaSelected()} slot the content of the instance \l{QComboBox} {selection} + is adapted to the selected schema and the corresponding schema is loaded from the + \l{The Qt Resource System} {resource file} and displayed in the schema \l{QTextBrowser} {viewer}. + At the end of the method a revalidation is triggered. + + \snippet examples/xmlpatterns/schema/mainwindow.cpp 1 + + In the \c{instanceSelected()} slot the selected instance is loaded from the + \l{The Qt Resource System} {resource file} and loaded into the instance \l{QTextEdit} {editor} + an the revalidation is triggered again. + + \snippet examples/xmlpatterns/schema/mainwindow.cpp 2 + + The \c{validate()} slot does the actual work in this example. + At first it stores the content of the schema \l{QTextBrowser} {viewer} and the + \l{QTextEdit} {editor} into temporary \l{QByteArray} {variables}. + Then it instanciates a \c{MessageHandler} object which inherits from + \l{QAbstractMessageHandler} {QAbstractMessageHandler} and is a convenience + class to store error messages from the XmlPatterns system. + + \snippet examples/xmlpatterns/schema/mainwindow.cpp 4 + + After the \l{QXmlSchema} {QXmlSchema} is instanciated and the message handler set + on it, the \l{QXmlSchema::load()} {load()} method is called with the schema data as argument. + If the schema is invalid or a parsing error has occured, \l{QXmlSchema::isValid()} {isValid()} + returns \c{false} and the error is flagged in \c{errorOccurred}. + If the loading was successful, a \l{QXmlSchemaValidator} {QXmlSchemaValidator} is + instanciated and the schema passed in the constructor. + A call to \l{QXmlSchemaValidator::validate()} {validate()} will validate the passed + XML instance data against the XML schema. The return value of that method signals + whether the validation was successful. + Depending on the success the status \l{QLabel} {label} is set to 'validation successful' + or the error message stored in the \c{MessageHandler} + + The rest of the code does only some fancy coloring and eyecandy. + + \snippet examples/xmlpatterns/schema/mainwindow.cpp 3 +*/ diff --git a/doc/src/examples/tablet.qdoc b/doc/src/examples/tablet.qdoc index e412815..61c140f 100644 --- a/doc/src/examples/tablet.qdoc +++ b/doc/src/examples/tablet.qdoc @@ -275,7 +275,10 @@ In this function we draw on the image based on the movement of the device. If the device used on the tablet is a stylus we want to draw a - line between the positions of the stylus recorded in \c polyLine. + line between the positions of the stylus recorded in \c polyLine. We + also assume that this is a reasonable handling of any unknown device, + but update the statusbar with a warning so that the user can see that + for his tablet he might have to implement special handling. If it is an airbrush we want to draw a circle of points with a point density based on the tangential pressure, which is the position of the finger wheel on the airbrush. We use the Qt::BrushStyle to diff --git a/doc/src/graphicsview.qdoc b/doc/src/graphicsview.qdoc index 4c408cd..f42c0d4 100644 --- a/doc/src/graphicsview.qdoc +++ b/doc/src/graphicsview.qdoc @@ -201,6 +201,9 @@ using an untransformed view, one unit on the scene is represented by one pixel on the screen. + \note The inverted Y-axis coordinate system (where \c y grows upwards) + is unsupported as Graphics Views uses Qt's coordinate system. + There are three effective coordinate systems in play in Graphics View: Item coordinates, scene coordinates, and view coordinates. To simplify your implementation, Graphics View provides convenience functions that diff --git a/doc/src/images/qeasingcurve-cosinecurve.png b/doc/src/images/qeasingcurve-cosinecurve.png Binary files differindex b27e763..8cee978 100644 --- a/doc/src/images/qeasingcurve-cosinecurve.png +++ b/doc/src/images/qeasingcurve-cosinecurve.png diff --git a/doc/src/images/qeasingcurve-inback.png b/doc/src/images/qeasingcurve-inback.png Binary files differindex 8506c0f..0064cb3 100644 --- a/doc/src/images/qeasingcurve-inback.png +++ b/doc/src/images/qeasingcurve-inback.png diff --git a/doc/src/images/qeasingcurve-inbounce.png b/doc/src/images/qeasingcurve-inbounce.png Binary files differindex 275b38c..eaa64f8 100644 --- a/doc/src/images/qeasingcurve-inbounce.png +++ b/doc/src/images/qeasingcurve-inbounce.png diff --git a/doc/src/images/qeasingcurve-incirc.png b/doc/src/images/qeasingcurve-incirc.png Binary files differindex b985e9c..7bd0f09 100644 --- a/doc/src/images/qeasingcurve-incirc.png +++ b/doc/src/images/qeasingcurve-incirc.png diff --git a/doc/src/images/qeasingcurve-incubic.png b/doc/src/images/qeasingcurve-incubic.png Binary files differindex e417ee1..1ac9eaf 100644 --- a/doc/src/images/qeasingcurve-incubic.png +++ b/doc/src/images/qeasingcurve-incubic.png diff --git a/doc/src/images/qeasingcurve-incurve.png b/doc/src/images/qeasingcurve-incurve.png Binary files differindex d9a9340..578259e 100644 --- a/doc/src/images/qeasingcurve-incurve.png +++ b/doc/src/images/qeasingcurve-incurve.png diff --git a/doc/src/images/qeasingcurve-inelastic.png b/doc/src/images/qeasingcurve-inelastic.png Binary files differindex b242fd3..f976b5a 100644 --- a/doc/src/images/qeasingcurve-inelastic.png +++ b/doc/src/images/qeasingcurve-inelastic.png diff --git a/doc/src/images/qeasingcurve-inexpo.png b/doc/src/images/qeasingcurve-inexpo.png Binary files differindex f06316c..1af3652 100644 --- a/doc/src/images/qeasingcurve-inexpo.png +++ b/doc/src/images/qeasingcurve-inexpo.png diff --git a/doc/src/images/qeasingcurve-inoutback.png b/doc/src/images/qeasingcurve-inoutback.png Binary files differindex 9fd1446..480bc05 100644 --- a/doc/src/images/qeasingcurve-inoutback.png +++ b/doc/src/images/qeasingcurve-inoutback.png diff --git a/doc/src/images/qeasingcurve-inoutbounce.png b/doc/src/images/qeasingcurve-inoutbounce.png Binary files differindex fb65f31..de62309 100644 --- a/doc/src/images/qeasingcurve-inoutbounce.png +++ b/doc/src/images/qeasingcurve-inoutbounce.png diff --git a/doc/src/images/qeasingcurve-inoutcirc.png b/doc/src/images/qeasingcurve-inoutcirc.png Binary files differindex 123cc54..b4be8ac 100644 --- a/doc/src/images/qeasingcurve-inoutcirc.png +++ b/doc/src/images/qeasingcurve-inoutcirc.png diff --git a/doc/src/images/qeasingcurve-inoutcubic.png b/doc/src/images/qeasingcurve-inoutcubic.png Binary files differindex b07695c..49dfbef 100644 --- a/doc/src/images/qeasingcurve-inoutcubic.png +++ b/doc/src/images/qeasingcurve-inoutcubic.png diff --git a/doc/src/images/qeasingcurve-inoutelastic.png b/doc/src/images/qeasingcurve-inoutelastic.png Binary files differindex 65851e1..5b0e54a 100644 --- a/doc/src/images/qeasingcurve-inoutelastic.png +++ b/doc/src/images/qeasingcurve-inoutelastic.png diff --git a/doc/src/images/qeasingcurve-inoutexpo.png b/doc/src/images/qeasingcurve-inoutexpo.png Binary files differindex 7cbfb13..776984a 100644 --- a/doc/src/images/qeasingcurve-inoutexpo.png +++ b/doc/src/images/qeasingcurve-inoutexpo.png diff --git a/doc/src/images/qeasingcurve-inoutquad.png b/doc/src/images/qeasingcurve-inoutquad.png Binary files differindex c5eed06..2643330 100644 --- a/doc/src/images/qeasingcurve-inoutquad.png +++ b/doc/src/images/qeasingcurve-inoutquad.png diff --git a/doc/src/images/qeasingcurve-inoutquart.png b/doc/src/images/qeasingcurve-inoutquart.png Binary files differindex 3b66c0d..31fc0c8 100644 --- a/doc/src/images/qeasingcurve-inoutquart.png +++ b/doc/src/images/qeasingcurve-inoutquart.png diff --git a/doc/src/images/qeasingcurve-inoutquint.png b/doc/src/images/qeasingcurve-inoutquint.png Binary files differindex c74efe9..4d7a745 100644 --- a/doc/src/images/qeasingcurve-inoutquint.png +++ b/doc/src/images/qeasingcurve-inoutquint.png diff --git a/doc/src/images/qeasingcurve-inoutsine.png b/doc/src/images/qeasingcurve-inoutsine.png Binary files differindex 5964f31..012ff75 100644 --- a/doc/src/images/qeasingcurve-inoutsine.png +++ b/doc/src/images/qeasingcurve-inoutsine.png diff --git a/doc/src/images/qeasingcurve-inquad.png b/doc/src/images/qeasingcurve-inquad.png Binary files differindex 3373310..e697c20 100644 --- a/doc/src/images/qeasingcurve-inquad.png +++ b/doc/src/images/qeasingcurve-inquad.png diff --git a/doc/src/images/qeasingcurve-inquart.png b/doc/src/images/qeasingcurve-inquart.png Binary files differindex 28086d8..6d65175 100644 --- a/doc/src/images/qeasingcurve-inquart.png +++ b/doc/src/images/qeasingcurve-inquart.png diff --git a/doc/src/images/qeasingcurve-inquint.png b/doc/src/images/qeasingcurve-inquint.png Binary files differindex 330aa85..faaaea7 100644 --- a/doc/src/images/qeasingcurve-inquint.png +++ b/doc/src/images/qeasingcurve-inquint.png diff --git a/doc/src/images/qeasingcurve-insine.png b/doc/src/images/qeasingcurve-insine.png Binary files differindex 63d9238..0944903 100644 --- a/doc/src/images/qeasingcurve-insine.png +++ b/doc/src/images/qeasingcurve-insine.png diff --git a/doc/src/images/qeasingcurve-linear.png b/doc/src/images/qeasingcurve-linear.png Binary files differindex 2a05885..fb3aaf3 100644 --- a/doc/src/images/qeasingcurve-linear.png +++ b/doc/src/images/qeasingcurve-linear.png diff --git a/doc/src/images/qeasingcurve-outback.png b/doc/src/images/qeasingcurve-outback.png Binary files differindex 7cb34c6..83b3fa2 100644 --- a/doc/src/images/qeasingcurve-outback.png +++ b/doc/src/images/qeasingcurve-outback.png diff --git a/doc/src/images/qeasingcurve-outbounce.png b/doc/src/images/qeasingcurve-outbounce.png Binary files differindex 932fc16..27ac979 100644 --- a/doc/src/images/qeasingcurve-outbounce.png +++ b/doc/src/images/qeasingcurve-outbounce.png diff --git a/doc/src/images/qeasingcurve-outcirc.png b/doc/src/images/qeasingcurve-outcirc.png Binary files differindex a1a6cb6..0019370 100644 --- a/doc/src/images/qeasingcurve-outcirc.png +++ b/doc/src/images/qeasingcurve-outcirc.png diff --git a/doc/src/images/qeasingcurve-outcubic.png b/doc/src/images/qeasingcurve-outcubic.png Binary files differindex aa1d604..45477c0 100644 --- a/doc/src/images/qeasingcurve-outcubic.png +++ b/doc/src/images/qeasingcurve-outcubic.png diff --git a/doc/src/images/qeasingcurve-outcurve.png b/doc/src/images/qeasingcurve-outcurve.png Binary files differindex a949ae4..295b471 100644 --- a/doc/src/images/qeasingcurve-outcurve.png +++ b/doc/src/images/qeasingcurve-outcurve.png diff --git a/doc/src/images/qeasingcurve-outelastic.png b/doc/src/images/qeasingcurve-outelastic.png Binary files differindex 2a9ba39..1d407ed 100644 --- a/doc/src/images/qeasingcurve-outelastic.png +++ b/doc/src/images/qeasingcurve-outelastic.png diff --git a/doc/src/images/qeasingcurve-outexpo.png b/doc/src/images/qeasingcurve-outexpo.png Binary files differindex e771c2e..5685155 100644 --- a/doc/src/images/qeasingcurve-outexpo.png +++ b/doc/src/images/qeasingcurve-outexpo.png diff --git a/doc/src/images/qeasingcurve-outinback.png b/doc/src/images/qeasingcurve-outinback.png Binary files differindex 7523727..4700ab0 100644 --- a/doc/src/images/qeasingcurve-outinback.png +++ b/doc/src/images/qeasingcurve-outinback.png diff --git a/doc/src/images/qeasingcurve-outinbounce.png b/doc/src/images/qeasingcurve-outinbounce.png Binary files differindex ab73d02..12cc1a8 100644 --- a/doc/src/images/qeasingcurve-outinbounce.png +++ b/doc/src/images/qeasingcurve-outinbounce.png diff --git a/doc/src/images/qeasingcurve-outincirc.png b/doc/src/images/qeasingcurve-outincirc.png Binary files differindex ec4b8d3..c8a5c86 100644 --- a/doc/src/images/qeasingcurve-outincirc.png +++ b/doc/src/images/qeasingcurve-outincirc.png diff --git a/doc/src/images/qeasingcurve-outincubic.png b/doc/src/images/qeasingcurve-outincubic.png Binary files differindex 8b8ae68..42af870 100644 --- a/doc/src/images/qeasingcurve-outincubic.png +++ b/doc/src/images/qeasingcurve-outincubic.png diff --git a/doc/src/images/qeasingcurve-outinelastic.png b/doc/src/images/qeasingcurve-outinelastic.png Binary files differindex 89dde2c..308be57 100644 --- a/doc/src/images/qeasingcurve-outinelastic.png +++ b/doc/src/images/qeasingcurve-outinelastic.png diff --git a/doc/src/images/qeasingcurve-outinexpo.png b/doc/src/images/qeasingcurve-outinexpo.png Binary files differindex 5909901..0692baa 100644 --- a/doc/src/images/qeasingcurve-outinexpo.png +++ b/doc/src/images/qeasingcurve-outinexpo.png diff --git a/doc/src/images/qeasingcurve-outinquad.png b/doc/src/images/qeasingcurve-outinquad.png Binary files differindex 7ddefee..9e3cd83 100644 --- a/doc/src/images/qeasingcurve-outinquad.png +++ b/doc/src/images/qeasingcurve-outinquad.png diff --git a/doc/src/images/qeasingcurve-outinquart.png b/doc/src/images/qeasingcurve-outinquart.png Binary files differindex 00ef597..9a3c16f 100644 --- a/doc/src/images/qeasingcurve-outinquart.png +++ b/doc/src/images/qeasingcurve-outinquart.png diff --git a/doc/src/images/qeasingcurve-outinquint.png b/doc/src/images/qeasingcurve-outinquint.png Binary files differindex 361bfaa4..add9feb 100644 --- a/doc/src/images/qeasingcurve-outinquint.png +++ b/doc/src/images/qeasingcurve-outinquint.png diff --git a/doc/src/images/qeasingcurve-outinsine.png b/doc/src/images/qeasingcurve-outinsine.png Binary files differindex 1737041..4bc2aaf 100644 --- a/doc/src/images/qeasingcurve-outinsine.png +++ b/doc/src/images/qeasingcurve-outinsine.png diff --git a/doc/src/images/qeasingcurve-outquad.png b/doc/src/images/qeasingcurve-outquad.png Binary files differindex 6f27cbd..c505ff9 100644 --- a/doc/src/images/qeasingcurve-outquad.png +++ b/doc/src/images/qeasingcurve-outquad.png diff --git a/doc/src/images/qeasingcurve-outquart.png b/doc/src/images/qeasingcurve-outquart.png Binary files differindex d45a0b8..6eac058 100644 --- a/doc/src/images/qeasingcurve-outquart.png +++ b/doc/src/images/qeasingcurve-outquart.png diff --git a/doc/src/images/qeasingcurve-outquint.png b/doc/src/images/qeasingcurve-outquint.png Binary files differindex 6e7df0e..77a9ad4 100644 --- a/doc/src/images/qeasingcurve-outquint.png +++ b/doc/src/images/qeasingcurve-outquint.png diff --git a/doc/src/images/qeasingcurve-outsine.png b/doc/src/images/qeasingcurve-outsine.png Binary files differindex 7546a0d..d135b2f 100644 --- a/doc/src/images/qeasingcurve-outsine.png +++ b/doc/src/images/qeasingcurve-outsine.png diff --git a/doc/src/images/qeasingcurve-sinecurve.png b/doc/src/images/qeasingcurve-sinecurve.png Binary files differindex ca67d44..6134a01 100644 --- a/doc/src/images/qeasingcurve-sinecurve.png +++ b/doc/src/images/qeasingcurve-sinecurve.png diff --git a/doc/src/images/schema-example.png b/doc/src/images/schema-example.png Binary files differnew file mode 100644 index 0000000..5e95bf5 --- /dev/null +++ b/doc/src/images/schema-example.png diff --git a/examples/animation/stickman/editor/mainwindow.cpp b/doc/src/obsoleteclasses.qdoc index e1d08cc..3658dfc 100644 --- a/examples/animation/stickman/editor/mainwindow.cpp +++ b/doc/src/obsoleteclasses.qdoc @@ -3,7 +3,7 @@ ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtCore module of the Qt Toolkit. +** This file is part of the documentation of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage @@ -39,38 +39,21 @@ ** ****************************************************************************/ -#include "mainwindow.h" -#include "animationdialog.h" -#include "stickman.h" +/*! + \page obsoleteclasses.html + \group obsolete + \title Obsolete Classes + \ingroup classlists + \ingroup groups -#include <QMenuBar> -#include <QApplication> + \brief Qt classes that are obsolete (deprecated). -MainWindow::MainWindow(StickMan *stickMan) -{ - initActions(stickMan); -} + This is a list of Qt classes that are obsolete (deprecated). These + classes are provided to keep old source code working but they are + no longer maintained. We strongly advise against using these + classes in new code. -MainWindow::~MainWindow() -{ -} + \generatelist obsoleteclasses -void MainWindow::initActions(StickMan *stickMan) -{ - AnimationDialog *dialog = new AnimationDialog(stickMan, this); - dialog->show(); - - QMenu *fileMenu = menuBar()->addMenu("&File"); - QAction *loadAction = fileMenu->addAction("&Open"); - QAction *saveAction = fileMenu->addAction("&Save"); - QAction *exitAction = fileMenu->addAction("E&xit"); - - QMenu *animationMenu = menuBar()->addMenu("&Animation"); - QAction *newAnimationAction = animationMenu->addAction("&New animation"); - - connect(loadAction, SIGNAL(triggered()), dialog, SLOT(loadAnimation())); - connect(saveAction, SIGNAL(triggered()), dialog, SLOT(saveAnimation())); - connect(exitAction, SIGNAL(triggered()), QApplication::instance(), SLOT(quit())); - connect(newAnimationAction, SIGNAL(triggered()), dialog, SLOT(newAnimation())); - -} + \sa {Qt's Classes}, {Qt's Modules} +*/ diff --git a/doc/src/qdesktopwidget.qdoc b/doc/src/qdesktopwidget.qdoc index 1158904..56a882d 100644 --- a/doc/src/qdesktopwidget.qdoc +++ b/doc/src/qdesktopwidget.qdoc @@ -54,9 +54,9 @@ Systems with more than one graphics card and monitor can manage the physical screen space available either as multiple desktops, or as a large virtual desktop, which usually has the size of the bounding - rectangle of all the screens (see isVirtualDesktop()). For an + rectangle of all the screens (see virtualDesktop). For an application, one of the available screens is the primary screen, i.e. - the screen where the main widget resides (see primaryScreen()). All + the screen where the main widget resides (see primaryScreen). All windows opened in the context of the application should be constrained to the boundaries of the primary screen; for example, it would be inconvenient if a dialog box popped up on a different @@ -64,16 +64,16 @@ The QDesktopWidget provides information about the geometry of the available screens with screenGeometry(). The number of screens - available is returned by numScreens(). The screen number that a - particular point or widget is located in is returned by - screenNumber(). + available is returned by screenCount, and the screenCountChanged + signal is emitted when screens are added or removed during runtime. + The screen number that a particular point or widget is located in + is returned by screenNumber(). Widgets provided by Qt use this class, for example, to place tooltips, menus and dialog boxes according to the parent or - application widget. - - Applications can use this class to save window positions, or to place - child widgets on one screen. + application widget. Applications can use this class to save window + positions, or to place child widgets and dialogs on one particular + screen. \img qdesktopwidget.png Managing Multiple Screens @@ -115,30 +115,15 @@ */ /*! - \fn bool QDesktopWidget::isVirtualDesktop() const - - Returns true if the system manages the available screens in a - virtual desktop; otherwise returns false. - - For virtual desktops, screen() will always return the same widget. - The size of the virtual desktop is the size of this desktop - widget. -*/ - -/*! - \fn int QDesktopWidget::primaryScreen() const - - Returns the index of the primary screen. - - \sa numScreens() -*/ - -/*! \fn int QDesktopWidget::numScreens() const - + Returns the number of available screens. + + \obsolete + + This function is deprecated. Use screenCount instead. - \sa primaryScreen() + \sa primaryScreen */ /*! @@ -146,13 +131,12 @@ Returns a widget that represents the screen with index \a screen (a value of -1 means the default screen). - If the system uses a virtual desktop, the returned widget will have the geometry of the entire virtual desktop; i.e., bounding every \a screen. - \sa primaryScreen(), numScreens(), isVirtualDesktop() + \sa primaryScreen, screenCount, virtualDesktop */ /*! @@ -216,7 +200,7 @@ Returns the index of the screen that contains the largest part of \a widget, or -1 if the widget not on a screen. - \sa primaryScreen() + \sa primaryScreen */ /*! @@ -226,7 +210,7 @@ Returns the index of the screen that contains the \a point, or the screen which is the shortest distance from the \a point. - \sa primaryScreen() + \sa primaryScreen */ /*! @@ -245,3 +229,38 @@ This signal is emitted when the work area available on \a screen changes. */ + +/*! + \property QDesktopWidget::screenCount + \brief the number of screens currently available on the system. + + \since 4.6 + + \sa screenCountChanged() +*/ + +/*! + \property QDesktopWidget::primaryScreen + \brief the index of the screen that is configured to be the primary screen + on the system. +*/ + +/*! + \property QDesktopWidget::virtualDesktop + + \brief if the system manages the available screens in a virtual desktop. + + For virtual desktops, screen() will always return the same widget. + The size of the virtual desktop is the size of this desktop + widget. +*/ + +/*! + \fn void QDesktopWidget::screenCountChanged(int newCount) + + \since 4.6 + + This signal is emitted when the number of screens changes to \a newCount. + + \sa screenCount +*/ diff --git a/doc/src/qnamespace.qdoc b/doc/src/qnamespace.qdoc index ded1577..2d40fdd 100644 --- a/doc/src/qnamespace.qdoc +++ b/doc/src/qnamespace.qdoc @@ -1697,6 +1697,7 @@ \value ToolButtonTextOnly Only display the text. \value ToolButtonTextBesideIcon The text appears beside the icon. \value ToolButtonTextUnderIcon The text appears under the icon. + \value ToolButtonFollowStyle Follow the \l{QStyle::SH_ToolButtonStyle}{style}. */ /*! diff --git a/doc/src/qsqldatatype-table.qdoc b/doc/src/qsqldatatype-table.qdoc index 567bb65..2055e6a 100644 --- a/doc/src/qsqldatatype-table.qdoc +++ b/doc/src/qsqldatatype-table.qdoc @@ -34,7 +34,7 @@ ** met: http://www.gnu.org/copyleft/gpl.html. ** ** If you are unsure which license is appropriate for your use, please -** contact the sales department at qt-sales@nokia.com. +** contact the sales department at http://www.qtsoftware.com/contact. ** $QT_END_LICENSE$ ** ****************************************************************************/ diff --git a/doc/src/qtxmlpatterns.qdoc b/doc/src/qtxmlpatterns.qdoc index 6b82c0d..9f8677b 100644 --- a/doc/src/qtxmlpatterns.qdoc +++ b/doc/src/qtxmlpatterns.qdoc @@ -839,6 +839,27 @@ with the \c fn:id() function. See \l{http://www.w3.org/TR/xml-id/}{xml:id Version 1.0} for details. + \section2 XML Schema 1.0 + + The QtXmlPatterns implementation of XML Schema validation supports + the schema specification version 1.0 in large parts. Known problems + of the implementation and areas where conformancy may be questionable + are: + + \list + \o Large \c minOccurs or \c maxOccurs values or deeply nested ones + require huge amount of memory which might cause the system to freeze. + Such a schema should be rewritten to use \c unbounded as value instead + of large numbers. This restriction will hopefully be fixed in a later release. + \o Comparison of really small or large floating point values might lead to + wrong results in some cases. However such numbers should not be relevant + for day-to-day usage. + \o Regular expression support is currently not conformant but follows + Qt's QRegExp standard syntax. + \o Identity constraint checks can not use the values of default or fixed + attribute definitions. + \endlist + \section2 Resource Loading When QtXmlPatterns loads an XML resource, e.g., using the @@ -884,6 +905,54 @@ URIs are first passed to QAbstractUriResolver. Check QXmlQuery::setUriResolver() for possible rewrites. + \section1 License Information + + The XML Schema implementation provided by this module contains the \c xml.xsd file + (located in \c{src/xmlpatterns/schema/schemas}) which is licensed under the terms + given below. This module is always built with XML Schema support enabled. + + \legalese + W3C\copyright SOFTWARE NOTICE AND LICENSE + + This license came from: http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231 + + This work (and included software, documentation such as READMEs, or other + related items) is being provided by the copyright holders under the following + license. By obtaining, using and/or copying this work, you (the licensee) + agree that you have read, understood, and will comply with the following + terms and conditions. + + Permission to copy, modify, and distribute this software and its + documentation, with or without modification, for any purpose and without + fee or royalty is hereby granted, provided that you include the following on + ALL copies of the software and documentation or portions thereof, including + modifications: + + 1. The full text of this NOTICE in a location viewable to users of the + redistributed or derivative work.\br + 2. Any pre-existing intellectual property disclaimers, notices, or terms + and conditions. If none exist, the W3C Software Short Notice should be + included (hypertext is preferred, text is permitted) + within the body of any redistributed or derivative code.\br + 3. Notice of any changes or modifications to the files, including the date + changes were made. (We recommend you provide URIs to the location from + which the code is derived.) + + THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS + MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT + LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR + PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE + ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. + + COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR + CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR + DOCUMENTATION. + + The name and trademarks of copyright holders may NOT be used in + advertising or publicity pertaining to the software without specific, written + prior permission. Title to copyright in this software and any associated + documentation will at all times remain with copyright holders. + \endlegalese */ /*! diff --git a/doc/src/snippets/code/src_network_access_qnetworkreply.cpp b/doc/src/snippets/code/src_network_access_qnetworkreply.cpp new file mode 100644 index 0000000..78b388b --- /dev/null +++ b/doc/src/snippets/code/src_network_access_qnetworkreply.cpp @@ -0,0 +1,10 @@ +//! [0] +QList<QSslCertificate> cert = QSslCertificate::fromPath(QLatin1String("server-certificate.pem")); +QSslError error(QSslError::SelfSignedCertificate, cert.at(0)); +QList<QSslError> expectedSslErrors; +expectedSslErrors.append(error); + +QNetworkReply *reply = manager.get(QNetworkRequest(QUrl("https://server.tld/index.html"))); +reply->ignoreSslErrors(expectedSslErrors); +// here connect signals etc. +//! [0] diff --git a/doc/src/snippets/code/src_network_ssl_qsslsocket.cpp b/doc/src/snippets/code/src_network_ssl_qsslsocket.cpp index afffbab..7845e9b 100644 --- a/doc/src/snippets/code/src_network_ssl_qsslsocket.cpp +++ b/doc/src/snippets/code/src_network_ssl_qsslsocket.cpp @@ -54,3 +54,14 @@ socket->connectToHostEncrypted("imap", 993); if (socket->waitForEncrypted(1000)) qDebug("Encrypted!"); //! [5] + +//! [6] +QList<QSslCertificate> cert = QSslCertificate::fromPath(QLatin1String("server-certificate.pem")); +QSslError error(QSslError::SelfSignedCertificate, cert.at(0)); +QList<QSslError> expectedSslErrors; +expectedSslErrors.append(error); + +QSslSocket socket; +socket.ignoreSslErrors(expectedSslErrors); +socket.connectToHostEncrypted("server.tld", 443); +//! [6] diff --git a/doc/src/snippets/qxmlschema/main.cpp b/doc/src/snippets/qxmlschema/main.cpp new file mode 100644 index 0000000..e5989ee --- /dev/null +++ b/doc/src/snippets/qxmlschema/main.cpp @@ -0,0 +1,118 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtCore> +#include <QtXmlPatterns> + +class Schema +{ + public: + void loadFromUrl() const; + void loadFromFile() const; + void loadFromData() const; +}; + +void Schema::loadFromUrl() const +{ +//! [0] + QUrl url("http://www.schema-example.org/myschema.xsd"); + + QXmlSchema schema; + if (schema.load(url) == true) + qDebug() << "schema is valid"; + else + qDebug() << "schema is invalid"; +//! [0] +} + +void Schema::loadFromFile() const +{ +//! [1] + QFile file("myschema.xsd"); + file.open(QIODevice::ReadOnly); + + QXmlSchema schema; + schema.load(&file, QUrl::fromLocalFile(file.fileName())); + + if (schema.isValid()) + qDebug() << "schema is valid"; + else + qDebug() << "schema is invalid"; +//! [1] +} + +void Schema::loadFromData() const +{ +//! [2] + QByteArray data( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<xsd:schema" + " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"" + " xmlns=\"http://www.qtsoftware.com/xmlschematest\"" + " targetNamespace=\"http://www.qtsoftware.com/xmlschematest\"" + " version=\"1.0\"" + " elementFormDefault=\"qualified\">" + "</xsd:schema>" ); + + QBuffer buffer(&data); + buffer.open(QIODevice::ReadOnly); + + QXmlSchema schema; + schema.load(&buffer); + + if (schema.isValid()) + qDebug() << "schema is valid"; + else + qDebug() << "schema is invalid"; +//! [2] +} + +int main(int argc, char **argv) +{ + QCoreApplication app(argc, argv); + + Schema schema; + + schema.loadFromUrl(); + schema.loadFromFile(); + schema.loadFromData(); + + return 0; +} diff --git a/doc/src/snippets/qxmlschema/qxmlschema.pro b/doc/src/snippets/qxmlschema/qxmlschema.pro new file mode 100644 index 0000000..7e8782a --- /dev/null +++ b/doc/src/snippets/qxmlschema/qxmlschema.pro @@ -0,0 +1,3 @@ +SOURCES += main.cpp + +QT += xmlpatterns diff --git a/doc/src/snippets/qxmlschemavalidator/main.cpp b/doc/src/snippets/qxmlschemavalidator/main.cpp new file mode 100644 index 0000000..581f40f --- /dev/null +++ b/doc/src/snippets/qxmlschemavalidator/main.cpp @@ -0,0 +1,160 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtCore> +#include <QtXmlPatterns> + +class SchemaValidator +{ + public: + void validateFromUrl() const; + void validateFromFile() const; + void validateFromData() const; + void validateComplete() const; + + private: + QXmlSchema getSchema() const; +}; + +void SchemaValidator::validateFromUrl() const +{ +//! [0] + const QXmlSchema schema = getSchema(); + + const QUrl url("http://www.schema-example.org/test.xml"); + + QXmlSchemaValidator validator(schema); + if (validator.validate(url)) + qDebug() << "instance document is valid"; + else + qDebug() << "instance document is invalid"; +//! [0] +} + +void SchemaValidator::validateFromFile() const +{ +//! [1] + const QXmlSchema schema = getSchema(); + + QFile file("test.xml"); + file.open(QIODevice::ReadOnly); + + QXmlSchemaValidator validator(schema); + if (validator.validate(&file, QUrl::fromLocalFile(file.fileName()))) + qDebug() << "instance document is valid"; + else + qDebug() << "instance document is invalid"; +//! [1] +} + +void SchemaValidator::validateFromData() const +{ +//! [2] + const QXmlSchema schema = getSchema(); + + QByteArray data("<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<test></test>"); + + QBuffer buffer(&data); + buffer.open(QIODevice::ReadOnly); + + QXmlSchemaValidator validator(schema); + if (validator.validate(&buffer)) + qDebug() << "instance document is valid"; + else + qDebug() << "instance document is invalid"; +//! [2] +} + +QXmlSchema SchemaValidator::getSchema() const +{ + QByteArray data("<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<xsd:schema" + " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"" + " xmlns=\"http://www.qtsoftware.com/xmlschematest\"" + " targetNamespace=\"http://www.qtsoftware.com/xmlschematest\"" + " version=\"1.0\"" + " elementFormDefault=\"qualified\">" + "</xsd:schema>"); + + QBuffer buffer(&data); + buffer.open(QIODevice::ReadOnly); + + QXmlSchema schema; + schema.load(&buffer); + + return schema; +} + +void SchemaValidator::validateComplete() const +{ +//! [3] + QUrl schemaUrl("file:///home/user/schema.xsd"); + + QXmlSchema schema; + schema.load(schemaUrl); + + if (schema.isValid()) { + QFile file("test.xml"); + file.open(QIODevice::ReadOnly); + + QXmlSchemaValidator validator(schema); + if (validator.validate(&file, QUrl::fromLocalFile(file.fileName()))) + qDebug() << "instance document is valid"; + else + qDebug() << "instance document is invalid"; + } +//! [3] +} + +int main(int argc, char **argv) +{ + QCoreApplication app(argc, argv); + + SchemaValidator validator; + + validator.validateFromUrl(); + validator.validateFromFile(); + validator.validateFromData(); + validator.validateComplete(); + + return 0; +} diff --git a/doc/src/snippets/qxmlschemavalidator/qxmlschemavalidator.pro b/doc/src/snippets/qxmlschemavalidator/qxmlschemavalidator.pro new file mode 100644 index 0000000..7e8782a --- /dev/null +++ b/doc/src/snippets/qxmlschemavalidator/qxmlschemavalidator.pro @@ -0,0 +1,3 @@ +SOURCES += main.cpp + +QT += xmlpatterns diff --git a/doc/src/snippets/snippets.pro b/doc/src/snippets/snippets.pro index 50e33b3..e3e7eca 100644 --- a/doc/src/snippets/snippets.pro +++ b/doc/src/snippets/snippets.pro @@ -73,6 +73,8 @@ SUBDIRS = brush \ quiloader \ qx11embedcontainer \ qx11embedwidget \ + qxmlschema \ + qxmlschemavalidator \ reading-selections \ scribe-overview \ separations \ diff --git a/doc/src/snippets/statemachine/eventtest.cpp b/doc/src/snippets/statemachine/eventtest.cpp new file mode 100644 index 0000000..e0f359a --- /dev/null +++ b/doc/src/snippets/statemachine/eventtest.cpp @@ -0,0 +1,34 @@ + +#include <QtGui> + +class MyTransition : public QAbstractTransition +{ + Q_OBJECT +public: + MyTransition() {} + +protected: +//![0] + bool eventTest(QEvent *event) + { + if (event->type() == QEvent::Wrapped) { + QEvent *wrappedEvent = static_cast<QWrappedEvent *>(event)->event(); + if (wrappedEvent->type() == QEvent::KeyPress) { + QKeyEvent *keyEvent = static_cast<QKeyEvent *>(wrappedEvent); + // Do your event test + } + } + return false; + } +//![0] + + void onTransition(QEvent *event) + { + + } +}; + +int main(int argv, char **args) +{ + return 0; +} diff --git a/examples/animation/appchooser/main.cpp b/examples/animation/appchooser/main.cpp index fe4be1f..97751b2 100644 --- a/examples/animation/appchooser/main.cpp +++ b/examples/animation/appchooser/main.cpp @@ -134,7 +134,7 @@ int main(int argc, char **argv) QStateMachine machine; machine.setGlobalRestorePolicy(QStateMachine::RestoreProperties); - QState *group = new QState(machine.rootState()); + QState *group = new QState(&machine); group->setObjectName("group"); QRect selectedRect(86, 86, 128, 128); diff --git a/examples/animation/moveblocks/main.cpp b/examples/animation/moveblocks/main.cpp index c43e841..97d3f81 100644 --- a/examples/animation/moveblocks/main.cpp +++ b/examples/animation/moveblocks/main.cpp @@ -108,8 +108,7 @@ class StateSwitcher : public QState Q_OBJECT public: StateSwitcher(QStateMachine *machine) - : QState(machine->rootState()), m_machine(machine), - m_stateCount(0), m_lastIndex(0) + : QState(machine), m_stateCount(0), m_lastIndex(0) { } //![10] @@ -120,7 +119,7 @@ public: while ((n = (qrand() % m_stateCount + 1)) == m_lastIndex) { } m_lastIndex = n; - m_machine->postEvent(new StateSwitchEvent(n)); + machine()->postEvent(new StateSwitchEvent(n)); } virtual void onExit(QEvent *) {} //![11] @@ -135,7 +134,6 @@ public: //![12] private: - QStateMachine *m_machine; int m_stateCount; int m_lastIndex; }; diff --git a/examples/animation/states/main.cpp b/examples/animation/states/main.cpp index b3c28f2..99e04c3 100644 --- a/examples/animation/states/main.cpp +++ b/examples/animation/states/main.cpp @@ -124,10 +124,9 @@ int main(int argc, char *argv[]) scene.addItem(p6); QStateMachine machine; - QState *root = machine.rootState(); - QState *state1 = new QState(root); - QState *state2 = new QState(root); - QState *state3 = new QState(root); + QState *state1 = new QState(&machine); + QState *state2 = new QState(&machine); + QState *state3 = new QState(&machine); machine.setInitialState(state1); // State 1 diff --git a/examples/animation/stickman/editor/animationdialog.cpp b/examples/animation/stickman/editor/animationdialog.cpp deleted file mode 100644 index 853046d..0000000 --- a/examples/animation/stickman/editor/animationdialog.cpp +++ /dev/null @@ -1,192 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtCore module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://www.qtsoftware.com/contact. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "animationdialog.h" -#include "stickman.h" -#include "animation.h" -#include "node.h" - -#include <QHBoxLayout> -#include <QStackedWidget> -#include <QSpinBox> -#include <QPushButton> -#include <QLabel> -#include <QLineEdit> -#include <QMessageBox> -#include <QFileDialog> - -AnimationDialog::AnimationDialog(StickMan *stickman, QWidget *parent) - : QDialog(parent), m_animation(0), m_stickman(stickman) -{ - initUi(); -} - -AnimationDialog::~AnimationDialog() -{ - delete m_animation; -} - -void AnimationDialog::initUi() -{ - setWindowTitle("Animation"); - setEnabled(false); - - // Second page - m_currentFrame = new QSpinBox(); - m_totalFrames = new QSpinBox(); - m_name = new QLineEdit(); - - connect(m_currentFrame, SIGNAL(valueChanged(int)), this, SLOT(currentFrameChanged(int))); - connect(m_totalFrames, SIGNAL(valueChanged(int)), this, SLOT(totalFramesChanged(int))); - connect(m_name, SIGNAL(textChanged(QString)), this, SLOT(setCurrentAnimationName(QString))); - - QGridLayout *gridLayout = new QGridLayout(this); - gridLayout->addWidget(new QLabel("Name:"), 0, 0, 1, 2); - gridLayout->addWidget(m_name, 0, 2, 1, 2); - gridLayout->addWidget(new QLabel("Frame:"), 1, 0); - gridLayout->addWidget(m_currentFrame, 1, 1); - gridLayout->addWidget(new QLabel("of total # of frames: "), 1, 2); - gridLayout->addWidget(m_totalFrames, 1, 3); -} - -void AnimationDialog::initFromAnimation() -{ - m_currentFrame->setRange(0, m_animation->totalFrames()-1); - m_currentFrame->setValue(m_animation->currentFrame()); - - m_totalFrames->setRange(1, 1000); - m_totalFrames->setValue(m_animation->totalFrames()); - - m_name->setText(m_animation->name()); -} - -void AnimationDialog::saveAnimation() -{ - saveCurrentFrame(); - - QString fileName = QFileDialog::getSaveFileName(this, "Save animation"); - - QFile file(fileName); - if (file.open(QIODevice::WriteOnly)) - m_animation->save(&file); -} - -void AnimationDialog::loadAnimation() -{ - if (maybeSave() != QMessageBox::Cancel) { - QString fileName = QFileDialog::getOpenFileName(this, "Open animation"); - - QFile file(fileName); - if (file.open(QIODevice::ReadOnly)) { - if (m_animation == 0) - newAnimation(); - - m_animation->load(&file); - stickManFromCurrentFrame(); - initFromAnimation(); - } - } -} - -QMessageBox::StandardButton AnimationDialog::maybeSave() -{ - if (m_animation == 0) - return QMessageBox::No; - - QMessageBox::StandardButton button = QMessageBox::question(this, "Save?", "Do you want to save your changes?", - QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel); - if (button == QMessageBox::Save) - saveAnimation(); - - return button; -} - -void AnimationDialog::newAnimation() -{ - if (maybeSave() != QMessageBox::Cancel) { - setEnabled(true); - delete m_animation; - m_animation = new Animation(); - initFromAnimation(); - } -} - -// Gets the data from the stickman and stores it in current frame -void AnimationDialog::saveCurrentFrame() -{ - int count = m_stickman->nodeCount(); - m_animation->setNodeCount(count); - for (int i=0; i<count; ++i) { - QGraphicsItem *node = m_stickman->node(i); - m_animation->setNodePos(i, node->pos()); - } -} - -// Gets the data from the current frame and sets the stickman -void AnimationDialog::stickManFromCurrentFrame() -{ - int count = m_animation->nodeCount(); - for (int i=0;i<count;++i) { - QGraphicsItem *node = m_stickman->node(i); - node->setPos(m_animation->nodePos(i)); - } -} - -void AnimationDialog::currentFrameChanged(int currentFrame) -{ - saveCurrentFrame(); - qDebug("currentFrame: %d", currentFrame); - m_animation->setCurrentFrame(currentFrame); - stickManFromCurrentFrame(); - initFromAnimation(); -} - -void AnimationDialog::totalFramesChanged(int totalFrames) -{ - m_animation->setTotalFrames(totalFrames); - stickManFromCurrentFrame(); - initFromAnimation(); -} - -void AnimationDialog::setCurrentAnimationName(const QString &name) -{ - m_animation->setName(name); -} diff --git a/examples/animation/stickman/editor/editor.pri b/examples/animation/stickman/editor/editor.pri deleted file mode 100644 index 7ad9edb..0000000 --- a/examples/animation/stickman/editor/editor.pri +++ /dev/null @@ -1,2 +0,0 @@ -SOURCES += $$PWD/animationdialog.cpp $$PWD/mainwindow.cpp -HEADERS += $$PWD/animationdialog.h $$PWD/mainwindow.h diff --git a/examples/animation/stickman/graphicsview.cpp b/examples/animation/stickman/graphicsview.cpp index 760c31b..89f2430 100644 --- a/examples/animation/stickman/graphicsview.cpp +++ b/examples/animation/stickman/graphicsview.cpp @@ -40,7 +40,6 @@ ****************************************************************************/ #include "graphicsview.h" -#include "editor/mainwindow.h" #include "stickman.h" #include <QtGui/QKeyEvent> @@ -53,28 +52,6 @@ void GraphicsView::keyPressEvent(QKeyEvent *e) { if (e->key() == Qt::Key_Escape) close(); - -#if 0 - if (e->key() == Qt::Key_F1) { - if (m_editor == 0) { - QGraphicsScene *scene = new QGraphicsScene; - StickMan *stickMan = new StickMan; - stickMan->setDrawSticks(true); - scene->addItem(stickMan); - - QGraphicsView *view = new QGraphicsView; - view->setBackgroundBrush(Qt::black); - view->setRenderHints(QPainter::Antialiasing); - view->setScene(scene); - - m_editor = new MainWindow(stickMan); - m_editor->setCentralWidget(view); - } - - m_editor->showMaximized(); - } -#endif - emit keyPressed(Qt::Key(e->key())); } diff --git a/examples/animation/stickman/lifecycle.cpp b/examples/animation/stickman/lifecycle.cpp index 2a54c82..c761d87 100644 --- a/examples/animation/stickman/lifecycle.cpp +++ b/examples/animation/stickman/lifecycle.cpp @@ -108,11 +108,11 @@ LifeCycle::LifeCycle(StickMan *stickMan, GraphicsView *keyReceiver) m_machine->addDefaultAnimation(m_animationGroup); //! [3] - m_alive = new QState(m_machine->rootState()); + m_alive = new QState(m_machine); m_alive->setObjectName("alive"); // Make it blink when lightning strikes before entering dead animation - QState *lightningBlink = new QState(m_machine->rootState()); + QState *lightningBlink = new QState(m_machine); lightningBlink->assignProperty(m_stickMan->scene(), "backgroundBrush", Qt::white); lightningBlink->assignProperty(m_stickMan, "penColor", Qt::black); lightningBlink->assignProperty(m_stickMan, "fillColor", Qt::white); @@ -126,7 +126,7 @@ LifeCycle::LifeCycle(StickMan *stickMan, GraphicsView *keyReceiver) QObject::connect(lightningBlink, SIGNAL(exited()), timer, SLOT(stop())); //! [5] - m_dead = new QState(m_machine->rootState()); + m_dead = new QState(m_machine); m_dead->assignProperty(m_stickMan->scene(), "backgroundBrush", Qt::black); m_dead->assignProperty(m_stickMan, "penColor", Qt::white); m_dead->assignProperty(m_stickMan, "fillColor", Qt::black); diff --git a/examples/animation/stickman/stickman.pro b/examples/animation/stickman/stickman.pro index 1dbbce9..7f8be33 100644 --- a/examples/animation/stickman/stickman.pro +++ b/examples/animation/stickman/stickman.pro @@ -12,8 +12,6 @@ SOURCES += main.cpp \ INCLUDEPATH += $$PWD -include(editor/editor.pri) - # install target.path = $$[QT_INSTALL_EXAMPLES]/animation/stickman sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS stickman.pro diff --git a/examples/animation/sub-attaq/boat.cpp b/examples/animation/sub-attaq/boat.cpp index d286be5..68e646e 100644 --- a/examples/animation/sub-attaq/boat.cpp +++ b/examples/animation/sub-attaq/boat.cpp @@ -142,14 +142,14 @@ Boat::Boat(QGraphicsItem * parent, Qt::WindowFlags wFlags) //We setup the state machien of the boat machine = new QStateMachine(this); - QState *moving = new QState(machine->rootState()); + QState *moving = new QState(machine); StopState *stopState = new StopState(this, moving); machine->setInitialState(moving); moving->setInitialState(stopState); MoveStateRight *moveStateRight = new MoveStateRight(this, moving); MoveStateLeft *moveStateLeft = new MoveStateLeft(this, moving); - LaunchStateRight *launchStateRight = new LaunchStateRight(this, machine->rootState()); - LaunchStateLeft *launchStateLeft = new LaunchStateLeft(this, machine->rootState()); + LaunchStateRight *launchStateRight = new LaunchStateRight(this, machine); + LaunchStateLeft *launchStateLeft = new LaunchStateLeft(this, machine); //then setup the transitions for the rightMove state KeyStopTransition *leftStopRight = new KeyStopTransition(this, QEvent::KeyPress, Qt::Key_Left); @@ -216,10 +216,10 @@ Boat::Boat(QGraphicsItem * parent, Qt::WindowFlags wFlags) launchStateLeft->addTransition(historyState); launchStateRight->addTransition(historyState); - QFinalState *final = new QFinalState(machine->rootState()); + QFinalState *final = new QFinalState(machine); //This state play the destroyed animation - QAnimationState *destroyedState = new QAnimationState(machine->rootState()); + QAnimationState *destroyedState = new QAnimationState(machine); destroyedState->setAnimation(destroyAnimation); //Play a nice animation when the boat is destroyed diff --git a/examples/animation/sub-attaq/bomb.cpp b/examples/animation/sub-attaq/bomb.cpp index 454970a..e92a723 100644 --- a/examples/animation/sub-attaq/bomb.cpp +++ b/examples/animation/sub-attaq/bomb.cpp @@ -85,11 +85,11 @@ void Bomb::launch(Bomb::Direction direction) QStateMachine *machine = new QStateMachine(this); //This state is when the launch animation is playing - QAnimationState *launched = new QAnimationState(machine->rootState()); + QAnimationState *launched = new QAnimationState(machine); launched->setAnimation(launchAnimation); //End - QFinalState *final = new QFinalState(machine->rootState()); + QFinalState *final = new QFinalState(machine); machine->setInitialState(launched); diff --git a/examples/animation/sub-attaq/graphicsscene.cpp b/examples/animation/sub-attaq/graphicsscene.cpp index bd37ce2..fcbc1b3 100644 --- a/examples/animation/sub-attaq/graphicsscene.cpp +++ b/examples/animation/sub-attaq/graphicsscene.cpp @@ -230,17 +230,17 @@ void GraphicsScene::setupScene(const QList<QAction *> &actions) QStateMachine *machine = new QStateMachine(this); //This state is when the player is playing - PlayState *gameState = new PlayState(this,machine->rootState()); + PlayState *gameState = new PlayState(this,machine); //Final state - QFinalState *final = new QFinalState(machine->rootState()); + QFinalState *final = new QFinalState(machine); //Animation when the player enter in the game - QAnimationState *lettersMovingState = new QAnimationState(machine->rootState()); + QAnimationState *lettersMovingState = new QAnimationState(machine); lettersMovingState->setAnimation(lettersGroupMoving); //Animation when the welcome screen disappear - QAnimationState *lettersFadingState = new QAnimationState(machine->rootState()); + QAnimationState *lettersFadingState = new QAnimationState(machine); lettersFadingState->setAnimation(lettersGroupFading); //if new game then we fade out the welcome screen and start playing diff --git a/examples/animation/sub-attaq/states.cpp b/examples/animation/sub-attaq/states.cpp index 81fd2de..d63737f 100644 --- a/examples/animation/sub-attaq/states.cpp +++ b/examples/animation/sub-attaq/states.cpp @@ -83,7 +83,7 @@ void PlayState::onEntry(QEvent *) machine = new QStateMachine(this); //This state is when player is playing - LevelState *levelState = new LevelState(scene, this, machine->rootState()); + LevelState *levelState = new LevelState(scene, this, machine); //This state is when the player is actually playing but the game is not paused QState *playingState = new QState(levelState); @@ -105,10 +105,10 @@ void PlayState::onEntry(QEvent *) pauseState->addTransition(pressPpause); //This state is when player have lost - LostState *lostState = new LostState(scene, this, machine->rootState()); + LostState *lostState = new LostState(scene, this, machine); //This state is when player have won - WinState *winState = new WinState(scene, this, machine->rootState()); + WinState *winState = new WinState(scene, this, machine); //The boat has been destroyed then the game is finished levelState->addTransition(scene->boat, SIGNAL(boatExecutionFinished()),lostState); @@ -136,7 +136,7 @@ void PlayState::onEntry(QEvent *) machine->setInitialState(levelState); //Final state - QFinalState *final = new QFinalState(machine->rootState()); + QFinalState *final = new QFinalState(machine); //This transition is triggered when the player press space after completing a level CustomSpaceTransition *spaceTransition = new CustomSpaceTransition(scene->views().at(0), this, QEvent::KeyPress, Qt::Key_Space); diff --git a/examples/animation/sub-attaq/submarine.cpp b/examples/animation/sub-attaq/submarine.cpp index 04b7916..78a9539 100644 --- a/examples/animation/sub-attaq/submarine.cpp +++ b/examples/animation/sub-attaq/submarine.cpp @@ -115,7 +115,7 @@ SubMarine::SubMarine(int type, const QString &name, int points, QGraphicsItem * QStateMachine *machine = new QStateMachine(this); //This state is when the boat is moving/rotating - QState *moving = new QState(machine->rootState()); + QState *moving = new QState(machine); //This state is when the boat is moving from left to right MovementState *movement = new MovementState(this, moving); @@ -132,7 +132,7 @@ SubMarine::SubMarine(int type, const QString &name, int points, QGraphicsItem * machine->setInitialState(moving); //End - QFinalState *final = new QFinalState(machine->rootState()); + QFinalState *final = new QFinalState(machine); //If the moving animation is finished we move to the return state movement->addTransition(movement, SIGNAL(animationFinished()), rotation); @@ -141,7 +141,7 @@ SubMarine::SubMarine(int type, const QString &name, int points, QGraphicsItem * rotation->addTransition(rotation, SIGNAL(animationFinished()), movement); //This state play the destroyed animation - QAnimationState *destroyedState = new QAnimationState(machine->rootState()); + QAnimationState *destroyedState = new QAnimationState(machine); destroyedState->setAnimation(setupDestroyAnimation(this)); //Play a nice animation when the submarine is destroyed diff --git a/examples/animation/sub-attaq/torpedo.cpp b/examples/animation/sub-attaq/torpedo.cpp index 5ef237a..fe79488 100644 --- a/examples/animation/sub-attaq/torpedo.cpp +++ b/examples/animation/sub-attaq/torpedo.cpp @@ -74,11 +74,11 @@ void Torpedo::launch() QStateMachine *machine = new QStateMachine(this); //This state is when the launch animation is playing - QAnimationState *launched = new QAnimationState(machine->rootState()); + QAnimationState *launched = new QAnimationState(machine); launched->setAnimation(launchAnimation); //End - QFinalState *final = new QFinalState(machine->rootState()); + QFinalState *final = new QFinalState(machine); machine->setInitialState(launched); diff --git a/examples/examples.pro b/examples/examples.pro index b241f8e..ba114e1 100644 --- a/examples/examples.pro +++ b/examples/examples.pro @@ -37,6 +37,7 @@ embedded:SUBDIRS += qws contains(QT_BUILD_PARTS, tools):SUBDIRS += qtestlib } contains(QT_CONFIG, opengl): SUBDIRS += opengl +contains(QT_CONFIG, openvg): SUBDIRS += openvg contains(QT_CONFIG, dbus): SUBDIRS += dbus win32: SUBDIRS += activeqt contains(QT_CONFIG, xmlpatterns): SUBDIRS += xmlpatterns diff --git a/examples/openvg/README b/examples/openvg/README new file mode 100644 index 0000000..5e385ea --- /dev/null +++ b/examples/openvg/README @@ -0,0 +1,40 @@ +Qt provides support for integration with OpenVG implementations on +platforms with appropriate hardware acceleration. + +These examples demonstrate the basic techniques used to take advantage of +OpenVG in Qt applications. In particular, the "star" example shows how +to mix QPainter and OpenVG calls in the same paint event. + +The example launcher provided with Qt can be used to explore each of the +examples in this directory. + +Documentation for these examples can be found via the Tutorial and Examples +link in the main Qt documentation. + + +Finding the Qt Examples and Demos launcher +========================================== + +On Windows: + +The launcher can be accessed via the Windows Start menu. Select the menu +entry entitled "Qt Examples and Demos" entry in the submenu containing +the Qt tools. + +On Mac OS X: + +For the binary distribution, the qtdemo executable is installed in the +/Developer/Applications/Qt directory. For the source distribution, it is +installed alongside the other Qt tools on the path specified when Qt is +configured. + +On Unix/Linux: + +The qtdemo executable is installed alongside the other Qt tools on the path +specified when Qt is configured. + +On all platforms: + +The source code for the launcher can be found in the demos/qtdemo directory +in the Qt package. This example is built at the same time as the Qt libraries, +tools, examples, and demonstrations. diff --git a/examples/openvg/openvg.pro b/examples/openvg/openvg.pro new file mode 100644 index 0000000..d76a389 --- /dev/null +++ b/examples/openvg/openvg.pro @@ -0,0 +1,8 @@ +TEMPLATE = subdirs +SUBDIRS = star + +# install +target.path = $$[QT_INSTALL_EXAMPLES]/openvg +sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS openvg.pro README +sources.path = $$[QT_INSTALL_EXAMPLES]/openvg +INSTALLS += target sources diff --git a/examples/animation/stickman/editor/mainwindow.h b/examples/openvg/star/main.cpp index ef122d9..eec2186 100644 --- a/examples/animation/stickman/editor/mainwindow.h +++ b/examples/openvg/star/main.cpp @@ -3,7 +3,7 @@ ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtCore module of the Qt Toolkit. +** This file is part of the QtOpenGL module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage @@ -39,20 +39,16 @@ ** ****************************************************************************/ -#ifndef MAINWINDOW_H -#define MAINWINDOW_H +#include <QApplication> +#include "starwidget.h" -#include <QMainWindow> - -class StickMan; -class MainWindow: public QMainWindow +int main(int argc, char *argv[]) { -public: - MainWindow(StickMan *stickMan); - ~MainWindow(); - -private: - void initActions(StickMan *stickMan); -}; - +#ifdef Q_OS_SYMBIAN + QApplication::setGraphicsSystem("openvg"); #endif + QApplication app(argc, argv); + StarWidget mw; + mw.show(); + return app.exec(); +} diff --git a/examples/openvg/star/star.pro b/examples/openvg/star/star.pro new file mode 100644 index 0000000..90c236d --- /dev/null +++ b/examples/openvg/star/star.pro @@ -0,0 +1,6 @@ +TEMPLATE = app +TARGET = star +CONFIG += qt debug warn_on +QT += openvg +SOURCES = starwidget.cpp main.cpp +HEADERS = starwidget.h diff --git a/examples/openvg/star/starwidget.cpp b/examples/openvg/star/starwidget.cpp new file mode 100644 index 0000000..9d2a255 --- /dev/null +++ b/examples/openvg/star/starwidget.cpp @@ -0,0 +1,115 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenGL module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "starwidget.h" + +StarWidget::StarWidget(QWidget *parent) + : QWidget(parent) + , path(VG_INVALID_HANDLE) + , pen(Qt::red, 4.0, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin) + , brush(Qt::yellow) +{ + setMinimumSize(220, 250); + setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); +} + +static VGubyte const starSegments[] = { + VG_MOVE_TO_ABS, + VG_LINE_TO_REL, + VG_LINE_TO_REL, + VG_LINE_TO_REL, + VG_LINE_TO_REL, + VG_CLOSE_PATH +}; +static VGfloat const starCoords[] = { + 110, 35, + 50, 160, + -130, -100, + 160, 0, + -130, 100 +}; + +void StarWidget::paintEvent(QPaintEvent *) +{ + QPainter painter; + painter.begin(this); + + // Make sure that we are using the OpenVG paint engine. + if (painter.paintEngine()->type() != QPaintEngine::OpenVG) { +#ifdef Q_WS_QWS + qWarning("Not using OpenVG: use the '-display' option to specify an OpenVG driver"); +#else + qWarning("Not using OpenVG: specify '-graphicssystem OpenVG'"); +#endif + return; + } + + // Select a pen and a brush for drawing the star. + painter.setPen(pen); + painter.setBrush(brush); + + // We want the star border to be anti-aliased. + painter.setRenderHints(QPainter::Antialiasing); + + // Flush the state changes to the OpenVG implementation + // and prepare to perform raw OpenVG calls. + painter.paintEngine()->syncState(); + + // Cache the path if we haven't already. + if (path == VG_INVALID_HANDLE) { + path = vgCreatePath(VG_PATH_FORMAT_STANDARD, + VG_PATH_DATATYPE_F, + 1.0f, // scale + 0.0f, // bias + 6, // segmentCapacityHint + 10, // coordCapacityHint + VG_PATH_CAPABILITY_ALL); + vgAppendPathData(path, sizeof(starSegments), starSegments, starCoords); + } + + // Draw the star directly using the OpenVG API. + vgDrawPath(path, VG_FILL_PATH | VG_STROKE_PATH); + + // Restore normal QPainter operations. + painter.paintEngine()->syncState(); + + painter.end(); +} diff --git a/examples/animation/stickman/editor/animationdialog.h b/examples/openvg/star/starwidget.h index 293f0d4..883f8c4 100644 --- a/examples/animation/stickman/editor/animationdialog.h +++ b/examples/openvg/star/starwidget.h @@ -3,7 +3,7 @@ ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtCore module of the Qt Toolkit. +** This file is part of the QtOpenGL module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage @@ -39,46 +39,28 @@ ** ****************************************************************************/ -#ifndef ANIMATIONDIALOG_H -#define ANIMATIONDIALOG_H +#ifndef STARWIDGET_H +#define STARWIDGET_H -#include <QDialog> -#include <QMessageBox> +#include <QWidget> +#include <QPainter> +#include <QPaintEngine> +#include "qvg.h" -QT_BEGIN_NAMESPACE -class QSpinBox; -class QLineEdit; -QT_END_NAMESPACE -class StickMan; -class Animation; -class AnimationDialog: public QDialog +class StarWidget : public QWidget { Q_OBJECT public: - AnimationDialog(StickMan *stickMan, QWidget *parent = 0); - ~AnimationDialog(); + StarWidget(QWidget *parent = 0); + ~StarWidget() {} -public slots: - void currentFrameChanged(int currentFrame); - void totalFramesChanged(int totalFrames); - void setCurrentAnimationName(const QString &name); - - void newAnimation(); - void saveAnimation(); - void loadAnimation(); +protected: + void paintEvent(QPaintEvent *); private: - void saveCurrentFrame(); - void stickManFromCurrentFrame(); - void initFromAnimation(); - void initUi(); - QMessageBox::StandardButton maybeSave(); - - QSpinBox *m_currentFrame; - QSpinBox *m_totalFrames; - QLineEdit *m_name; - Animation *m_animation; - StickMan *m_stickman; + VGPath path; + QPen pen; + QBrush brush; }; - + #endif diff --git a/examples/statemachine/factorial/main.cpp b/examples/statemachine/factorial/main.cpp index 18a9521..5050347 100644 --- a/examples/statemachine/factorial/main.cpp +++ b/examples/statemachine/factorial/main.cpp @@ -151,14 +151,14 @@ int main(int argc, char **argv) //! [3] //! [4] - QState *compute = new QState(machine.rootState()); + QState *compute = new QState(&machine); compute->assignProperty(&factorial, "fac", 1); compute->assignProperty(&factorial, "x", 6); compute->addTransition(new FactorialLoopTransition(&factorial)); //! [4] //! [5] - QFinalState *done = new QFinalState(machine.rootState()); + QFinalState *done = new QFinalState(&machine); FactorialDoneTransition *doneTransition = new FactorialDoneTransition(&factorial); doneTransition->setTargetState(done); compute->addTransition(doneTransition); diff --git a/examples/statemachine/tankgame/mainwindow.cpp b/examples/statemachine/tankgame/mainwindow.cpp index 68a8d68..596cdfe 100644 --- a/examples/statemachine/tankgame/mainwindow.cpp +++ b/examples/statemachine/tankgame/mainwindow.cpp @@ -160,7 +160,7 @@ void MainWindow::init() connect(quitAction, SIGNAL(triggered()), this, SLOT(close())); m_machine = new QStateMachine(this); - QState *stoppedState = new QState(m_machine->rootState()); + QState *stoppedState = new QState(m_machine); stoppedState->setObjectName("stoppedState"); stoppedState->assignProperty(runGameAction, "enabled", true); stoppedState->assignProperty(stopGameAction, "enabled", false); @@ -188,14 +188,14 @@ void MainWindow::init() stoppedState->setInitialState(hs); //! [0] - m_runningState = new QState(QState::ParallelStates, m_machine->rootState()); + m_runningState = new QState(QState::ParallelStates, m_machine); //! [0] m_runningState->setObjectName("runningState"); m_runningState->assignProperty(addTankAction, "enabled", false); m_runningState->assignProperty(runGameAction, "enabled", false); m_runningState->assignProperty(stopGameAction, "enabled", true); - QState *gameOverState = new QState(m_machine->rootState()); + QState *gameOverState = new QState(m_machine); gameOverState->setObjectName("gameOverState"); gameOverState->assignProperty(stopGameAction, "enabled", false); connect(gameOverState, SIGNAL(entered()), this, SLOT(gameOver())); diff --git a/examples/tools/completer/mainwindow.cpp b/examples/tools/completer/mainwindow.cpp index 8ea1c39..c98482a 100644 --- a/examples/tools/completer/mainwindow.cpp +++ b/examples/tools/completer/mainwindow.cpp @@ -78,6 +78,12 @@ MainWindow::MainWindow(QWidget *parent) //! [0] //! [1] + QLabel *maxVisibleLabel = new QLabel; + maxVisibleLabel->setText(tr("Max Visible Items")); + maxVisibleSpinBox = new QSpinBox; + maxVisibleSpinBox->setRange(3,25); + maxVisibleSpinBox->setValue(10); + wrapCheckBox = new QCheckBox; wrapCheckBox->setText(tr("Wrap around completions")); wrapCheckBox->setChecked(true); @@ -90,6 +96,7 @@ MainWindow::MainWindow(QWidget *parent) connect(modelCombo, SIGNAL(activated(int)), this, SLOT(changeModel())); connect(modeCombo, SIGNAL(activated(int)), this, SLOT(changeMode(int))); connect(caseCombo, SIGNAL(activated(int)), this, SLOT(changeCase(int))); + connect(maxVisibleSpinBox, SIGNAL(valueChanged(int)), this, SLOT(changeMaxVisible(int))); //! [2] //! [3] @@ -99,9 +106,10 @@ MainWindow::MainWindow(QWidget *parent) layout->addWidget(modelLabel, 0, 0); layout->addWidget(modelCombo, 0, 1); layout->addWidget(modeLabel, 1, 0); layout->addWidget(modeCombo, 1, 1); layout->addWidget(caseLabel, 2, 0); layout->addWidget(caseCombo, 2, 1); - layout->addWidget(wrapCheckBox, 3, 0); - layout->addWidget(contentsLabel, 4, 0, 1, 2); - layout->addWidget(lineEdit, 5, 0, 1, 2); + layout->addWidget(maxVisibleLabel, 3, 0); layout->addWidget(maxVisibleSpinBox, 3, 1); + layout->addWidget(wrapCheckBox, 4, 0); + layout->addWidget(contentsLabel, 5, 0, 1, 2); + layout->addWidget(lineEdit, 6, 0, 1, 2); centralWidget->setLayout(layout); setCentralWidget(centralWidget); @@ -205,6 +213,7 @@ void MainWindow::changeModel() { delete completer; completer = new QCompleter(this); + completer->setMaxVisibleItems(maxVisibleSpinBox->value()); switch (modelCombo->currentIndex()) { default: @@ -256,9 +265,16 @@ void MainWindow::changeModel() //! [14] //! [15] +void MainWindow::changeMaxVisible(int max) +{ + completer->setMaxVisibleItems(max); +} +//! [15] + +//! [16] void MainWindow::about() { QMessageBox::about(this, tr("About"), tr("This example demonstrates the " "different features of the QCompleter class.")); } -//! [15] +//! [16] diff --git a/examples/tools/completer/mainwindow.h b/examples/tools/completer/mainwindow.h index f6c962b..30b8d26 100644 --- a/examples/tools/completer/mainwindow.h +++ b/examples/tools/completer/mainwindow.h @@ -52,6 +52,7 @@ class QLabel; class QLineEdit; class QProgressBar; class QCheckBox; +class QSpinBox; QT_END_NAMESPACE //! [0] @@ -67,6 +68,7 @@ private slots: void changeCase(int); void changeMode(int); void changeModel(); + void changeMaxVisible(int); //! [0] //! [1] @@ -77,6 +79,7 @@ private: QComboBox *caseCombo; QComboBox *modeCombo; QComboBox *modelCombo; + QSpinBox *maxVisibleSpinBox; QCheckBox *wrapCheckBox; QCompleter *completer; QLabel *contentsLabel; diff --git a/examples/tools/regexp/regexpdialog.cpp b/examples/tools/regexp/regexpdialog.cpp index 42cb617..7aab1be 100644 --- a/examples/tools/regexp/regexpdialog.cpp +++ b/examples/tools/regexp/regexpdialog.cpp @@ -69,6 +69,7 @@ RegExpDialog::RegExpDialog(QWidget *parent) syntaxComboBox->addItem(tr("Regular expression v2"), QRegExp::RegExp2); syntaxComboBox->addItem(tr("Wildcard"), QRegExp::Wildcard); syntaxComboBox->addItem(tr("Fixed string"), QRegExp::FixedString); + syntaxComboBox->addItem(tr("W3C Xml Schema 1.1"), QRegExp::W3CXmlSchema11); syntaxLabel = new QLabel(tr("&Pattern Syntax:")); syntaxLabel->setBuddy(syntaxComboBox); diff --git a/examples/widgets/tablet/tabletcanvas.cpp b/examples/widgets/tablet/tabletcanvas.cpp index 4e8150e..3e9ae38 100644 --- a/examples/widgets/tablet/tabletcanvas.cpp +++ b/examples/widgets/tablet/tabletcanvas.cpp @@ -137,11 +137,6 @@ void TabletCanvas::paintImage(QPainter &painter, QTabletEvent *event) QPoint brushAdjust(10, 10); switch (myTabletDevice) { - case QTabletEvent::Stylus: - painter.setBrush(myBrush); - painter.setPen(myPen); - painter.drawLine(polyLine[1], event->pos()); - break; case QTabletEvent::Airbrush: myBrush.setColor(myColor); myBrush.setStyle(brushPattern(event->pressure())); @@ -156,10 +151,32 @@ void TabletCanvas::paintImage(QPainter &painter, QTabletEvent *event) case QTabletEvent::Puck: case QTabletEvent::FourDMouse: case QTabletEvent::RotationStylus: - qWarning("This input device is not supported by the example."); + { + const QString error(tr("This input device is not supported by the example.")); +#ifndef QT_NO_STATUSTIP + QStatusTipEvent status(error); + QApplication::sendEvent(this, &status); +#else + qWarning() << error; +#endif + } break; default: - qWarning("Unknown tablet device."); + { + const QString error(tr("Unknown tablet device - treating as stylus")); +#ifndef QT_NO_STATUSTIP + QStatusTipEvent status(error); + QApplication::sendEvent(this, &status); +#else + qWarning() << error; +#endif + } + // FALL-THROUGH + case QTabletEvent::Stylus: + painter.setBrush(myBrush); + painter.setPen(myPen); + painter.drawLine(polyLine[1], event->pos()); + break; } } //! [5] @@ -250,7 +267,7 @@ void TabletCanvas::updateBrush(QTabletEvent *event) } //! [11] -void TabletCanvas::resizeEvent(QResizeEvent *event) +void TabletCanvas::resizeEvent(QResizeEvent *) { initImage(); polyLine[0] = polyLine[1] = polyLine[2] = QPoint(); diff --git a/examples/xmlpatterns/schema/files/contact.xsd b/examples/xmlpatterns/schema/files/contact.xsd new file mode 100644 index 0000000..3e1b570 --- /dev/null +++ b/examples/xmlpatterns/schema/files/contact.xsd @@ -0,0 +1,25 @@ +<?xml version="1.0"?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + + <xsd:element name="contact"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="givenName" type="xsd:string"/> + <xsd:element name="familyName" type="xsd:string"/> + <xsd:element name="birthdate" type="xsd:date" minOccurs="0"/> + <xsd:element name="homeAddress" type="address"/> + <xsd:element name="workAddress" type="address" minOccurs="0"/> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + + <xsd:complexType name="address"> + <xsd:sequence> + <xsd:element name="street" type="xsd:string"/> + <xsd:element name="zipCode" type="xsd:string"/> + <xsd:element name="city" type="xsd:string"/> + <xsd:element name="country" type="xsd:string"/> + </xsd:sequence> + </xsd:complexType> + +</xsd:schema> diff --git a/examples/xmlpatterns/schema/files/invalid_contact.xml b/examples/xmlpatterns/schema/files/invalid_contact.xml new file mode 100644 index 0000000..42f1edd --- /dev/null +++ b/examples/xmlpatterns/schema/files/invalid_contact.xml @@ -0,0 +1,11 @@ +<contact> + <givenName>John</givenName> + <familyName>Doe</familyName> + <title>Prof.</title> + <workAddress> + <street>Sandakerveien 116</street> + <zipCode>N-0550</zipCode> + <city>Oslo</city> + <country>Norway</country> + </workAddress> +</contact> diff --git a/examples/xmlpatterns/schema/files/invalid_order.xml b/examples/xmlpatterns/schema/files/invalid_order.xml new file mode 100644 index 0000000..8ffc5fd --- /dev/null +++ b/examples/xmlpatterns/schema/files/invalid_order.xml @@ -0,0 +1,13 @@ +<order> + <customerId>234219</customerId> + <article> + <articleId>21692</articleId> + <count>3</count> + </article> + <article> + <articleId>24749</articleId> + <count>9</count> + </article> + <deliveryDate>2009-01-23</deliveryDate> + <payed>yes</payed> +</order> diff --git a/examples/xmlpatterns/schema/files/invalid_recipe.xml b/examples/xmlpatterns/schema/files/invalid_recipe.xml new file mode 100644 index 0000000..4d75af6 --- /dev/null +++ b/examples/xmlpatterns/schema/files/invalid_recipe.xml @@ -0,0 +1,14 @@ +<recipe> + <title>Cheese on Toast</title> + <ingredient name="Bread" quantity="2" unit="slices"/> + <ingredient name="Cheese" quantity="2" unit="slices"/> + <time quantity="3" unit="days"/> + <method> + <step>1. Slice the bread and cheese.</step> + <step>2. Grill one side of each slice of bread.</step> + <step>3. Turn over the bread and place a slice of cheese on each piece.</step> + <step>4. Grill until the cheese has started to melt.</step> + <step>5. Serve and enjoy!</step> + </method> + <comment>Tell your friends about it!</comment> +</recipe> diff --git a/examples/xmlpatterns/schema/files/order.xsd b/examples/xmlpatterns/schema/files/order.xsd new file mode 100644 index 0000000..405cafe --- /dev/null +++ b/examples/xmlpatterns/schema/files/order.xsd @@ -0,0 +1,23 @@ +<?xml version="1.0"?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + + <xsd:element name="order"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="customerId" type="xsd:positiveInteger"/> + <xsd:element name="article" type="articleType" maxOccurs="unbounded"/> + <xsd:element name="deliveryDate" type="xsd:date"/> + <xsd:element name="payed" type="xsd:boolean"/> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + + <xsd:complexType name="articleType"> + <xsd:sequence> + <xsd:element name="articleId" type="xsd:positiveInteger"/> + <xsd:element name="count" type="xsd:positiveInteger"/> + <xsd:element name="comment" type="xsd:string" minOccurs="0"/> + </xsd:sequence> + </xsd:complexType> + +</xsd:schema> diff --git a/examples/xmlpatterns/schema/files/recipe.xsd b/examples/xmlpatterns/schema/files/recipe.xsd new file mode 100644 index 0000000..bbbafd9 --- /dev/null +++ b/examples/xmlpatterns/schema/files/recipe.xsd @@ -0,0 +1,40 @@ +<?xml version="1.0"?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + + <xsd:element name="recipe"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="title" type="xsd:string"/> + <xsd:element name="ingredient" type="ingredientType" maxOccurs="unbounded"/> + <xsd:element name="time" type="timeType"/> + <xsd:element name="method"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="step" type="xsd:string" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + + <xsd:complexType name="ingredientType"> + <xsd:attribute name="name" type="xsd:string"/> + <xsd:attribute name="quantity" type="xsd:positiveInteger"/> + <xsd:attribute name="unit" type="xsd:string"/> + </xsd:complexType> + + <xsd:complexType name="timeType"> + <xsd:attribute name="quantity" type="xsd:positiveInteger"/> + <xsd:attribute name="unit"> + <xsd:simpleType> + <xsd:restriction base="xsd:string"> + <xsd:enumeration value="seconds"/> + <xsd:enumeration value="minutes"/> + <xsd:enumeration value="hours"/> + </xsd:restriction> + </xsd:simpleType> + </xsd:attribute> + </xsd:complexType> + +</xsd:schema> diff --git a/examples/xmlpatterns/schema/files/valid_contact.xml b/examples/xmlpatterns/schema/files/valid_contact.xml new file mode 100644 index 0000000..53c04d4 --- /dev/null +++ b/examples/xmlpatterns/schema/files/valid_contact.xml @@ -0,0 +1,11 @@ +<contact> + <givenName>John</givenName> + <familyName>Doe</familyName> + <birthdate>1977-12-25</birthdate> + <homeAddress> + <street>Sandakerveien 116</street> + <zipCode>N-0550</zipCode> + <city>Oslo</city> + <country>Norway</country> + </homeAddress> +</contact> diff --git a/examples/xmlpatterns/schema/files/valid_order.xml b/examples/xmlpatterns/schema/files/valid_order.xml new file mode 100644 index 0000000..f83c36c --- /dev/null +++ b/examples/xmlpatterns/schema/files/valid_order.xml @@ -0,0 +1,18 @@ +<order> + <customerId>194223</customerId> + <article> + <articleId>22242</articleId> + <count>5</count> + </article> + <article> + <articleId>32372</articleId> + <count>12</count> + <comment>without stripes</comment> + </article> + <article> + <articleId>23649</articleId> + <count>2</count> + </article> + <deliveryDate>2009-01-23</deliveryDate> + <payed>true</payed> +</order> diff --git a/examples/xmlpatterns/schema/files/valid_recipe.xml b/examples/xmlpatterns/schema/files/valid_recipe.xml new file mode 100644 index 0000000..f6499ba --- /dev/null +++ b/examples/xmlpatterns/schema/files/valid_recipe.xml @@ -0,0 +1,13 @@ +<recipe> + <title>Cheese on Toast</title> + <ingredient name="Bread" quantity="2" unit="slices"/> + <ingredient name="Cheese" quantity="2" unit="slices"/> + <time quantity="3" unit="minutes"/> + <method> + <step>1. Slice the bread and cheese.</step> + <step>2. Grill one side of each slice of bread.</step> + <step>3. Turn over the bread and place a slice of cheese on each piece.</step> + <step>4. Grill until the cheese has started to melt.</step> + <step>5. Serve and enjoy!</step> + </method> +</recipe> diff --git a/examples/xmlpatterns/schema/main.cpp b/examples/xmlpatterns/schema/main.cpp new file mode 100644 index 0000000..b1ec8b0 --- /dev/null +++ b/examples/xmlpatterns/schema/main.cpp @@ -0,0 +1,54 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtGui> +#include "mainwindow.h" + +//! [0] +int main(int argc, char* argv[]) +{ + Q_INIT_RESOURCE(schema); + QApplication app(argc, argv); + MainWindow* const window = new MainWindow; + window->show(); + return app.exec(); +} +//! [0] diff --git a/examples/xmlpatterns/schema/mainwindow.cpp b/examples/xmlpatterns/schema/mainwindow.cpp new file mode 100644 index 0000000..0bb21f5 --- /dev/null +++ b/examples/xmlpatterns/schema/mainwindow.cpp @@ -0,0 +1,218 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtGui> +#include <QtXmlPatterns> + +#include "mainwindow.h" +#include "xmlsyntaxhighlighter.h" + +//! [4] +class MessageHandler : public QAbstractMessageHandler +{ + public: + MessageHandler() + : QAbstractMessageHandler(0) + { + } + + QString statusMessage() const + { + return m_description; + } + + int line() const + { + return m_sourceLocation.line(); + } + + int column() const + { + return m_sourceLocation.column(); + } + + protected: + virtual void handleMessage(QtMsgType type, const QString &description, + const QUrl &identifier, const QSourceLocation &sourceLocation) + { + Q_UNUSED(type); + Q_UNUSED(identifier); + + m_messageType = type; + m_description = description; + m_sourceLocation = sourceLocation; + } + + private: + QtMsgType m_messageType; + QString m_description; + QSourceLocation m_sourceLocation; +}; +//! [4] + +//! [0] +MainWindow::MainWindow() +{ + setupUi(this); + + new XmlSyntaxHighlighter(schemaView->document()); + new XmlSyntaxHighlighter(instanceEdit->document()); + + schemaSelection->addItem(tr("Contact Schema")); + schemaSelection->addItem(tr("Recipe Schema")); + schemaSelection->addItem(tr("Order Schema")); + + instanceSelection->addItem(tr("Valid Contact Instance")); + instanceSelection->addItem(tr("Invalid Contact Instance")); + + connect(schemaSelection, SIGNAL(currentIndexChanged(int)), SLOT(schemaSelected(int))); + connect(instanceSelection, SIGNAL(currentIndexChanged(int)), SLOT(instanceSelected(int))); + connect(validateButton, SIGNAL(clicked()), SLOT(validate())); + connect(instanceEdit, SIGNAL(textChanged()), SLOT(textChanged())); + + validationStatus->setAlignment(Qt::AlignCenter | Qt::AlignVCenter); + + schemaSelected(0); + instanceSelected(0); +} +//! [0] + +//! [1] +void MainWindow::schemaSelected(int index) +{ + instanceSelection->clear(); + if (index == 0) { + instanceSelection->addItem(tr("Valid Contact Instance")); + instanceSelection->addItem(tr("Invalid Contact Instance")); + } else if (index == 1) { + instanceSelection->addItem(tr("Valid Recipe Instance")); + instanceSelection->addItem(tr("Invalid Recipe Instance")); + } else if (index == 2) { + instanceSelection->addItem(tr("Valid Order Instance")); + instanceSelection->addItem(tr("Invalid Order Instance")); + } + textChanged(); + + QFile schemaFile(QString(":/schema_%1.xsd").arg(index)); + schemaFile.open(QIODevice::ReadOnly); + const QString schemaText(QString::fromUtf8(schemaFile.readAll())); + schemaView->setPlainText(schemaText); + + validate(); +} +//! [1] + +//! [2] +void MainWindow::instanceSelected(int index) +{ + QFile instanceFile(QString(":/instance_%1.xml").arg((2*schemaSelection->currentIndex()) + index)); + instanceFile.open(QIODevice::ReadOnly); + const QString instanceText(QString::fromUtf8(instanceFile.readAll())); + instanceEdit->setPlainText(instanceText); + + validate(); +} +//! [2] + +//! [3] +void MainWindow::validate() +{ + const QByteArray schemaData = schemaView->toPlainText().toUtf8(); + const QByteArray instanceData = instanceEdit->toPlainText().toUtf8(); + + MessageHandler messageHandler; + + QXmlSchema schema; + schema.setMessageHandler(&messageHandler); + + schema.load(schemaData); + + bool errorOccurred = false; + if (!schema.isValid()) { + errorOccurred = true; + } else { + QXmlSchemaValidator validator(schema); + if (!validator.validate(instanceData)) + errorOccurred = true; + } + + if (errorOccurred) { + validationStatus->setText(messageHandler.statusMessage()); + moveCursor(messageHandler.line(), messageHandler.column()); + } else { + validationStatus->setText(tr("validation successful")); + } + + const QString styleSheet = QString("QLabel {background: %1; padding: 3px}") + .arg(errorOccurred ? QColor(Qt::red).lighter(160).name() : + QColor(Qt::green).lighter(160).name()); + validationStatus->setStyleSheet(styleSheet); +} +//! [3] + +void MainWindow::textChanged() +{ + instanceEdit->setExtraSelections(QList<QTextEdit::ExtraSelection>()); +} + +void MainWindow::moveCursor(int line, int column) +{ + instanceEdit->moveCursor(QTextCursor::Start); + for (int i = 1; i < line; ++i) + instanceEdit->moveCursor(QTextCursor::Down); + + for (int i = 1; i < column; ++i) + instanceEdit->moveCursor(QTextCursor::Right); + + QList<QTextEdit::ExtraSelection> extraSelections; + QTextEdit::ExtraSelection selection; + + const QColor lineColor = QColor(Qt::red).lighter(160); + selection.format.setBackground(lineColor); + selection.format.setProperty(QTextFormat::FullWidthSelection, true); + selection.cursor = instanceEdit->textCursor(); + selection.cursor.clearSelection(); + extraSelections.append(selection); + + instanceEdit->setExtraSelections(extraSelections); + + instanceEdit->setFocus(); +} diff --git a/examples/xmlpatterns/schema/mainwindow.h b/examples/xmlpatterns/schema/mainwindow.h new file mode 100644 index 0000000..420c627 --- /dev/null +++ b/examples/xmlpatterns/schema/mainwindow.h @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include <QMainWindow> + +#include "ui_schema.h" + +//! [0] +class MainWindow : public QMainWindow, + private Ui::SchemaMainWindow +{ + Q_OBJECT + + public: + MainWindow(); + + private Q_SLOTS: + void schemaSelected(int index); + void instanceSelected(int index); + void validate(); + void textChanged(); + + private: + void moveCursor(int line, int column); +}; +//! [0] +#endif diff --git a/examples/xmlpatterns/schema/schema.pro b/examples/xmlpatterns/schema/schema.pro new file mode 100644 index 0000000..af32e0a --- /dev/null +++ b/examples/xmlpatterns/schema/schema.pro @@ -0,0 +1,11 @@ +QT += xmlpatterns +FORMS += schema.ui +HEADERS = mainwindow.h ../shared/xmlsyntaxhighlighter.h +RESOURCES = schema.qrc +SOURCES = main.cpp mainwindow.cpp ../shared/xmlsyntaxhighlighter.cpp +INCLUDEPATH += ../shared/ + +target.path = $$[QT_INSTALL_EXAMPLES]/xmlpatterns/schema +sources.files = $$SOURCES $$HEADERS $$RESOURCES *.pro *.xq *.html files +sources.path = $$[QT_INSTALL_EXAMPLES]/xmlpatterns/schema +INSTALLS += target sources diff --git a/examples/xmlpatterns/schema/schema.qrc b/examples/xmlpatterns/schema/schema.qrc new file mode 100644 index 0000000..eb7ddfd --- /dev/null +++ b/examples/xmlpatterns/schema/schema.qrc @@ -0,0 +1,13 @@ +<!DOCTYPE RCC><RCC version="1.0"> +<qresource> + <file alias="schema_0.xsd">files/contact.xsd</file> + <file alias="schema_1.xsd">files/recipe.xsd</file> + <file alias="schema_2.xsd">files/order.xsd</file> + <file alias="instance_0.xml">files/valid_contact.xml</file> + <file alias="instance_1.xml">files/invalid_contact.xml</file> + <file alias="instance_2.xml">files/valid_recipe.xml</file> + <file alias="instance_3.xml">files/invalid_recipe.xml</file> + <file alias="instance_4.xml">files/valid_order.xml</file> + <file alias="instance_5.xml">files/invalid_order.xml</file> +</qresource> +</RCC> diff --git a/examples/xmlpatterns/schema/schema.ui b/examples/xmlpatterns/schema/schema.ui new file mode 100644 index 0000000..b67f444 --- /dev/null +++ b/examples/xmlpatterns/schema/schema.ui @@ -0,0 +1,71 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>SchemaMainWindow</class> + <widget class="QMainWindow" name="SchemaMainWindow"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>417</width> + <height>594</height> + </rect> + </property> + <property name="windowTitle"> + <string>XML Schema Validation</string> + </property> + <widget class="QWidget" name="centralwidget"> + <layout class="QGridLayout" name="gridLayout"> + <item row="0" column="0" colspan="2"> + <widget class="QLabel" name="schemaLabel"> + <property name="text"> + <string>XML Schema Document:</string> + </property> + </widget> + </item> + <item row="0" column="2" colspan="2"> + <widget class="QComboBox" name="schemaSelection"/> + </item> + <item row="1" column="0" colspan="4"> + <widget class="QTextBrowser" name="schemaView"/> + </item> + <item row="2" column="0" colspan="2"> + <widget class="QLabel" name="instanceLabel"> + <property name="text"> + <string>XML Instance Document:</string> + </property> + </widget> + </item> + <item row="2" column="2" colspan="2"> + <widget class="QComboBox" name="instanceSelection"/> + </item> + <item row="3" column="0" colspan="4"> + <widget class="QTextEdit" name="instanceEdit"/> + </item> + <item row="4" column="0"> + <widget class="QLabel" name="label"> + <property name="text"> + <string>Status:</string> + </property> + </widget> + </item> + <item row="4" column="1" colspan="2"> + <widget class="QLabel" name="validationStatus"> + <property name="text"> + <string>not validated</string> + </property> + </widget> + </item> + <item row="4" column="3"> + <widget class="QPushButton" name="validateButton"> + <property name="text"> + <string>Validate</string> + </property> + </widget> + </item> + </layout> + </widget> + <widget class="QStatusBar" name="statusbar"/> + </widget> + <resources/> + <connections/> +</ui> diff --git a/examples/xmlpatterns/trafficinfo/mainwindow.cpp b/examples/xmlpatterns/trafficinfo/mainwindow.cpp index 943055a..105ede4 100644 --- a/examples/xmlpatterns/trafficinfo/mainwindow.cpp +++ b/examples/xmlpatterns/trafficinfo/mainwindow.cpp @@ -111,7 +111,9 @@ void MainWindow::mousePressEvent(QMouseEvent *event) void MainWindow::paintEvent(QPaintEvent*) { - QLinearGradient gradient(QPoint(width()/2, 0), QPoint(width()/2, height())); + const QPoint start(width()/2, 0); + const QPoint finalStop(width()/2, height()); + QLinearGradient gradient(start, finalStop); const QColor qtGreen(102, 176, 54); gradient.setColorAt(0, qtGreen.dark()); gradient.setColorAt(0.5, qtGreen); diff --git a/examples/xmlpatterns/xmlpatterns.pro b/examples/xmlpatterns/xmlpatterns.pro index 1a57005..3ff3e35 100644 --- a/examples/xmlpatterns/xmlpatterns.pro +++ b/examples/xmlpatterns/xmlpatterns.pro @@ -2,7 +2,8 @@ TEMPLATE = subdirs SUBDIRS = recipes \ trafficinfo \ xquery \ - filetree + filetree \ + schema # This example depends on QtWebkit as well. contains(QT_CONFIG, webkit):SUBDIRS += qobjectxmlmodel diff --git a/mkspecs/features/moc.prf b/mkspecs/features/moc.prf index 60508c8..c5af298 100644 --- a/mkspecs/features/moc.prf +++ b/mkspecs/features/moc.prf @@ -15,10 +15,7 @@ WIN_INCLUDETEMP= win32:count($$list($$INCPATH), 40, >) { INCLUDETEMP = $$MOC_DIR/mocinclude.tmp - # Remove any existing mocinclude.tmp when qmake runs WIN_INCLUDETEMP=$$INCLUDETEMP - WIN_INCLUDETEMP~=s,/,\,g - system($$QMAKE_DEL_FILE $$WIN_INCLUDETEMP > NUL 2>&1) EOC = $$escape_expand(\n\t) @@ -65,7 +62,9 @@ moc_header.output = $$MOC_DIR/$${QMAKE_H_MOD_MOC}${QMAKE_FILE_BASE}$${first(QMAK moc_header.input = HEADERS moc_header.variable_out = SOURCES moc_header.name = MOC ${QMAKE_FILE_IN} -!isEmpty(INCLUDETEMP):moc_header.depends += $$INCLUDETEMP +if(!contains(TEMPLATE, "vc.*"):!contains(TEMPLATE_PREFIX, "vc")) { + !isEmpty(INCLUDETEMP):moc_header.depends += $$INCLUDETEMP +} silent:moc_header.commands = @echo moc ${QMAKE_FILE_IN} && $$moc_header.commands QMAKE_EXTRA_COMPILERS += moc_header INCREDIBUILD_XGE += moc_header @@ -77,7 +76,9 @@ moc_source.commands = ${QMAKE_FUNC_mocCmd} moc_source.output = $$MOC_DIR/$${QMAKE_CPP_MOD_MOC}${QMAKE_FILE_BASE}$${QMAKE_EXT_CPP_MOC} moc_source.input = SOURCES OBJECTIVE_SOURCES moc_source.name = MOC ${QMAKE_FILE_IN} -!isEmpty(INCLUDETEMP):moc_source.depends += $$INCLUDETEMP +if(!contains(TEMPLATE, "vc.*"):!contains(TEMPLATE_PREFIX, "vc")) { + !isEmpty(INCLUDETEMP):moc_source.depends += $$INCLUDETEMP +} silent:moc_source.commands = @echo moc ${QMAKE_FILE_IN} && $$moc_source.commands QMAKE_EXTRA_COMPILERS += moc_source INCREDIBUILD_XGE += moc_source diff --git a/mkspecs/features/qt.prf b/mkspecs/features/qt.prf index 9d6a884..d1f3ae0 100644 --- a/mkspecs/features/qt.prf +++ b/mkspecs/features/qt.prf @@ -160,6 +160,7 @@ for(QTLIB, $$list($$lower($$unique(QT)))) { } else { DEFINES *= $$upper(QT_$${QTLIB}_LIB) isEqual(QTLIB, opengl):CONFIG += opengl + isEqual(QTLIB, openvg):CONFIG += openvg isEqual(QTLIB, qt3support):DEFINES *= QT3_SUPPORT isEqual(QTLIB, testlib):CONFIG += console isEqual(QTLIB, dbus):CONFIG += dbusadaptors dbusinterfaces diff --git a/mkspecs/features/unix/openvg.prf b/mkspecs/features/unix/openvg.prf index a21d1ca..29acec1 100644 --- a/mkspecs/features/unix/openvg.prf +++ b/mkspecs/features/unix/openvg.prf @@ -1,9 +1,15 @@ !isEmpty(QMAKE_INCDIR_OPENVG): INCLUDEPATH += $$QMAKE_INCDIR_OPENVG !isEmpty(QMAKE_LIBDIR_OPENVG): QMAKE_LIBDIR += -L$$QMAKE_LIBDIR_OPENVG -!isEmpty(QMAKE_LIBS_OPENVG): LIBS += $QMAKE_LIBS_OPENVG +!isEmpty(QMAKE_LIBS_OPENVG): LIBS += $$QMAKE_LIBS_OPENVG + +contains(QT_CONFIG, egl) { + !isEmpty(QMAKE_INCDIR_EGL): INCLUDEPATH += $$QMAKE_INCDIR_EGL + !isEmpty(QMAKE_LIBDIR_EGL): LIBS += -L$$QMAKE_LIBDIR_EGL + !isEmpty(QMAKE_LIBS_EGL): LIBS += $$QMAKE_LIBS_EGL +} contains(QT_CONFIG, openvg_on_opengl) { !isEmpty(QMAKE_INCDIR_OPENGL): INCLUDEPATH += $$QMAKE_INCDIR_OPENGL !isEmpty(QMAKE_LIBDIR_OPENGL): QMAKE_LIBDIR += -L$$QMAKE_LIBDIR_OPENGL - !isEmpty(QMAKE_LIBS_OPENGL): LIBS += $QMAKE_LIBS_OPENGL + !isEmpty(QMAKE_LIBS_OPENGL): LIBS += $$QMAKE_LIBS_OPENGL } diff --git a/qmake/Makefile.unix b/qmake/Makefile.unix index 7634021..dcdc805 100644 --- a/qmake/Makefile.unix +++ b/qmake/Makefile.unix @@ -12,7 +12,7 @@ OBJS=project.o property.o main.o makefile.o unixmake2.o unixmake.o \ borland_bmake.o msvc_dsp.o msvc_vcproj.o msvc_nmake.o msvc_objectmodel.o #qt code -QOBJS=qstring.o qtextstream.o qiodevice.o qmalloc.o qglobal.o \ +QOBJS=qtextcodec.o qutfcodec.o qstring.o qtextstream.o qiodevice.o qmalloc.o qglobal.o \ qbytearray.o qbytearraymatcher.o qdatastream.o qbuffer.o qlistdata.o qfile.o \ qfsfileengine_unix.o qfsfileengine_iterator_unix.o qfsfileengine.o \ qfsfileengine_iterator.o qregexp.o qvector.o qbitarray.o qdir.o qdiriterator.o quuid.o qhash.o \ @@ -44,6 +44,7 @@ DEPEND_SRC=project.cpp property.cpp meta.cpp main.cpp generators/makefile.cpp ge generators/mac/pbuilder_pbx.cpp generators/mac/xmloutput.cpp generators/metamakefile.cpp \ generators/makefiledeps.cpp option.cpp generators/win32/mingw_make.cpp generators/makefile.cpp \ generators/win32/msvc_objectmodel.cpp generators/win32/msvc_nmake.cpp generators/win32/borland_bmake.cpp \ + $(SOURCE_PATH)/src/corelib/codecs/qtextcodec.cpp $(SOURCE_PATH)/src/corelib/codecs/qutfcodec.cpp \ $(SOURCE_PATH)/src/corelib/tools/qstring.cpp $(SOURCE_PATH)/src/corelib/io/qfile.cpp \ $(SOURCE_PATH)/src/corelib/io/qtextstream.cpp $(SOURCE_PATH)/src/corelib/io/qiodevice.cpp \ $(SOURCE_PATH)/src/corelib/global/qmalloc.cpp \ @@ -160,6 +161,12 @@ qcore_mac.o: $(SOURCE_PATH)/src/corelib/kernel/qcore_mac.cpp qurl.o: $(SOURCE_PATH)/src/corelib/io/qurl.cpp $(CXX) -c -o $@ $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/io/qurl.cpp +qutfcodec.o: $(SOURCE_PATH)/src/corelib/codecs/qutfcodec.cpp + $(CXX) -c -o $@ $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/codecs/qutfcodec.cpp + +qtextcodec.o: $(SOURCE_PATH)/src/corelib/codecs/qtextcodec.cpp + $(CXX) -c -o $@ $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/codecs/qtextcodec.cpp + qstring.o: $(SOURCE_PATH)/src/corelib/tools/qstring.cpp $(CXX) -c -o $@ $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/tools/qstring.cpp diff --git a/qmake/Makefile.win32 b/qmake/Makefile.win32 index 53130aa..6340814 100644 --- a/qmake/Makefile.win32 +++ b/qmake/Makefile.win32 @@ -108,6 +108,8 @@ QTOBJS= \ qmalloc.obj \ qmap.obj \ qregexp.obj \ + qtextcodec.obj \ + qutfcodec.obj \ qstring.obj \ qstringlist.obj \ qtextstream.obj \ @@ -194,6 +196,8 @@ clean:: -del qmalloc.obj -del qmap.obj -del qregexp.obj + -del qtextcodec.obj + -del qutfcodec.obj -del qstring.obj -del qstringlist.obj -del qtextstream.obj @@ -337,6 +341,9 @@ qbytearraymatcher.obj: $(SOURCE_PATH)\src\corelib\tools\qbytearraymatcher.cpp qchar.obj: $(SOURCE_PATH)\src\corelib\tools\qchar.cpp $(CXX) $(CXXFLAGS) $(SOURCE_PATH)\src\corelib\tools\qchar.cpp +qutfcodec.obj: $(SOURCE_PATH)\src\corelib\codecs\qutfcodec.cpp + $(CXX) $(CXXFLAGS) $(SOURCE_PATH)\src\corelib\codecs\qutfcodec.cpp + qstring.obj: $(SOURCE_PATH)\src\corelib\tools\qstring.cpp $(CXX) $(CXXFLAGS) $(SOURCE_PATH)\src\corelib\tools\qstring.cpp @@ -379,8 +386,8 @@ qfsfileengine_iterator.obj: $(SOURCE_PATH)\src\corelib\io\qfsfileengine_iterator qabstractfileengine.obj: $(SOURCE_PATH)\src\corelib\io\qabstractfileengine.cpp $(CXX) $(CXXFLAGS) $(SOURCE_PATH)\src\corelib\io\qabstractfileengine.cpp -qtextcodec.obj: $(SOURCE_PATH)\src\codecs\qtextcodec.cpp - $(CXX) $(CXXFLAGS) $(SOURCE_PATH)\src\codecs\qtextcodec.cpp +qtextcodec.obj: $(SOURCE_PATH)\src\corelib\codecs\qtextcodec.cpp + $(CXX) $(CXXFLAGS) $(SOURCE_PATH)\src\corelib\codecs\qtextcodec.cpp qregexp.obj: $(SOURCE_PATH)\src\corelib\tools\qregexp.cpp $(CXX) $(CXXFLAGS) $(SOURCE_PATH)\src\corelib\tools\qregexp.cpp diff --git a/qmake/Makefile.win32-g++ b/qmake/Makefile.win32-g++ index 229a456..9439f40 100644 --- a/qmake/Makefile.win32-g++ +++ b/qmake/Makefile.win32-g++ @@ -71,6 +71,8 @@ QTOBJS= \ qmalloc.o \ qmap.o \ qregexp.o \ + qtextcodec.o \ + qutfcodec.o \ qstring.o \ qstringlist.o \ qtextstream.o \ @@ -192,6 +194,9 @@ qvsnprintf.o: $(SOURCE_PATH)/src/corelib/tools/qvsnprintf.cpp qbytearraymatcher.o: $(SOURCE_PATH)/src/corelib/tools/qbytearraymatcher.cpp $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/tools/qbytearraymatcher.cpp +qutfcodec.o: $(SOURCE_PATH)/src/corelib/codecs/qutfcodec.cpp + $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/codecs/qutfcodec.cpp + qstring.o: $(SOURCE_PATH)/src/corelib/tools/qstring.cpp $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/tools/qstring.cpp @@ -231,8 +236,8 @@ qfsfileengine.o: $(SOURCE_PATH)/src/corelib/io/qfsfileengine.cpp qfsfileengine_iterator.o: $(SOURCE_PATH)/src/corelib/io/qfsfileengine_iterator.cpp $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/io/qfsfileengine_iterator.cpp -qtextcodec.o: $(SOURCE_PATH)/src/codecs/qtextcodec.cpp - $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/codecs/qtextcodec.cpp +qtextcodec.o: $(SOURCE_PATH)/src/corelib/codecs/qtextcodec.cpp + $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/codecs/qtextcodec.cpp qregexp.o: $(SOURCE_PATH)/src/corelib/tools/qregexp.cpp $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/tools/qregexp.cpp diff --git a/qmake/Makefile.win32-g++-sh b/qmake/Makefile.win32-g++-sh index 3f1b1df..a0e981e 100644 --- a/qmake/Makefile.win32-g++-sh +++ b/qmake/Makefile.win32-g++-sh @@ -71,6 +71,8 @@ QTOBJS= \ qmalloc.o \ qmap.o \ qregexp.o \ + qtextcodec.o \ + qutfcodec.o \ qstring.o \ qstringlist.o \ qtextstream.o \ @@ -191,6 +193,9 @@ qvsnprintf.o: $(SOURCE_PATH)/src/corelib/tools/qvsnprintf.cpp qbytearraymatcher.o: $(SOURCE_PATH)/src/corelib/tools/qbytearraymatcher.cpp $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/tools/qbytearraymatcher.cpp +qutfcodec.o: $(SOURCE_PATH)/src/corelib/codecs/qutfcodec.cpp + $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/codecs/qutfcodec.cpp + qstring.o: $(SOURCE_PATH)/src/corelib/tools/qstring.cpp $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/tools/qstring.cpp @@ -230,8 +235,8 @@ qfsfileengine.o: $(SOURCE_PATH)/src/corelib/io/qfsfileengine.cpp qfsfileengine_iterator.o: $(SOURCE_PATH)/src/corelib/io/qfsfileengine_iterator.cpp $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/io/qfsfileengine_iterator.cpp -qtextcodec.o: $(SOURCE_PATH)/src/codecs/qtextcodec.cpp - $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/codecs/qtextcodec.cpp +qtextcodec.o: $(SOURCE_PATH)/src/corelib/codecs/qtextcodec.cpp + $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/codecs/qtextcodec.cpp qregexp.o: $(SOURCE_PATH)/src/corelib/tools/qregexp.cpp $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/tools/qregexp.cpp diff --git a/qmake/generators/makefile.cpp b/qmake/generators/makefile.cpp index d6bb652..6658213 100644 --- a/qmake/generators/makefile.cpp +++ b/qmake/generators/makefile.cpp @@ -121,7 +121,7 @@ bool MakefileGenerator::mkdir(const QString &in_path) const QDir d; if(path.startsWith(QDir::separator())) { d.cd(QString(QDir::separator())); - path = path.right(path.length() - 1); + path.remove(0, 1); } bool ret = true; #ifdef Q_OS_WIN @@ -129,7 +129,7 @@ bool MakefileGenerator::mkdir(const QString &in_path) const if(!QDir::isRelativePath(path)) { if(QFile::exists(path.left(3))) { d.cd(path.left(3)); - path = path.right(path.length() - 3); + path.remove(0, 3); } else { warn_msg(WarnLogic, "Cannot access drive '%s' (%s)", path.left(3).toLatin1().data(), path.toLatin1().data()); @@ -201,13 +201,13 @@ MakefileGenerator::initOutPaths() if(Option::mkfile::do_cache && !Option::mkfile::cachefile.isEmpty() && v.contains("QMAKE_ABSOLUTE_SOURCE_ROOT")) { QString root = v["QMAKE_ABSOLUTE_SOURCE_ROOT"].first(); - root = Option::fixPathToTargetOS(root); + root = QDir::fromNativeSeparators(root); if(!root.isEmpty()) { QFileInfo fi = fileInfo(Option::mkfile::cachefile); if(!fi.makeAbsolute()) { QString cache_r = fi.path(), pwd = Option::output_dir; if(pwd.startsWith(cache_r) && !pwd.startsWith(root)) { - pwd = Option::fixPathToTargetOS(root + pwd.mid(cache_r.length())); + pwd = root + pwd.mid(cache_r.length()); if(exists(pwd)) v.insert("QMAKE_ABSOLUTE_SOURCE_PATH", QStringList(pwd)); } @@ -217,7 +217,7 @@ MakefileGenerator::initOutPaths() } if(!v["QMAKE_ABSOLUTE_SOURCE_PATH"].isEmpty()) { QString &asp = v["QMAKE_ABSOLUTE_SOURCE_PATH"].first(); - asp = Option::fixPathToTargetOS(asp); + asp = QDir::fromNativeSeparators(asp); if(asp.isEmpty() || asp == Option::output_dir) //if they're the same, why bother? v["QMAKE_ABSOLUTE_SOURCE_PATH"].clear(); } @@ -243,7 +243,7 @@ MakefileGenerator::initOutPaths() if(!(dirs[x] == "DLLDESTDIR")) #endif { - if(pathRef.right(Option::dir_sep.length()) != Option::dir_sep) + if(!pathRef.endsWith(Option::dir_sep)) pathRef += Option::dir_sep; } @@ -344,7 +344,7 @@ MakefileGenerator::findFilesInVPATH(QStringList l, uchar flags, const QString &v QString real_dir = Option::fixPathToLocalOS((*vpath_it)); if(exists(real_dir + QDir::separator() + val)) { QString dir = (*vpath_it); - if(dir.right(Option::dir_sep.length()) != Option::dir_sep) + if(!dir.endsWith(Option::dir_sep)) dir += Option::dir_sep; val = dir + val; if(!(flags & VPATH_NoFixify)) @@ -363,7 +363,7 @@ MakefileGenerator::findFilesInVPATH(QStringList l, uchar flags, const QString &v real_dir = dir; if(!(flags & VPATH_NoFixify)) real_dir = fileFixify(real_dir, qmake_getpwd(), Option::output_dir); - regex = regex.right(regex.length() - dir.length()); + regex.remove(0, dir.length()); } if(real_dir.isEmpty() || exists(real_dir)) { QStringList files = QDir(real_dir).entryList(QStringList(regex)); @@ -723,14 +723,14 @@ MakefileGenerator::init() if(project->isActiveConfig("qmake_cache")) { QString cache_file; if(!project->isEmpty("QMAKE_INTERNAL_CACHE_FILE")) { - cache_file = Option::fixPathToLocalOS(project->first("QMAKE_INTERNAL_CACHE_FILE")); + cache_file = QDir::fromNativeSeparators(project->first("QMAKE_INTERNAL_CACHE_FILE")); } else { cache_file = ".qmake.internal.cache"; if(project->isActiveConfig("build_pass")) cache_file += ".BUILD." + project->first("BUILD_PASS"); } - if(cache_file.indexOf(QDir::separator()) == -1) - cache_file.prepend(Option::output_dir + QDir::separator()); + if(cache_file.indexOf('/') == -1) + cache_file.prepend(Option::output_dir + '/'); QMakeSourceFileInfo::setCacheFile(cache_file); } @@ -787,7 +787,7 @@ MakefileGenerator::init() QString dir, regex = Option::fixPathToLocalOS((*dep_it)); if(regex.lastIndexOf(Option::dir_sep) != -1) { dir = regex.left(regex.lastIndexOf(Option::dir_sep) + 1); - regex = regex.right(regex.length() - dir.length()); + regex.remove(0, dir.length()); } QStringList files = QDir(dir).entryList(QStringList(regex)); if(files.isEmpty()) { @@ -937,7 +937,7 @@ MakefileGenerator::writePrlFile(QTextStream &t) QString target = project->first("TARGET"); int slsh = target.lastIndexOf(Option::dir_sep); if(slsh != -1) - target = target.right(target.length() - slsh - 1); + target.remove(0, slsh + 1); QString bdir = Option::output_dir; if(bdir.isEmpty()) bdir = qmake_getpwd(); @@ -1055,11 +1055,11 @@ MakefileGenerator::prlFileName(bool fixify) ret = project->first("TARGET"); int slsh = ret.lastIndexOf(Option::dir_sep); if(slsh != -1) - ret = ret.right(ret.length() - slsh); + ret.remove(0, slsh); if(!ret.endsWith(Option::prl_ext)) { int dot = ret.indexOf('.'); if(dot != -1) - ret = ret.left(dot); + ret.truncate(dot); ret += Option::prl_ext; } if(!project->isEmpty("QMAKE_BUNDLE")) @@ -1209,7 +1209,7 @@ MakefileGenerator::writeInstalls(QTextStream &t, const QString &installs, bool n if(project->values((*it) + ".CONFIG").indexOf("no_path") == -1 && project->values((*it) + ".CONFIG").indexOf("dummy_install") == -1) { dst = fileFixify(unescapeFilePath(project->values(pvar).first()), FileFixifyAbsolute, false); - if(dst.right(1) != Option::dir_sep) + if(!dst.endsWith(Option::dir_sep)) dst += Option::dir_sep; } dst = escapeFilePath(dst); @@ -1238,9 +1238,9 @@ MakefileGenerator::writeInstalls(QTextStream &t, const QString &installs, bool n int slsh = filestr.lastIndexOf(Option::dir_sep); if(slsh != -1) { dirstr = filestr.left(slsh+1); - filestr = filestr.right(filestr.length() - slsh - 1); + filestr.remove(0, slsh+1); } - if(dirstr.right(Option::dir_sep.length()) != Option::dir_sep) + if(!dirstr.endsWith(Option::dir_sep)) dirstr += Option::dir_sep; if(exists(wild)) { //real file QString file = wild; @@ -1340,7 +1340,7 @@ MakefileGenerator::writeInstalls(QTextStream &t, const QString &installs, bool n const QStringList &dirs = project->values(pvar); for(QStringList::ConstIterator pit = dirs.begin(); pit != dirs.end(); ++pit) { QString tmp_dst = fileFixify((*pit), FileFixifyAbsolute, false); - if (!isWindowsShell() && tmp_dst.right(1) != Option::dir_sep) + if (!isWindowsShell() && !tmp_dst.endsWith(Option::dir_sep)) tmp_dst += Option::dir_sep; t << mkdir_p_asstring(filePrefixRoot(root, tmp_dst)) << "\n\t"; } @@ -2215,8 +2215,8 @@ MakefileGenerator::writeSubDirs(QTextStream &t) st->profile = file.section(Option::dir_sep, -1) + Option::pro_ext; st->in_directory = file; } - while(st->in_directory.right(1) == Option::dir_sep) - st->in_directory = st->in_directory.left(st->in_directory.length() - 1); + while(st->in_directory.endsWith(Option::dir_sep)) + st->in_directory.chop(1); if(fileInfo(st->in_directory).isRelative()) st->out_directory = st->in_directory; else @@ -2288,7 +2288,7 @@ MakefileGenerator::writeSubTargets(QTextStream &t, QList<MakefileGenerator::SubT QString ofile = Option::fixPathToTargetOS(Option::output.fileName()); if(ofile.lastIndexOf(Option::dir_sep) != -1) - ofile = ofile.right(ofile.length() - ofile.lastIndexOf(Option::dir_sep) -1); + ofile.remove(0, ofile.lastIndexOf(Option::dir_sep) +1); t << "MAKEFILE = " << ofile << endl; /* Calling Option::fixPathToTargetOS() is necessary for MinGW/MSYS, which requires * back-slashes to be turned into slashes. */ @@ -2727,11 +2727,13 @@ MakefileGenerator::fileFixify(const QString& file, const QString &out_d, const Q return cacheVal; //do the fixin' - const QString pwd = qmake_getpwd() + "/"; + QString pwd = qmake_getpwd(); + if (!pwd.endsWith('/')) + pwd += '/'; QString orig_file = ret; if(ret.startsWith(QLatin1Char('~'))) { if(ret.startsWith(QLatin1String("~/"))) - ret = QDir::homePath() + Option::dir_sep + ret.mid(1); + ret = QDir::homePath() + ret.mid(1); else warn_msg(WarnLogic, "Unable to expand ~ in %s", ret.toLatin1().constData()); } @@ -2820,13 +2822,13 @@ MakefileGenerator::checkMultipleDefinition(const QString &f, const QString &w) QString file = f; int slsh = f.lastIndexOf(Option::dir_sep); if(slsh != -1) - file = file.right(file.length() - slsh - 1); + file.remove(0, slsh + 1); QStringList &l = project->values(w); for(QStringList::Iterator val_it = l.begin(); val_it != l.end(); ++val_it) { QString file2((*val_it)); slsh = file2.lastIndexOf(Option::dir_sep); if(slsh != -1) - file2 = file2.right(file2.length() - slsh - 1); + file2.remove(0, slsh + 1); if(file2 == file) { warn_msg(WarnLogic, "Found potential symbol conflict of %s (%s) in %s", file.toLatin1().constData(), (*val_it).toLatin1().constData(), w.toLatin1().constData()); @@ -2980,7 +2982,7 @@ MakefileGenerator::openOutput(QFile &file, const QString &build) const file.setFileName(Option::output_dir + "/" + file.fileName()); //pwd when qmake was run QFileInfo fi(fileInfo(file.fileName())); if(fi.isDir()) - outdir = file.fileName() + QDir::separator(); + outdir = file.fileName() + '/'; } if(!outdir.isEmpty() || file.fileName().isEmpty()) { QString fname = "Makefile"; @@ -3000,7 +3002,7 @@ MakefileGenerator::openOutput(QFile &file, const QString &build) const file.setFileName(file.fileName() + "." + build); if(project->isEmpty("QMAKE_MAKEFILE")) project->values("QMAKE_MAKEFILE").append(file.fileName()); - int slsh = file.fileName().lastIndexOf(Option::dir_sep); + int slsh = file.fileName().lastIndexOf('/'); if(slsh != -1) mkdir(file.fileName().left(slsh)); if(file.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate)) { @@ -3010,9 +3012,13 @@ MakefileGenerator::openOutput(QFile &file, const QString &build) const od = fileInfo(fi.readLink()).absolutePath(); else od = fi.path(); - od = Option::fixPathToTargetOS(od); - if(QDir::isRelativePath(od)) - od.prepend(Option::output_dir); + od = QDir::fromNativeSeparators(od); + if(QDir::isRelativePath(od)) { + QString dir = Option::output_dir; + if (!dir.endsWith('/') && !od.isEmpty()) + dir += '/'; + od.prepend(dir); + } Option::output_dir = od; return true; } diff --git a/qmake/generators/metamakefile.cpp b/qmake/generators/metamakefile.cpp index 7f4e914..34d3698 100644 --- a/qmake/generators/metamakefile.cpp +++ b/qmake/generators/metamakefile.cpp @@ -293,9 +293,9 @@ SubdirsMetaMakefileGenerator::init() init_flag = true; if(Option::recursive) { - QString old_output_dir = QDir::cleanPath(Option::output_dir); + QString old_output_dir = Option::output_dir; QString old_output = Option::output.fileName(); - QString oldpwd = QDir::cleanPath(qmake_getpwd()); + QString oldpwd = qmake_getpwd(); QString thispwd = oldpwd; if(!thispwd.endsWith('/')) thispwd += '/'; diff --git a/qmake/qmake.pri b/qmake/qmake.pri index 9147ee8..9ba8506 100644 --- a/qmake/qmake.pri +++ b/qmake/qmake.pri @@ -53,6 +53,8 @@ bootstrap { #Qt code qmap.cpp \ qmetatype.cpp \ qregexp.cpp \ + qtextcodec.cpp \ + qutfcodec.cpp \ qstring.cpp \ qstringlist.cpp \ qtemporaryfile.cpp \ @@ -90,6 +92,8 @@ bootstrap { #Qt code qmap.h \ qmetatype.h \ qregexp.h \ + qtextcodec.h \ + qutfcodec.h \ qstring.h \ qstringlist.h \ qstringmatcher.h \ diff --git a/src/3rdparty/harfbuzz/src/harfbuzz-gpos.c b/src/3rdparty/harfbuzz/src/harfbuzz-gpos.c index 1ac3779..c932ec2 100644 --- a/src/3rdparty/harfbuzz/src/harfbuzz-gpos.c +++ b/src/3rdparty/harfbuzz/src/harfbuzz-gpos.c @@ -2723,7 +2723,7 @@ static HB_Error Load_Mark2Array( HB_Mark2Array* m2a, { HB_Error error; - HB_UShort k, m, n, count; + HB_UShort m, n, count; HB_UInt cur_offset, new_offset, base_offset; HB_Mark2Record *m2r; diff --git a/src/3rdparty/phonon/ds9/backend.cpp b/src/3rdparty/phonon/ds9/backend.cpp index 245749a..2c56af7 100644 --- a/src/3rdparty/phonon/ds9/backend.cpp +++ b/src/3rdparty/phonon/ds9/backend.cpp @@ -50,7 +50,7 @@ namespace Phonon Backend::Backend(QObject *parent, const QVariantList &) : QObject(parent) { - ::CoInitialize(0); + ::CoInitialize(0); //registering meta types qRegisterMetaType<HRESULT>("HRESULT"); @@ -61,7 +61,7 @@ namespace Phonon { m_audioOutputs.clear(); m_audioEffects.clear(); - ::CoUninitialize(); + ::CoUninitialize(); } QObject *Backend::createObject(BackendInterface::Class c, QObject *parent, const QList<QVariant> &args) @@ -216,7 +216,7 @@ namespace Phonon LPOLESTR str = 0; HRESULT hr = mon->GetDisplayName(0,0, &str); if (SUCCEEDED(hr)) { - QString name = QString::fromUtf16((unsigned short*)str); + QString name = QString::fromUtf16((unsigned short*)str); ComPointer<IMalloc> alloc; ::CoGetMalloc(1, alloc.pparam()); alloc->Free(str); diff --git a/src/3rdparty/phonon/ds9/backendnode.cpp b/src/3rdparty/phonon/ds9/backendnode.cpp index 7e0b3cd..855357a 100644 --- a/src/3rdparty/phonon/ds9/backendnode.cpp +++ b/src/3rdparty/phonon/ds9/backendnode.cpp @@ -57,6 +57,8 @@ namespace Phonon BackendNode::~BackendNode() { + //this will remove the filter from the graph + mediaObjectDestroyed(); } void BackendNode::setMediaObject(MediaObject *mo) diff --git a/src/3rdparty/phonon/ds9/mediaobject.cpp b/src/3rdparty/phonon/ds9/mediaobject.cpp index f77bdc1..df42011 100644 --- a/src/3rdparty/phonon/ds9/mediaobject.cpp +++ b/src/3rdparty/phonon/ds9/mediaobject.cpp @@ -36,7 +36,7 @@ along with this library. If not, see <http://www.gnu.org/licenses/>. #include <QtCore/QDebug> -#define TIMER_INTERVAL 16 //... ms for the timer that polls the current state (we use the multimedia timer +#define TIMER_INTERVAL 16 //... ms for the timer that polls the current state (we use the multimedia timer) #define PRELOAD_TIME 2000 // 2 seconds to load a source QT_BEGIN_NAMESPACE @@ -89,7 +89,7 @@ namespace Phonon DWORD result = ::WaitForMultipleObjects(count, handles, FALSE, INFINITE); if (result == WAIT_OBJECT_0) { if (m_finished) { - //that's the end if the thread execution + //that's the end of the thread execution return; } @@ -210,7 +210,7 @@ namespace Phonon { QMutexLocker locker(&m_mutex); m_currentRender = w.graph; - m_currentRenderId = w.id; + m_currentRenderId = w.id; } if (w.task == ReplaceGraph) { @@ -253,7 +253,7 @@ namespace Phonon hr = w.graph->RenderFile(reinterpret_cast<const wchar_t *>(w.url.utf16()), 0); } if (hr != E_ABORT) { - emit asyncRenderFinished(w.id, hr, w.graph); + emit asyncRenderFinished(w.id, hr, w.graph); } } else if (w.task == Seek) { //that's a seekrequest @@ -269,7 +269,7 @@ namespace Phonon } } emit asyncSeekingFinished(w.id, currentTime); - hr = E_ABORT; //to avoid emitting asyncRenderFinished + hr = E_ABORT; //to avoid emitting asyncRenderFinished } else if (w.task == ChangeState) { //remove useless decoders @@ -330,16 +330,14 @@ namespace Phonon { QMutexLocker locker(&m_mutex); m_currentRender = Graph(); - m_currentRenderId = 0; + m_currentRenderId = 0; } - } - void WorkerThread::abortCurrentRender(qint16 renderId) - { + void WorkerThread::abortCurrentRender(qint16 renderId) + { QMutexLocker locker(&m_mutex); bool found = false; - //we try to see if there is already an attempt to seek and we remove it for(int i = 0; !found && i < m_queue.size(); ++i) { const Work &w = m_queue.at(i); if (w.id == renderId) { @@ -348,10 +346,10 @@ namespace Phonon } } - if (m_currentRender && m_currentRenderId == renderId) { - m_currentRender->Abort(); - } - } + if (m_currentRender && m_currentRenderId == renderId) { + m_currentRender->Abort(); + } + } //tells the thread to stop processing void WorkerThread::signalStop() @@ -389,13 +387,13 @@ namespace Phonon { for(int i = 0; i < FILTER_COUNT; ++i) { - m_graphs[i] = new MediaGraph(this, i); + m_graphs[i] = new MediaGraph(this, i); } - connect(&m_thread, SIGNAL(stateReady(Graph, Phonon::State)), + connect(&m_thread, SIGNAL(stateReady(Graph, Phonon::State)), SLOT(slotStateReady(Graph, Phonon::State))); - connect(&m_thread, SIGNAL(eventReady(Graph, long, long)), + connect(&m_thread, SIGNAL(eventReady(Graph, long, long)), SLOT(handleEvents(Graph, long, long))); connect(&m_thread, SIGNAL(asyncRenderFinished(quint16, HRESULT, Graph)), @@ -490,7 +488,7 @@ namespace Phonon } if (!m_aboutToFinishSent && remaining < PRELOAD_TIME - m_transitionTime + TIMER_INTERVAL/2) { - //let's take a 2 seconds time time to actually load the next file + //let's take a 2 seconds time to actually load the next file #ifdef GRAPH_DEBUG qDebug() << "DS9: emit aboutToFinish" << remaining << QTime::currentTime().toString(); #endif @@ -579,7 +577,7 @@ namespace Phonon { #ifndef QT_NO_PHONON_MEDIACONTROLLER //1st, check if there is more titles after - const qint64 ret = (m_currentTitle < _iface_availableTitles() - 1) ? + const qint64 ret = (m_currentTitle < _iface_availableTitles() - 1) ? titleAbsolutePosition(m_currentTitle+1) : currentGraph()->absoluteTotalTime(); //this is the duration of the current title @@ -592,7 +590,7 @@ namespace Phonon qint64 MediaObject::currentTime() const { //this handles inaccuracy when stopping on a title - return currentGraph()->absoluteCurrentTime() + return currentGraph()->absoluteCurrentTime() #ifndef QT_NO_PHONON_MEDIACONTROLLER - titleAbsolutePosition(m_currentTitle) #endif //QT_NO_PHONON_MEDIACONTROLLER @@ -742,7 +740,7 @@ namespace Phonon m_oldHasVideo = currentGraph()->hasVideo(); setState(Phonon::LoadingState); //After loading we go into stopped state - m_nextState = Phonon::StoppedState; + m_nextState = Phonon::StoppedState; catchComError(currentGraph()->loadSource(source)); emit currentSourceChanged(source); } @@ -756,7 +754,7 @@ namespace Phonon void MediaObject::loadingFinished(MediaGraph *mg) { - if (mg == currentGraph()) { + if (mg == currentGraph()) { #ifndef QT_NO_PHONON_MEDIACONTROLLER //Title interface m_currentTitle = 0; @@ -813,7 +811,7 @@ namespace Phonon void MediaObject::seekingFinished(MediaGraph *mg) { - if (mg == currentGraph()) { + if (mg == currentGraph()) { updateTargetTick(); if (currentTime() < totalTime() - m_prefinishMark) { @@ -888,7 +886,7 @@ namespace Phonon #ifndef QT_NO_PHONON_VIDEO if (VideoWidget *video = qobject_cast<VideoWidget*>(sink)) { m_videoWidgets += video; - } else + } else #endif //QT_NO_PHONON_VIDEO if (AudioOutput *audio = qobject_cast<AudioOutput*>(sink)) { m_audioOutputs += audio; @@ -907,7 +905,7 @@ namespace Phonon #ifndef QT_NO_PHONON_VIDEO if (VideoWidget *video = qobject_cast<VideoWidget*>(sink)) { m_videoWidgets.removeOne(video); - } else + } else #endif //QT_NO_PHONON_VIDEO if (AudioOutput *audio = qobject_cast<AudioOutput*>(sink)) { m_audioOutputs.removeOne(audio); @@ -989,7 +987,7 @@ namespace Phonon emit stateChanged(state(), m_state); } break; - case EC_LENGTH_CHANGED: + case EC_LENGTH_CHANGED: if (graph == currentGraph()->graph()) { emit totalTimeChanged( totalTime() ); } diff --git a/src/3rdparty/phonon/ds9/qmeminputpin.cpp b/src/3rdparty/phonon/ds9/qmeminputpin.cpp index 0af1bfd..dca99db 100644 --- a/src/3rdparty/phonon/ds9/qmeminputpin.cpp +++ b/src/3rdparty/phonon/ds9/qmeminputpin.cpp @@ -28,7 +28,7 @@ namespace Phonon namespace DS9 { - QMemInputPin::QMemInputPin(QBaseFilter *parent, const QVector<AM_MEDIA_TYPE> &mt, bool transform) : + QMemInputPin::QMemInputPin(QBaseFilter *parent, const QVector<AM_MEDIA_TYPE> &mt, bool transform) : QPin(parent, PINDIR_INPUT, mt), m_shouldDuplicateSamples(true), m_transform(transform) { } @@ -203,7 +203,7 @@ namespace Phonon for (int i = 0; i < m_outputs.count(); ++i) { QPin *current = m_outputs.at(i); - IMediaSample *outSample = m_shouldDuplicateSamples ? + IMediaSample *outSample = m_shouldDuplicateSamples ? duplicateSampleForOutput(sample, current->memoryAllocator()) : sample; @@ -261,7 +261,7 @@ namespace Phonon } //addition - //this should be used by the filter to tell it's input pins to which output they should route the samples + //this should be used by the filter to tell its input pins to which output they should route the samples void QMemInputPin::addOutput(QPin *output) { diff --git a/src/3rdparty/phonon/ds9/qpin.cpp b/src/3rdparty/phonon/ds9/qpin.cpp index 5f335ac..68a4ec0 100644 --- a/src/3rdparty/phonon/ds9/qpin.cpp +++ b/src/3rdparty/phonon/ds9/qpin.cpp @@ -303,9 +303,7 @@ namespace Phonon setConnected(0); setConnectedType(defaultMediaType); - if (m_direction == PINDIR_INPUT) { - setMemoryAllocator(0); - } + setMemoryAllocator(0); return S_OK; } @@ -443,8 +441,8 @@ namespace Phonon HRESULT QPin::checkOutputMediaTypesConnection(IPin *pin) { - IEnumMediaTypes *emt = 0; - HRESULT hr = pin->EnumMediaTypes(&emt); + ComPointer<IEnumMediaTypes> emt; + HRESULT hr = pin->EnumMediaTypes(emt.pparam()); if (hr != S_OK) { return hr; } diff --git a/src/3rdparty/phonon/phonon/backendcapabilities.h b/src/3rdparty/phonon/phonon/backendcapabilities.h index 65b2830..36454a3 100644 --- a/src/3rdparty/phonon/phonon/backendcapabilities.h +++ b/src/3rdparty/phonon/phonon/backendcapabilities.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Trolltech ASA (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. @@ -15,7 +15,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public + You should have received a copy of the GNU Lesser General Public License along with this library. If not, see <http://www.gnu.org/licenses/>. */ @@ -88,19 +88,18 @@ namespace BackendCapabilities }; /** - * Use this function to get a QObject pointer to connect to the capabilitiesChanged signal. + * Use this function to get a QObject pointer to connect to one of the Notifier signals. * * \return a pointer to a QObject. * - * The capabilitiesChanged signal is emitted if the capabilities have changed. This can - * happen if the user has requested a backend change. - * - * To connect to this signal do the following: + * To connect to the signal do the following: * \code * QObject::connect(BackendCapabilities::notifier(), SIGNAL(capabilitiesChanged()), ... * \endcode * * \see Notifier::capabilitiesChanged() + * \see Notifier::availableAudioOutputDevicesChanged() + * \see Notifier::availableAudioCaptureDevicesChanged() */ PHONON_EXPORT Notifier *notifier(); diff --git a/src/3rdparty/phonon/phonon/mediaobject.h b/src/3rdparty/phonon/phonon/mediaobject.h index 5cbddbb..c56b6b5 100644 --- a/src/3rdparty/phonon/phonon/mediaobject.h +++ b/src/3rdparty/phonon/phonon/mediaobject.h @@ -6,7 +6,7 @@ License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) version 3, or any later version accepted by the membership of KDE e.V. (or its - successor approved by the membership of KDE e.V.), Trolltech ASA + successor approved by the membership of KDE e.V.), Trolltech ASA (or its successors, if any) and the KDE Free Qt Foundation, which shall act as a proxy defined in Section 6 of version 3 of the license. @@ -15,7 +15,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public + You should have received a copy of the GNU Lesser General Public License along with this library. If not, see <http://www.gnu.org/licenses/>. */ @@ -58,7 +58,7 @@ namespace Phonon * media->play(); * \endcode * - * If you want to play more that one media file (one after another) you can + * If you want to play more than one media file (one after another) you can * either tell MediaObject about all those files * \code * media->setCurrentSource(":/sounds/startsound.ogg"); @@ -198,18 +198,18 @@ namespace Phonon * Check whether the current media may be seeked. * * \warning This information cannot be known immediately. It is best - * to also listen to the hasVideoChanged signal. + * to also listen to the seekableChanged signal. * * \code - * connect(media, SIGNAL(hasVideoChanged(bool)), hasVideoChanged(bool)); + * connect(media, SIGNAL(seekableChanged(bool)), seekableChanged(bool)); * media->setCurrentSource("somevideo.avi"); - * media->hasVideo(); // returns false; + * media->isSeekable(); // returns false; * } * - * void hasVideoChanged(bool b) + * void seekableChanged(bool b) * { * // b == true - * media->hasVideo(); // returns true; + * media->isSeekable(); // returns true; * } * \endcode * @@ -301,7 +301,7 @@ namespace Phonon void setCurrentSource(const MediaSource &source); /** - * Returns the queued media sources. This does list does not include + * Returns the queued media sources. This list does not include * the current source (returned by currentSource). */ QList<MediaSource> queue() const; @@ -456,8 +456,6 @@ namespace Phonon Q_SIGNALS: /** * Emitted when the state of the MediaObject has changed. - * In case you're not interested in the old state you can also - * connect to a slot that only has one State argument. * * @param newstate The state the Player is in now. * @param oldstate The state the Player was in before. @@ -587,7 +585,7 @@ namespace Phonon /** * This signal is emitted as soon as the total time of the media file is * known or has changed. For most non-local media data the total - * time of the media can only be known after some time. At that time the + * time of the media can only be known after some time. Initially the * totalTime function can not return useful information. You have * to wait for this signal to know the real total time. * diff --git a/src/3rdparty/webkit/WebCore/WebCore.pro b/src/3rdparty/webkit/WebCore/WebCore.pro index b76cad1..b0b0290 100644 --- a/src/3rdparty/webkit/WebCore/WebCore.pro +++ b/src/3rdparty/webkit/WebCore/WebCore.pro @@ -41,7 +41,7 @@ CONFIG -= warn_on # Disable a few warnings on Windows. The warnings are also # disabled in WebKitLibraries/win/tools/vsprops/common.vsprops -win32-*: QMAKE_CXXFLAGS += -wd4291 -wd4344 +!win32-g++:win32-*: QMAKE_CXXFLAGS += -wd4291 -wd4344 unix:!mac:*-g++*:QMAKE_CXXFLAGS += -ffunction-sections -fdata-sections unix:!mac:*-g++*:QMAKE_LFLAGS += -Wl,--gc-sections diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qwebdatabase.cpp b/src/3rdparty/webkit/WebKit/qt/Api/qwebdatabase.cpp index 2b25f95..0d11381 100644 --- a/src/3rdparty/webkit/WebKit/qt/Api/qwebdatabase.cpp +++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebdatabase.cpp @@ -34,9 +34,20 @@ using namespace WebCore; \brief The QWebDatabase class provides access to HTML 5 databases created with JavaScript. The upcoming HTML 5 standard includes support for SQL databases that web sites can create and - access on a local computer through JavaScript. QWebDatabase is the C++ interface to these databases. + access on a local computer through JavaScript. QWebDatabase is the C++ interface to these + databases. - For more information refer to the \l{http://www.w3.org/html/wg/html5/#sql}{HTML 5 Draft Standard}. + To get access to all databases defined by a security origin, use QWebSecurityOrigin::databases(). + Each database has an internal name(), as well as a user-friendly name, provided by displayName(). + + WebKit uses SQLite to create and access the local SQL databases. The location of the database + file in the local file system is returned by fileName(). You can access the database directly + through the QtSql database module. + + For each database the web site can define an expectedSize(). The current size of the database + in bytes is returned by size(). + + For more information refer to the \l{http://dev.w3.org/html5/webdatabase/}{HTML 5 Draft Standard}. \sa QWebSecurityOrigin */ @@ -127,7 +138,7 @@ QWebDatabase::QWebDatabase(QWebDatabasePrivate* priv) \endcode \note Concurrent access to a database from multiple threads or processes - is not very efficient because Sqlite is used as WebKit's database backend. + is not very efficient because SQLite is used as WebKit's database backend. */ QString QWebDatabase::fileName() const { @@ -149,8 +160,8 @@ QWebSecurityOrigin QWebDatabase::origin() const } /*! - Removes the database, \a db, from its security origin. All data stored in this database - will be destroyed. + Removes the database \a db from its security origin. All data stored in the + database \a db will be destroyed. */ void QWebDatabase::removeDatabase(const QWebDatabase &db) { diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp b/src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp index 84753bd..3c2151b 100644 --- a/src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp +++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp @@ -1315,6 +1315,8 @@ QWebFrame *QWebPage::currentFrame() const /*! + \since 4.6 + Returns the frame at the given point \a pos. \sa mainFrame(), currentFrame() diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qwebsecurityorigin.cpp b/src/3rdparty/webkit/WebKit/qt/Api/qwebsecurityorigin.cpp index da9278c..d2eaf10 100644 --- a/src/3rdparty/webkit/WebKit/qt/Api/qwebsecurityorigin.cpp +++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebsecurityorigin.cpp @@ -36,10 +36,9 @@ using namespace WebCore; \brief The QWebSecurityOrigin class defines a security boundary for web sites. QWebSecurityOrigin provides access to the security domains defined by web sites. - An origin consists of a host name, a scheme, and a port number. Web sites with the same - security origin can access each other's resources for client-side scripting or databases. - - ### diagram + An origin consists of a host name, a scheme, and a port number. Web sites + with the same security origin can access each other's resources for client-side + scripting or databases. For example the site \c{http://www.example.com/my/page.html} is allowed to share the same database as \c{http://www.example.com/my/overview.html}, or access each other's @@ -47,7 +46,13 @@ using namespace WebCore; \c{http://www.malicious.com/evil.html} from accessing \c{http://www.example.com/}'s resources, because they are of a different security origin. - QWebSecurity also provides access to all databases defined within a security origin. + Call QWebFrame::securityOrigin() to get the QWebSecurityOrigin for a frame in a + web page, and use host(), scheme() and port() to identify the security origin. + + Use databases() to access the databases defined within a security origin. The + disk usage of the origin's databases can be limited with setDatabaseQuota(). + databaseQuota() and databaseUsage() report the current limit as well as the + current usage. For more information refer to the \l{http://en.wikipedia.org/wiki/Same_origin_policy}{"Same origin policy" Wikipedia Article}. diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qwebview.cpp b/src/3rdparty/webkit/WebKit/qt/Api/qwebview.cpp index c634a7f..f5afbec 100644 --- a/src/3rdparty/webkit/WebKit/qt/Api/qwebview.cpp +++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebview.cpp @@ -270,19 +270,24 @@ void QWebView::setPage(QWebPage *page) 'ftp'. The result is then passed through QUrl's tolerant parser, and in the case or success, a valid QUrl is returned, or else a QUrl(). - Examples - - webkit.org becomes http://webkit.org - - ftp.webkit.org becomes ftp://ftp.webkit.org - - localhost becomes http://localhost - - /home/user/test.html becomes file:///home/user/test.html (if exists) - - Tips when dealing with URLs and strings - - When creating a QString from a QByteArray or a char*, always use - QString::fromUtf8(). - - Do not use QUrl(string), nor QUrl::toString() anywhere where the URL might - be used, such as in the location bar, as those functions loose data. - Instead use QUrl::fromEncoded() and QUrl::toEncoded(), respectively. + \section2 Examples: + + \list + \o webkit.org becomes http://webkit.org + \o ftp.webkit.org becomes ftp://ftp.webkit.org + \o localhost becomes http://localhost + \o /home/user/test.html becomes file:///home/user/test.html (if exists) + \endlist + \section2 Tips when dealing with URLs and strings: + + \list + \o When creating a QString from a QByteArray or a char*, always use + QString::fromUtf8(). + \o Do not use QUrl(string), nor QUrl::toString() anywhere where the URL might + be used, such as in the location bar, as those functions loose data. + Instead use QUrl::fromEncoded() and QUrl::toEncoded(), respectively. + \endlist */ QUrl QWebView::guessUrlFromString(const QString &string) { diff --git a/src/activeqt/container/qaxobject.cpp b/src/activeqt/container/qaxobject.cpp index 412c5b5..63bdd5e 100644 --- a/src/activeqt/container/qaxobject.cpp +++ b/src/activeqt/container/qaxobject.cpp @@ -122,7 +122,7 @@ QAxObject::~QAxObject() } /*! - \reimp + \internal */ const QMetaObject *QAxObject::metaObject() const { @@ -130,7 +130,7 @@ const QMetaObject *QAxObject::metaObject() const } /*! - \reimp + \internal */ const QMetaObject *QAxObject::parentMetaObject() const { @@ -148,7 +148,7 @@ void *QAxObject::qt_metacast(const char *cname) } /*! - \reimp + \internal */ const char *QAxObject::className() const { @@ -156,7 +156,7 @@ const char *QAxObject::className() const } /*! - \reimp + \internal */ int QAxObject::qt_metacall(QMetaObject::Call call, int id, void **v) { diff --git a/src/activeqt/container/qaxwidget.cpp b/src/activeqt/container/qaxwidget.cpp index 615887f..ae468ef 100644 --- a/src/activeqt/container/qaxwidget.cpp +++ b/src/activeqt/container/qaxwidget.cpp @@ -2034,7 +2034,7 @@ bool QAxWidget::doVerb(const QString &verb) */ /*! - \reimp + \internal */ const QMetaObject *QAxWidget::metaObject() const { @@ -2042,7 +2042,7 @@ const QMetaObject *QAxWidget::metaObject() const } /*! - \reimp + \internal */ const QMetaObject *QAxWidget::parentMetaObject() const { @@ -2060,7 +2060,7 @@ void *QAxWidget::qt_metacast(const char *cname) } /*! - \reimp + \internal */ const char *QAxWidget::className() const { @@ -2068,7 +2068,7 @@ const char *QAxWidget::className() const } /*! - \reimp + \internal */ int QAxWidget::qt_metacall(QMetaObject::Call call, int id, void **v) { diff --git a/src/corelib/animation/qabstractanimation.cpp b/src/corelib/animation/qabstractanimation.cpp index eb21cb2..62c55c3 100644 --- a/src/corelib/animation/qabstractanimation.cpp +++ b/src/corelib/animation/qabstractanimation.cpp @@ -620,8 +620,8 @@ void QAbstractAnimation::start(DeletionPolicy policy) Q_D(QAbstractAnimation); if (d->state == Running) return; - d->setState(Running); d->deleteWhenStopped = policy; + d->setState(Running); } /*! @@ -643,9 +643,8 @@ void QAbstractAnimation::stop() /*! Pauses the animation. When the animation is paused, state() returns Paused. - The currenttime will remain unchanged until resume() or start() is called. - If you want to continue from the current time, call resume(). - + The value of currentTime will remain unchanged until resume() or start() + is called. If you want to continue from the current time, call resume(). \sa start(), state(), resume() */ diff --git a/src/corelib/animation/qsequentialanimationgroup.cpp b/src/corelib/animation/qsequentialanimationgroup.cpp index 5932e7c..05dc307 100644 --- a/src/corelib/animation/qsequentialanimationgroup.cpp +++ b/src/corelib/animation/qsequentialanimationgroup.cpp @@ -269,8 +269,10 @@ QSequentialAnimationGroup::~QSequentialAnimationGroup() /*! Adds a pause of \a msecs to this animation group. - The pause is considered as a special type of animation, thus count() will be + The pause is considered as a special type of animation, thus + \l{QAnimationGroup::animationCount()}{animationCount} will be increased by one. + \sa insertPauseAt(), QAnimationGroup::addAnimation() */ QPauseAnimation *QSequentialAnimationGroup::addPause(int msecs) diff --git a/src/corelib/arch/qatomic_powerpc.h b/src/corelib/arch/qatomic_powerpc.h index ea3f458..c3b31f9 100644 --- a/src/corelib/arch/qatomic_powerpc.h +++ b/src/corelib/arch/qatomic_powerpc.h @@ -101,8 +101,6 @@ template <typename T> Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::isFetchAndAddWaitFree() { return false; } -QT_BEGIN_NAMESPACE - #if defined(Q_CC_GNU) #if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 2) \ diff --git a/src/corelib/codecs/qtextcodec.cpp b/src/corelib/codecs/qtextcodec.cpp index c4266a0..f49e34a 100644 --- a/src/corelib/codecs/qtextcodec.cpp +++ b/src/corelib/codecs/qtextcodec.cpp @@ -99,6 +99,10 @@ Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader, (QTextCodecFactoryInterface_iid, QLatin1String("/codecs"))) #endif +static char qtolower(register char c) +{ if (c >= 'A' && c <= 'Z') return c + 0x20; return c; } +static bool qisalnum(register char c) +{ return (c >= '0' && c <= '9') || ((c | 0x20) >= 'a' && (c | 0x20) <= 'z'); } static bool nameMatch(const QByteArray &name, const QByteArray &test) { @@ -111,21 +115,21 @@ static bool nameMatch(const QByteArray &name, const QByteArray &test) // if the letters and numbers are the same, we have a match while (*n != '\0') { - if (isalnum((uchar)*n)) { + if (qisalnum(*n)) { for (;;) { if (*h == '\0') return false; - if (isalnum((uchar)*h)) + if (qisalnum(*h)) break; ++h; } - if (tolower((uchar)*n) != tolower((uchar)*h)) + if (qtolower(*n) != qtolower(*h)) return false; ++h; } ++n; } - while (*h && !isalnum((uchar)*h)) + while (*h && !qisalnum(*h)) ++h; return (*h == '\0'); } @@ -1532,9 +1536,13 @@ QTextCodec *QTextCodec::codecForHtml(const QByteArray &ba, QTextCodec *defaultCo } /*! - \overload + \overload - If the codec cannot be detected, this overload returns a Latin-1 QTextCodec. + Tries to detect the encoding of the provided snippet of HTML in + the given byte array, \a ba, by checking the BOM (Byte Order Mark) + and the content-type meta header and returns a QTextCodec instance + that is capable of decoding the html to unicode. If the codec cannot + be detected, this overload returns a Latin-1 QTextCodec. */ QTextCodec *QTextCodec::codecForHtml(const QByteArray &ba) { @@ -1546,10 +1554,13 @@ QTextCodec *QTextCodec::codecForHtml(const QByteArray &ba) Tries to detect the encoding of the provided snippet \a ba by using the BOM (Byte Order Mark) and returns a QTextCodec instance - that is capable of decoding the text to unicode. If the codec + that is capable of decoding the text to unicode. If the codec cannot be detected from the content provided, \a defaultCodec is returned. + The behavior of this function is undefined if \a ba is not + encoded in unicode. + \sa codecForHtml() */ QTextCodec *QTextCodec::codecForUtfText(const QByteArray &ba, QTextCodec *defaultCodec) @@ -1587,9 +1598,17 @@ QTextCodec *QTextCodec::codecForUtfText(const QByteArray &ba, QTextCodec *defaul } /*! - \overload + \overload + + Tries to detect the encoding of the provided snippet \a ba by + using the BOM (Byte Order Mark) and returns a QTextCodec instance + that is capable of decoding the text to unicode. If the codec + cannot be detected, this overload returns a Latin-1 QTextCodec. + + The behavior of this function is undefined if \a ba is not + encoded in unicode. - If the codec cannot be detected, this overload returns a Latin-1 QTextCodec. + \sa codecForHtml() */ QTextCodec *QTextCodec::codecForUtfText(const QByteArray &ba) { diff --git a/src/corelib/codecs/qtextcodec_p.h b/src/corelib/codecs/qtextcodec_p.h index 499c0f9..5c82735 100644 --- a/src/corelib/codecs/qtextcodec_p.h +++ b/src/corelib/codecs/qtextcodec_p.h @@ -77,6 +77,33 @@ struct QTextCodecUnalignedPointer } }; +#else + +class QTextCodec +{ +public: + enum ConversionFlag { + DefaultConversion, + ConvertInvalidToNull = 0x80000000, + IgnoreHeader = 0x1, + FreeFunction = 0x2 + }; + Q_DECLARE_FLAGS(ConversionFlags, ConversionFlag) + + struct ConverterState { + ConverterState(ConversionFlags f = DefaultConversion) + : flags(f), remainingChars(0), invalidChars(0), d(0) { state_data[0] = state_data[1] = state_data[2] = 0; } + ~ConverterState() { } + ConversionFlags flags; + int remainingChars; + int invalidChars; + uint state_data[3]; + void *d; + private: + Q_DISABLE_COPY(ConverterState) + }; +}; + #endif //QT_NO_TEXTCODEC QT_END_NAMESPACE diff --git a/src/corelib/codecs/qutfcodec.cpp b/src/corelib/codecs/qutfcodec.cpp index abae6f7..abcc07c 100644 --- a/src/corelib/codecs/qutfcodec.cpp +++ b/src/corelib/codecs/qutfcodec.cpp @@ -44,23 +44,19 @@ #include "qendian.h" #include "qchar.h" -#ifndef QT_NO_TEXTCODEC - QT_BEGIN_NAMESPACE -QUtf8Codec::~QUtf8Codec() -{ -} +enum { Endian = 0, Data = 1 }; -QByteArray QUtf8Codec::convertFromUnicode(const QChar *uc, int len, ConverterState *state) const +QByteArray QUtf8::convertFromUnicode(const QChar *uc, int len, QTextCodec::ConverterState *state) { uchar replacement = '?'; int rlen = 3*len; int surrogate_high = -1; if (state) { - if (state->flags & ConvertInvalidToNull) + if (state->flags & QTextCodec::ConvertInvalidToNull) replacement = 0; - if (!(state->flags & IgnoreHeader)) + if (!(state->flags & QTextCodec::IgnoreHeader)) rlen += 3; if (state->remainingChars) surrogate_high = state->state_data[0]; @@ -71,7 +67,7 @@ QByteArray QUtf8Codec::convertFromUnicode(const QChar *uc, int len, ConverterSta uchar* cursor = (uchar*)rstr.data(); const QChar *ch = uc; int invalid = 0; - if (state && !(state->flags & IgnoreHeader)) { + if (state && !(state->flags & QTextCodec::IgnoreHeader)) { *cursor++ = 0xef; *cursor++ = 0xbb; *cursor++ = 0xbf; @@ -133,7 +129,7 @@ QByteArray QUtf8Codec::convertFromUnicode(const QChar *uc, int len, ConverterSta rstr.resize(cursor - (const uchar*)rstr.constData()); if (state) { state->invalidChars += invalid; - state->flags |= IgnoreHeader; + state->flags |= QTextCodec::IgnoreHeader; state->remainingChars = 0; if (surrogate_high >= 0) { state->remainingChars = 1; @@ -143,18 +139,18 @@ QByteArray QUtf8Codec::convertFromUnicode(const QChar *uc, int len, ConverterSta return rstr; } -void QUtf8Codec::convertToUnicode(QString *target, const char *chars, int len, ConverterState *state) const +QString QUtf8::convertToUnicode(const char *chars, int len, QTextCodec::ConverterState *state) { bool headerdone = false; - QChar replacement = QChar::ReplacementCharacter; + ushort replacement = QChar::ReplacementCharacter; int need = 0; int error = -1; uint uc = 0; uint min_uc = 0; if (state) { - if (state->flags & IgnoreHeader) + if (state->flags & QTextCodec::IgnoreHeader) headerdone = true; - if (state->flags & ConvertInvalidToNull) + if (state->flags & QTextCodec::ConvertInvalidToNull) replacement = QChar::Null; need = state->remainingChars; if (need) { @@ -170,40 +166,28 @@ void QUtf8Codec::convertToUnicode(QString *target, const char *chars, int len, C headerdone = true; } - int originalLength = target->length(); - QString &result = *target; - result.resize(originalLength + len + 1); // worst case - QChar *qch = result.data() + originalLength; + QString result(need + len + 1, Qt::Uninitialized); // worst case + ushort *qch = (ushort *)result.unicode(); uchar ch; int invalid = 0; - for (int i=0; i<len; i++) { + for (int i = 0; i < len; ++i) { ch = chars[i]; if (need) { if ((ch&0xc0) == 0x80) { uc = (uc << 6) | (ch & 0x3f); - need--; + --need; if (!need) { // utf-8 bom composes into 0xfeff code point if (!headerdone && uc == 0xfeff) { // dont do anything, just skip the BOM } else if (uc > 0xffff && uc < 0x110000) { // surrogate pair - uc -= 0x10000; - unsigned short high = uc/0x400 + 0xd800; - unsigned short low = uc%0x400 + 0xdc00; - - // resize if necessary - long where = qch - result.unicode(); - if (where + 2 >= result.length()) { - result.resize(where + 2); - qch = result.data() + where; - } - - *qch++ = QChar(high); - *qch++ = QChar(low); + Q_ASSERT((qch - (ushort*)result.unicode()) + 2 < result.length()); + *qch++ = QChar::highSurrogate(uc); + *qch++ = QChar::lowSurrogate(uc); } else if ((uc < min_uc) || (uc >= 0xd800 && uc <= 0xdfff) || (uc >= 0xfffe)) { - // error + // error: overlong sequence, UTF16 surrogate or BOM *qch++ = replacement; ++invalid; } else { @@ -221,7 +205,7 @@ void QUtf8Codec::convertToUnicode(QString *target, const char *chars, int len, C } } else { if (ch < 128) { - *qch++ = QLatin1Char(ch); + *qch++ = ushort(ch); headerdone = true; } else if ((ch & 0xe0) == 0xc0) { uc = ch & 0x1f; @@ -255,57 +239,35 @@ void QUtf8Codec::convertToUnicode(QString *target, const char *chars, int len, C ++invalid; } } - result.truncate(qch - result.unicode()); + result.truncate(qch - (ushort *)result.unicode()); if (state) { state->invalidChars += invalid; state->remainingChars = need; if (headerdone) - state->flags |= IgnoreHeader; + state->flags |= QTextCodec::IgnoreHeader; state->state_data[0] = need ? uc : 0; state->state_data[1] = need ? min_uc : 0; } -} - -QString QUtf8Codec::convertToUnicode(const char *chars, int len, ConverterState *state) const -{ - QString result; - convertToUnicode(&result, chars, len, state); return result; } -QByteArray QUtf8Codec::name() const -{ - return "UTF-8"; -} - -int QUtf8Codec::mibEnum() const -{ - return 106; -} - -enum { Endian = 0, Data = 1 }; - -QUtf16Codec::~QUtf16Codec() -{ -} - -QByteArray QUtf16Codec::convertFromUnicode(const QChar *uc, int len, ConverterState *state) const +QByteArray QUtf16::convertFromUnicode(const QChar *uc, int len, QTextCodec::ConverterState *state, DataEndianness e) { - Endianness endian = e; + DataEndianness endian = e; int length = 2*len; - if (!state || (!(state->flags & IgnoreHeader))) { + if (!state || (!(state->flags & QTextCodec::IgnoreHeader))) { length += 2; } - if (e == Detect) { - endian = (QSysInfo::ByteOrder == QSysInfo::BigEndian) ? BE : LE; + if (e == DetectEndianness) { + endian = (QSysInfo::ByteOrder == QSysInfo::BigEndian) ? BigEndianness : LittleEndianness; } QByteArray d; d.resize(length); char *data = d.data(); - if (!state || !(state->flags & IgnoreHeader)) { + if (!state || !(state->flags & QTextCodec::IgnoreHeader)) { QChar bom(QChar::ByteOrderMark); - if (endian == BE) { + if (endian == BigEndianness) { data[0] = bom.row(); data[1] = bom.cell(); } else { @@ -314,7 +276,7 @@ QByteArray QUtf16Codec::convertFromUnicode(const QChar *uc, int len, ConverterSt } data += 2; } - if (endian == BE) { + if (endian == BigEndianness) { for (int i = 0; i < len; ++i) { *(data++) = uc[i].row(); *(data++) = uc[i].cell(); @@ -328,35 +290,35 @@ QByteArray QUtf16Codec::convertFromUnicode(const QChar *uc, int len, ConverterSt if (state) { state->remainingChars = 0; - state->flags |= IgnoreHeader; + state->flags |= QTextCodec::IgnoreHeader; } return d; } -QString QUtf16Codec::convertToUnicode(const char *chars, int len, ConverterState *state) const +QString QUtf16::convertToUnicode(const char *chars, int len, QTextCodec::ConverterState *state, DataEndianness e) { - Endianness endian = e; + DataEndianness endian = e; bool half = false; uchar buf = 0; bool headerdone = false; if (state) { - headerdone = state->flags & IgnoreHeader; - if (endian == Detect) - endian = (Endianness)state->state_data[Endian]; + headerdone = state->flags & QTextCodec::IgnoreHeader; + if (endian == DetectEndianness) + endian = (DataEndianness)state->state_data[Endian]; if (state->remainingChars) { half = true; buf = state->state_data[Data]; } } - if (headerdone && endian == Detect) - endian = (QSysInfo::ByteOrder == QSysInfo::BigEndian) ? BE : LE; + if (headerdone && endian == DetectEndianness) + endian = (QSysInfo::ByteOrder == QSysInfo::BigEndian) ? BigEndianness : LittleEndianness; QString result(len, Qt::Uninitialized); // worst case QChar *qch = (QChar *)result.unicode(); while (len--) { if (half) { QChar ch; - if (endian == LE) { + if (endian == LittleEndianness) { ch.setRow(*chars++); ch.setCell(buf); } else { @@ -364,17 +326,17 @@ QString QUtf16Codec::convertToUnicode(const char *chars, int len, ConverterState ch.setCell(*chars++); } if (!headerdone) { - if (endian == Detect) { - if (ch == QChar::ByteOrderSwapped && endian != BE) { - endian = LE; - } else if (ch == QChar::ByteOrderMark && endian != LE) { + if (endian == DetectEndianness) { + if (ch == QChar::ByteOrderSwapped && endian != BigEndianness) { + endian = LittleEndianness; + } else if (ch == QChar::ByteOrderMark && endian != LittleEndianness) { // ignore BOM - endian = BE; + endian = BigEndianness; } else { if (QSysInfo::ByteOrder == QSysInfo::BigEndian) { - endian = BE; + endian = BigEndianness; } else { - endian = LE; + endian = LittleEndianness; ch = QChar((ch.unicode() >> 8) | ((ch.unicode() & 0xff) << 8)); } *qch++ = ch; @@ -396,7 +358,7 @@ QString QUtf16Codec::convertToUnicode(const char *chars, int len, ConverterState if (state) { if (headerdone) - state->flags |= IgnoreHeader; + state->flags |= QTextCodec::IgnoreHeader; state->state_data[Endian] = endian; if (half) { state->remainingChars = 1; @@ -409,72 +371,21 @@ QString QUtf16Codec::convertToUnicode(const char *chars, int len, ConverterState return result; } -int QUtf16Codec::mibEnum() const -{ - return 1015; -} - -QByteArray QUtf16Codec::name() const -{ - return "UTF-16"; -} - -QList<QByteArray> QUtf16Codec::aliases() const -{ - return QList<QByteArray>(); -} - -int QUtf16BECodec::mibEnum() const -{ - return 1013; -} - -QByteArray QUtf16BECodec::name() const -{ - return "UTF-16BE"; -} - -QList<QByteArray> QUtf16BECodec::aliases() const -{ - QList<QByteArray> list; - return list; -} - -int QUtf16LECodec::mibEnum() const -{ - return 1014; -} - -QByteArray QUtf16LECodec::name() const -{ - return "UTF-16LE"; -} - -QList<QByteArray> QUtf16LECodec::aliases() const -{ - QList<QByteArray> list; - return list; -} - -QUtf32Codec::~QUtf32Codec() -{ -} - -QByteArray QUtf32Codec::convertFromUnicode(const QChar *uc, int len, ConverterState *state) const +QByteArray QUtf32::convertFromUnicode(const QChar *uc, int len, QTextCodec::ConverterState *state, DataEndianness e) { - Endianness endian = e; + DataEndianness endian = e; int length = 4*len; - if (!state || (!(state->flags & IgnoreHeader))) { + if (!state || (!(state->flags & QTextCodec::IgnoreHeader))) { length += 4; } - if (e == Detect) { - endian = (QSysInfo::ByteOrder == QSysInfo::BigEndian) ? BE : LE; + if (e == DetectEndianness) { + endian = (QSysInfo::ByteOrder == QSysInfo::BigEndian) ? BigEndianness : LittleEndianness; } QByteArray d(length, Qt::Uninitialized); char *data = d.data(); - if (!state || !(state->flags & IgnoreHeader)) { - if (endian == BE) { + if (!state || !(state->flags & QTextCodec::IgnoreHeader)) { + if (endian == BigEndianness) { data[0] = 0; data[1] = 0; data[2] = (char)0xfe; @@ -487,7 +398,7 @@ QByteArray QUtf32Codec::convertFromUnicode(const QChar *uc, int len, ConverterSt } data += 4; } - if (endian == BE) { + if (endian == BigEndianness) { for (int i = 0; i < len; ++i) { uint cp = uc[i].unicode(); if (uc[i].isHighSurrogate() && i < len - 1) @@ -511,59 +422,59 @@ QByteArray QUtf32Codec::convertFromUnicode(const QChar *uc, int len, ConverterSt if (state) { state->remainingChars = 0; - state->flags |= IgnoreHeader; + state->flags |= QTextCodec::IgnoreHeader; } return d; } -QString QUtf32Codec::convertToUnicode(const char *chars, int len, ConverterState *state) const +QString QUtf32::convertToUnicode(const char *chars, int len, QTextCodec::ConverterState *state, DataEndianness e) { - Endianness endian = e; + DataEndianness endian = e; uchar tuple[4]; int num = 0; bool headerdone = false; if (state) { - headerdone = state->flags & IgnoreHeader; - if (endian == Detect) { - endian = (Endianness)state->state_data[Endian]; + headerdone = state->flags & QTextCodec::IgnoreHeader; + if (endian == DetectEndianness) { + endian = (DataEndianness)state->state_data[Endian]; } num = state->remainingChars; memcpy(tuple, &state->state_data[Data], 4); } - if (headerdone && endian == Detect) - endian = (QSysInfo::ByteOrder == QSysInfo::BigEndian) ? BE : LE; + if (headerdone && endian == DetectEndianness) + endian = (QSysInfo::ByteOrder == QSysInfo::BigEndian) ? BigEndianness : LittleEndianness; QString result; result.resize((num + len) >> 2 << 1); // worst case QChar *qch = (QChar *)result.unicode(); - + const char *end = chars + len; while (chars < end) { tuple[num++] = *chars++; if (num == 4) { if (!headerdone) { - if (endian == Detect) { - if (endian == Detect) { - if (tuple[0] == 0xff && tuple[1] == 0xfe && tuple[2] == 0 && tuple[3] == 0 && endian != BE) { - endian = LE; + if (endian == DetectEndianness) { + if (endian == DetectEndianness) { + if (tuple[0] == 0xff && tuple[1] == 0xfe && tuple[2] == 0 && tuple[3] == 0 && endian != BigEndianness) { + endian = LittleEndianness; num = 0; continue; - } else if (tuple[0] == 0 && tuple[1] == 0 && tuple[2] == 0xfe && tuple[3] == 0xff && endian != LE) { - endian = BE; + } else if (tuple[0] == 0 && tuple[1] == 0 && tuple[2] == 0xfe && tuple[3] == 0xff && endian != LittleEndianness) { + endian = BigEndianness; num = 0; continue; } else if (QSysInfo::ByteOrder == QSysInfo::BigEndian) { - endian = BE; + endian = BigEndianness; } else { - endian = LE; + endian = LittleEndianness; } } - } else if (((endian == BE) ? qFromBigEndian<quint32>(tuple) : qFromLittleEndian<quint32>(tuple)) == QChar::ByteOrderMark) { + } else if (((endian == BigEndianness) ? qFromBigEndian<quint32>(tuple) : qFromLittleEndian<quint32>(tuple)) == QChar::ByteOrderMark) { num = 0; continue; } } - uint code = (endian == BE) ? qFromBigEndian<quint32>(tuple) : qFromLittleEndian<quint32>(tuple); + uint code = (endian == BigEndianness) ? qFromBigEndian<quint32>(tuple) : qFromLittleEndian<quint32>(tuple); if (code >= 0x10000) { *qch++ = QChar::highSurrogate(code); *qch++ = QChar::lowSurrogate(code); @@ -574,10 +485,10 @@ QString QUtf32Codec::convertToUnicode(const char *chars, int len, ConverterState } } result.truncate(qch - result.unicode()); - + if (state) { if (headerdone) - state->flags |= IgnoreHeader; + state->flags |= QTextCodec::IgnoreHeader; state->state_data[Endian] = endian; state->remainingChars = num; memcpy(&state->state_data[Data], tuple, 4); @@ -585,6 +496,113 @@ QString QUtf32Codec::convertToUnicode(const char *chars, int len, ConverterState return result; } + +#ifndef QT_NO_TEXTCODEC + +QUtf8Codec::~QUtf8Codec() +{ +} + +QByteArray QUtf8Codec::convertFromUnicode(const QChar *uc, int len, ConverterState *state) const +{ + return QUtf8::convertFromUnicode(uc, len, state); +} + +void QUtf8Codec::convertToUnicode(QString *target, const char *chars, int len, ConverterState *state) const +{ + *target += QUtf8::convertToUnicode(chars, len, state); +} + +QString QUtf8Codec::convertToUnicode(const char *chars, int len, ConverterState *state) const +{ + return QUtf8::convertToUnicode(chars, len, state); +} + +QByteArray QUtf8Codec::name() const +{ + return "UTF-8"; +} + +int QUtf8Codec::mibEnum() const +{ + return 106; +} + +QUtf16Codec::~QUtf16Codec() +{ +} + +QByteArray QUtf16Codec::convertFromUnicode(const QChar *uc, int len, ConverterState *state) const +{ + return QUtf16::convertFromUnicode(uc, len, state, e); +} + +QString QUtf16Codec::convertToUnicode(const char *chars, int len, ConverterState *state) const +{ + return QUtf16::convertToUnicode(chars, len, state, e); +} + +int QUtf16Codec::mibEnum() const +{ + return 1015; +} + +QByteArray QUtf16Codec::name() const +{ + return "UTF-16"; +} + +QList<QByteArray> QUtf16Codec::aliases() const +{ + return QList<QByteArray>(); +} + +int QUtf16BECodec::mibEnum() const +{ + return 1013; +} + +QByteArray QUtf16BECodec::name() const +{ + return "UTF-16BE"; +} + +QList<QByteArray> QUtf16BECodec::aliases() const +{ + QList<QByteArray> list; + return list; +} + +int QUtf16LECodec::mibEnum() const +{ + return 1014; +} + +QByteArray QUtf16LECodec::name() const +{ + return "UTF-16LE"; +} + +QList<QByteArray> QUtf16LECodec::aliases() const +{ + QList<QByteArray> list; + return list; +} + +QUtf32Codec::~QUtf32Codec() +{ +} + +QByteArray QUtf32Codec::convertFromUnicode(const QChar *uc, int len, ConverterState *state) const +{ + return QUtf32::convertFromUnicode(uc, len, state, e); +} + +QString QUtf32Codec::convertToUnicode(const char *chars, int len, ConverterState *state) const +{ + return QUtf32::convertToUnicode(chars, len, state, e); +} + int QUtf32Codec::mibEnum() const { return 1017; @@ -633,7 +651,6 @@ QList<QByteArray> QUtf32LECodec::aliases() const return list; } +#endif //QT_NO_TEXTCODEC QT_END_NAMESPACE - -#endif //QT_NO_TEXTCODEC diff --git a/src/corelib/codecs/qutfcodec_p.h b/src/corelib/codecs/qutfcodec_p.h index 749f5be..4f8f92e 100644 --- a/src/corelib/codecs/qutfcodec_p.h +++ b/src/corelib/codecs/qutfcodec_p.h @@ -54,9 +54,35 @@ // #include "QtCore/qtextcodec.h" +#include "private/qtextcodec_p.h" QT_BEGIN_NAMESPACE +enum DataEndianness +{ + DetectEndianness, + BigEndianness, + LittleEndianness +}; + +struct QUtf8 +{ + static QString convertToUnicode(const char *, int, QTextCodec::ConverterState *); + static QByteArray convertFromUnicode(const QChar *, int, QTextCodec::ConverterState *); +}; + +struct QUtf16 +{ + static QString convertToUnicode(const char *, int, QTextCodec::ConverterState *, DataEndianness = DetectEndianness); + static QByteArray convertFromUnicode(const QChar *, int, QTextCodec::ConverterState *, DataEndianness = DetectEndianness); +}; + +struct QUtf32 +{ + static QString convertToUnicode(const char *, int, QTextCodec::ConverterState *, DataEndianness = DetectEndianness); + static QByteArray convertFromUnicode(const QChar *, int, QTextCodec::ConverterState *, DataEndianness = DetectEndianness); +}; + #ifndef QT_NO_TEXTCODEC class QUtf8Codec : public QTextCodec { @@ -73,13 +99,8 @@ public: class QUtf16Codec : public QTextCodec { protected: - enum Endianness { - Detect, - BE, - LE - }; public: - QUtf16Codec() { e = Detect; } + QUtf16Codec() { e = DetectEndianness; } ~QUtf16Codec(); QByteArray name() const; @@ -90,12 +111,12 @@ public: QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const; protected: - Endianness e; + DataEndianness e; }; class QUtf16BECodec : public QUtf16Codec { public: - QUtf16BECodec() : QUtf16Codec() { e = BE; } + QUtf16BECodec() : QUtf16Codec() { e = BigEndianness; } QByteArray name() const; QList<QByteArray> aliases() const; int mibEnum() const; @@ -103,21 +124,15 @@ public: class QUtf16LECodec : public QUtf16Codec { public: - QUtf16LECodec() : QUtf16Codec() { e = LE; } + QUtf16LECodec() : QUtf16Codec() { e = LittleEndianness; } QByteArray name() const; QList<QByteArray> aliases() const; int mibEnum() const; }; class QUtf32Codec : public QTextCodec { -protected: - enum Endianness { - Detect, - BE, - LE - }; public: - QUtf32Codec() { e = Detect; } + QUtf32Codec() { e = DetectEndianness; } ~QUtf32Codec(); QByteArray name() const; @@ -128,12 +143,12 @@ public: QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const; protected: - Endianness e; + DataEndianness e; }; class QUtf32BECodec : public QUtf32Codec { public: - QUtf32BECodec() : QUtf32Codec() { e = BE; } + QUtf32BECodec() : QUtf32Codec() { e = BigEndianness; } QByteArray name() const; QList<QByteArray> aliases() const; int mibEnum() const; @@ -141,7 +156,7 @@ public: class QUtf32LECodec : public QUtf32Codec { public: - QUtf32LECodec() : QUtf32Codec() { e = LE; } + QUtf32LECodec() : QUtf32Codec() { e = LittleEndianness; } QByteArray name() const; QList<QByteArray> aliases() const; int mibEnum() const; diff --git a/src/corelib/concurrent/qfuture.h b/src/corelib/concurrent/qfuture.h index 47015ee..f2db5ac 100644 --- a/src/corelib/concurrent/qfuture.h +++ b/src/corelib/concurrent/qfuture.h @@ -210,7 +210,7 @@ public: bool operator==(const QFuture &other) const { return (d == other.d); } bool operator!=(const QFuture &other) const { return (d != other.d); } -#ifndef QT_NO_MEMBER_TEMPLATES +#if !defined(QT_NO_MEMBER_TEMPLATES) && !defined(Q_CC_XLC) template <typename T> QFuture(const QFuture<T> &other) : d(other.d) diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp index ad4868d..f7d6514 100644 --- a/src/corelib/global/qglobal.cpp +++ b/src/corelib/global/qglobal.cpp @@ -1668,7 +1668,7 @@ QSysInfo::WinVersion QSysInfo::windowsVersion() winver = QSysInfo::WV_WINDOWS7; } else { qWarning("Qt: Untested Windows version %d.%d detected!", - osver.dwMajorVersion, osver.dwMinorVersion); + int(osver.dwMajorVersion), int(osver.dwMinorVersion)); winver = QSysInfo::WV_NT_based; } } diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h index 94fa9ab..dbe25cb 100644 --- a/src/corelib/global/qglobal.h +++ b/src/corelib/global/qglobal.h @@ -665,7 +665,8 @@ namespace QT_NAMESPACE {} # define Q_ALIGNOF(type) __alignof__(type) # define Q_TYPEOF(expr) __typeof__(expr) # define Q_DECL_ALIGN(n) __attribute__((__aligned__(n))) -# define Q_DECL_EXPORT __attribute__((__visibility__("default"))) +// using CC 5.9: Warning: attribute visibility is unsupported and will be skipped.. +//# define Q_DECL_EXPORT __attribute__((__visibility__("default"))) # endif # if !defined(_BOOL) # define Q_NO_BOOL_TYPE @@ -705,7 +706,7 @@ namespace QT_NAMESPACE {} # define Q_DECL_ALIGNED(n) __attribute__((aligned(n))) # endif # if __HP_aCC-0 >= 062000 -# define Q_DECL_EXPORT __attribute__((visibility("default")) +# define Q_DECL_EXPORT __attribute__((visibility("default"))) # define Q_DECL_IMPORT Q_DECL_EXPORT # endif # else @@ -2420,28 +2421,15 @@ QT_LICENSED_MODULE(DBus) # define QT_NO_QFUTURE #endif -/* - Turn off certain features for compilers that have problems parsing - the code. -*/ -#if (defined(Q_CC_HPACC) && defined(QT_ARCH_PARISC)) \ - || defined(Q_CC_MIPS) \ - || defined(Q_CC_XLC) -// HP aCC A.03.*, MIPSpro, and xlC cannot handle -// the template function declarations for the QtConcurrent functions -# define QT_NO_QFUTURE -# define QT_NO_CONCURRENT -#endif - -// MSVC 6.0, MSVC .NET 2002, and old versions of Sun CC can`t handle the map(), etc templates, +// MSVC 6.0 and MSVC .NET 2002, can`t handle the map(), etc templates, // but the QFuture class compiles. -#if (defined(Q_CC_MSVC) && _MSC_VER <= 1300) || (defined (__SUNPRO_CC) && __SUNPRO_CC <= 0x590) +#if (defined(Q_CC_MSVC) && _MSC_VER <= 1300) # define QT_NO_CONCURRENT #endif -// Mingw uses a gcc 3 version which has problems with some of the -// map/filter overloads. So does IRIX and Solaris. -#if (defined(Q_OS_IRIX) || defined(Q_CC_MINGW) || defined (Q_OS_SOLARIS)) && (__GNUC__ < 4) +// gcc 3 version has problems with some of the +// map/filter overloads. +#if defined(Q_CC_GNU) && (__GNUC__ < 4) # define QT_NO_CONCURRENT_MAP # define QT_NO_CONCURRENT_FILTER #endif diff --git a/src/corelib/global/qnamespace.h b/src/corelib/global/qnamespace.h index e0584e5..7770fd6 100644 --- a/src/corelib/global/qnamespace.h +++ b/src/corelib/global/qnamespace.h @@ -1410,7 +1410,8 @@ public: ToolButtonIconOnly, ToolButtonTextOnly, ToolButtonTextBesideIcon, - ToolButtonTextUnderIcon + ToolButtonTextUnderIcon, + ToolButtonFollowStyle }; enum LayoutDirection { diff --git a/src/corelib/io/qabstractfileengine.cpp b/src/corelib/io/qabstractfileengine.cpp index 93097bc..9eb3305 100644 --- a/src/corelib/io/qabstractfileengine.cpp +++ b/src/corelib/io/qabstractfileengine.cpp @@ -42,7 +42,7 @@ #include "qabstractfileengine.h" #include "private/qabstractfileengine_p.h" #include "qdatetime.h" -#include "qmutex.h" +#include "qreadwritelock.h" #include "qvariant.h" // built-in handlers #include "qfsfileengine.h" @@ -98,14 +98,14 @@ QT_BEGIN_NAMESPACE All application-wide handlers are stored in this list. The mutex must be acquired to ensure thread safety. */ -Q_GLOBAL_STATIC_WITH_ARGS(QMutex, fileEngineHandlerMutex, (QMutex::Recursive)) +Q_GLOBAL_STATIC_WITH_ARGS(QReadWriteLock, fileEngineHandlerMutex, (QReadWriteLock::Recursive)) static bool qt_abstractfileenginehandlerlist_shutDown = false; class QAbstractFileEngineHandlerList : public QList<QAbstractFileEngineHandler *> { public: ~QAbstractFileEngineHandlerList() { - QMutexLocker locker(fileEngineHandlerMutex()); + QWriteLocker locker(fileEngineHandlerMutex()); qt_abstractfileenginehandlerlist_shutDown = true; } }; @@ -122,7 +122,7 @@ Q_GLOBAL_STATIC(QAbstractFileEngineHandlerList, fileEngineHandlers) */ QAbstractFileEngineHandler::QAbstractFileEngineHandler() { - QMutexLocker locker(fileEngineHandlerMutex()); + QWriteLocker locker(fileEngineHandlerMutex()); fileEngineHandlers()->prepend(this); } @@ -132,7 +132,7 @@ QAbstractFileEngineHandler::QAbstractFileEngineHandler() */ QAbstractFileEngineHandler::~QAbstractFileEngineHandler() { - QMutexLocker locker(fileEngineHandlerMutex()); + QWriteLocker locker(fileEngineHandlerMutex()); // Remove this handler from the handler list only if the list is valid. if (!qt_abstractfileenginehandlerlist_shutDown) fileEngineHandlers()->removeAll(this); @@ -166,12 +166,14 @@ QAbstractFileEngineHandler::~QAbstractFileEngineHandler() */ QAbstractFileEngine *QAbstractFileEngine::create(const QString &fileName) { - QMutexLocker locker(fileEngineHandlerMutex()); + { + QReadLocker locker(fileEngineHandlerMutex()); - // check for registered handlers that can load the file - for (int i = 0; i < fileEngineHandlers()->size(); i++) { - if (QAbstractFileEngine *ret = fileEngineHandlers()->at(i)->create(fileName)) - return ret; + // check for registered handlers that can load the file + for (int i = 0; i < fileEngineHandlers()->size(); i++) { + if (QAbstractFileEngine *ret = fileEngineHandlers()->at(i)->create(fileName)) + return ret; + } } #ifdef QT_BUILD_CORE_LIB diff --git a/src/corelib/io/qdiriterator.cpp b/src/corelib/io/qdiriterator.cpp index 582d657..3bfea65 100644 --- a/src/corelib/io/qdiriterator.cpp +++ b/src/corelib/io/qdiriterator.cpp @@ -106,26 +106,29 @@ public: QDir::Filters filters, QDirIterator::IteratorFlags flags); ~QDirIteratorPrivate(); - void pushSubDirectory(const QString &path, const QStringList &nameFilters, - QDir::Filters filters); void advance(); - bool shouldFollowDirectory(const QFileInfo &); + + void pushDirectory(const QFileInfo &fileInfo); + void checkAndPushDirectory(const QFileInfo &); bool matchesFilters(const QString &fileName, const QFileInfo &fi) const; - QSet<QString> visitedLinks; - QAbstractFileEngine *engine; + QAbstractFileEngine * const engine; + + const QString path; + const QStringList nameFilters; + const QDir::Filters filters; + const QDirIterator::IteratorFlags iteratorFlags; + +#ifndef QT_NO_REGEXP + QVector<QRegExp> nameRegExps; +#endif + QStack<QAbstractFileEngineIterator *> fileEngineIterators; - QString path; - QFileInfo nextFileInfo; - //This fileinfo is the current that we will return from the public API QFileInfo currentFileInfo; - QString currentFilePath; - QDirIterator::IteratorFlags iteratorFlags; - QDir::Filters filters; - QStringList nameFilters; - bool followNextDir; - bool first; - bool done; + QFileInfo nextFileInfo; + + // Loop protection + QSet<QString> visitedLinks; QDirIterator *q; }; @@ -135,15 +138,24 @@ public: */ QDirIteratorPrivate::QDirIteratorPrivate(const QString &path, const QStringList &nameFilters, QDir::Filters filters, QDirIterator::IteratorFlags flags) - : engine(0), path(path), nextFileInfo(path), iteratorFlags(flags), followNextDir(false), first(true), done(false) + : engine(QAbstractFileEngine::create(path)) + , path(path) + , nameFilters(nameFilters.contains(QLatin1String("*")) ? QStringList() : nameFilters) + , filters(QDir::NoFilter == filters ? QDir::AllEntries : filters) + , iteratorFlags(flags) { - if (filters == QDir::NoFilter) - filters = QDir::AllEntries; - this->filters = filters; - this->nameFilters = nameFilters; +#ifndef QT_NO_REGEXP + nameRegExps.reserve(nameFilters.size()); + for (int i = 0; i < nameFilters.size(); ++i) + nameRegExps.append( + QRegExp(nameFilters.at(i), + (filters & QDir::CaseSensitive) ? Qt::CaseSensitive : Qt::CaseInsensitive, + QRegExp::Wildcard)); +#endif - pushSubDirectory(nextFileInfo.isSymLink() ? nextFileInfo.canonicalFilePath() : path, - nameFilters, filters); + // Populate fields for hasNext() and next() + pushDirectory(QFileInfo(path)); + advance(); } /*! @@ -157,20 +169,19 @@ QDirIteratorPrivate::~QDirIteratorPrivate() /*! \internal */ -void QDirIteratorPrivate::pushSubDirectory(const QString &path, const QStringList &nameFilters, - QDir::Filters filters) +void QDirIteratorPrivate::pushDirectory(const QFileInfo &fileInfo) { - if (iteratorFlags & QDirIterator::FollowSymlinks) { - if (nextFileInfo.filePath() != path) - nextFileInfo.setFile(path); - if (nextFileInfo.isSymLink()) { - visitedLinks << nextFileInfo.canonicalFilePath(); - } else { - visitedLinks << nextFileInfo.absoluteFilePath(); - } - } - - if (engine || (engine = QAbstractFileEngine::create(this->path))) { + QString path = fileInfo.filePath(); + +#ifdef Q_OS_WIN + if (fileInfo.isSymLink()) + path = fileInfo.canonicalFilePath(); +#endif + + if (iteratorFlags & QDirIterator::FollowSymlinks) + visitedLinks << fileInfo.canonicalFilePath(); + + if (engine) { engine->setFileName(path); QAbstractFileEngineIterator *it = engine->beginEntryList(filters, nameFilters); if (it) { @@ -187,95 +198,64 @@ void QDirIteratorPrivate::pushSubDirectory(const QString &path, const QStringLis */ void QDirIteratorPrivate::advance() { - // Store the current entry - if (!fileEngineIterators.isEmpty()) - currentFilePath = fileEngineIterators.top()->currentFilePath(); - - // Advance to the next entry - if (followNextDir) { - // Start by navigating into the current directory. - followNextDir = false; - - QAbstractFileEngineIterator *it = fileEngineIterators.top(); - - QString subDir = it->currentFilePath(); -#ifdef Q_OS_WIN - if (nextFileInfo.isSymLink()) - subDir = nextFileInfo.canonicalFilePath(); -#endif - pushSubDirectory(subDir, it->nameFilters(), it->filters()); - } - while (!fileEngineIterators.isEmpty()) { - QAbstractFileEngineIterator *it = fileEngineIterators.top(); // Find the next valid iterator that matches the filters. - bool foundDirectory = false; - while (it->hasNext()) { + while (fileEngineIterators.top()->hasNext()) { + QAbstractFileEngineIterator *it = fileEngineIterators.top(); it->next(); + const QFileInfo info = it->currentFileInfo(); + checkAndPushDirectory(it->currentFileInfo()); + if (matchesFilters(it->currentFileName(), info)) { currentFileInfo = nextFileInfo; nextFileInfo = info; - // Signal that we want to follow this entry. - followNextDir = shouldFollowDirectory(nextFileInfo); + //We found a matching entry. return; - - } else if (iteratorFlags & QDirIterator::Subdirectories) { - - if (!shouldFollowDirectory(info)) - continue; - QString subDir = it->currentFilePath(); -#ifdef Q_OS_WIN - if (info.isSymLink()) - subDir = info.canonicalFilePath(); -#endif - pushSubDirectory(subDir, it->nameFilters(), it->filters()); - - foundDirectory = true; - break; } } - if (!foundDirectory) - delete fileEngineIterators.pop(); + + delete fileEngineIterators.pop(); } + currentFileInfo = nextFileInfo; - done = true; + nextFileInfo = QFileInfo(); } /*! \internal */ -bool QDirIteratorPrivate::shouldFollowDirectory(const QFileInfo &fileInfo) +void QDirIteratorPrivate::checkAndPushDirectory(const QFileInfo &fileInfo) { // If we're doing flat iteration, we're done. if (!(iteratorFlags & QDirIterator::Subdirectories)) - return false; - + return; + // Never follow non-directory entries if (!fileInfo.isDir()) - return false; + return; + // Follow symlinks only when asked + if (!(iteratorFlags & QDirIterator::FollowSymlinks) && fileInfo.isSymLink()) + return; // Never follow . and .. - if (fileInfo.fileName() == QLatin1String(".") || fileInfo.fileName() == QLatin1String("..")) - return false; + QString fileName = fileInfo.fileName(); + if (QLatin1String(".") == fileName || QLatin1String("..") == fileName) + return; - - // Check symlinks - if (fileInfo.isSymLink() && !(iteratorFlags & QDirIterator::FollowSymlinks)) { - // Follow symlinks only if FollowSymlinks was passed - return false; - } + // No hidden directories unless requested + if (!(filters & QDir::AllDirs) && !(filters & QDir::Hidden) && fileInfo.isHidden()) + return; // Stop link loops if (visitedLinks.contains(fileInfo.canonicalFilePath())) - return false; - - return true; + return; + + pushDirectory(fileInfo); } - /*! \internal @@ -289,10 +269,7 @@ bool QDirIteratorPrivate::shouldFollowDirectory(const QFileInfo &fileInfo) */ bool QDirIteratorPrivate::matchesFilters(const QString &fileName, const QFileInfo &fi) const { - if (fileName.isEmpty()) { - // invalid entry - return false; - } + Q_ASSERT(!fileName.isEmpty()); // filter . and ..? const int fileNameSize = fileName.size(); @@ -303,16 +280,15 @@ bool QDirIteratorPrivate::matchesFilters(const QString &fileName, const QFileInf return false; // name filter -#ifndef QT_NO_REGEXP - const bool hasNameFilters = !nameFilters.isEmpty() && !(nameFilters.contains(QLatin1String("*"))); +#ifndef QT_NO_REGEXP // Pass all entries through name filters, except dirs if the AllDirs - if (hasNameFilters && !((filters & QDir::AllDirs) && fi.isDir())) { + if (!nameFilters.isEmpty() && !((filters & QDir::AllDirs) && fi.isDir())) { bool matched = false; - for (int i = 0; i < nameFilters.size(); ++i) { - QRegExp regexp(nameFilters.at(i), - (filters & QDir::CaseSensitive) ? Qt::CaseSensitive : Qt::CaseInsensitive, - QRegExp::Wildcard); - if (regexp.exactMatch(fileName)) { + for (QVector<QRegExp>::const_iterator iter = nameRegExps.constBegin(), + end = nameRegExps.constEnd(); + iter != end; ++iter) { + + if (iter->exactMatch(fileName)) { matched = true; break; } @@ -368,7 +344,7 @@ bool QDirIteratorPrivate::matchesFilters(const QString &fileName, const QFileInf || (doExecutable && !fi.isExecutable()))) { return false; } - + return true; } @@ -410,7 +386,7 @@ QDirIterator::QDirIterator(const QDir &dir, IteratorFlags flags) \sa hasNext(), next(), IteratorFlags */ QDirIterator::QDirIterator(const QString &path, QDir::Filters filters, IteratorFlags flags) - : d(new QDirIteratorPrivate(path, QStringList(QLatin1String("*")), filters, flags)) + : d(new QDirIteratorPrivate(path, QStringList(), filters, flags)) { d->q = this; } @@ -428,7 +404,7 @@ QDirIterator::QDirIterator(const QString &path, QDir::Filters filters, IteratorF \sa hasNext(), next(), IteratorFlags */ QDirIterator::QDirIterator(const QString &path, IteratorFlags flags) - : d(new QDirIteratorPrivate(path, QStringList(QLatin1String("*")), QDir::NoFilter, flags)) + : d(new QDirIteratorPrivate(path, QStringList(), QDir::NoFilter, flags)) { d->q = this; } @@ -445,7 +421,7 @@ QDirIterator::QDirIterator(const QString &path, IteratorFlags flags) passed to the flags. \warning This constructor expects \c flags to be left at its default value. Use the - constructors that do not take the \a filters argument instead. + constructors that do not take the \a filters argument instead. \sa hasNext(), next(), IteratorFlags */ @@ -477,8 +453,6 @@ QDirIterator::~QDirIterator() */ QString QDirIterator::next() { - if (!hasNext()) - return QString(); d->advance(); return filePath(); } @@ -491,22 +465,17 @@ QString QDirIterator::next() */ bool QDirIterator::hasNext() const { - if (d->first) { - d->first = false; - d->advance(); - } - return !d->done; + return !d->fileEngineIterators.isEmpty(); } /*! Returns the file name for the current directory entry, without the path - prepended. If the current entry is invalid (i.e., isValid() returns - false), a null QString is returned. + prepended. + + This function is convenient when iterating a single directory. When using + the QDirIterator::Subdirectories flag, you can use filePath() to get the + full path. - This function is provided for the convenience when iterating single - directories. For recursive iteration, you should call filePath() or - fileInfo() instead. - \sa filePath(), fileInfo() */ QString QDirIterator::fileName() const @@ -515,20 +484,17 @@ QString QDirIterator::fileName() const } /*! - Returns the full file path for the current directory entry. If the current - entry is invalid (i.e., isValid() returns false), a null QString is - returned. + Returns the full file path for the current directory entry. \sa fileInfo(), fileName() */ QString QDirIterator::filePath() const { - return d->currentFilePath; + return d->currentFileInfo.filePath(); } /*! - Returns a QFileInfo for the current directory entry. If the current entry - is invalid (i.e., isValid() returns false), a null QFileInfo is returned. + Returns a QFileInfo for the current directory entry. \sa filePath(), fileName() */ diff --git a/src/corelib/io/qfilesystemwatcher_p.h b/src/corelib/io/qfilesystemwatcher_p.h index 850e150..83be197 100644 --- a/src/corelib/io/qfilesystemwatcher_p.h +++ b/src/corelib/io/qfilesystemwatcher_p.h @@ -69,13 +69,14 @@ class QFileSystemWatcherEngine : public QThread Q_OBJECT protected: - inline QFileSystemWatcherEngine() + inline QFileSystemWatcherEngine(bool move = true) { - moveToThread(this); + if (move) + moveToThread(this); } public: - // fills \a files and \a directires with the \a paths it could + // fills \a files and \a directories with the \a paths it could // watch, and returns a list of paths this engine could not watch virtual QStringList addPaths(const QStringList &paths, QStringList *files, diff --git a/src/corelib/io/qfilesystemwatcher_win.cpp b/src/corelib/io/qfilesystemwatcher_win.cpp index c15b1d2..9eeef02 100644 --- a/src/corelib/io/qfilesystemwatcher_win.cpp +++ b/src/corelib/io/qfilesystemwatcher_win.cpp @@ -53,23 +53,268 @@ QT_BEGIN_NAMESPACE +void QWindowsFileSystemWatcherEngine::stop() +{ + foreach(QWindowsFileSystemWatcherEngineThread *thread, threads) + thread->stop(); +} + QWindowsFileSystemWatcherEngine::QWindowsFileSystemWatcherEngine() - : msg(0) + : QFileSystemWatcherEngine(false) { - if (HANDLE h = CreateEvent(0, false, false, 0)) { - handles.reserve(MAXIMUM_WAIT_OBJECTS); - handles.append(h); - } } QWindowsFileSystemWatcherEngine::~QWindowsFileSystemWatcherEngine() { - if (handles.isEmpty()) + if (threads.isEmpty()) return; - stop(); - wait(); + foreach(QWindowsFileSystemWatcherEngineThread *thread, threads) { + thread->stop(); + thread->wait(); + delete thread; + } +} + +QStringList QWindowsFileSystemWatcherEngine::addPaths(const QStringList &paths, + QStringList *files, + QStringList *directories) +{ + // qDebug()<<"Adding"<<paths.count()<<"to existing"<<(files->count() + directories->count())<<"watchers"; + QStringList p = paths; + QMutableListIterator<QString> it(p); + while (it.hasNext()) { + QString path = it.next(); + QString normalPath = path; + if ((normalPath.endsWith(QLatin1Char('/')) || normalPath.endsWith(QLatin1Char('\\'))) +#ifdef Q_OS_WINCE + && normalPath.size() > 1) +#else + ) +#endif + normalPath.chop(1); + QFileInfo fileInfo(normalPath.toLower()); + if (!fileInfo.exists()) + continue; + + bool isDir = fileInfo.isDir(); + if (isDir) { + if (directories->contains(path)) + continue; + } else { + if (files->contains(path)) + continue; + } + + // qDebug()<<"Looking for a thread/handle for"<<normalPath; + + const QString absolutePath = isDir ? fileInfo.absoluteFilePath() : fileInfo.absolutePath(); + const uint flags = isDir + ? (FILE_NOTIFY_CHANGE_DIR_NAME + | FILE_NOTIFY_CHANGE_FILE_NAME) + : (FILE_NOTIFY_CHANGE_DIR_NAME + | FILE_NOTIFY_CHANGE_FILE_NAME + | FILE_NOTIFY_CHANGE_ATTRIBUTES + | FILE_NOTIFY_CHANGE_SIZE + | FILE_NOTIFY_CHANGE_LAST_WRITE + | FILE_NOTIFY_CHANGE_SECURITY); + + QWindowsFileSystemWatcherEngine::PathInfo pathInfo; + pathInfo.absolutePath = absolutePath; + pathInfo.isDir = isDir; + pathInfo.path = path; + pathInfo = fileInfo; + + // Look for a thread + QWindowsFileSystemWatcherEngineThread *thread = 0; + QWindowsFileSystemWatcherEngine::Handle handle; + QList<QWindowsFileSystemWatcherEngineThread *>::const_iterator jt, end; + end = threads.constEnd(); + for(jt = threads.constBegin(); jt != end; ++jt) { + thread = *jt; + QMutexLocker locker(&(thread->mutex)); + + handle = thread->handleForDir.value(absolutePath); + if (handle.handle != INVALID_HANDLE_VALUE && handle.flags == flags) { + // found a thread now insert... + // qDebug()<<" Found a thread"<<thread; + + QHash<QString, QWindowsFileSystemWatcherEngine::PathInfo> &h + = thread->pathInfoForHandle[handle.handle]; + if (!h.contains(fileInfo.absoluteFilePath())) { + thread->pathInfoForHandle[handle.handle].insert(fileInfo.absoluteFilePath(), pathInfo); + if (isDir) + directories->append(path); + else + files->append(path); + } + it.remove(); + thread->wakeup(); + break; + } + } + + // no thread found, first create a handle + if (handle.handle == INVALID_HANDLE_VALUE || handle.flags != flags) { + // qDebug()<<" No thread found"; + // Volume and folder paths need a trailing slash for proper notification + // (e.g. "c:" -> "c:/"). + const QString effectiveAbsolutePath = + isDir ? (absolutePath + QLatin1Char('/')) : absolutePath; + + handle.handle = FindFirstChangeNotification((wchar_t*) QDir::toNativeSeparators(effectiveAbsolutePath).utf16(), false, flags); + handle.flags = flags; + if (handle.handle == INVALID_HANDLE_VALUE) + continue; + + // now look for a thread to insert + bool found = false; + foreach(QWindowsFileSystemWatcherEngineThread *thread, threads) { + QMutexLocker(&(thread->mutex)); + if (thread->handles.count() < MAXIMUM_WAIT_OBJECTS) { + // qDebug() << " Added handle" << handle.handle << "for" << absolutePath << "to watch" << fileInfo.absoluteFilePath(); + // qDebug()<< " to existing thread"<<thread; + thread->handles.append(handle.handle); + thread->handleForDir.insert(absolutePath, handle); + + thread->pathInfoForHandle[handle.handle].insert(fileInfo.absoluteFilePath(), pathInfo); + if (isDir) + directories->append(path); + else + files->append(path); + + it.remove(); + found = true; + thread->wakeup(); + break; + } + } + if (!found) { + QWindowsFileSystemWatcherEngineThread *thread = new QWindowsFileSystemWatcherEngineThread(); + //qDebug()<<" ###Creating new thread"<<thread<<"("<<(threads.count()+1)<<"threads)"; + thread->handles.append(handle.handle); + thread->handleForDir.insert(absolutePath, handle); + + thread->pathInfoForHandle[handle.handle].insert(fileInfo.absoluteFilePath(), pathInfo); + if (isDir) + directories->append(path); + else + files->append(path); + + connect(thread, SIGNAL(fileChanged(const QString &, bool)), + this, SIGNAL(fileChanged(const QString &, bool))); + connect(thread, SIGNAL(directoryChanged(const QString &, bool)), + this, SIGNAL(directoryChanged(const QString &, bool))); + + thread->msg = '@'; + thread->start(); + threads.append(thread); + it.remove(); + } + } + } + return p; +} + +QStringList QWindowsFileSystemWatcherEngine::removePaths(const QStringList &paths, + QStringList *files, + QStringList *directories) +{ + // qDebug()<<"removePaths"<<paths; + QStringList p = paths; + QMutableListIterator<QString> it(p); + while (it.hasNext()) { + QString path = it.next(); + QString normalPath = path; + if (normalPath.endsWith(QLatin1Char('/')) || normalPath.endsWith(QLatin1Char('\\'))) + normalPath.chop(1); + QFileInfo fileInfo(normalPath.toLower()); + // qDebug()<<"removing"<<normalPath; + QString absolutePath = fileInfo.absoluteFilePath(); + QList<QWindowsFileSystemWatcherEngineThread *>::iterator jt, end; + end = threads.end(); + for(jt = threads.begin(); jt!= end; ++jt) { + QWindowsFileSystemWatcherEngineThread *thread = *jt; + if (*jt == 0) + continue; + + QMutexLocker locker(&(thread->mutex)); + + QWindowsFileSystemWatcherEngine::Handle handle = thread->handleForDir.value(absolutePath); + if (handle.handle == INVALID_HANDLE_VALUE) { + // perhaps path is a file? + absolutePath = fileInfo.absolutePath(); + handle = thread->handleForDir.value(absolutePath); + } + if (handle.handle != INVALID_HANDLE_VALUE) { + QHash<QString, QWindowsFileSystemWatcherEngine::PathInfo> &h = + thread->pathInfoForHandle[handle.handle]; + if (h.remove(fileInfo.absoluteFilePath())) { + // ### + files->removeAll(path); + directories->removeAll(path); + + if (h.isEmpty()) { + // qDebug() << "Closing handle" << handle.handle; + FindCloseChangeNotification(handle.handle); // This one might generate a notification + + int indexOfHandle = thread->handles.indexOf(handle.handle); + Q_ASSERT(indexOfHandle != -1); + thread->handles.remove(indexOfHandle); + + thread->handleForDir.remove(absolutePath); + // h is now invalid + + it.remove(); + + if (thread->handleForDir.isEmpty()) { + // qDebug()<<"Stopping thread "<<thread; + locker.unlock(); + thread->stop(); + thread->wait(); + locker.relock(); + // We can't delete the thread until the mutex locker is + // out of scope + } + } + } + // Found the file, go to next one + break; + } + } + } + + // Remove all threads that we stopped + QList<QWindowsFileSystemWatcherEngineThread *>::iterator jt, end; + end = threads.end(); + for(jt = threads.begin(); jt != end; ++jt) { + if (!(*jt)->isRunning()) { + delete *jt; + *jt = 0; + } + } + + threads.removeAll(0); + return p; +} + +/////////// +// QWindowsFileSystemWatcherEngineThread +/////////// +QWindowsFileSystemWatcherEngineThread::QWindowsFileSystemWatcherEngineThread() + : msg(0) +{ + if (HANDLE h = CreateEvent(0, false, false, 0)) { + handles.reserve(MAXIMUM_WAIT_OBJECTS); + handles.append(h); + } + moveToThread(this); +} + + +QWindowsFileSystemWatcherEngineThread::~QWindowsFileSystemWatcherEngineThread() +{ CloseHandle(handles.at(0)); handles[0] = INVALID_HANDLE_VALUE; @@ -80,13 +325,13 @@ QWindowsFileSystemWatcherEngine::~QWindowsFileSystemWatcherEngine() } } -void QWindowsFileSystemWatcherEngine::run() +void QWindowsFileSystemWatcherEngineThread::run() { QMutexLocker locker(&mutex); forever { QVector<HANDLE> handlesCopy = handles; locker.unlock(); - // qDebug() << "QWindowsFileSystemWatcherEngine: waiting on" << handlesCopy.count() << "handles"; + // qDebug() << "QWindowsFileSystemWatcherThread"<<this<<"waiting on" << handlesCopy.count() << "handles"; DWORD r = WaitForMultipleObjects(handlesCopy.count(), handlesCopy.constData(), false, INFINITE); locker.relock(); do { @@ -94,7 +339,7 @@ void QWindowsFileSystemWatcherEngine::run() int m = msg; msg = 0; if (m == 'q') { - // qDebug() << "thread told to quit"; + // qDebug() << "thread"<<this<<"told to quit"; return; } if (m != '@') { @@ -109,15 +354,15 @@ void QWindowsFileSystemWatcherEngine::run() // When removing a path, FindCloseChangeNotification might actually fire a notification // for some reason, so we must check if the handle exist in the handles vector if (handles.contains(handle)) { - // qDebug("Acknowledged handle: %d, %p", at, handle); + // qDebug()<<"thread"<<this<<"Acknowledged handle:"<<at<<handle; if (!FindNextChangeNotification(handle)) { - qErrnoWarning("QFileSystemWatcher: FindNextChangeNotification failed"); + qErrnoWarning("QFileSystemWatcher: FindNextChangeNotification failed!!"); } - QHash<QString, PathInfo> &h = pathInfoForHandle[handle]; - QMutableHashIterator<QString, PathInfo> it(h); + QHash<QString, QWindowsFileSystemWatcherEngine::PathInfo> &h = pathInfoForHandle[handle]; + QMutableHashIterator<QString, QWindowsFileSystemWatcherEngine::PathInfo> it(h); while (it.hasNext()) { - QHash<QString, PathInfo>::iterator x = it.next(); + QHash<QString, QWindowsFileSystemWatcherEngine::PathInfo>::iterator x = it.next(); QString absolutePath = x.value().absolutePath; QFileInfo fileInfo(x.value().path); // qDebug() << "checking" << x.key(); @@ -162,160 +407,14 @@ void QWindowsFileSystemWatcherEngine::run() } } -QStringList QWindowsFileSystemWatcherEngine::addPaths(const QStringList &paths, - QStringList *files, - QStringList *directories) -{ - if (handles.isEmpty() || handles.count() == MAXIMUM_WAIT_OBJECTS) - return paths; - - QMutexLocker locker(&mutex); - - QStringList p = paths; - QMutableListIterator<QString> it(p); - while (it.hasNext()) { - QString path = it.next(); - QString normalPath = path; - if ((normalPath.endsWith(QLatin1Char('/')) || normalPath.endsWith(QLatin1Char('\\'))) -#ifdef Q_OS_WINCE - && normalPath.size() > 1) -#else - ) -#endif - normalPath.chop(1); - QFileInfo fileInfo(normalPath.toLower()); - if (!fileInfo.exists()) - continue; - - bool isDir = fileInfo.isDir(); - if (isDir) { - if (directories->contains(path)) - continue; - } else { - if (files->contains(path)) - continue; - } - const QString absolutePath = isDir ? fileInfo.absoluteFilePath() : fileInfo.absolutePath(); - const uint flags = isDir - ? (FILE_NOTIFY_CHANGE_DIR_NAME - | FILE_NOTIFY_CHANGE_FILE_NAME) - : (FILE_NOTIFY_CHANGE_DIR_NAME - | FILE_NOTIFY_CHANGE_FILE_NAME - | FILE_NOTIFY_CHANGE_ATTRIBUTES - | FILE_NOTIFY_CHANGE_SIZE - | FILE_NOTIFY_CHANGE_LAST_WRITE - | FILE_NOTIFY_CHANGE_SECURITY); - - Handle handle = handleForDir.value(absolutePath); - if (handle.handle == INVALID_HANDLE_VALUE || handle.flags != flags) { - // Volume and folder paths need a trailing slash for proper notification - // (e.g. "c:" -> "c:/"). - const QString effectiveAbsolutePath = - isDir ? (absolutePath + QLatin1Char('/')) : absolutePath; - - handle.handle = FindFirstChangeNotification((wchar_t*) QDir::toNativeSeparators(effectiveAbsolutePath).utf16(), false, flags); - handle.flags = flags; - if (handle.handle == INVALID_HANDLE_VALUE) - continue; - // qDebug() << "Added handle" << handle << "for" << absolutePath << "to watch" << fileInfo.absoluteFilePath(); - handles.append(handle.handle); - handleForDir.insert(absolutePath, handle); - } - - PathInfo pathInfo; - pathInfo.absolutePath = absolutePath; - pathInfo.isDir = isDir; - pathInfo.path = path; - pathInfo = fileInfo; - QHash<QString, PathInfo> &h = pathInfoForHandle[handle.handle]; - if (!h.contains(fileInfo.absoluteFilePath())) { - pathInfoForHandle[handle.handle].insert(fileInfo.absoluteFilePath(), pathInfo); - if (isDir) - directories->append(path); - else - files->append(path); - } - - it.remove(); - } - - if (!isRunning()) { - msg = '@'; - start(); - } else { - wakeup(); - } - - return p; -} - -QStringList QWindowsFileSystemWatcherEngine::removePaths(const QStringList &paths, - QStringList *files, - QStringList *directories) -{ - QMutexLocker locker(&mutex); - - QStringList p = paths; - QMutableListIterator<QString> it(p); - while (it.hasNext()) { - QString path = it.next(); - QString normalPath = path; - if (normalPath.endsWith(QLatin1Char('/')) || normalPath.endsWith(QLatin1Char('\\'))) - normalPath.chop(1); - QFileInfo fileInfo(normalPath.toLower()); - - QString absolutePath = fileInfo.absoluteFilePath(); - Handle handle = handleForDir.value(absolutePath); - if (handle.handle == INVALID_HANDLE_VALUE) { - // perhaps path is a file? - absolutePath = fileInfo.absolutePath(); - handle = handleForDir.value(absolutePath); - if (handle.handle == INVALID_HANDLE_VALUE) - continue; - } - - QHash<QString, PathInfo> &h = pathInfoForHandle[handle.handle]; - if (h.remove(fileInfo.absoluteFilePath())) { - // ### - files->removeAll(path); - directories->removeAll(path); - - if (h.isEmpty()) { - // qDebug() << "Closing handle" << handle; - FindCloseChangeNotification(handle.handle); // This one might generate a notification - - int indexOfHandle = handles.indexOf(handle.handle); - Q_ASSERT(indexOfHandle != -1); - handles.remove(indexOfHandle); - - handleForDir.remove(absolutePath); - // h is now invalid - - it.remove(); - } - } - } - - if (handleForDir.isEmpty()) { - stop(); - locker.unlock(); - wait(); - locker.relock(); - } else { - wakeup(); - } - - return p; -} - -void QWindowsFileSystemWatcherEngine::stop() +void QWindowsFileSystemWatcherEngineThread::stop() { msg = 'q'; SetEvent(handles.at(0)); } -void QWindowsFileSystemWatcherEngine::wakeup() +void QWindowsFileSystemWatcherEngineThread::wakeup() { msg = '@'; SetEvent(handles.at(0)); diff --git a/src/corelib/io/qfilesystemwatcher_win_p.h b/src/corelib/io/qfilesystemwatcher_win_p.h index 5d42cac..405d255 100644 --- a/src/corelib/io/qfilesystemwatcher_win_p.h +++ b/src/corelib/io/qfilesystemwatcher_win_p.h @@ -68,27 +68,24 @@ QT_BEGIN_NAMESPACE +class QWindowsFileSystemWatcherEngineThread; + +// Even though QWindowsFileSystemWatcherEngine is derived of QThread +// via QFileSystemWatcher, it does not start a thread. +// Instead QWindowsFileSystemWatcher creates QWindowsFileSystemWatcherEngineThreads +// to do the actually watching. class QWindowsFileSystemWatcherEngine : public QFileSystemWatcherEngine { Q_OBJECT - public: QWindowsFileSystemWatcherEngine(); ~QWindowsFileSystemWatcherEngine(); - void run(); - QStringList addPaths(const QStringList &paths, QStringList *files, QStringList *directories); QStringList removePaths(const QStringList &paths, QStringList *files, QStringList *directories); void stop(); -private: - void wakeup(); - - QMutex mutex; - QVector<HANDLE> handles; - int msg; class Handle { @@ -97,13 +94,12 @@ private: uint flags; Handle() - : handle(INVALID_HANDLE_VALUE), flags(0u) + : handle(INVALID_HANDLE_VALUE), flags(0u) { } Handle(const Handle &other) - : handle(other.handle), flags(other.flags) + : handle(other.handle), flags(other.flags) { } }; - QHash<QString, Handle> handleForDir; class PathInfo { public: @@ -118,7 +114,7 @@ private: QDateTime lastModified; PathInfo &operator=(const QFileInfo &fileInfo) - { + { ownerId = fileInfo.ownerId(); groupId = fileInfo.groupId(); permissions = fileInfo.permissions(); @@ -134,8 +130,35 @@ private: || lastModified != fileInfo.lastModified()); } }; - QHash<HANDLE, QHash<QString, PathInfo> > pathInfoForHandle; +private: + QList<QWindowsFileSystemWatcherEngineThread *> threads; + +}; + +class QWindowsFileSystemWatcherEngineThread : public QThread +{ + Q_OBJECT + +public: + QWindowsFileSystemWatcherEngineThread(); + ~QWindowsFileSystemWatcherEngineThread(); + void run(); + void stop(); + void wakeup(); + + QMutex mutex; + QVector<HANDLE> handles; + int msg; + + QHash<QString, QWindowsFileSystemWatcherEngine::Handle> handleForDir; + + QHash<HANDLE, QHash<QString, QWindowsFileSystemWatcherEngine::PathInfo> > pathInfoForHandle; + +Q_SIGNALS: + void fileChanged(const QString &path, bool removed); + void directoryChanged(const QString &path, bool removed); }; + #endif // QT_NO_FILESYSTEMWATCHER QT_END_NAMESPACE diff --git a/src/corelib/io/qfsfileengine.cpp b/src/corelib/io/qfsfileengine.cpp index beafe72..3a43ec7 100644 --- a/src/corelib/io/qfsfileengine.cpp +++ b/src/corelib/io/qfsfileengine.cpp @@ -44,6 +44,7 @@ #include "qdatetime.h" #include "qdiriterator.h" #include "qset.h" +#include <QtCore/qdebug.h> #ifndef QT_NO_FSFILEENGINE @@ -571,7 +572,7 @@ bool QFSFileEnginePrivate::seekFdFh(qint64 pos) } else { // Unbuffered stdio mode. if (QT_LSEEK(fd, pos, SEEK_SET) == -1) { - qWarning("QFile::at: Cannot set file position %lld", pos); + qWarning() << "QFile::at: Cannot set file position" << pos; q->setError(QFile::PositionError, qt_error_string(errno)); return false; } diff --git a/src/corelib/io/qfsfileengine_win.cpp b/src/corelib/io/qfsfileengine_win.cpp index fcace33..53f0144 100644 --- a/src/corelib/io/qfsfileengine_win.cpp +++ b/src/corelib/io/qfsfileengine_win.cpp @@ -109,9 +109,9 @@ static QString qfsPrivateCurrentDir = QLatin1String(""); QT_BEGIN_INCLUDE_NAMESPACE typedef DWORD (WINAPI *PtrGetNamedSecurityInfoW)(LPWSTR, SE_OBJECT_TYPE, SECURITY_INFORMATION, PSID*, PSID*, PACL*, PACL*, PSECURITY_DESCRIPTOR*); static PtrGetNamedSecurityInfoW ptrGetNamedSecurityInfoW = 0; -typedef DECLSPEC_IMPORT BOOL (WINAPI *PtrLookupAccountSidW)(LPCWSTR, PSID, LPWSTR, LPDWORD, LPWSTR, LPDWORD, PSID_NAME_USE); +typedef BOOL (WINAPI *PtrLookupAccountSidW)(LPCWSTR, PSID, LPWSTR, LPDWORD, LPWSTR, LPDWORD, PSID_NAME_USE); static PtrLookupAccountSidW ptrLookupAccountSidW = 0; -typedef DECLSPEC_IMPORT BOOL (WINAPI *PtrAllocateAndInitializeSid)(PSID_IDENTIFIER_AUTHORITY, BYTE, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, PSID*); +typedef BOOL (WINAPI *PtrAllocateAndInitializeSid)(PSID_IDENTIFIER_AUTHORITY, BYTE, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, PSID*); static PtrAllocateAndInitializeSid ptrAllocateAndInitializeSid = 0; typedef VOID (WINAPI *PtrBuildTrusteeWithSidW)(PTRUSTEE_W, PSID); static PtrBuildTrusteeWithSidW ptrBuildTrusteeWithSidW = 0; @@ -119,7 +119,7 @@ typedef VOID (WINAPI *PtrBuildTrusteeWithNameW)(PTRUSTEE_W, unsigned short*); static PtrBuildTrusteeWithNameW ptrBuildTrusteeWithNameW = 0; typedef DWORD (WINAPI *PtrGetEffectiveRightsFromAclW)(PACL, PTRUSTEE_W, OUT PACCESS_MASK); static PtrGetEffectiveRightsFromAclW ptrGetEffectiveRightsFromAclW = 0; -typedef DECLSPEC_IMPORT PVOID (WINAPI *PtrFreeSid)(PSID); +typedef PVOID (WINAPI *PtrFreeSid)(PSID); static PtrFreeSid ptrFreeSid = 0; static TRUSTEE_W currentUserTrusteeW; @@ -165,11 +165,11 @@ void QFSFileEnginePrivate::resolveLibs() if (ptrBuildTrusteeWithNameW) { HINSTANCE versionHnd = LoadLibraryW(L"version"); if (versionHnd) { - typedef DWORD (WINAPI *PtrGetFileVersionInfoSizeW)(LPWSTR lptstrFilename,LPDWORD lpdwHandle); + typedef DWORD (WINAPI *PtrGetFileVersionInfoSizeW)(LPCWSTR lptstrFilename,LPDWORD lpdwHandle); PtrGetFileVersionInfoSizeW ptrGetFileVersionInfoSizeW = (PtrGetFileVersionInfoSizeW)GetProcAddress(versionHnd, "GetFileVersionInfoSizeW"); - typedef BOOL (WINAPI *PtrGetFileVersionInfoW)(LPWSTR lptstrFilename,DWORD dwHandle,DWORD dwLen,LPVOID lpData); + typedef BOOL (WINAPI *PtrGetFileVersionInfoW)(LPCWSTR lptstrFilename,DWORD dwHandle,DWORD dwLen,LPVOID lpData); PtrGetFileVersionInfoW ptrGetFileVersionInfoW = (PtrGetFileVersionInfoW)GetProcAddress(versionHnd, "GetFileVersionInfoW"); - typedef BOOL (WINAPI *PtrVerQueryValueW)(const LPVOID pBlock,LPWSTR lpSubBlock,LPVOID *lplpBuffer,PUINT puLen); + typedef BOOL (WINAPI *PtrVerQueryValueW)(const LPVOID pBlock,LPCWSTR lpSubBlock,LPVOID *lplpBuffer,PUINT puLen); PtrVerQueryValueW ptrVerQueryValueW = (PtrVerQueryValueW)GetProcAddress(versionHnd, "VerQueryValueW"); if(ptrGetFileVersionInfoSizeW && ptrGetFileVersionInfoW && ptrVerQueryValueW) { DWORD fakeHandle; @@ -527,6 +527,29 @@ qint64 QFSFileEnginePrivate::nativeSize() const WIN32_FILE_ATTRIBUTE_DATA attribData; bool ok = ::GetFileAttributesEx((const wchar_t*)nativeFilePath.constData(), GetFileExInfoStandard, &attribData); + if (!ok) { + int errorCode = GetLastError(); + if (errorCode != ERROR_INVALID_NAME + && errorCode != ERROR_FILE_NOT_FOUND && errorCode != ERROR_PATH_NOT_FOUND) { + QByteArray path = nativeFilePath; + // path for the FindFirstFile should not end with a trailing slash + while (path.endsWith('\\')) + path.chop(1); + + // FindFirstFile can not handle drives + if (!path.endsWith(':')) { + WIN32_FIND_DATA findData; + HANDLE hFind = ::FindFirstFile((const wchar_t*)path.constData(), + &findData); + if (hFind != INVALID_HANDLE_VALUE) { + ::FindClose(hFind); + ok = true; + attribData.nFileSizeHigh = findData.nFileSizeHigh; + attribData.nFileSizeLow = findData.nFileSizeLow; + } + } + } + } if (ok) { qint64 size = attribData.nFileSizeHigh; size <<= 32; @@ -878,6 +901,26 @@ static inline bool isDirPath(const QString &dirPath, bool *existed) path += QLatin1Char('\\'); DWORD fileAttrib = ::GetFileAttributes((wchar_t*)QFSFileEnginePrivate::longFileName(path).utf16()); + if (fileAttrib == INVALID_FILE_ATTRIBUTES) { + int errorCode = GetLastError(); + if (errorCode != ERROR_INVALID_NAME + && errorCode != ERROR_FILE_NOT_FOUND && errorCode != ERROR_PATH_NOT_FOUND) { + // path for the FindFirstFile should not end with a trailing slash + while (path.endsWith(QLatin1Char('\\'))) + path.chop(1); + + // FindFirstFile can not handle drives + if (!path.endsWith(QLatin1Char(':'))) { + WIN32_FIND_DATA findData; + HANDLE hFind = ::FindFirstFile((wchar_t*)QFSFileEnginePrivate::longFileName(path).utf16(), + &findData); + if (hFind != INVALID_HANDLE_VALUE) { + ::FindClose(hFind); + fileAttrib = findData.dwFileAttributes; + } + } + } + } if (existed) *existed = fileAttrib != INVALID_FILE_ATTRIBUTES; @@ -1149,6 +1192,27 @@ bool QFSFileEnginePrivate::doStat() const #endif } else { fileAttrib = GetFileAttributes((wchar_t*)QFSFileEnginePrivate::longFileName(fname).utf16()); + if (fileAttrib == INVALID_FILE_ATTRIBUTES) { + int errorCode = GetLastError(); + if (errorCode != ERROR_INVALID_NAME + && errorCode != ERROR_FILE_NOT_FOUND && errorCode != ERROR_PATH_NOT_FOUND) { + QString path = QDir::toNativeSeparators(fname); + // path for the FindFirstFile should not end with a trailing slash + while (path.endsWith(QLatin1Char('\\'))) + path.chop(1); + + // FindFirstFile can not handle drives + if (!path.endsWith(QLatin1Char(':'))) { + WIN32_FIND_DATA findData; + HANDLE hFind = ::FindFirstFile((wchar_t*)QFSFileEnginePrivate::longFileName(path).utf16(), + &findData); + if (hFind != INVALID_HANDLE_VALUE) { + ::FindClose(hFind); + fileAttrib = findData.dwFileAttributes; + } + } + } + } could_stat = fileAttrib != INVALID_FILE_ATTRIBUTES; if (!could_stat) { #if !defined(Q_OS_WINCE) @@ -1519,8 +1583,8 @@ QString QFSFileEngine::fileName(FileName file) const if (!isRelativePath()) { #if !defined(Q_OS_WINCE) - if (d->filePath.size() > 2 && d->filePath.at(1) == QLatin1Char(':') - && d->filePath.at(2) != QLatin1Char('/') || // It's a drive-relative path, so Z:a.txt -> Z:\currentpath\a.txt + if ((d->filePath.size() > 2 && d->filePath.at(1) == QLatin1Char(':') + && d->filePath.at(2) != QLatin1Char('/')) || // It's a drive-relative path, so Z:a.txt -> Z:\currentpath\a.txt d->filePath.startsWith(QLatin1Char('/')) // It's a absolute path to the current drive, so \a.txt -> Z:\a.txt ) { ret = QDir::fromNativeSeparators(nativeAbsoluteFilePath(d->filePath)); @@ -1744,6 +1808,30 @@ QDateTime QFSFileEngine::fileTime(FileTime time) const } else { WIN32_FILE_ATTRIBUTE_DATA attribData; bool ok = ::GetFileAttributesEx((wchar_t*)QFSFileEnginePrivate::longFileName(d->filePath).utf16(), GetFileExInfoStandard, &attribData); + if (!ok) { + int errorCode = GetLastError(); + if (errorCode != ERROR_INVALID_NAME + && errorCode != ERROR_FILE_NOT_FOUND && errorCode != ERROR_PATH_NOT_FOUND) { + QString path = QDir::toNativeSeparators(d->filePath); + // path for the FindFirstFile should not end with a trailing slash + while (path.endsWith(QLatin1Char('\\'))) + path.chop(1); + + // FindFirstFile can not handle drives + if (!path.endsWith(QLatin1Char(':'))) { + WIN32_FIND_DATA findData; + HANDLE hFind = ::FindFirstFile((wchar_t*)QFSFileEnginePrivate::longFileName(path).utf16(), + &findData); + if (hFind != INVALID_HANDLE_VALUE) { + ::FindClose(hFind); + ok = true; + attribData.ftCreationTime = findData.ftCreationTime; + attribData.ftLastWriteTime = findData.ftLastWriteTime; + attribData.ftLastAccessTime = findData.ftLastAccessTime; + } + } + } + } if (ok) { if(time == CreationTime) ret = fileTimeToQDateTime(&attribData.ftCreationTime); diff --git a/src/corelib/io/qresource_iterator.cpp b/src/corelib/io/qresource_iterator.cpp index e97ac59..11f4acf 100644 --- a/src/corelib/io/qresource_iterator.cpp +++ b/src/corelib/io/qresource_iterator.cpp @@ -73,13 +73,11 @@ bool QResourceFileEngineIterator::hasNext() const return false; // Initialize and move to the next entry. - QResourceFileEngineIterator *that = const_cast<QResourceFileEngineIterator *>(this); - that->entries = resource.children(); - if (!that->entries.isEmpty()) - that->index = 0; + entries = resource.children(); + index = 0; } - return index <= entries.size(); + return index < entries.size(); } QString QResourceFileEngineIterator::currentFileName() const diff --git a/src/corelib/io/qresource_iterator_p.h b/src/corelib/io/qresource_iterator_p.h index b5e8382..5165157 100644 --- a/src/corelib/io/qresource_iterator_p.h +++ b/src/corelib/io/qresource_iterator_p.h @@ -71,8 +71,8 @@ public: QString currentFileName() const; private: - QStringList entries; - int index; + mutable QStringList entries; + mutable int index; }; QT_END_NAMESPACE diff --git a/src/corelib/io/qurl.cpp b/src/corelib/io/qurl.cpp index 180e9ec..79cd2f0 100644 --- a/src/corelib/io/qurl.cpp +++ b/src/corelib/io/qurl.cpp @@ -2336,12 +2336,12 @@ static const NameprepCaseFoldingEntry NameprepCaseFolding[] = { { 0x1D7BB, { 0x03C3, 0x0000, 0x0000, 0x0000 } } }; -static void mapToLowerCase(QString *str) +static void mapToLowerCase(QString *str, int from) { int N = sizeof(NameprepCaseFolding) / sizeof(NameprepCaseFolding[0]); QChar *d = 0; - for (int i = 0; i < str->size(); ++i) { + for (int i = from; i < str->size(); ++i) { int uc = str->at(i).unicode(); if (uc < 0x80) { if (uc <= 'Z' && uc >= 'A') { @@ -2388,11 +2388,11 @@ static bool isMappedToNothing(const QChar &ch) } -static void stripProhibitedOutput(QString *str) +static void stripProhibitedOutput(QString *str, int from) { - ushort *out = (ushort *)str->data(); + ushort *out = (ushort *)str->data() + from; const ushort *in = out; - const ushort *end = out + str->size(); + const ushort *end = (ushort *)str->data() + str->size(); while (in < end) { ushort uc = *in; if (uc < 0x80 || @@ -2901,66 +2901,99 @@ static bool isBidirectionalL(const QChar &ch) return false; } +#ifdef QT_BUILD_INTERNAL +// export for tst_qurl.cpp +Q_AUTOTEST_EXPORT void qt_nameprep(QString *source, int from); +Q_AUTOTEST_EXPORT bool qt_check_std3rules(const QChar *uc, int len); +#else +// non-test build, keep the symbols for ourselves +static void qt_nameprep(QString *source, int from); +static bool qt_check_std3rules(const QChar *uc, int len); +#endif -Q_AUTOTEST_EXPORT QString qt_nameprep(const QString &source) +void qt_nameprep(QString *source, int from) { - QString mapped = source; - - bool simple = true; - for (int i = 0; i < mapped.size(); ++i) { - ushort uc = mapped.at(i).unicode(); + QChar *src = source->data(); // causes a detach, so we're sure the only one using it + QChar *out = src + from; + const QChar *e = src + source->size(); + + for ( ; out < e; ++out) { + register ushort uc = out->unicode(); if (uc > 0x80) { - simple = false; break; } else if (uc >= 'A' && uc <= 'Z') { - mapped[i] = QChar(uc | 0x20); + *out = QChar(uc | 0x20); } } - if (simple) - return mapped; - + if (out == e) + return; // everything was mapped easily (lowercased, actually) + int firstNonAscii = out - src; + // Characters commonly mapped to nothing are simply removed // (Table B.1) - QChar *out = mapped.data(); const QChar *in = out; - const QChar *e = in + mapped.size(); while (in < e) { if (!isMappedToNothing(*in)) *out++ = *in; ++in; } if (out != in) - mapped.truncate(out - mapped.constData()); + source->truncate(out - src); // Map to lowercase (Table B.2) - mapToLowerCase(&mapped); + mapToLowerCase(source, firstNonAscii); // Normalize to Unicode 3.2 form KC - mapped = mapped.normalized(QString::NormalizationForm_KC, QChar::Unicode_3_2); + extern void qt_string_normalize(QString *data, QString::NormalizationForm mode, + QChar::UnicodeVersion version, int from); + qt_string_normalize(source, QString::NormalizationForm_KC, QChar::Unicode_3_2, firstNonAscii); // Strip prohibited output - stripProhibitedOutput(&mapped); + stripProhibitedOutput(source, firstNonAscii); // Check for valid bidirectional characters bool containsLCat = false; bool containsRandALCat = false; - for (int j = 0; j < mapped.size() && (!containsLCat || !containsRandALCat); ++j) { - if (isBidirectionalL(mapped.at(j))) + src = source->data(); + e = src + source->size(); + for (in = src + from; in < e && (!containsLCat || !containsRandALCat); ++in) { + if (isBidirectionalL(*in)) containsLCat = true; - else if (isBidirectionalRorAL(mapped.at(j))) + else if (isBidirectionalRorAL(*in)) containsRandALCat = true; } if (containsRandALCat) { - if (containsLCat || (!isBidirectionalRorAL(mapped.at(0)) - || !isBidirectionalRorAL(mapped.at(mapped.size() - 1)))) - mapped.clear(); + if (containsLCat || (!isBidirectionalRorAL(src[from]) + || !isBidirectionalRorAL(e[-1]))) + source->resize(from); // not allowed, clear the label } +} + +bool qt_check_std3rules(const QChar *uc, int len) +{ + if (len > 63) + return false; - return mapped; + for (int i = 0; i < len; ++i) { + register ushort c = uc[i].unicode(); + if (c == '-' && (i == 0 || i == len - 1)) + return false; + + // verifying the absence of LDH is the same as verifying that + // only LDH is present + if (c == '-' || (c >= '0' && c <= '9') + || (c >= 'A' && c <= 'Z') + || (c >= 'a' && c <= 'z')) + continue; + + return false; + } + + return true; } -static inline char encodeDigit(uint digit) +static inline uint encodeDigit(uint digit) { return digit + 22 + 75 * (digit < 26); } @@ -2977,7 +3010,7 @@ static inline uint adapt(uint delta, uint numpoints, bool firsttime) return k + (((base - tmin + 1) * delta) / (delta + skew)); } -static inline void appendEncode(QByteArray* output, uint& delta, uint& bias, uint& b, uint& h) +static inline void appendEncode(QString* output, uint& delta, uint& bias, uint& b, uint& h) { uint qq; uint k; @@ -2991,17 +3024,17 @@ static inline void appendEncode(QByteArray* output, uint& delta, uint& bias, uin t = (k <= bias) ? tmin : (k >= bias + tmax) ? tmax : k - bias; if (qq < t) break; - *output += encodeDigit(t + (qq - t) % (base - t)); + *output += QChar(encodeDigit(t + (qq - t) % (base - t))); qq = (qq - t) / (base - t); } - *output += encodeDigit(qq); + *output += QChar(encodeDigit(qq)); bias = adapt(delta, h + 1, h == b); delta = 0; ++h; } -static void toPunycodeHelper(const QChar *s, int ucLength, QByteArray *output) +static void toPunycodeHelper(const QChar *s, int ucLength, QString *output) { uint n = initial_n; uint delta = 0; @@ -3010,7 +3043,7 @@ static void toPunycodeHelper(const QChar *s, int ucLength, QByteArray *output) int outLen = output->length(); output->resize(outLen + ucLength); - char *d = output->data() + outLen; + QChar *d = output->data() + outLen; bool skipped = false; // copy all basic code points verbatim to output. for (uint j = 0; j < (uint) ucLength; ++j) { @@ -3035,7 +3068,7 @@ static void toPunycodeHelper(const QChar *s, int ucLength, QByteArray *output) // if basic code points were copied, add the delimiter character. if (h > 0) - *output += 0x2d; + *output += QChar(0x2d); // while there are still unprocessed non-basic code points left in // the input string... @@ -3083,7 +3116,7 @@ static void toPunycodeHelper(const QChar *s, int ucLength, QByteArray *output) } // prepend ACE prefix - output->insert(outLen, "xn--"); + output->insert(outLen, QLatin1String("xn--")); return; } @@ -3144,11 +3177,15 @@ static bool qt_is_idn_enabled(const QString &domain) int idx = domain.lastIndexOf(QLatin1Char('.')); if (idx == -1) return false; - const QChar *tld = domain.constData() + idx + 1; + int len = domain.size() - idx - 1; + QString tldString(domain.constData() + idx + 1, len); + qt_nameprep(&tldString, 0); + + const QChar *tld = tldString.constData(); if (user_idn_whitelist) - return user_idn_whitelist->contains(QString(tld, len)); + return user_idn_whitelist->contains(tldString); int l = 0; int r = sizeof(idn_whitelist)/sizeof(const char *) - 1; @@ -3164,46 +3201,127 @@ static bool qt_is_idn_enabled(const QString &domain) return equal(tld, len, idn_whitelist[i]); } -static QString qt_from_ACE(const QString &domainMC) +static inline bool isDotDelimiter(ushort uc) { - QString domain = domainMC.toLower(); - int idx = domain.indexOf(QLatin1Char('.')); - if (idx != -1) { - if (!domain.contains(QLatin1String("xn--"))) { - bool simple = true; - for (int i = 0; i < domain.size(); ++i) { - ushort ch = domain.at(i).unicode(); - if (ch > 'z' || ch < '-' || ch == '/' || (ch > '9' && ch < 'A') || (ch > 'Z' && ch < 'a')) { + // IDNA / rfc3490 describes these four delimiters used for + // separating labels in unicode international domain + // names. + return uc == 0x2e || uc == 0x3002 || uc == 0xff0e || uc == 0xff61; +} + +static int nextDotDelimiter(const QString &domain, int from = 0) +{ + const QChar *b = domain.unicode(); + const QChar *ch = b + from; + const QChar *e = b + domain.length(); + while (ch < e) { + if (isDotDelimiter(ch->unicode())) + break; + else + ++ch; + } + return ch - b; +} + +enum AceOperation { ToAceOnly, NormalizeAce }; +static QString qt_ACE_do(const QString &domain, AceOperation op) +{ + if (domain.isEmpty()) + return domain; + + QString result; + result.reserve(domain.length()); + + const bool isIdnEnabled = op == NormalizeAce ? qt_is_idn_enabled(domain) : false; + int lastIdx = 0; + QString aceForm; // this variable is here for caching + + while (1) { + int idx = nextDotDelimiter(domain, lastIdx); + int labelLength = idx - lastIdx; + if (labelLength == 0) + return QString(); // two delimiters in a row -- empty label not allowed + + // RFC 3490 says, about the ToASCII operation: + // 3. If the UseSTD3ASCIIRules flag is set, then perform these checks: + // + // (a) Verify the absence of non-LDH ASCII code points; that is, the + // absence of 0..2C, 2E..2F, 3A..40, 5B..60, and 7B..7F. + // + // (b) Verify the absence of leading and trailing hyphen-minus; that + // is, the absence of U+002D at the beginning and end of the + // sequence. + // and: + // 8. Verify that the number of code points is in the range 1 to 63 + // inclusive. + + // copy the label to the destination, which also serves as our scratch area, lowercasing it + int prevLen = result.size(); + bool simple = true; + result.resize(prevLen + labelLength); + { + QChar *out = result.data() + prevLen; + const QChar *in = domain.constData() + lastIdx; + const QChar *e = in + labelLength; + for (; in < e; ++in, ++out) { + register ushort uc = in->unicode(); + if (uc > 0x7f) simple = false; - break; - } + if (uc >= 'A' && uc <= 'Z') + *out = QChar(uc | 0x20); + else + *out = *in; } - if (simple) - return domain; } - - const bool isIdnEnabled = qt_is_idn_enabled(domain); - int lastIdx = 0; - QString result; - while (1) { - // Nameprep the host. If the labels in the hostname are Punycode - // encoded, we decode them immediately, then nameprep them. - QByteArray label; - toPunycodeHelper(domain.constData() + lastIdx, idx - lastIdx, &label); - result += qt_nameprep(isIdnEnabled ? QUrl::fromPunycode(label) : QString::fromLatin1(label)); - lastIdx = idx + 1; - if (lastIdx < domain.size() + 1) - result += QLatin1Char('.'); - else - break; - idx = domain.indexOf(QLatin1Char('.'), lastIdx); - if (idx == -1) - idx = domain.size(); + + if (simple && labelLength > 6) { + // ACE form domains contain only ASCII characters, but we can't consider them simple + // is this an ACE form? + // the shortest valid ACE domain is 6 characters long (U+0080 would be 1, but it's not allowed) + static const ushort acePrefixUtf16[] = { 'x', 'n', '-', '-' }; + if (memcmp(result.constData() + prevLen, acePrefixUtf16, sizeof acePrefixUtf16) == 0) + simple = false; } - return result; - } else { - return qt_nameprep(domain); + + if (simple) { + // fastest case: this is the common case (non IDN-domains) + // so we're done + if (!qt_check_std3rules(result.constData() + prevLen, labelLength)) + return QString(); + } else { + // Punycode encoding and decoding cannot be done in-place + // That means we need one or two temporaries + qt_nameprep(&result, prevLen); + labelLength = result.length() - prevLen; + register int toReserve = labelLength + 4 + 6; // "xn--" plus some extra bytes + if (toReserve > aceForm.capacity()) + aceForm.reserve(toReserve); + toPunycodeHelper(result.constData() + prevLen, result.size() - prevLen, &aceForm); + + // We use resize()+memcpy() here because we're overwriting the data we've copied + if (isIdnEnabled) { + QString tmp = QUrl::fromPunycode(aceForm.toLatin1()); + if (tmp.isEmpty()) + return QString(); // shouldn't happen, since we've just punycode-encoded it + result.resize(prevLen + tmp.size()); + memcpy(result.data() + prevLen, tmp.constData(), tmp.size() * sizeof(QChar)); + } else { + result.resize(prevLen + aceForm.size()); + memcpy(result.data() + prevLen, aceForm.constData(), aceForm.size() * sizeof(QChar)); + } + + if (!qt_check_std3rules(aceForm.constData(), aceForm.size())) + return QString(); + } + + + lastIdx = idx + 1; + if (lastIdx < domain.size() + 1) + result += QLatin1Char('.'); + else + break; } + return result; } @@ -3246,12 +3364,27 @@ QUrlPrivate::QUrlPrivate(const QUrlPrivate ©) QString QUrlPrivate::canonicalHost() const { - if (QURL_HASFLAG(stateFlags, HostCanonicalized)) + if (QURL_HASFLAG(stateFlags, HostCanonicalized) || host.isEmpty()) return host; QUrlPrivate *that = const_cast<QUrlPrivate *>(this); QURL_SETFLAG(that->stateFlags, HostCanonicalized); - that->host = qt_from_ACE(host); + if (host.contains(QLatin1Char(':'))) { + // This is an IP Literal, use _IPLiteral to validate + QByteArray ba = host.toLatin1(); + if (!ba.startsWith('[')) { + // surround the IP Literal with [ ] if it's not already done so + ba.reserve(ba.length() + 2); + ba.prepend('['); + ba.append(']'); + } + + const char *ptr = ba.constData(); + if (!_IPLiteral(&ptr)) + that->host.clear(); + } else { + that->host = qt_ACE_do(host, NormalizeAce); + } return that->host; } @@ -3737,7 +3870,10 @@ QByteArray QUrlPrivate::toEncoded(QUrl::FormattingOptions options) const } } - url += QUrl::toAce(host); + if (host.startsWith(QLatin1Char('['))) + url += host.toLatin1(); + else + url += QUrl::toAce(host); if (!(options & QUrl::RemovePort) && port != -1) { url += ':'; url += QString::number(port).toAscii(); @@ -4412,8 +4548,6 @@ void QUrl::setHost(const QString &host) QURL_UNSETFLAG(d->stateFlags, QUrlPrivate::Validated | QUrlPrivate::Normalized | QUrlPrivate::HostCanonicalized); d->host = host; - if (d->host.contains(QLatin1Char(':'))) - d->host = QLatin1Char('[') + d->host + QLatin1Char(']'); } /*! @@ -5425,9 +5559,9 @@ QByteArray QUrl::toPercentEncoding(const QString &input, const QByteArray &exclu */ QByteArray QUrl::toPunycode(const QString &uc) { - QByteArray output; + QString output; toPunycodeHelper(uc.constData(), uc.size(), &output); - return output; + return output.toLatin1(); } /*! @@ -5528,7 +5662,7 @@ QString QUrl::fromPunycode(const QByteArray &pc) */ QString QUrl::fromAce(const QByteArray &domain) { - return qt_from_ACE(QString::fromLatin1(domain)); + return qt_ACE_do(QString::fromLatin1(domain), NormalizeAce); } /*! @@ -5545,26 +5679,8 @@ QString QUrl::fromAce(const QByteArray &domain) */ QByteArray QUrl::toAce(const QString &domain) { - // IDNA / rfc3490 describes these four delimiters used for - // separating labels in unicode international domain - // names. - QString nameprepped = qt_nameprep(domain); - int lastIdx = 0; - QByteArray result; - for (int i = 0; i < nameprepped.size(); ++i) { - ushort uc = nameprepped.at(i).unicode(); - if (uc == 0x2e || uc == 0x3002 || uc == 0xff0e || uc == 0xff61) { - if (lastIdx) - result += '.'; - toPunycodeHelper(nameprepped.constData() + lastIdx, i - lastIdx, &result); - lastIdx = i + 1; - } - } - if (lastIdx) - result += '.'; - toPunycodeHelper(nameprepped.constData() + lastIdx, nameprepped.size() - lastIdx, &result); - - return result; + QString result = qt_ACE_do(domain, ToAceOnly); + return result.toLatin1(); } /*! diff --git a/src/corelib/kernel/qcore_unix.cpp b/src/corelib/kernel/qcore_unix.cpp index b04abae..c5b0fc7 100644 --- a/src/corelib/kernel/qcore_unix.cpp +++ b/src/corelib/kernel/qcore_unix.cpp @@ -34,7 +34,7 @@ ** met: http://www.gnu.org/copyleft/gpl.html. ** ** If you are unsure which license is appropriate for your use, please -** contact the sales department at qt-sales@nokia.com. +** contact the sales department at http://www.qtsoftware.com/contact. ** $QT_END_LICENSE$ ** ****************************************************************************/ diff --git a/src/corelib/kernel/qcore_unix_p.h b/src/corelib/kernel/qcore_unix_p.h index 8d43897..dd97841 100644 --- a/src/corelib/kernel/qcore_unix_p.h +++ b/src/corelib/kernel/qcore_unix_p.h @@ -69,10 +69,27 @@ struct sockaddr; -#if defined(Q_OS_LINUX) && defined(O_CLOEXEC) && defined(__GLIBC__) && (__GLIBC__ * 0x100 + __GLIBC_MINOR__) >= 0x0204 +#if defined(Q_OS_LINUX) && defined(__GLIBC__) && (__GLIBC__ * 0x100 + __GLIBC_MINOR__) >= 0x0204 // Linux supports thread-safe FD_CLOEXEC # define QT_UNIX_SUPPORTS_THREADSAFE_CLOEXEC 1 +// add defines for the consts for Linux +# ifndef O_CLOEXEC +# define O_CLOEXEC 02000000 +# endif +# ifndef FD_DUPFD_CLOEXEC +# define F_DUPFD_CLOEXEC 1030 +# endif +# ifndef SOCK_CLOEXEC +# define SOCK_CLOEXEC O_CLOEXEC +# endif +# ifndef SOCK_NONBLOCK +# define SOCK_NONBLOCK O_NONBLOCK +# endif +# ifndef MSG_CMSG_CLOEXEC +# define MSG_CMSG_CLOEXEC 0x40000000 +# endif + QT_BEGIN_NAMESPACE namespace QtLibcSupplement { Q_CORE_EXPORT int accept4(int, sockaddr *, QT_SOCKLEN_T *, int flags); diff --git a/src/corelib/kernel/qcoreapplication_win.cpp b/src/corelib/kernel/qcoreapplication_win.cpp index a71f284..bf5716a 100644 --- a/src/corelib/kernel/qcoreapplication_win.cpp +++ b/src/corelib/kernel/qcoreapplication_win.cpp @@ -280,7 +280,7 @@ QT_END_INCLUDE_NAMESPACE // The values below should never change. Note that none of the usual // WM_...FIRST & WM_...LAST values are in the list, as they normally have other // WM_... representations -struct { +struct KnownWM { uint WM; const char* str; } knownWM[] = @@ -582,7 +582,7 @@ struct { { 0,0 }}; // End of known messages // Looks up the WM_ message in the table above -const char* findWMstr(uint msg) +static const char* findWMstr(uint msg) { uint i = 0; const char* result = 0; diff --git a/src/corelib/kernel/qcoreevent.cpp b/src/corelib/kernel/qcoreevent.cpp index 1d70a53..2a317dd 100644 --- a/src/corelib/kernel/qcoreevent.cpp +++ b/src/corelib/kernel/qcoreevent.cpp @@ -219,6 +219,7 @@ QT_BEGIN_NAMESPACE \value WindowStateChange The \l{QWidget::windowState()}{window's state} (minimized, maximized or full-screen) has changed (QWindowStateChangeEvent). \value WindowTitleChange The window title has changed. \value WindowUnblocked The window is unblocked after a modal dialog exited. + \value Wrapped The event is a wrapper for, i.e., contains, another event (QWrappedEvent). \value ZOrderChange The widget's z-order has changed. This event is never sent to top level windows. \value KeyboardLayoutChange The keyboard layout has changed. \value DynamicPropertyChange A dynamic property was added, changed or removed from the object. @@ -267,7 +268,6 @@ QT_BEGIN_NAMESPACE \omitvalue NetworkReplyUpdated \omitvalue FutureCallOut \omitvalue CocoaRequestModal - \omitvalue Wrapped \omitvalue Signal \omitvalue WinGesture */ diff --git a/src/corelib/kernel/qeventdispatcher_unix.cpp b/src/corelib/kernel/qeventdispatcher_unix.cpp index 0eeea04..9deb78f 100644 --- a/src/corelib/kernel/qeventdispatcher_unix.cpp +++ b/src/corelib/kernel/qeventdispatcher_unix.cpp @@ -59,6 +59,10 @@ # include <sys/times.h> #endif +#ifdef Q_OS_MAC +#include <mach/mach_time.h> +#endif + QT_BEGIN_NAMESPACE Q_CORE_EXPORT bool qt_disable_lowpriority_timers=false; @@ -259,7 +263,7 @@ int QEventDispatcherUNIXPrivate::doSelect(QEventLoop::ProcessEventsFlags flags, QTimerInfoList::QTimerInfoList() { -#if (_POSIX_MONOTONIC_CLOCK-0 <= 0) +#if (_POSIX_MONOTONIC_CLOCK-0 <= 0) && !defined(Q_OS_MAC) useMonotonicTimers = false; # if (_POSIX_MONOTONIC_CLOCK == 0) @@ -287,6 +291,9 @@ QTimerInfoList::QTimerInfoList() msPerTick = 0; } #else +# if defined(Q_OS_MAC) + useMonotonicTimers = true; +# endif // using monotonic timers unconditionally getTime(currentTime); #endif @@ -335,7 +342,19 @@ bool QTimerInfoList::timeChanged(timeval *delta) void QTimerInfoList::getTime(timeval &t) { -#if !defined(QT_NO_CLOCK_MONOTONIC) && !defined(QT_BOOTSTRAPPED) +#if defined(Q_OS_MAC) + { + static mach_timebase_info_data_t info = {0,0}; + if (info.denom == 0) + mach_timebase_info(&info); + + uint64_t cpu_time = mach_absolute_time(); + uint64_t nsecs = cpu_time * (info.numer / info.denom); + t.tv_sec = nsecs * 1e-9; + t.tv_usec = nsecs * 1e-3 - (t.tv_sec * 1e6); + return; + } +#elif !defined(QT_NO_CLOCK_MONOTONIC) && !defined(QT_BOOTSTRAPPED) if (useMonotonicTimers) { timespec ts; clock_gettime(CLOCK_MONOTONIC, &ts); diff --git a/src/corelib/kernel/qmetaobject.cpp b/src/corelib/kernel/qmetaobject.cpp index a4c4ba2..fc17e00 100644 --- a/src/corelib/kernel/qmetaobject.cpp +++ b/src/corelib/kernel/qmetaobject.cpp @@ -2350,6 +2350,8 @@ QMetaMethod QMetaProperty::notifySignal() const } /*! + \since 4.6 + Returns the index of the property change notifying signal if one was specified, otherwise returns -1. diff --git a/src/corelib/kernel/qmetatype.cpp b/src/corelib/kernel/qmetatype.cpp index 91266db..bd27ec2 100644 --- a/src/corelib/kernel/qmetatype.cpp +++ b/src/corelib/kernel/qmetatype.cpp @@ -171,6 +171,11 @@ QT_BEGIN_NAMESPACE \value QBitmap QBitmap \value QMatrix QMatrix \value QTransform QTransform + \value QMatrix4x4 QMatrix4x4 + \value QVector2D QVector2D + \value QVector3D QVector3D + \value QVector4D QVector4D + \value QQuaternion QQuaternion \value User Base value for user types @@ -272,6 +277,11 @@ static const struct { const char * typeName; int type; } types[] = { {"QTextFormat", QMetaType::QTextFormat}, {"QMatrix", QMetaType::QMatrix}, {"QTransform", QMetaType::QTransform}, + {"QMatrix4x4", QMetaType::QMatrix4x4}, + {"QVector2D", QMetaType::QVector2D}, + {"QVector3D", QMetaType::QVector3D}, + {"QVector4D", QMetaType::QVector4D}, + {"QQuaternion", QMetaType::QQuaternion}, /* All Metatype builtins */ {"void*", QMetaType::VoidStar}, @@ -430,16 +440,15 @@ int QMetaType::registerType(const char *typeName, Destructor destructor, #endif QWriteLocker locker(customTypesLock()); - static int currentIdx = User; int idx = qMetaTypeType_unlocked(normalizedTypeName); if (!idx) { - idx = currentIdx++; - ct->resize(ct->count() + 1); - QCustomTypeInfo &inf = (*ct)[idx - User]; + QCustomTypeInfo inf; inf.typeName = normalizedTypeName; inf.constr = constructor; inf.destr = destructor; + idx = ct->size() + User; + ct->append(inf); } return idx; } @@ -671,6 +680,11 @@ bool QMetaType::save(QDataStream &stream, int type, const void *data) case QMetaType::QTextFormat: case QMetaType::QMatrix: case QMetaType::QTransform: + case QMetaType::QMatrix4x4: + case QMetaType::QVector2D: + case QMetaType::QVector3D: + case QMetaType::QVector4D: + case QMetaType::QQuaternion: if (!qMetaTypeGuiHelper) return false; qMetaTypeGuiHelper[type - FirstGuiType].saveOp(stream, data); @@ -863,6 +877,11 @@ bool QMetaType::load(QDataStream &stream, int type, void *data) case QMetaType::QTextFormat: case QMetaType::QMatrix: case QMetaType::QTransform: + case QMetaType::QMatrix4x4: + case QMetaType::QVector2D: + case QMetaType::QVector3D: + case QMetaType::QVector4D: + case QMetaType::QQuaternion: if (!qMetaTypeGuiHelper) return false; qMetaTypeGuiHelper[type - FirstGuiType].loadOp(stream, data); diff --git a/src/corelib/kernel/qmetatype.h b/src/corelib/kernel/qmetatype.h index 497c014..052312c 100644 --- a/src/corelib/kernel/qmetatype.h +++ b/src/corelib/kernel/qmetatype.h @@ -79,7 +79,9 @@ public: QIcon = 69, QImage = 70, QPolygon = 71, QRegion = 72, QBitmap = 73, QCursor = 74, QSizePolicy = 75, QKeySequence = 76, QPen = 77, QTextLength = 78, QTextFormat = 79, QMatrix = 80, QTransform = 81, - LastGuiType = 81 /* QTransform */, + QMatrix4x4 = 82, QVector2D = 83, QVector3D = 84, QVector4D = 85, + QQuaternion = 86, + LastGuiType = 86 /* QQuaternion */, FirstCoreExtType = 128 /* VoidStar */, VoidStar = 128, Long = 129, Short = 130, Char = 131, ULong = 132, @@ -292,6 +294,11 @@ class QTextLength; class QTextFormat; class QMatrix; class QTransform; +class QMatrix4x4; +class QVector2D; +class QVector3D; +class QVector4D; +class QQuaternion; QT_END_NAMESPACE @@ -354,6 +361,11 @@ Q_DECLARE_BUILTIN_METATYPE(QTextLength, QTextLength) Q_DECLARE_BUILTIN_METATYPE(QTextFormat, QTextFormat) Q_DECLARE_BUILTIN_METATYPE(QMatrix, QMatrix) Q_DECLARE_BUILTIN_METATYPE(QTransform, QTransform) +Q_DECLARE_BUILTIN_METATYPE(QMatrix4x4, QMatrix4x4) +Q_DECLARE_BUILTIN_METATYPE(QVector2D, QVector2D) +Q_DECLARE_BUILTIN_METATYPE(QVector3D, QVector3D) +Q_DECLARE_BUILTIN_METATYPE(QVector4D, QVector4D) +Q_DECLARE_BUILTIN_METATYPE(QQuaternion, QQuaternion) QT_END_HEADER diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp index 8517897..ab91799 100644 --- a/src/corelib/kernel/qobject.cpp +++ b/src/corelib/kernel/qobject.cpp @@ -881,7 +881,7 @@ QObject::~QObject() QObjectPrivate::Connection::~Connection() { if (argumentTypes != &DIRECT_CONNECTION_ONLY) - delete [] argumentTypes; + delete [] static_cast<int *>(argumentTypes); } diff --git a/src/corelib/kernel/qsharedmemory_unix.cpp b/src/corelib/kernel/qsharedmemory_unix.cpp index 04739ff..05369c4 100644 --- a/src/corelib/kernel/qsharedmemory_unix.cpp +++ b/src/corelib/kernel/qsharedmemory_unix.cpp @@ -85,7 +85,7 @@ void QSharedMemoryPrivate::setErrorString(const QString &function) error = QSharedMemory::AlreadyExists; break; case ENOENT: - errorString = QSharedMemory::tr("%1: doesn't exists").arg(function); + errorString = QSharedMemory::tr("%1: doesn't exist").arg(function); error = QSharedMemory::NotFound; break; case EMFILE: @@ -124,7 +124,7 @@ key_t QSharedMemoryPrivate::handle() // ftok requires that an actual file exists somewhere QString fileName = makePlatformSafeKey(key); if (!QFile::exists(fileName)) { - errorString = QSharedMemory::tr("%1: unix key file doesn't exists").arg(QLatin1String("QSharedMemory::handle:")); + errorString = QSharedMemory::tr("%1: UNIX key file doesn't exist").arg(QLatin1String("QSharedMemory::handle:")); error = QSharedMemory::NotFound; return 0; } diff --git a/src/corelib/kernel/qsharedmemory_win.cpp b/src/corelib/kernel/qsharedmemory_win.cpp index c88149a..ae64806 100644 --- a/src/corelib/kernel/qsharedmemory_win.cpp +++ b/src/corelib/kernel/qsharedmemory_win.cpp @@ -71,7 +71,7 @@ void QSharedMemoryPrivate::setErrorString(const QString &function) case ERROR_INVALID_PARAMETER: #endif error = QSharedMemory::NotFound; - errorString = QSharedMemory::tr("%1: doesn't exists").arg(function); + errorString = QSharedMemory::tr("%1: doesn't exist").arg(function); break; case ERROR_COMMITMENT_LIMIT: error = QSharedMemory::InvalidSize; diff --git a/src/corelib/kernel/qvariant.cpp b/src/corelib/kernel/qvariant.cpp index 2ef9de4..2b5ea0a 100644 --- a/src/corelib/kernel/qvariant.cpp +++ b/src/corelib/kernel/qvariant.cpp @@ -1264,6 +1264,7 @@ const QVariant::Handler *QVariant::handler = &qt_kernel_variant_handler; \value Map a QVariantMap \value Matrix a QMatrix \value Transform a QTransform + \value Matrix4x4 a QMatrix4x4 \value Palette a QPalette \value Pen a QPen \value Pixmap a QPixmap @@ -1271,6 +1272,7 @@ const QVariant::Handler *QVariant::handler = &qt_kernel_variant_handler; \value PointArray a QPointArray \value PointF a QPointF \value Polygon a QPolygon + \value Quaternion a QQuaternion \value Rect a QRect \value RectF a QRectF \value RegExp a QRegExp @@ -1286,6 +1288,9 @@ const QVariant::Handler *QVariant::handler = &qt_kernel_variant_handler; \value UInt a \l uint \value ULongLong a \l qulonglong \value Url a QUrl + \value Vector2D a QVector2D + \value Vector3D a QVector3D + \value Vector4D a QVector4D \value UserType Base value for user-defined types. @@ -1677,7 +1682,7 @@ QVariant::QVariant(Qt::GlobalColor color) { create(62, &color); } Note that return values in the ranges QVariant::Char through QVariant::RegExp and QVariant::Font through QVariant::Transform correspond to the values in the ranges QMetaType::QChar through - QMetaType::QRegExp and QMetaType::QFont through QMetaType::QTransform. + QMetaType::QRegExp and QMetaType::QFont through QMetaType::QQuaternion. Pay particular attention when working with char and QChar variants. Note that there is no QVariant constructor specifically diff --git a/src/corelib/kernel/qvariant.h b/src/corelib/kernel/qvariant.h index e923844..a68939d 100644 --- a/src/corelib/kernel/qvariant.h +++ b/src/corelib/kernel/qvariant.h @@ -154,7 +154,12 @@ class Q_CORE_EXPORT QVariant TextFormat = 79, Matrix = 80, Transform = 81, - LastGuiType = Transform, + Matrix4x4 = 82, + Vector2D = 83, + Vector3D = 84, + Vector4D = 85, + Quaternion = 86, + LastGuiType = Quaternion, UserType = 127, #ifdef QT3_SUPPORT diff --git a/src/corelib/statemachine/qabstracttransition.cpp b/src/corelib/statemachine/qabstracttransition.cpp index 670aa7d..0004d3e 100644 --- a/src/corelib/statemachine/qabstracttransition.cpp +++ b/src/corelib/statemachine/qabstracttransition.cpp @@ -115,13 +115,10 @@ QAbstractTransitionPrivate *QAbstractTransitionPrivate::get(QAbstractTransition QStateMachine *QAbstractTransitionPrivate::machine() const { - QObject *par = parent; - while (par != 0) { - if (QStateMachine *mach = qobject_cast<QStateMachine*>(par)) - return mach; - par = par->parent(); - } - return 0; + QState *source = sourceState(); + if (!source) + return 0; + return source->machine(); } bool QAbstractTransitionPrivate::callEventTest(QEvent *e) @@ -256,10 +253,6 @@ void QAbstractTransition::setTargetStates(const QList<QAbstractState*> &targets) qWarning("QAbstractTransition::setTargetStates: target state(s) cannot be null"); return; } - if (target->machine() != 0 && target->machine()->rootState() == target) { - qWarning("QAbstractTransition::setTargetStates: root state cannot be target of transition"); - return; - } } d->targetStates.clear(); diff --git a/src/corelib/statemachine/qstate.cpp b/src/corelib/statemachine/qstate.cpp index 83dd869..f74edc3 100644 --- a/src/corelib/statemachine/qstate.cpp +++ b/src/corelib/statemachine/qstate.cpp @@ -71,7 +71,7 @@ QT_BEGIN_NAMESPACE The assignProperty() function is used for defining property assignments that should be performed when a state is entered. - Top-level states must be passed QStateMachine::rootState() as their parent + Top-level states must be passed a QStateMachine object as their parent state, or added to a state machine using QStateMachine::addState(). \section1 States with Child States @@ -242,7 +242,7 @@ void QState::assignProperty(QObject *object, const char *name, /*! Returns this state's error state. - \sa QStateMachine::errorState(), QStateMachine::setErrorState() + \sa QStateMachine::error() */ QAbstractState *QState::errorState() const { @@ -256,19 +256,17 @@ QAbstractState *QState::errorState() const state recursively. If no error state is set for the state itself or any of its ancestors, an error will cause the machine to stop executing and an error will be printed to the console. - - \sa QStateMachine::setErrorState(), QStateMachine::errorState() */ void QState::setErrorState(QAbstractState *state) { Q_D(QState); - if (state != 0 && state->machine() != machine()) { - qWarning("QState::setErrorState: error state cannot belong " - "to a different state machine"); + if (state != 0 && qobject_cast<QStateMachine*>(state)) { + qWarning("QStateMachine::setErrorState: root state cannot be error state"); return; } - if (state != 0 && state->machine() != 0 && state->machine()->rootState() == state) { - qWarning("QStateMachine::setErrorState: root state cannot be error state"); + if (state != 0 && (!state->machine() || ((state->machine() != machine()) && !qobject_cast<QStateMachine*>(this)))) { + qWarning("QState::setErrorState: error state cannot belong " + "to a different state machine"); return; } @@ -288,12 +286,7 @@ QAbstractTransition *QState::addTransition(QAbstractTransition *transition) return 0; } - // machine() will always be non-null for root state - if (machine() != 0 && machine()->rootState() == this) { - qWarning("QState::addTransition: cannot add transition from root state"); - return 0; - } - + transition->setParent(this); const QList<QPointer<QAbstractState> > &targets = QAbstractTransitionPrivate::get(transition)->targetStates; for (int i = 0; i < targets.size(); ++i) { QAbstractState *t = targets.at(i); @@ -308,7 +301,6 @@ QAbstractTransition *QState::addTransition(QAbstractTransition *transition) return 0; } } - transition->setParent(this); if (machine() != 0 && machine()->configuration().contains(this)) QStateMachinePrivate::get(machine())->registerTransitions(this); return transition; diff --git a/src/corelib/statemachine/qstatemachine.cpp b/src/corelib/statemachine/qstatemachine.cpp index bf3ee31..5402b04 100644 --- a/src/corelib/statemachine/qstatemachine.cpp +++ b/src/corelib/statemachine/qstatemachine.cpp @@ -102,14 +102,9 @@ QT_BEGIN_NAMESPACE Framework}{overview} gives several state graphs and the code to build them. - The rootState() is the parent of all top-level states in the - machine; it is used, for instance, when the state graph is - deleted. It is created by the machine. - - Use the addState() function to add a state to the state machine. - All top-level states are added to the root state. States are - removed with the removeState() function. Removing states while the - machine is running is discouraged. + Use the addState() function to add a top-level state to the state machine. + States are removed with the removeState() function. Removing states while + the machine is running is discouraged. Before the machine can be started, the \l{initialState}{initial state} must be set. The initial state is the state that the @@ -179,26 +174,6 @@ This is */ /*! - \property QStateMachine::rootState - - \brief the root state of this state machine -*/ - -/*! - \property QStateMachine::initialState - - \brief the initial state of this state machine - - The initial state must be one of the rootState()'s child states. -*/ - -/*! - \property QStateMachine::errorState - - \brief the error state of this state machine -*/ - -/*! \property QStateMachine::errorString \brief the error string of this state machine @@ -235,7 +210,6 @@ QStateMachinePrivate::QStateMachinePrivate() stop = false; error = QStateMachine::NoError; globalRestorePolicy = QStateMachine::DoNotRestoreProperties; - rootState = 0; signalEventGenerator = 0; #ifndef QT_NO_ANIMATION animationsEnabled = true; @@ -255,6 +229,11 @@ QStateMachinePrivate *QStateMachinePrivate::get(QStateMachine *q) return 0; } +QState *QStateMachinePrivate::rootState() const +{ + return const_cast<QStateMachine*>(q_func()); +} + static QEvent *cloneEvent(QEvent *e) { switch (e->type()) { @@ -302,7 +281,9 @@ bool QStateMachinePrivate::stateEntryLessThan(QAbstractState *s1, QAbstractState } else if (isDescendantOf(s2, s1)) { return true; } else { - QState *lca = findLCA(QList<QAbstractState*>() << s1 << s2); + Q_ASSERT(s1->machine() != 0); + QStateMachinePrivate *mach = QStateMachinePrivate::get(s1->machine()); + QState *lca = mach->findLCA(QList<QAbstractState*>() << s1 << s2); Q_ASSERT(lca != 0); return (indexOfDescendant(lca, s1) < indexOfDescendant(lca, s2)); } @@ -318,17 +299,19 @@ bool QStateMachinePrivate::stateExitLessThan(QAbstractState *s1, QAbstractState } else if (isDescendantOf(s2, s1)) { return false; } else { - QState *lca = findLCA(QList<QAbstractState*>() << s1 << s2); + Q_ASSERT(s1->machine() != 0); + QStateMachinePrivate *mach = QStateMachinePrivate::get(s1->machine()); + QState *lca = mach->findLCA(QList<QAbstractState*>() << s1 << s2); Q_ASSERT(lca != 0); return (indexOfDescendant(lca, s1) < indexOfDescendant(lca, s2)); } } -QState *QStateMachinePrivate::findLCA(const QList<QAbstractState*> &states) +QState *QStateMachinePrivate::findLCA(const QList<QAbstractState*> &states) const { if (states.isEmpty()) return 0; - QList<QState*> ancestors = properAncestors(states.at(0), 0); + QList<QState*> ancestors = properAncestors(states.at(0), rootState()->parentState()); for (int i = 0; i < ancestors.size(); ++i) { QState *anc = ancestors.at(i); bool ok = true; @@ -376,7 +359,7 @@ QSet<QAbstractTransition*> QStateMachinePrivate::selectTransitions(QEvent *event continue; if (isPreempted(state, enabledTransitions)) continue; - QList<QState*> lst = properAncestors(state, 0); + QList<QState*> lst = properAncestors(state, rootState()->parentState()); if (QState *grp = qobject_cast<QState*>(state)) lst.prepend(grp); bool found = false; @@ -557,11 +540,13 @@ QList<QAbstractState*> QStateMachinePrivate::enterStates(QEvent *event, const QL if (isFinal(s)) { QState *parent = s->parentState(); if (parent) { - QState *grandparent = parent->parentState(); + if (parent != rootState()) { #ifdef QSTATEMACHINE_DEBUG - qDebug() << q << ": emitting finished signal for" << parent; + qDebug() << q << ": emitting finished signal for" << parent; #endif - QStatePrivate::get(parent)->emitFinished(); + QStatePrivate::get(parent)->emitFinished(); + } + QState *grandparent = parent->parentState(); if (grandparent && isParallel(grandparent)) { bool allChildStatesFinal = true; QList<QAbstractState*> childStates = QStatePrivate::get(grandparent)->childStates(); @@ -572,7 +557,7 @@ QList<QAbstractState*> QStateMachinePrivate::enterStates(QEvent *event, const QL break; } } - if (allChildStatesFinal) { + if (allChildStatesFinal && (grandparent != rootState())) { #ifdef QSTATEMACHINE_DEBUG qDebug() << q << ": emitting finished signal for" << grandparent; #endif @@ -585,7 +570,7 @@ QList<QAbstractState*> QStateMachinePrivate::enterStates(QEvent *event, const QL { QSet<QAbstractState*>::const_iterator it; for (it = configuration.constBegin(); it != configuration.constEnd(); ++it) { - if (isFinal(*it) && (*it)->parentState() == rootState) { + if (isFinal(*it) && (*it)->parentState() == rootState()) { processing = false; stopProcessingReason = Finished; break; @@ -630,6 +615,11 @@ void QStateMachinePrivate::addStatesToEnter(QAbstractState *s, QState *root, } } } else { + if (s == rootState()) { + // Error has already been set by exitStates(). + Q_ASSERT(error != QStateMachine::NoError); + return; + } statesToEnter.insert(s); if (isParallel(s)) { QState *grp = qobject_cast<QState*>(s); @@ -643,6 +633,7 @@ void QStateMachinePrivate::addStatesToEnter(QAbstractState *s, QState *root, QState *grp = qobject_cast<QState*>(s); QAbstractState *initial = grp->initialState(); if (initial != 0) { + Q_ASSERT(initial->machine() == q_func()); addStatesToEnter(initial, grp, statesToEnter, statesForDefaultEntry); } else { setError(QStateMachine::NoInitialStateError, grp); @@ -873,20 +864,26 @@ bool QStateMachinePrivate::isParallel(const QAbstractState *s) return ss && (QStatePrivate::get(ss)->childMode == QState::ParallelStates); } -bool QStateMachinePrivate::isCompound(const QAbstractState *s) +bool QStateMachinePrivate::isCompound(const QAbstractState *s) const { const QState *group = qobject_cast<const QState*>(s); if (!group) return false; + bool isMachine = (qobject_cast<const QStateMachine*>(group) != 0); + // Don't treat the machine as compound if it's a sub-state of this machine + if (isMachine && (group != rootState())) + return false; return (!isParallel(group) && !QStatePrivate::get(group)->childStates().isEmpty()) - || (qobject_cast<QStateMachine*>(group->parent()) != 0); + || isMachine; } -bool QStateMachinePrivate::isAtomic(const QAbstractState *s) +bool QStateMachinePrivate::isAtomic(const QAbstractState *s) const { const QState *ss = qobject_cast<const QState*>(s); return (ss && QStatePrivate::get(ss)->childStates().isEmpty()) - || isFinal(s); + || isFinal(s) + // Treat the machine as atomic if it's a sub-state of this machine + || (ss && (qobject_cast<const QStateMachine*>(ss) != 0) && (ss != rootState())); } @@ -1034,7 +1031,7 @@ void QStateMachinePrivate::setError(QStateMachine::Error errorCode, QAbstractSta if (currentContext == currentErrorState) currentErrorState = 0; - Q_ASSERT(currentErrorState != rootState); + Q_ASSERT(currentErrorState != rootState()); if (currentErrorState != 0) { QState *lca = findLCA(QList<QAbstractState*>() << currentErrorState << currentContext); @@ -1141,11 +1138,8 @@ void QStateMachinePrivate::_q_start() { Q_Q(QStateMachine); Q_ASSERT(state == Starting); - if (!rootState) { - state = NotRunning; - return; - } - QAbstractState *initial = rootState->initialState(); + Q_ASSERT(rootState() != 0); + QAbstractState *initial = rootState()->initialState(); configuration.clear(); qDeleteAll(internalEventQueue); internalEventQueue.clear(); @@ -1159,7 +1153,7 @@ void QStateMachinePrivate::_q_start() processingScheduled = true; // we call _q_process() below emit q->started(); - StartState *start = new StartState(rootState); + StartState *start = new StartState(rootState()); QAbstractTransition *initialTransition = new InitialTransition(initial); start->addTransition(initialTransition); QList<QAbstractTransition*> transitions; @@ -1371,15 +1365,22 @@ void QStateMachinePrivate::unregisterSignalTransition(QSignalTransition *transit void QStateMachinePrivate::unregisterAllTransitions() { + Q_Q(QStateMachine); { - QList<QSignalTransition*> transitions = qFindChildren<QSignalTransition*>(rootState); - for (int i = 0; i < transitions.size(); ++i) - unregisterSignalTransition(transitions.at(i)); + QList<QSignalTransition*> transitions = qFindChildren<QSignalTransition*>(rootState()); + for (int i = 0; i < transitions.size(); ++i) { + QSignalTransition *t = transitions.at(i); + if (t->machine() == q) + unregisterSignalTransition(t); + } } { - QList<QEventTransition*> transitions = qFindChildren<QEventTransition*>(rootState); - for (int i = 0; i < transitions.size(); ++i) - unregisterEventTransition(transitions.at(i)); + QList<QEventTransition*> transitions = qFindChildren<QEventTransition*>(rootState()); + for (int i = 0; i < transitions.size(); ++i) { + QEventTransition *t = transitions.at(i); + if (t->machine() == q) + unregisterEventTransition(t); + } } } @@ -1457,16 +1458,20 @@ void QStateMachinePrivate::handleTransitionSignal(const QObject *sender, int sig Constructs a new state machine with the given \a parent. */ QStateMachine::QStateMachine(QObject *parent) - : QObject(*new QStateMachinePrivate, parent) + : QState(*new QStateMachinePrivate, /*parentState=*/0) { + // Can't pass the parent to the QState constructor, as it expects a QState + // But this works as expected regardless of whether parent is a QState or not + setParent(parent); } /*! \internal */ QStateMachine::QStateMachine(QStateMachinePrivate &dd, QObject *parent) - : QObject(dd, parent) + : QState(dd, /*parentState=*/0) { + setParent(parent); } /*! @@ -1476,69 +1481,6 @@ QStateMachine::~QStateMachine() { } -namespace { - -class RootState : public QState -{ -public: - RootState(QState *parent) - : QState(parent) - { - } - - void onEntry(QEvent *) {} - void onExit(QEvent *) {} -}; - -} // namespace - -/*! - Returns this state machine's root state. -*/ -QState *QStateMachine::rootState() const -{ - Q_D(const QStateMachine); - if (!d->rootState) { - const_cast<QStateMachinePrivate*>(d)->rootState = new RootState(0); - d->rootState->setParent(const_cast<QStateMachine*>(this)); - } - return d->rootState; -} - -/*! - Returns the error state of the state machine's root state. - - \sa QState::errorState() -*/ -QAbstractState *QStateMachine::errorState() const -{ - return rootState()->errorState(); -} - -/*! - Sets the error state of this state machine's root state to be \a state. When a running state - machine encounters an error which puts it in an undefined state, it will enter an error state - based on the context of the error that occurred. It will enter this state regardless of what - is currently in the event queue. - - If the erroneous state has an error state set, this will be entered by the machine. If no error - state has been set, the state machine will search the parent hierarchy recursively for an - error state. The error state of the root state can thus be seen as a global error state that - applies for all states for which a more specific error state has not been set. - - Before entering the error state, the state machine will set the error code returned by error() and - error message returned by errorString(). - - If there is no error state available for the erroneous state, the state machine will print a - warning message on the console and stop executing. - - \sa QState::setErrorState(), rootState() -*/ -void QStateMachine::setErrorState(QAbstractState *state) -{ - rootState()->setErrorState(state); -} - /*! \enum QStateMachine::Error This enum type defines errors that can occur in the state machine at run time. When the state @@ -1640,39 +1582,13 @@ void QStateMachine::setGlobalRestorePolicy(QStateMachine::RestorePolicy restoreP } /*! - Returns this state machine's initial state, or 0 if no initial state has - been set. -*/ -QAbstractState *QStateMachine::initialState() const -{ - Q_D(const QStateMachine); - if (!d->rootState) - return 0; - return d->rootState->initialState(); -} - -/*! - Sets this state machine's initial \a state. -*/ -void QStateMachine::setInitialState(QAbstractState *state) -{ - Q_D(QStateMachine); - if (!d->rootState) { - if (!state) - return; - rootState()->setInitialState(state); - } - d->rootState->setInitialState(state); -} - -/*! Adds the given \a state to this state machine. The state becomes a top-level - state (i.e. a child of the rootState()). + state. If the state is already in a different machine, it will first be removed from its old machine, and then added to this machine. - \sa removeState(), rootState(), setInitialState() + \sa removeState(), setInitialState() */ void QStateMachine::addState(QAbstractState *state) { @@ -1684,7 +1600,7 @@ void QStateMachine::addState(QAbstractState *state) qWarning("QStateMachine::addState: state has already been added to this machine"); return; } - state->setParent(rootState()); + state->setParent(this); } /*! @@ -1730,7 +1646,7 @@ void QStateMachine::start() { Q_D(QStateMachine); - if (rootState()->initialState() == 0) { + if (initialState() == 0) { qWarning("QStateMachine::start: No initial state set for machine. Refusing to start."); return; } @@ -1821,7 +1737,7 @@ void QStateMachine::postInternalEvent(QEvent *event) Returns the maximal consistent set of states (including parallel and final states) that this state machine is currently in. If a state \c s is in the configuration, it is always the case that the parent of \c s is also in - c. Note, however, that the rootState() is not an explicit member of the + c. Note, however, that the machine itself is not an explicit member of the configuration. */ QSet<QAbstractState*> QStateMachine::configuration() const @@ -1840,15 +1756,6 @@ QSet<QAbstractState*> QStateMachine::configuration() const */ /*! - \fn QStateMachine::finished() - - This signal is emitted when the state machine has reached a top-level final - state (QFinalState). - - \sa QStateMachine::started() -*/ - -/*! \fn QStateMachine::stopped() This signal is emitted when the state machine has stopped. @@ -1872,14 +1779,6 @@ bool QStateMachine::event(QEvent *e) d->scheduleProcess(); return true; } - } else if (e->type() == QEvent::ChildAdded) { - QChildEvent *ce = static_cast<QChildEvent*>(e); - if (QAbstractState *state = qobject_cast<QAbstractState*>(ce->child())) { - if (state != rootState()) { - state->setParent(rootState()); - return true; - } - } } return QObject::event(e); } @@ -1949,6 +1848,24 @@ void QStateMachine::endMicrostep(QEvent *event) Q_UNUSED(event); } +/*! + \reimp +*/ +void QStateMachine::onEntry(QEvent *event) +{ + start(); + QState::onEntry(event); +} + +/*! + \reimp +*/ +void QStateMachine::onExit(QEvent *event) +{ + stop(); + QState::onExit(event); +} + #ifndef QT_NO_ANIMATION /*! @@ -2155,6 +2072,8 @@ QSignalEvent::~QSignalEvent() Constructs a new QWrappedEvent object with the given \a object and \a event. + + The QWrappedEvent object takes ownership of \a event. */ QWrappedEvent::QWrappedEvent(QObject *object, QEvent *event) : QEvent(QEvent::Wrapped), m_object(object), m_event(event) @@ -2166,6 +2085,7 @@ QWrappedEvent::QWrappedEvent(QObject *object, QEvent *event) */ QWrappedEvent::~QWrappedEvent() { + delete m_event; } /*! diff --git a/src/corelib/statemachine/qstatemachine.h b/src/corelib/statemachine/qstatemachine.h index 30d0e3a..230d852 100644 --- a/src/corelib/statemachine/qstatemachine.h +++ b/src/corelib/statemachine/qstatemachine.h @@ -42,7 +42,7 @@ #ifndef QSTATEMACHINE_H #define QSTATEMACHINE_H -#include <QtCore/qabstractstate.h> +#include <QtCore/qstate.h> #include <QtCore/qlist.h> #include <QtCore/qobject.h> @@ -57,18 +57,12 @@ QT_MODULE(Core) #ifndef QT_NO_STATEMACHINE class QEvent; -class QAbstractState; -class QState; class QStateMachinePrivate; class QAbstractAnimation; -class QAbstractState; -class Q_CORE_EXPORT QStateMachine : public QObject +class Q_CORE_EXPORT QStateMachine : public QState { Q_OBJECT - Q_PROPERTY(QState* rootState READ rootState) - Q_PROPERTY(QAbstractState* initialState READ initialState WRITE setInitialState) - Q_PROPERTY(QAbstractState* errorState READ errorState WRITE setErrorState) Q_PROPERTY(QString errorString READ errorString) Q_PROPERTY(RestorePolicy globalRestorePolicy READ globalRestorePolicy WRITE setGlobalRestorePolicy) Q_ENUMS(RestorePolicy) @@ -94,14 +88,6 @@ public: void addState(QAbstractState *state); void removeState(QAbstractState *state); - QState *rootState() const; - - QAbstractState *initialState() const; - void setInitialState(QAbstractState *state); - - QAbstractState *errorState() const; - void setErrorState(QAbstractState *state); - Error error() const; QString errorString() const; void clearError(); @@ -135,9 +121,11 @@ public Q_SLOTS: Q_SIGNALS: void started(); void stopped(); - void finished(); protected: + void onEntry(QEvent *event); + void onExit(QEvent *event); + void postInternalEvent(QEvent *event); virtual void beginSelectTransitions(QEvent *event); diff --git a/src/corelib/statemachine/qstatemachine_p.h b/src/corelib/statemachine/qstatemachine_p.h index 1335b93..21e405d 100644 --- a/src/corelib/statemachine/qstatemachine_p.h +++ b/src/corelib/statemachine/qstatemachine_p.h @@ -53,7 +53,8 @@ // We mean it. // -#include <private/qobject_p.h> +#include "private/qstate_p.h" + #include <QtCore/qcoreevent.h> #include <QtCore/qhash.h> #include <QtCore/qlist.h> @@ -61,9 +62,6 @@ #include <QtCore/qset.h> #include <QtCore/qvector.h> -#include "qstate.h" -#include "private/qstate_p.h" - QT_BEGIN_NAMESPACE class QEvent; @@ -81,7 +79,7 @@ class QAbstractAnimation; #endif class QStateMachine; -class QStateMachinePrivate : public QObjectPrivate +class QStateMachinePrivate : public QStatePrivate { Q_DECLARE_PUBLIC(QStateMachine) public: @@ -101,7 +99,7 @@ public: static QStateMachinePrivate *get(QStateMachine *q); - static QState *findLCA(const QList<QAbstractState*> &states); + QState *findLCA(const QList<QAbstractState*> &states) const; static bool stateEntryLessThan(QAbstractState *s1, QAbstractState *s2); static bool stateExitLessThan(QAbstractState *s1, QAbstractState *s2); @@ -116,6 +114,8 @@ public: void _q_animationFinished(); #endif + QState *rootState() const; + void microstep(QEvent *event, const QList<QAbstractTransition*> &transitionList); bool isPreempted(const QAbstractState *s, const QSet<QAbstractTransition*> &transitions) const; QSet<QAbstractTransition*> selectTransitions(QEvent *event) const; @@ -133,8 +133,8 @@ public: bool isInFinalState(QAbstractState *s) const; static bool isFinal(const QAbstractState *s); static bool isParallel(const QAbstractState *s); - static bool isCompound(const QAbstractState *s); - static bool isAtomic(const QAbstractState *s); + bool isCompound(const QAbstractState *s) const; + bool isAtomic(const QAbstractState *s) const; static bool isDescendantOf(const QAbstractState *s, const QAbstractState *other); static QList<QState*> properAncestors(const QAbstractState *s, const QState *upperBound); @@ -164,7 +164,6 @@ public: bool processingScheduled; bool stop; StopProcessingReason stopProcessingReason; - QState *rootState; QSet<QAbstractState*> configuration; QList<QEvent*> internalEventQueue; QList<QEvent*> externalEventQueue; diff --git a/src/corelib/thread/qreadwritelock.h b/src/corelib/thread/qreadwritelock.h index 51d42b5..4742bea 100644 --- a/src/corelib/thread/qreadwritelock.h +++ b/src/corelib/thread/qreadwritelock.h @@ -190,7 +190,8 @@ inline QWriteLocker::QWriteLocker(QReadWriteLock *areadWriteLock) class Q_CORE_EXPORT QReadWriteLock { public: - inline explicit QReadWriteLock() { } + enum RecursionMode { NonRecursive, Recursive }; + inline explicit QReadWriteLock(RecursionMode = NonRecursive) { } inline ~QReadWriteLock() { } static inline void lockForRead() { } diff --git a/src/corelib/tools/qbytedata_p.h b/src/corelib/tools/qbytedata_p.h new file mode 100644 index 0000000..cc10ea2 --- /dev/null +++ b/src/corelib/tools/qbytedata_p.h @@ -0,0 +1,203 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QBYTEDATA_H +#define QBYTEDATA_H + +#include <qbytearray.h> + + +QT_BEGIN_NAMESPACE + +// this class handles a list of QByteArrays. It is a variant of QRingBuffer +// that avoid malloc/realloc/memcpy. +class QByteDataBuffer +{ +private: + QList<QByteArray> buffers; + qint64 bufferCompleteSize; +public: + QByteDataBuffer() : bufferCompleteSize(0) + { + } + + ~QByteDataBuffer() + { + clear(); + } + + inline void append(QByteDataBuffer& other) + { + if (other.isEmpty()) + return; + + buffers.append(other.buffers); + bufferCompleteSize += other.byteAmount(); + } + + + inline void append(QByteArray& bd) + { + if (bd.isEmpty()) + return; + + buffers.append(bd); + bufferCompleteSize += bd.size(); + } + + inline void prepend(QByteArray& bd) + { + if (bd.isEmpty()) + return; + + buffers.prepend(bd); + bufferCompleteSize += bd.size(); + } + + // return the first QByteData. User of this function has to qFree() its .data! + // preferably use this function to read data. + inline QByteArray read() + { + bufferCompleteSize -= buffers.first().size(); + return buffers.takeFirst(); + } + + // return everything. User of this function has to qFree() its .data! + // avoid to use this, it might malloc and memcpy. + inline QByteArray readAll() + { + return read(byteAmount()); + } + + // return amount. User of this function has to qFree() its .data! + // avoid to use this, it might malloc and memcpy. + inline QByteArray read(qint64 amount) + { + amount = qMin(byteAmount(), amount); + QByteArray byteData; + byteData.resize(amount); + read(byteData.data(), byteData.size()); + return byteData; + } + + // return amount bytes. User of this function has to qFree() its .data! + // avoid to use this, it will memcpy. + qint64 read(char* dst, qint64 amount) + { + amount = qMin(amount, byteAmount()); + qint64 originalAmount = amount; + char *writeDst = dst; + + while (amount > 0) { + QByteArray first = buffers.takeFirst(); + if (amount >= first.size()) { + // take it completely + bufferCompleteSize -= first.size(); + amount -= first.size(); + memcpy(writeDst, first.constData(), first.size()); + writeDst += first.size(); + first.clear(); + } else { + // take a part of it & it is the last one to take + bufferCompleteSize -= amount; + memcpy(writeDst, first.constData(), amount); + + qint64 newFirstSize = first.size() - amount; + QByteArray newFirstData; + newFirstData.resize(newFirstSize); + memcpy(newFirstData.data(), first.constData() + amount, newFirstSize); + buffers.prepend(newFirstData); + + amount = 0; + first.clear(); + } + } + + return originalAmount; + } + + inline char getChar() + { + char c; + read(&c, 1); + return c; + } + + inline void clear() + { + buffers.clear(); + bufferCompleteSize = 0; + } + + // The byte count of all QByteArrays + inline qint64 byteAmount() const + { + return bufferCompleteSize; + } + + // the number of QByteArrays + inline qint64 bufferCount() const + { + return buffers.length(); + } + + inline bool isEmpty() const + { + return byteAmount() == 0; + } + + inline qint64 sizeNextBlock() const + { + if(buffers.isEmpty()) + return 0; + else + return buffers.first().size(); + } + + inline QByteArray& operator[](int i) + { + return buffers[i]; + } +}; + +QT_END_NAMESPACE + +#endif // QBYTEDATA_H diff --git a/src/corelib/tools/qchar.cpp b/src/corelib/tools/qchar.cpp index 88053d6..458a383 100644 --- a/src/corelib/tools/qchar.cpp +++ b/src/corelib/tools/qchar.cpp @@ -1421,16 +1421,15 @@ QDataStream &operator>>(QDataStream &in, QChar &chr) // --------------------------------------------------------------------------- -static QString decomposeHelper - (const QString &str, bool canonical, QChar::UnicodeVersion version) +static void decomposeHelper(QString *str, bool canonical, QChar::UnicodeVersion version, int from) { unsigned short buffer[3]; - QString s = str; + QString &s = *str; - const unsigned short *utf16 = s.utf16(); + const unsigned short *utf16 = reinterpret_cast<unsigned short *>(s.data()); const unsigned short *uc = utf16 + s.length(); - while (uc != utf16) { + while (uc != utf16 + from) { uint ucs4 = *(--uc); if (QChar(ucs4).isLowSurrogate() && uc != utf16) { ushort high = *(uc - 1); @@ -1450,11 +1449,9 @@ static QString decomposeHelper s.replace(uc - utf16, ucs4 > 0x10000 ? 2 : 1, (const QChar *)d, length); // since the insert invalidates the pointers and we do decomposition recursive int pos = uc - utf16; - utf16 = s.utf16(); + utf16 = reinterpret_cast<unsigned short *>(s.data()); uc = utf16 + pos + length; } - - return s; } @@ -1489,21 +1486,21 @@ static ushort ligatureHelper(ushort u1, ushort u2) return 0; } -static QString composeHelper(const QString &str) +static void composeHelper(QString *str, int from) { - QString s = str; + QString &s = *str; - if (s.length() < 2) - return s; + if (s.length() - from < 2) + return; // the loop can partly ignore high Unicode as all ligatures are in the BMP int starter = 0; int lastCombining = 0; - int pos = 0; + int pos = from; while (pos < s.length()) { - uint uc = s.utf16()[pos]; + uint uc = s.at(pos).unicode(); if (QChar(uc).isHighSurrogate() && pos < s.length()-1) { - ushort low = s.utf16()[pos+1]; + ushort low = s.at(pos+1).unicode(); if (QChar(low).isLowSurrogate()) { uc = QChar::surrogateToUcs4(uc, low); ++pos; @@ -1512,7 +1509,7 @@ static QString composeHelper(const QString &str) int combining = QChar::combiningClass(uc); if (starter == pos - 1 || combining > lastCombining) { // allowed to form ligature with S - QChar ligature = ligatureHelper(s.utf16()[starter], uc); + QChar ligature = ligatureHelper(s.at(starter).unicode(), uc); if (ligature.unicode()) { s[starter] = ligature; s.remove(pos, 1); @@ -1524,16 +1521,14 @@ static QString composeHelper(const QString &str) lastCombining = combining; ++pos; } - return s; } -static QString canonicalOrderHelper - (const QString &str, QChar::UnicodeVersion version) +static void canonicalOrderHelper(QString *str, QChar::UnicodeVersion version, int from) { - QString s = str; + QString &s = *str; const int l = s.length()-1; - int pos = 0; + int pos = from; while (pos < l) { int p2 = pos+1; uint u1 = s.at(pos).unicode(); @@ -1593,7 +1588,6 @@ static QString canonicalOrderHelper ++pos; } } - return s; } int QT_FASTCALL QUnicodeTables::script(unsigned int uc) diff --git a/src/corelib/tools/qcontiguouscache.cpp b/src/corelib/tools/qcontiguouscache.cpp index e738ec8..f42b7a0 100644 --- a/src/corelib/tools/qcontiguouscache.cpp +++ b/src/corelib/tools/qcontiguouscache.cpp @@ -61,6 +61,7 @@ void QContiguousCacheData::dump() const \ingroup tools \ingroup shared \reentrant + \since 4.6 The QContiguousCache class provides an efficient way of caching items for display in a user interface view. Unlike QCache, it adds a restriction @@ -95,7 +96,7 @@ MyRecord record(int row) const in the case where the requested row is a long way from the currently cached items. If there is a gap between where the new item is inserted and the currently cached items then the existing cached items are first removed to retain - the contiguous nature of the cache. Hence it is important to take some care then + the contiguous nature of the cache. Hence it is important to take some care then when using insert() in order to avoid unwanted clearing of the cache. The range of valid indexes for the QContiguousCache class are from @@ -104,9 +105,9 @@ MyRecord record(int row) const than INT_MAX can result in the indexes of the cache being invalid. When the cache indexes are invalid it is important to call normalizeIndexes() before calling any of containsIndex(), firstIndex(), - lastIndex(), at() or the [] operator. Calling these - functions when the cache has invalid indexes will result in undefined - behavior. The indexes can be checked by using areIndexesValid() + lastIndex(), at() or \l{QContiguousCache::operator[]()}{operator[]()}. + Calling these functions when the cache has invalid indexes will result in + undefined behavior. The indexes can be checked by using areIndexesValid() In most cases the indexes will not exceed 0 to INT_MAX, and normalizeIndexes() will not need to be used. @@ -190,8 +191,6 @@ MyRecord record(int row) const /*! \fn int QContiguousCache::count() const - \overload - Same as size(). */ @@ -258,14 +257,15 @@ MyRecord record(int row) const /*! \fn T &QContiguousCache::operator[](int i) - Returns the item at index position \a i as a modifiable reference. If + Returns the item at index position \a i as a modifiable reference. If the cache does not contain an item at the given index position \a i then it will first insert an empty item at that position. In most cases it is better to use either at() or insert(). - Note that using non-const operators can cause QContiguousCache to do a deep - copy. + \note This non-const overload of operator[] requires QContiguousCache + to make a deep copy. Use at() for read-only access to a non-const + QContiguousCache. \sa insert(), at() */ diff --git a/src/corelib/tools/qcontiguouscache.h b/src/corelib/tools/qcontiguouscache.h index 7d52f1e..0020d22 100644 --- a/src/corelib/tools/qcontiguouscache.h +++ b/src/corelib/tools/qcontiguouscache.h @@ -166,8 +166,8 @@ void QContiguousCache<T>::detach_helper() T *dest = x.d->array + x.d->start; T *src = d->array + d->start; - int count = x.d->count; - while (count--) { + int oldcount = x.d->count; + while (oldcount--) { if (QTypeInfo<T>::isComplex) { new (dest) T(*src); } else { @@ -200,8 +200,8 @@ void QContiguousCache<T>::setCapacity(int asize) x.d->start = x.d->offset % x.d->alloc; T *dest = x.d->array + (x.d->start + x.d->count-1) % x.d->alloc; T *src = d->array + (d->start + d->count-1) % d->alloc; - int count = x.d->count; - while (count--) { + int oldcount = x.d->count; + while (oldcount--) { if (QTypeInfo<T>::isComplex) { new (dest) T(*src); } else { @@ -224,10 +224,10 @@ void QContiguousCache<T>::clear() { if (d->ref == 1) { if (QTypeInfo<T>::isComplex) { - int count = d->count; + int oldcount = d->count; T * i = d->array + d->start; T * e = d->array + d->alloc; - while (count--) { + while (oldcount--) { i->~T(); i++; if (i == e) @@ -254,11 +254,11 @@ inline QContiguousCacheData *QContiguousCache<T>::malloc(int aalloc) } template <typename T> -QContiguousCache<T>::QContiguousCache(int capacity) +QContiguousCache<T>::QContiguousCache(int cap) { - p = malloc(capacity); + p = malloc(cap); d->ref = 1; - d->alloc = capacity; + d->alloc = cap; d->count = d->start = d->offset = 0; d->sharable = true; } @@ -295,10 +295,10 @@ template <typename T> void QContiguousCache<T>::free(Data *x) { if (QTypeInfo<T>::isComplex) { - int count = d->count; + int oldcount = d->count; T * i = d->array + d->start; T * e = d->array + d->alloc; - while (count--) { + while (oldcount--) { i->~T(); i++; if (i == e) diff --git a/src/corelib/tools/qeasingcurve.cpp b/src/corelib/tools/qeasingcurve.cpp index 18a252a..0828c61 100644 --- a/src/corelib/tools/qeasingcurve.cpp +++ b/src/corelib/tools/qeasingcurve.cpp @@ -60,8 +60,10 @@ Easing curves describe a function that controls how the speed of the interpolation between 0 and 1 should be. Easing curves allow transitions from one value to another to appear more natural than a simple constant speed would allow. - The QEasingCurve class is usually used in conjunction with the QAnimation class, - but can be used on its own. + The QEasingCurve class is usually used in conjunction with the QVariantAnimation and + QPropertyAnimation classes but can be used on its own. It is usually used to accelerate + the interpolation from zero velocity (ease in) or decelerate to zero velocity (ease out). + Ease in and ease out can also be combined in the same easing curve. To calculate the speed of the interpolation, the easing curve provides the function valueForProgress(), where the \a progress argument specifies the progress of the @@ -80,10 +82,10 @@ \endcode will print the effective progress of the interpolation between 0 and 1. - When using a QAnimation, the easing curve will be used to control the + When using a QPropertyAnimation, the associated easing curve will be used to control the progress of the interpolation between startValue and endValue: \code - QAnimation animation; + QPropertyAnimation animation; animation.setStartValue(0); animation.setEndValue(1000); animation.setDuration(1000); @@ -98,189 +100,191 @@ \value Linear \inlineimage qeasingcurve-linear.png \br - Easing equation function for a simple linear tweening, - with no easing. + Easing curve for a linear (t) function: + velocity is constant. \value InQuad \inlineimage qeasingcurve-inquad.png \br - Easing equation function for a quadratic (t^2) easing - in: accelerating from zero velocity. + Easing curve for a quadratic (t^2) function: + accelerating from zero velocity. \value OutQuad \inlineimage qeasingcurve-outquad.png \br - Easing equation function for a quadratic (t^2) easing - out: decelerating to zero velocity. + Easing curve for a quadratic (t^2) function: + decelerating to zero velocity. \value InOutQuad \inlineimage qeasingcurve-inoutquad.png \br - Easing equation function for a quadratic (t^2) easing - in/out: acceleration until halfway, then deceleration. + Easing curve for a quadratic (t^2) function: + acceleration until halfway, then deceleration. \value OutInQuad \inlineimage qeasingcurve-outinquad.png \br - Easing equation function for a quadratic (t^2) easing - out/in: deceleration until halfway, then acceleration. + Easing curve for a quadratic (t^2) function: + deceleration until halfway, then acceleration. \value InCubic \inlineimage qeasingcurve-incubic.png \br - Easing equation function for a cubic (t^3) easing - in: accelerating from zero velocity. + Easing curve for a cubic (t^3) function: + accelerating from zero velocity. \value OutCubic \inlineimage qeasingcurve-outcubic.png \br - Easing equation function for a cubic (t^3) easing - out: decelerating from zero velocity. + Easing curve for a cubic (t^3) function: + decelerating from zero velocity. \value InOutCubic \inlineimage qeasingcurve-inoutcubic.png \br - Easing equation function for a cubic (t^3) easing - in/out: acceleration until halfway, then deceleration. + Easing curve for a cubic (t^3) function: + acceleration until halfway, then deceleration. \value OutInCubic \inlineimage qeasingcurve-outincubic.png \br - Easing equation function for a cubic (t^3) easing - out/in: deceleration until halfway, then acceleration. + Easing curve for a cubic (t^3) function: + deceleration until halfway, then acceleration. \value InQuart \inlineimage qeasingcurve-inquart.png \br - Easing equation function for a quartic (t^4) easing - in: accelerating from zero velocity. + Easing curve for a quartic (t^4) function: + accelerating from zero velocity. \value OutQuart \inlineimage qeasingcurve-outquart.png \br - Easing equation function for a quartic (t^4) easing - out: decelerating from zero velocity. + Easing curve for a cubic (t^4) function: + decelerating from zero velocity. \value InOutQuart \inlineimage qeasingcurve-inoutquart.png \br - Easing equation function for a quartic (t^4) easing - in/out: acceleration until halfway, then deceleration. + Easing curve for a cubic (t^4) function: + acceleration until halfway, then deceleration. \value OutInQuart \inlineimage qeasingcurve-outinquart.png \br - Easing equation function for a quartic (t^4) easing - out/in: deceleration until halfway, then acceleration. + Easing curve for a cubic (t^4) function: + deceleration until halfway, then acceleration. \value InQuint \inlineimage qeasingcurve-inquint.png \br - Easing equation function for a quintic (t^5) easing + Easing curve for a quintic (t^5) easing in: accelerating from zero velocity. \value OutQuint \inlineimage qeasingcurve-outquint.png \br - Easing equation function for a quintic (t^5) easing - out: decelerating from zero velocity. + Easing curve for a cubic (t^5) function: + decelerating from zero velocity. \value InOutQuint \inlineimage qeasingcurve-inoutquint.png \br - Easing equation function for a quintic (t^5) easing - in/out: acceleration until halfway, then deceleration. + Easing curve for a cubic (t^5) function: + acceleration until halfway, then deceleration. \value OutInQuint \inlineimage qeasingcurve-outinquint.png \br - Easing equation function for a quintic (t^5) easing - out/in: deceleration until halfway, then acceleration. + Easing curve for a cubic (t^5) function: + deceleration until halfway, then acceleration. \value InSine \inlineimage qeasingcurve-insine.png \br - Easing equation function for a sinusoidal (sin(t)) easing - in: accelerating from zero velocity. + Easing curve for a sinusoidal (sin(t)) function: + accelerating from zero velocity. \value OutSine \inlineimage qeasingcurve-outsine.png \br - Easing equation function for a sinusoidal (sin(t)) easing - out: decelerating from zero velocity. + Easing curve for a sinusoidal (sin(t)) function: + decelerating from zero velocity. \value InOutSine \inlineimage qeasingcurve-inoutsine.png \br - Easing equation function for a sinusoidal (sin(t)) easing - in/out: acceleration until halfway, then deceleration. + Easing curve for a sinusoidal (sin(t)) function: + acceleration until halfway, then deceleration. \value OutInSine \inlineimage qeasingcurve-outinsine.png \br - Easing equation function for a sinusoidal (sin(t)) easing - out/in: deceleration until halfway, then acceleration. + Easing curve for a sinusoidal (sin(t)) function: + deceleration until halfway, then acceleration. \value InExpo \inlineimage qeasingcurve-inexpo.png \br - Easing equation function for an exponential (2^t) easing - in: accelerating from zero velocity. + Easing curve for an exponential (2^t) function: + accelerating from zero velocity. \value OutExpo \inlineimage qeasingcurve-outexpo.png \br - Easing equation function for an exponential (2^t) easing - out: decelerating from zero velocity. + Easing curve for an exponential (2^t) function: + decelerating from zero velocity. \value InOutExpo \inlineimage qeasingcurve-inoutexpo.png \br - Easing equation function for an exponential (2^t) easing - in/out: acceleration until halfway, then deceleration. + Easing curve for an exponential (2^t) function: + acceleration until halfway, then deceleration. \value OutInExpo \inlineimage qeasingcurve-outinexpo.png \br - Easing equation function for an exponential (2^t) easing - out/in: deceleration until halfway, then acceleration. + Easing curve for an exponential (2^t) function: + deceleration until halfway, then acceleration. \value InCirc \inlineimage qeasingcurve-incirc.png \br - Easing equation function for a circular (sqrt(1-t^2)) easing - in: accelerating from zero velocity. + Easing curve for a circular (sqrt(1-t^2)) function: + accelerating from zero velocity. \value OutCirc \inlineimage qeasingcurve-outcirc.png \br - Easing equation function for a circular (sqrt(1-t^2)) easing - out: decelerating from zero velocity. + Easing curve for a circular (sqrt(1-t^2)) function: + decelerating from zero velocity. \value InOutCirc \inlineimage qeasingcurve-inoutcirc.png \br - Easing equation function for a circular (sqrt(1-t^2)) easing - in/out: acceleration until halfway, then deceleration. + Easing curve for a circular (sqrt(1-t^2)) function: + acceleration until halfway, then deceleration. \value OutInCirc \inlineimage qeasingcurve-outincirc.png \br - Easing equation function for a circular (sqrt(1-t^2)) easing - out/in: deceleration until halfway, then acceleration. + Easing curve for a circular (sqrt(1-t^2)) function: + deceleration until halfway, then acceleration. \value InElastic \inlineimage qeasingcurve-inelastic.png \br - Easing equation function for an elastic - (exponentially decaying sine wave) easing in: + Easing curve for an elastic + (exponentially decaying sine wave) function: accelerating from zero velocity. The peak amplitude can be set with the \e amplitude parameter, and the period of decay by the \e period parameter. \value OutElastic \inlineimage qeasingcurve-outelastic.png \br - Easing equation function for an elastic - (exponentially decaying sine wave) easing out: + Easing curve for an elastic + (exponentially decaying sine wave) function: decelerating from zero velocity. The peak amplitude can be set with the \e amplitude parameter, and the period of decay by the \e period parameter. \value InOutElastic \inlineimage qeasingcurve-inoutelastic.png \br - Easing equation function for an elastic - (exponentially decaying sine wave) easing in/out: + Easing curve for an elastic + (exponentially decaying sine wave) function: acceleration until halfway, then deceleration. \value OutInElastic \inlineimage qeasingcurve-outinelastic.png \br - Easing equation function for an elastic - (exponentially decaying sine wave) easing out/in: + Easing curve for an elastic + (exponentially decaying sine wave) function: deceleration until halfway, then acceleration. \value InBack \inlineimage qeasingcurve-inback.png \br - Easing equation function for a back (overshooting - cubic easing: (s+1)*t^3 - s*t^2) easing in: + Easing curve for a back (overshooting + cubic function: (s+1)*t^3 - s*t^2) easing in: accelerating from zero velocity. \value OutBack \inlineimage qeasingcurve-outback.png \br - Easing equation function for a back (overshooting - cubic easing: (s+1)*t^3 - s*t^2) easing out: - decelerating from zero velocity. + Easing curve for a back (overshooting + cubic function: (s+1)*t^3 - s*t^2) easing out: + decelerating to zero velocity. \value InOutBack \inlineimage qeasingcurve-inoutback.png \br - Easing equation function for a back (overshooting - cubic easing: (s+1)*t^3 - s*t^2) easing in/out: + Easing curve for a back (overshooting + cubic function: (s+1)*t^3 - s*t^2) easing in/out: acceleration until halfway, then deceleration. \value OutInBack \inlineimage qeasingcurve-outinback.png \br - Easing equation function for a back (overshooting + Easing curve for a back (overshooting cubic easing: (s+1)*t^3 - s*t^2) easing out/in: deceleration until halfway, then acceleration. \value InBounce \inlineimage qeasingcurve-inbounce.png \br - Easing equation function for a bounce (exponentially - decaying parabolic bounce) easing in: accelerating + Easing curve for a bounce (exponentially + decaying parabolic bounce) function: accelerating from zero velocity. \value OutBounce \inlineimage qeasingcurve-outbounce.png \br - Easing equation function for a bounce (exponentially - decaying parabolic bounce) easing out: decelerating + Easing curve for a bounce (exponentially + decaying parabolic bounce) function: decelerating from zero velocity. \value InOutBounce \inlineimage qeasingcurve-inoutbounce.png \br - Easing equation function for a bounce (exponentially - decaying parabolic bounce) easing in/out: + Easing curve for a bounce (exponentially + decaying parabolic bounce) function easing in/out: acceleration until halfway, then deceleration. \value OutInBounce \inlineimage qeasingcurve-outinbounce.png \br - Easing equation function for a bounce (exponentially - decaying parabolic bounce) easing out/in: + Easing curve for a bounce (exponentially + decaying parabolic bounce) function easing out/in: deceleration until halfway, then acceleration. \omitvalue InCurve \omitvalue OutCurve \omitvalue SineCurve \omitvalue CosineCurve - \value Custom This is returned if the user have specified a custom curve type with setCustomType(). Note that you cannot call setType() with this value, but type() can return it. + \value Custom This is returned if the user specified a custom curve type with + setCustomType(). Note that you cannot call setType() with this value, + but type() can return it. \omitvalue NCurveTypes */ diff --git a/src/corelib/tools/qlocale.cpp b/src/corelib/tools/qlocale.cpp index fef1931..85e49c7 100644 --- a/src/corelib/tools/qlocale.cpp +++ b/src/corelib/tools/qlocale.cpp @@ -413,8 +413,8 @@ QByteArray getWinLocaleName(LCID id = LOCALE_USER_DEFAULT) result = envVarLocale(); QChar lang[3]; QChar cntry[2]; - if ( result == "C" || !result.isEmpty() - && splitLocaleName(QString::fromLocal8Bit(result), lang, cntry) ) { + if ( result == "C" || (!result.isEmpty() + && splitLocaleName(QString::fromLocal8Bit(result), lang, cntry)) ) { long id = 0; bool ok = false; id = qstrtoll(result.data(), 0, 0, &ok); @@ -5299,7 +5299,11 @@ struct p5s_deleter { ~p5s_deleter() { - Bfree(p5s); + while (p5s) { + Bigint *next = p5s->next; + Bfree(p5s); + p5s = next; + } } }; diff --git a/src/corelib/tools/qpoint.cpp b/src/corelib/tools/qpoint.cpp index 49afdca..af60f52 100644 --- a/src/corelib/tools/qpoint.cpp +++ b/src/corelib/tools/qpoint.cpp @@ -444,6 +444,8 @@ QDebug operator<<(QDebug d, const QPointF &p) /*! + \since 4.6 + Returns the sum of the absolute values of x() and y(), traditionally known as the "Manhattan length" of the vector from the origin to the point. diff --git a/src/corelib/tools/qregexp.cpp b/src/corelib/tools/qregexp.cpp index 3108f31..3527308 100644 --- a/src/corelib/tools/qregexp.cpp +++ b/src/corelib/tools/qregexp.cpp @@ -70,6 +70,8 @@ int qFindString(const QChar *haystack, int haystackLen, int from, #define RXERR_LEFTDELIM QT_TRANSLATE_NOOP("QRegExp", "missing left delim") #define RXERR_END QT_TRANSLATE_NOOP("QRegExp", "unexpected end") #define RXERR_LIMIT QT_TRANSLATE_NOOP("QRegExp", "met internal limit") +#define RXERR_INTERVAL QT_TRANSLATE_NOOP("QRegExp", "invalid interval") +#define RXERR_CATEGORY QT_TRANSLATE_NOOP("QRegExp", "invalid category") /* WARNING! Be sure to read qregexp.tex before modifying this file. @@ -1116,6 +1118,7 @@ private: bool valid; // is the regular expression valid? Qt::CaseSensitivity cs; // case sensitive? bool greedyQuantifiers; // RegExp2? + bool xmlSchemaExtensions; #ifndef QT_NO_REGEXP_BACKREF int nbrefs; // number of back-references #endif @@ -1193,6 +1196,8 @@ private: friend class Box; + void setupCategoriesRangeMap(); + /* This is the lexical analyzer for regular expressions. */ @@ -1232,6 +1237,7 @@ private: int yyTok; // the last token read bool yyMayCapture; // set this to false to disable capturing + QHash<QByteArray, QPair<int, int> > categoriesRangeMap; // fast lookup hash for xml schema extensions friend struct QRegExpMatchState; }; @@ -1253,7 +1259,8 @@ struct QRegExpLookahead #endif QRegExpEngine::QRegExpEngine(const QRegExpEngineKey &key) - : cs(key.cs), greedyQuantifiers(key.patternSyntax == QRegExp::RegExp2) + : cs(key.cs), greedyQuantifiers(key.patternSyntax == QRegExp::RegExp2), + xmlSchemaExtensions(false) { setup(); @@ -1268,6 +1275,8 @@ QRegExpEngine::QRegExpEngine(const QRegExpEngineKey &key) case QRegExp::FixedString: rx = QRegExp::escape(key.pattern); break; + case QRegExp::W3CXmlSchema11: + xmlSchemaExtensions = true; default: rx = key.pattern; } @@ -1479,9 +1488,8 @@ int QRegExpEngine::anchorAlternation(int a, int b) return Anchor_Alternation | (n - 1); #endif - aa.resize(n + 1); - aa[n].a = a; - aa[n].b = b; + QRegExpAnchorAlternation element = {a, b}; + aa.append(element); return Anchor_Alternation | n; } @@ -2621,6 +2629,152 @@ void QRegExpEngine::Box::addAnchorsToEngine(const Box &to) const } } +void QRegExpEngine::setupCategoriesRangeMap() +{ + categoriesRangeMap.insert("IsBasicLatin", qMakePair(0x0000, 0x007F)); + categoriesRangeMap.insert("IsLatin-1Supplement", qMakePair(0x0080, 0x00FF)); + categoriesRangeMap.insert("IsLatinExtended-A", qMakePair(0x0100, 0x017F)); + categoriesRangeMap.insert("IsLatinExtended-B", qMakePair(0x0180, 0x024F)); + categoriesRangeMap.insert("IsIPAExtensions", qMakePair(0x0250, 0x02AF)); + categoriesRangeMap.insert("IsSpacingModifierLetters", qMakePair(0x02B0, 0x02FF)); + categoriesRangeMap.insert("IsCombiningDiacriticalMarks", qMakePair(0x0300, 0x036F)); + categoriesRangeMap.insert("IsGreek", qMakePair(0x0370, 0x03FF)); + categoriesRangeMap.insert("IsCyrillic", qMakePair(0x0400, 0x04FF)); + categoriesRangeMap.insert("IsCyrillicSupplement", qMakePair(0x0500, 0x052F)); + categoriesRangeMap.insert("IsArmenian", qMakePair(0x0530, 0x058F)); + categoriesRangeMap.insert("IsHebrew", qMakePair(0x0590, 0x05FF)); + categoriesRangeMap.insert("IsArabic", qMakePair(0x0600, 0x06FF)); + categoriesRangeMap.insert("IsSyriac", qMakePair(0x0700, 0x074F)); + categoriesRangeMap.insert("IsArabicSupplement", qMakePair(0x0750, 0x077F)); + categoriesRangeMap.insert("IsThaana", qMakePair(0x0780, 0x07BF)); + categoriesRangeMap.insert("IsDevanagari", qMakePair(0x0900, 0x097F)); + categoriesRangeMap.insert("IsBengali", qMakePair(0x0980, 0x09FF)); + categoriesRangeMap.insert("IsGurmukhi", qMakePair(0x0A00, 0x0A7F)); + categoriesRangeMap.insert("IsGujarati", qMakePair(0x0A80, 0x0AFF)); + categoriesRangeMap.insert("IsOriya", qMakePair(0x0B00, 0x0B7F)); + categoriesRangeMap.insert("IsTamil", qMakePair(0x0B80, 0x0BFF)); + categoriesRangeMap.insert("IsTelugu", qMakePair(0x0C00, 0x0C7F)); + categoriesRangeMap.insert("IsKannada", qMakePair(0x0C80, 0x0CFF)); + categoriesRangeMap.insert("IsMalayalam", qMakePair(0x0D00, 0x0D7F)); + categoriesRangeMap.insert("IsSinhala", qMakePair(0x0D80, 0x0DFF)); + categoriesRangeMap.insert("IsThai", qMakePair(0x0E00, 0x0E7F)); + categoriesRangeMap.insert("IsLao", qMakePair(0x0E80, 0x0EFF)); + categoriesRangeMap.insert("IsTibetan", qMakePair(0x0F00, 0x0FFF)); + categoriesRangeMap.insert("IsMyanmar", qMakePair(0x1000, 0x109F)); + categoriesRangeMap.insert("IsGeorgian", qMakePair(0x10A0, 0x10FF)); + categoriesRangeMap.insert("IsHangulJamo", qMakePair(0x1100, 0x11FF)); + categoriesRangeMap.insert("IsEthiopic", qMakePair(0x1200, 0x137F)); + categoriesRangeMap.insert("IsEthiopicSupplement", qMakePair(0x1380, 0x139F)); + categoriesRangeMap.insert("IsCherokee", qMakePair(0x13A0, 0x13FF)); + categoriesRangeMap.insert("IsUnifiedCanadianAboriginalSyllabics", qMakePair(0x1400, 0x167F)); + categoriesRangeMap.insert("IsOgham", qMakePair(0x1680, 0x169F)); + categoriesRangeMap.insert("IsRunic", qMakePair(0x16A0, 0x16FF)); + categoriesRangeMap.insert("IsTagalog", qMakePair(0x1700, 0x171F)); + categoriesRangeMap.insert("IsHanunoo", qMakePair(0x1720, 0x173F)); + categoriesRangeMap.insert("IsBuhid", qMakePair(0x1740, 0x175F)); + categoriesRangeMap.insert("IsTagbanwa", qMakePair(0x1760, 0x177F)); + categoriesRangeMap.insert("IsKhmer", qMakePair(0x1780, 0x17FF)); + categoriesRangeMap.insert("IsMongolian", qMakePair(0x1800, 0x18AF)); + categoriesRangeMap.insert("IsLimbu", qMakePair(0x1900, 0x194F)); + categoriesRangeMap.insert("IsTaiLe", qMakePair(0x1950, 0x197F)); + categoriesRangeMap.insert("IsNewTaiLue", qMakePair(0x1980, 0x19DF)); + categoriesRangeMap.insert("IsKhmerSymbols", qMakePair(0x19E0, 0x19FF)); + categoriesRangeMap.insert("IsBuginese", qMakePair(0x1A00, 0x1A1F)); + categoriesRangeMap.insert("IsPhoneticExtensions", qMakePair(0x1D00, 0x1D7F)); + categoriesRangeMap.insert("IsPhoneticExtensionsSupplement", qMakePair(0x1D80, 0x1DBF)); + categoriesRangeMap.insert("IsCombiningDiacriticalMarksSupplement", qMakePair(0x1DC0, 0x1DFF)); + categoriesRangeMap.insert("IsLatinExtendedAdditional", qMakePair(0x1E00, 0x1EFF)); + categoriesRangeMap.insert("IsGreekExtended", qMakePair(0x1F00, 0x1FFF)); + categoriesRangeMap.insert("IsGeneralPunctuation", qMakePair(0x2000, 0x206F)); + categoriesRangeMap.insert("IsSuperscriptsandSubscripts", qMakePair(0x2070, 0x209F)); + categoriesRangeMap.insert("IsCurrencySymbols", qMakePair(0x20A0, 0x20CF)); + categoriesRangeMap.insert("IsCombiningMarksforSymbols", qMakePair(0x20D0, 0x20FF)); + categoriesRangeMap.insert("IsLetterlikeSymbols", qMakePair(0x2100, 0x214F)); + categoriesRangeMap.insert("IsNumberForms", qMakePair(0x2150, 0x218F)); + categoriesRangeMap.insert("IsArrows", qMakePair(0x2190, 0x21FF)); + categoriesRangeMap.insert("IsMathematicalOperators", qMakePair(0x2200, 0x22FF)); + categoriesRangeMap.insert("IsMiscellaneousTechnical", qMakePair(0x2300, 0x23FF)); + categoriesRangeMap.insert("IsControlPictures", qMakePair(0x2400, 0x243F)); + categoriesRangeMap.insert("IsOpticalCharacterRecognition", qMakePair(0x2440, 0x245F)); + categoriesRangeMap.insert("IsEnclosedAlphanumerics", qMakePair(0x2460, 0x24FF)); + categoriesRangeMap.insert("IsBoxDrawing", qMakePair(0x2500, 0x257F)); + categoriesRangeMap.insert("IsBlockElements", qMakePair(0x2580, 0x259F)); + categoriesRangeMap.insert("IsGeometricShapes", qMakePair(0x25A0, 0x25FF)); + categoriesRangeMap.insert("IsMiscellaneousSymbols", qMakePair(0x2600, 0x26FF)); + categoriesRangeMap.insert("IsDingbats", qMakePair(0x2700, 0x27BF)); + categoriesRangeMap.insert("IsMiscellaneousMathematicalSymbols-A", qMakePair(0x27C0, 0x27EF)); + categoriesRangeMap.insert("IsSupplementalArrows-A", qMakePair(0x27F0, 0x27FF)); + categoriesRangeMap.insert("IsBraillePatterns", qMakePair(0x2800, 0x28FF)); + categoriesRangeMap.insert("IsSupplementalArrows-B", qMakePair(0x2900, 0x297F)); + categoriesRangeMap.insert("IsMiscellaneousMathematicalSymbols-B", qMakePair(0x2980, 0x29FF)); + categoriesRangeMap.insert("IsSupplementalMathematicalOperators", qMakePair(0x2A00, 0x2AFF)); + categoriesRangeMap.insert("IsMiscellaneousSymbolsandArrows", qMakePair(0x2B00, 0x2BFF)); + categoriesRangeMap.insert("IsGlagolitic", qMakePair(0x2C00, 0x2C5F)); + categoriesRangeMap.insert("IsCoptic", qMakePair(0x2C80, 0x2CFF)); + categoriesRangeMap.insert("IsGeorgianSupplement", qMakePair(0x2D00, 0x2D2F)); + categoriesRangeMap.insert("IsTifinagh", qMakePair(0x2D30, 0x2D7F)); + categoriesRangeMap.insert("IsEthiopicExtended", qMakePair(0x2D80, 0x2DDF)); + categoriesRangeMap.insert("IsSupplementalPunctuation", qMakePair(0x2E00, 0x2E7F)); + categoriesRangeMap.insert("IsCJKRadicalsSupplement", qMakePair(0x2E80, 0x2EFF)); + categoriesRangeMap.insert("IsKangxiRadicals", qMakePair(0x2F00, 0x2FDF)); + categoriesRangeMap.insert("IsIdeographicDescriptionCharacters", qMakePair(0x2FF0, 0x2FFF)); + categoriesRangeMap.insert("IsCJKSymbolsandPunctuation", qMakePair(0x3000, 0x303F)); + categoriesRangeMap.insert("IsHiragana", qMakePair(0x3040, 0x309F)); + categoriesRangeMap.insert("IsKatakana", qMakePair(0x30A0, 0x30FF)); + categoriesRangeMap.insert("IsBopomofo", qMakePair(0x3100, 0x312F)); + categoriesRangeMap.insert("IsHangulCompatibilityJamo", qMakePair(0x3130, 0x318F)); + categoriesRangeMap.insert("IsKanbun", qMakePair(0x3190, 0x319F)); + categoriesRangeMap.insert("IsBopomofoExtended", qMakePair(0x31A0, 0x31BF)); + categoriesRangeMap.insert("IsCJKStrokes", qMakePair(0x31C0, 0x31EF)); + categoriesRangeMap.insert("IsKatakanaPhoneticExtensions", qMakePair(0x31F0, 0x31FF)); + categoriesRangeMap.insert("IsEnclosedCJKLettersandMonths", qMakePair(0x3200, 0x32FF)); + categoriesRangeMap.insert("IsCJKCompatibility", qMakePair(0x3300, 0x33FF)); + categoriesRangeMap.insert("IsCJKUnifiedIdeographsExtensionA", qMakePair(0x3400, 0x4DB5)); + categoriesRangeMap.insert("IsYijingHexagramSymbols", qMakePair(0x4DC0, 0x4DFF)); + categoriesRangeMap.insert("IsCJKUnifiedIdeographs", qMakePair(0x4E00, 0x9FFF)); + categoriesRangeMap.insert("IsYiSyllables", qMakePair(0xA000, 0xA48F)); + categoriesRangeMap.insert("IsYiRadicals", qMakePair(0xA490, 0xA4CF)); + categoriesRangeMap.insert("IsModifierToneLetters", qMakePair(0xA700, 0xA71F)); + categoriesRangeMap.insert("IsSylotiNagri", qMakePair(0xA800, 0xA82F)); + categoriesRangeMap.insert("IsHangulSyllables", qMakePair(0xAC00, 0xD7A3)); + categoriesRangeMap.insert("IsPrivateUse", qMakePair(0xE000, 0xF8FF)); + categoriesRangeMap.insert("IsCJKCompatibilityIdeographs", qMakePair(0xF900, 0xFAFF)); + categoriesRangeMap.insert("IsAlphabeticPresentationForms", qMakePair(0xFB00, 0xFB4F)); + categoriesRangeMap.insert("IsArabicPresentationForms-A", qMakePair(0xFB50, 0xFDFF)); + categoriesRangeMap.insert("IsVariationSelectors", qMakePair(0xFE00, 0xFE0F)); + categoriesRangeMap.insert("IsVerticalForms", qMakePair(0xFE10, 0xFE1F)); + categoriesRangeMap.insert("IsCombiningHalfMarks", qMakePair(0xFE20, 0xFE2F)); + categoriesRangeMap.insert("IsCJKCompatibilityForms", qMakePair(0xFE30, 0xFE4F)); + categoriesRangeMap.insert("IsSmallFormVariants", qMakePair(0xFE50, 0xFE6F)); + categoriesRangeMap.insert("IsArabicPresentationForms-B", qMakePair(0xFE70, 0xFEFF)); + categoriesRangeMap.insert("IsHalfwidthandFullwidthForms", qMakePair(0xFF00, 0xFFEF)); + categoriesRangeMap.insert("IsSpecials", qMakePair(0xFFF0, 0xFFFF)); + categoriesRangeMap.insert("IsLinearBSyllabary", qMakePair(0x10000, 0x1007F)); + categoriesRangeMap.insert("IsLinearBIdeograms", qMakePair(0x10080, 0x100FF)); + categoriesRangeMap.insert("IsAegeanNumbers", qMakePair(0x10100, 0x1013F)); + categoriesRangeMap.insert("IsAncientGreekNumbers", qMakePair(0x10140, 0x1018F)); + categoriesRangeMap.insert("IsOldItalic", qMakePair(0x10300, 0x1032F)); + categoriesRangeMap.insert("IsGothic", qMakePair(0x10330, 0x1034F)); + categoriesRangeMap.insert("IsUgaritic", qMakePair(0x10380, 0x1039F)); + categoriesRangeMap.insert("IsOldPersian", qMakePair(0x103A0, 0x103DF)); + categoriesRangeMap.insert("IsDeseret", qMakePair(0x10400, 0x1044F)); + categoriesRangeMap.insert("IsShavian", qMakePair(0x10450, 0x1047F)); + categoriesRangeMap.insert("IsOsmanya", qMakePair(0x10480, 0x104AF)); + categoriesRangeMap.insert("IsCypriotSyllabary", qMakePair(0x10800, 0x1083F)); + categoriesRangeMap.insert("IsKharoshthi", qMakePair(0x10A00, 0x10A5F)); + categoriesRangeMap.insert("IsByzantineMusicalSymbols", qMakePair(0x1D000, 0x1D0FF)); + categoriesRangeMap.insert("IsMusicalSymbols", qMakePair(0x1D100, 0x1D1FF)); + categoriesRangeMap.insert("IsAncientGreekMusicalNotation", qMakePair(0x1D200, 0x1D24F)); + categoriesRangeMap.insert("IsTaiXuanJingSymbols", qMakePair(0x1D300, 0x1D35F)); + categoriesRangeMap.insert("IsMathematicalAlphanumericSymbols", qMakePair(0x1D400, 0x1D7FF)); + categoriesRangeMap.insert("IsCJKUnifiedIdeographsExtensionB", qMakePair(0x20000, 0x2A6DF)); + categoriesRangeMap.insert("IsCJKCompatibilityIdeographsSupplement", qMakePair(0x2F800, 0x2FA1F)); + categoriesRangeMap.insert("IsTags", qMakePair(0xE0000, 0xE007F)); + categoriesRangeMap.insert("IsVariationSelectorsSupplement", qMakePair(0xE0100, 0xE01EF)); + categoriesRangeMap.insert("IsSupplementaryPrivateUseArea-A", qMakePair(0xF0000, 0xFFFFF)); + categoriesRangeMap.insert("IsSupplementaryPrivateUseArea-B", qMakePair(0x100000, 0x10FFFF)); +} + int QRegExpEngine::getChar() { return (yyPos == yyLen) ? EOS : yyIn[yyPos++].unicode(); @@ -2713,6 +2867,177 @@ int QRegExpEngine::getEscape() yyCharClass->addCategories(0x000f807e); yyCharClass->addSingleton(0x005f); // '_' return Tok_CharClass; + case 'I': + if (xmlSchemaExtensions) { + yyCharClass->setNegative(!yyCharClass->negative()); + // fall through + } + case 'i': + if (xmlSchemaExtensions) { + yyCharClass->addCategories(0x000f807e); + yyCharClass->addSingleton(0x003a); // ':' + yyCharClass->addSingleton(0x005f); // '_' + yyCharClass->addRange(0x0041, 0x005a); // [A-Z] + yyCharClass->addRange(0x0061, 0x007a); // [a-z] + yyCharClass->addRange(0xc0, 0xd6); + yyCharClass->addRange(0xd8, 0xf6); + yyCharClass->addRange(0xf8, 0x2ff); + yyCharClass->addRange(0x370, 0x37d); + yyCharClass->addRange(0x37f, 0x1fff); + yyCharClass->addRange(0x200c, 0x200d); + yyCharClass->addRange(0x2070, 0x218f); + yyCharClass->addRange(0x2c00, 0x2fef); + yyCharClass->addRange(0x3001, 0xd7ff); + yyCharClass->addRange(0xf900, 0xfdcf); + yyCharClass->addRange(0xfdf0, 0xfffd); + yyCharClass->addRange((ushort)0x10000, (ushort)0xeffff); + } + return Tok_CharClass; + case 'C': + if (xmlSchemaExtensions) { + yyCharClass->setNegative(!yyCharClass->negative()); + // fall through + } + case 'c': + if (xmlSchemaExtensions) { + yyCharClass->addCategories(0x000f807e); + yyCharClass->addSingleton(0x002d); // '-' + yyCharClass->addSingleton(0x002e); // '.' + yyCharClass->addSingleton(0x003a); // ':' + yyCharClass->addSingleton(0x005f); // '_' + yyCharClass->addSingleton(0xb7); + yyCharClass->addRange(0x0030, 0x0039); // [0-9] + yyCharClass->addRange(0x0041, 0x005a); // [A-Z] + yyCharClass->addRange(0x0061, 0x007a); // [a-z] + yyCharClass->addRange(0xc0, 0xd6); + yyCharClass->addRange(0xd8, 0xf6); + yyCharClass->addRange(0xf8, 0x2ff); + yyCharClass->addRange(0x370, 0x37d); + yyCharClass->addRange(0x37f, 0x1fff); + yyCharClass->addRange(0x200c, 0x200d); + yyCharClass->addRange(0x2070, 0x218f); + yyCharClass->addRange(0x2c00, 0x2fef); + yyCharClass->addRange(0x3001, 0xd7ff); + yyCharClass->addRange(0xf900, 0xfdcf); + yyCharClass->addRange(0xfdf0, 0xfffd); + yyCharClass->addRange((ushort)0x10000, (ushort)0xeffff); + yyCharClass->addRange(0x0300, 0x036f); + yyCharClass->addRange(0x203f, 0x2040); + } + return Tok_CharClass; + case 'P': + if (xmlSchemaExtensions) { + yyCharClass->setNegative(!yyCharClass->negative()); + // fall through + } + case 'p': + if (xmlSchemaExtensions) { + if (yyCh != '{') { + error(RXERR_CHARCLASS); + return Tok_CharClass; + } + + QByteArray category; + yyCh = getChar(); + while (yyCh != '}') { + if (yyCh == EOS) { + error(RXERR_END); + return Tok_CharClass; + } + category.append(yyCh); + yyCh = getChar(); + } + yyCh = getChar(); // skip closing '}' + + if (category == "M") { + yyCharClass->addCategories(0x0000000e); + } else if (category == "Mn") { + yyCharClass->addCategories(0x00000002); + } else if (category == "Mc") { + yyCharClass->addCategories(0x00000004); + } else if (category == "Me") { + yyCharClass->addCategories(0x00000008); + } else if (category == "N") { + yyCharClass->addCategories(0x00000070); + } else if (category == "Nd") { + yyCharClass->addCategories(0x00000010); + } else if (category == "Nl") { + yyCharClass->addCategories(0x00000020); + } else if (category == "No") { + yyCharClass->addCategories(0x00000040); + } else if (category == "Z") { + yyCharClass->addCategories(0x00000380); + } else if (category == "Zs") { + yyCharClass->addCategories(0x00000080); + } else if (category == "Zl") { + yyCharClass->addCategories(0x00000100); + } else if (category == "Zp") { + yyCharClass->addCategories(0x00000200); + } else if (category == "C") { + yyCharClass->addCategories(0x00006c00); + } else if (category == "Cc") { + yyCharClass->addCategories(0x00000400); + } else if (category == "Cf") { + yyCharClass->addCategories(0x00000800); + } else if (category == "Cs") { + yyCharClass->addCategories(0x00001000); + } else if (category == "Co") { + yyCharClass->addCategories(0x00002000); + } else if (category == "Cn") { + yyCharClass->addCategories(0x00004000); + } else if (category == "L") { + yyCharClass->addCategories(0x000f8000); + } else if (category == "Lu") { + yyCharClass->addCategories(0x00008000); + } else if (category == "Ll") { + yyCharClass->addCategories(0x00010000); + } else if (category == "Lt") { + yyCharClass->addCategories(0x00020000); + } else if (category == "Lm") { + yyCharClass->addCategories(0x00040000); + } else if (category == "Lo") { + yyCharClass->addCategories(0x00080000); + } else if (category == "P") { + yyCharClass->addCategories(0x4f580780); + } else if (category == "Pc") { + yyCharClass->addCategories(0x00100000); + } else if (category == "Pd") { + yyCharClass->addCategories(0x00200000); + } else if (category == "Ps") { + yyCharClass->addCategories(0x00400000); + } else if (category == "Pe") { + yyCharClass->addCategories(0x00800000); + } else if (category == "Pi") { + yyCharClass->addCategories(0x01000000); + } else if (category == "Pf") { + yyCharClass->addCategories(0x02000000); + } else if (category == "Po") { + yyCharClass->addCategories(0x04000000); + } else if (category == "S") { + yyCharClass->addCategories(0x78000000); + } else if (category == "Sm") { + yyCharClass->addCategories(0x08000000); + } else if (category == "Sc") { + yyCharClass->addCategories(0x10000000); + } else if (category == "Sk") { + yyCharClass->addCategories(0x20000000); + } else if (category == "So") { + yyCharClass->addCategories(0x40000000); + } else if (category.startsWith("Is")) { + if (categoriesRangeMap.isEmpty()) + setupCategoriesRangeMap(); + + if (categoriesRangeMap.contains(category)) { + const QPair<int, int> range = categoriesRangeMap.value(category); + yyCharClass->addRange(range.first, range.second); + } else { + error(RXERR_CATEGORY); + } + } else { + error(RXERR_CATEGORY); + } + } + return Tok_CharClass; #endif #ifndef QT_NO_REGEXP_ESCAPE case 'x': @@ -2934,7 +3259,7 @@ int QRegExpEngine::getToken() yyMaxRep = getRep(InftyRep); } if (yyMaxRep < yyMinRep) - qSwap(yyMinRep, yyMaxRep); + error(RXERR_INTERVAL); if (yyCh != '}') error(RXERR_REPETITION); yyCh = getChar(); @@ -3296,7 +3621,7 @@ static void prepareEngine_helper(QRegExpPrivate *priv) { bool initMatchState = !priv->eng; #if !defined(QT_NO_REGEXP_OPTIM) - if (!priv->eng) { + if (!priv->eng && globalEngineCache()) { QMutexLocker locker(mutex()); priv->eng = globalEngineCache()->take(priv->engineKey); if (priv->eng != 0) @@ -3374,6 +3699,9 @@ static void invalidateEngine(QRegExpPrivate *priv) equivalent to using the RegExp pattern on a string in which all metacharacters are escaped using escape(). + \value W3CXmlSchema11 The pattern is a regular expression as + defined by the W3C XML Schema 1.1 specification. + \sa setPatternSyntax() */ diff --git a/src/corelib/tools/qregexp.h b/src/corelib/tools/qregexp.h index 057eec2..16682a3 100644 --- a/src/corelib/tools/qregexp.h +++ b/src/corelib/tools/qregexp.h @@ -61,7 +61,7 @@ class QStringList; class Q_CORE_EXPORT QRegExp { public: - enum PatternSyntax { RegExp, Wildcard, FixedString, RegExp2 }; + enum PatternSyntax { RegExp, Wildcard, FixedString, RegExp2, W3CXmlSchema11 }; enum CaretMode { CaretAtZero, CaretAtOffset, CaretWontMatch }; QRegExp(); diff --git a/src/corelib/tools/qsharedpointer.cpp b/src/corelib/tools/qsharedpointer.cpp index fe3d9e0..85085c5 100644 --- a/src/corelib/tools/qsharedpointer.cpp +++ b/src/corelib/tools/qsharedpointer.cpp @@ -341,6 +341,7 @@ /*! \fn QSharedPointer<X> QSharedPointer::objectCast() const + \since 4.6 Performs a \l qobject_cast() from this pointer's type to \tt X and returns a QSharedPointer that shares the reference. If this @@ -737,6 +738,7 @@ /*! \fn QSharedPointer<X> qSharedPointerObjectCast(const QSharedPointer<T> &other) \relates QSharedPointer + \since 4.6 Returns a shared pointer to the pointer held by \a other, using a \l qobject_cast() to type \tt X to obtain an internal pointer of the @@ -754,6 +756,7 @@ \fn QSharedPointer<X> qSharedPointerObjectCast(const QWeakPointer<T> &other) \relates QSharedPointer \relates QWeakPointer + \since 4.6 Returns a shared pointer to the pointer held by \a other, using a \l qobject_cast() to type \tt X to obtain an internal pointer of the diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp index b160b90..99fbaa9 100644 --- a/src/corelib/tools/qstring.cpp +++ b/src/corelib/tools/qstring.cpp @@ -45,6 +45,7 @@ #ifndef QT_NO_TEXTCODEC #include <qtextcodec.h> #endif +#include <private/qutfcodec_p.h> #include <qdatastream.h> #include <qlist.h> #include "qlocale.h" @@ -964,7 +965,8 @@ int QString::toWCharArray(wchar_t *array) const Constructs a string initialized with the first \a size characters of the QChar array \a unicode. - QString makes a deep copy of the string data. + QString makes a deep copy of the string data. The unicode data is copied as + is and the Byte Order Mark is preserved if present. */ QString::QString(const QChar *unicode, int size) { @@ -3480,7 +3482,7 @@ QByteArray QString::toAscii() const return toLatin1(); } -#ifndef Q_WS_MAC +#if !defined(Q_WS_MAC) && defined(Q_OS_UNIX) static QByteArray toLocal8Bit_helper(const QChar *data, int length) { #ifndef QT_NO_TEXTCODEC @@ -3843,74 +3845,7 @@ QString QString::fromUtf8(const char *str, int size) if (size < 0) size = qstrlen(str); - QString result(size, Qt::Uninitialized); // worst case - ushort *qch = result.d->data; - uint uc = 0; - uint min_uc = 0; - int need = 0; - int error = -1; - uchar ch; - int i = 0; - - // skip utf8-encoded byte order mark - if (size >= 3 - && (uchar)str[0] == 0xef && (uchar)str[1] == 0xbb && (uchar)str[2] == 0xbf) - i += 3; - - for (; i < size; ++i) { - ch = str[i]; - if (need) { - if ((ch&0xc0) == 0x80) { - uc = (uc << 6) | (ch & 0x3f); - need--; - if (!need) { - if (uc > 0xffffU && uc < 0x110000U) { - // surrogate pair - *qch++ = QChar::highSurrogate(uc); - uc = QChar::lowSurrogate(uc); - } else if ((uc < min_uc) || (uc >= 0xd800 && uc <= 0xdfff) || (uc >= 0xfffe)) { - // overlong seqence, UTF16 surrogate or BOM - uc = QChar::ReplacementCharacter; - } - *qch++ = uc; - } - } else { - i = error; - need = 0; - *qch++ = QChar::ReplacementCharacter; - } - } else { - if (ch < 128) { - *qch++ = ch; - } else if ((ch & 0xe0) == 0xc0) { - uc = ch & 0x1f; - need = 1; - error = i; - min_uc = 0x80; - } else if ((ch & 0xf0) == 0xe0) { - uc = ch & 0x0f; - need = 2; - error = i; - min_uc = 0x800; - } else if ((ch&0xf8) == 0xf0) { - uc = ch & 0x07; - need = 3; - error = i; - min_uc = 0x10000; - } else { - // Error - *qch++ = QChar::ReplacementCharacter; - } - } - } - if (need) { - // we have some invalid characters remaining we need to add to the string - for (int i = error; i < size; ++i) - *qch++ = QChar::ReplacementCharacter; - } - - result.truncate(qch - result.d->data); - return result; + return QUtf8::convertToUnicode(str, size, 0); } /*! @@ -3933,7 +3868,7 @@ QString QString::fromUtf16(const ushort *unicode, int size) while (unicode[size] != 0) ++size; } - return QString((const QChar *)unicode, size); + return QUtf16::convertToUnicode((const char *)unicode, size*2, 0); } @@ -3957,20 +3892,7 @@ QString QString::fromUcs4(const uint *unicode, int size) while (unicode[size] != 0) ++size; } - - QString s(size * 2, Qt::Uninitialized); // worst case - ushort *uc = s.d->data; - for (int i = 0; i < size; ++i) { - uint u = unicode[i]; - if (u > 0xffff) { - // decompose into a surrogate pair - *uc++ = QChar::highSurrogate(u); - u = QChar::lowSurrogate(u); - } - *uc++ = u; - } - s.resize(uc - s.d->data); - return s; + return QUtf32::convertToUnicode((const char *)unicode, size*4, 0); } /*! @@ -6106,6 +6028,7 @@ QString QString::repeated(int times) const return result; } +void qt_string_normalize(QString *data, QString::NormalizationForm mode, QChar::UnicodeVersion version, int from); /*! \overload \fn QString QString::normalized(NormalizationForm mode, QChar::UnicodeVersion version) const @@ -6115,42 +6038,48 @@ QString QString::repeated(int times) const */ QString QString::normalized(QString::NormalizationForm mode, QChar::UnicodeVersion version) const { + QString copy = *this; + qt_string_normalize(©, mode, version, 0); + return copy; +} + +void qt_string_normalize(QString *data, QString::NormalizationForm mode, QChar::UnicodeVersion version, int from) +{ bool simple = true; - for (int i = 0; i < d->size; ++i) { - if (d->data[i] >= 0x80) { + const QChar *p = data->constData(); + int len = data->length(); + for (int i = from; i < len; ++i) { + if (p[i].unicode() >= 0x80) { simple = false; break; } } if (simple) - return *this; + return; - QString s = *this; + QString &s = *data; if (version != CURRENT_VERSION) { for (int i = 0; i < NumNormalizationCorrections; ++i) { const NormalizationCorrection &n = uc_normalization_corrections[i]; if (n.version > version) { + int pos = from; if (n.ucs4 > 0xffff) { ushort ucs4High = QChar::highSurrogate(n.ucs4); ushort ucs4Low = QChar::lowSurrogate(n.ucs4); ushort oldHigh = QChar::highSurrogate(n.old_mapping); ushort oldLow = QChar::lowSurrogate(n.old_mapping); - int pos = 0; - while (pos < s.d->size - 1) { - if (s.d->data[pos] == ucs4High && s.d->data[pos + 1] == ucs4Low) { - s.detach(); - s.d->data[pos] = oldHigh; - s.d->data[pos + 1] = oldLow; + while (pos < s.length() - 1) { + if (s.at(pos).unicode() == ucs4High && s.at(pos + 1).unicode() == ucs4Low) { + s[pos] = oldHigh; + s[pos + 1] = oldLow; ++pos; } ++pos; } } else { - int pos = 0; - while (pos < s.d->size) { - if (s.d->data[pos] == n.ucs4) { - s.detach(); - s.d->data[pos] = n.old_mapping; + while (pos < s.length()) { + if (s.at(pos).unicode() == n.ucs4) { + s[pos] = n.old_mapping; } ++pos; } @@ -6158,15 +6087,14 @@ QString QString::normalized(QString::NormalizationForm mode, QChar::UnicodeVersi } } } - s = decomposeHelper(s, mode < QString::NormalizationForm_KD, version); + decomposeHelper(data, mode < QString::NormalizationForm_KD, version, from); - s = canonicalOrderHelper(s, version); + canonicalOrderHelper(data, version, from); if (mode == QString::NormalizationForm_D || mode == QString::NormalizationForm_KD) - return s; - - return composeHelper(s); + return; + composeHelper(data, from); } @@ -6551,7 +6479,7 @@ QString QString::arg(qlonglong a, int fieldWidth, int base, const QChar &fillCha ArgEscapeData d = findArgEscapes(*this); if (d.occurrences == 0) { - qWarning("QString::arg: Argument missing: %s, %lld", toLocal8Bit().data(), a); + qWarning() << "QString::arg: Argument missing:" << *this << ',' << a; return *this; } @@ -6594,7 +6522,7 @@ QString QString::arg(qulonglong a, int fieldWidth, int base, const QChar &fillCh ArgEscapeData d = findArgEscapes(*this); if (d.occurrences == 0) { - qWarning("QString::arg: Argument missing: %s, %llu", toLocal8Bit().data(), a); + qWarning() << "QString::arg: Argument missing:" << *this << ',' << a; return *this; } diff --git a/src/corelib/tools/qstringlist.cpp b/src/corelib/tools/qstringlist.cpp index 5a2b37a..5c550af 100644 --- a/src/corelib/tools/qstringlist.cpp +++ b/src/corelib/tools/qstringlist.cpp @@ -41,6 +41,7 @@ #include <qstringlist.h> #include <qset.h> +#include <qstringmatcher.h> QT_BEGIN_NAMESPACE diff --git a/src/corelib/tools/qstringlist.h b/src/corelib/tools/qstringlist.h index 665c0d0..f36567a 100644 --- a/src/corelib/tools/qstringlist.h +++ b/src/corelib/tools/qstringlist.h @@ -47,7 +47,6 @@ #include <QtCore/qlist.h> #include <QtCore/qregexp.h> #include <QtCore/qstring.h> -#include <QtCore/qstringmatcher.h> #ifdef QT_INCLUDE_COMPAT #include <Qt3Support/q3valuelist.h> #endif diff --git a/src/corelib/tools/qstringmatcher.h b/src/corelib/tools/qstringmatcher.h index 2b8edc9..61b7a95 100644 --- a/src/corelib/tools/qstringmatcher.h +++ b/src/corelib/tools/qstringmatcher.h @@ -81,13 +81,14 @@ private: // explicitely allow anonymous unions for RVCT to prevent compiler warnings #pragma anon_unions #endif + struct Data { + uchar q_skiptable[256]; + const QChar *uc; + int len; + }; union { uint q_data[256]; - struct { - uchar q_skiptable[256]; - const QChar *uc; - int len; - } p; + Data p; }; }; diff --git a/src/corelib/tools/qtimeline.cpp b/src/corelib/tools/qtimeline.cpp index 04aed39..e32fc03 100644 --- a/src/corelib/tools/qtimeline.cpp +++ b/src/corelib/tools/qtimeline.cpp @@ -555,6 +555,8 @@ void QTimeLine::setCurveShape(CurveShape shape) /*! \property QTimeLine::easingCurve + \since 4.6 + Specifies the easing curve that the timeline will use. If both easing curve and curveShape are set, the last set property will override the previous one. (If valueForTime() is reimplemented it will diff --git a/src/corelib/tools/qvector.h b/src/corelib/tools/qvector.h index 19b8da4..51a6709 100644 --- a/src/corelib/tools/qvector.h +++ b/src/corelib/tools/qvector.h @@ -415,7 +415,9 @@ void QVector<T>::free(Data *x) { if (QTypeInfo<T>::isComplex) { T* b = x->array; - T* i = b + reinterpret_cast<QVectorData *>(x)->size; + union { QVectorData *d; Data *p; } u; + u.p = x; + T* i = b + u.d->size; while (i-- != b) i->~T(); } diff --git a/src/corelib/tools/tools.pri b/src/corelib/tools/tools.pri index c93a065..08c94ac 100644 --- a/src/corelib/tools/tools.pri +++ b/src/corelib/tools/tools.pri @@ -5,6 +5,7 @@ HEADERS += \ tools/qbitarray.h \ tools/qbytearray.h \ tools/qbytearraymatcher.h \ + tools/qbytedata_p.h \ tools/qcache.h \ tools/qchar.h \ tools/qcontainerfwd.h \ diff --git a/src/corelib/xml/qxmlstream.cpp b/src/corelib/xml/qxmlstream.cpp index 1fc2a9f..42ed04e 100644 --- a/src/corelib/xml/qxmlstream.cpp +++ b/src/corelib/xml/qxmlstream.cpp @@ -568,7 +568,7 @@ bool QXmlStreamReader::atEnd() const returns true, hasError() returns true, and this function returns QXmlStreamReader::Invalid. - The exception is when error() return PrematureEndOfDocumentError. + The exception is when error() returns PrematureEndOfDocumentError. This error is reported when the end of an otherwise well-formed chunk of XML is reached, but the chunk doesn't represent a complete XML document. In that case, parsing \e can be resumed by calling diff --git a/src/dbus/qdbusmarshaller.cpp b/src/dbus/qdbusmarshaller.cpp index bb7fa6b..7207b4c 100644 --- a/src/dbus/qdbusmarshaller.cpp +++ b/src/dbus/qdbusmarshaller.cpp @@ -397,16 +397,6 @@ bool QDBusMarshaller::appendVariantInternal(const QVariant &arg) case DBUS_TYPE_DOUBLE: qIterAppend(&iterator, ba, *signature, arg.constData()); return true; - - case DBUS_TYPE_STRING: - case DBUS_TYPE_OBJECT_PATH: - case DBUS_TYPE_SIGNATURE: { - const QByteArray data = - reinterpret_cast<const QString *>(arg.constData())->toUtf8(); - const char *rawData = data.constData(); - qIterAppend(&iterator, ba, *signature, &rawData); - return true; - } #else case DBUS_TYPE_BYTE: append( qvariant_cast<uchar>(arg) ); @@ -435,6 +425,8 @@ bool QDBusMarshaller::appendVariantInternal(const QVariant &arg) case DBUS_TYPE_DOUBLE: append( arg.toDouble() ); return true; +#endif + case DBUS_TYPE_STRING: append( arg.toString() ); return true; @@ -444,7 +436,6 @@ bool QDBusMarshaller::appendVariantInternal(const QVariant &arg) case DBUS_TYPE_SIGNATURE: append( qvariant_cast<QDBusSignature>(arg) ); return true; -#endif // compound types: case DBUS_TYPE_VARIANT: diff --git a/src/gui/accessible/qaccessible.h b/src/gui/accessible/qaccessible.h index 19080de..8dc8159 100644 --- a/src/gui/accessible/qaccessible.h +++ b/src/gui/accessible/qaccessible.h @@ -210,6 +210,7 @@ public: PageTabList = 0x0000003C, Clock = 0x0000003D, Splitter = 0x0000003E, + // Additional Qt roles where enum value does not map directly to MSAA: LayeredPane = 0x0000003F, UserRole = 0x0000ffff }; diff --git a/src/gui/accessible/qaccessible_win.cpp b/src/gui/accessible/qaccessible_win.cpp index bfacb94..85f1a8d 100644 --- a/src/gui/accessible/qaccessible_win.cpp +++ b/src/gui/accessible/qaccessible_win.cpp @@ -1051,6 +1051,8 @@ HRESULT STDMETHODCALLTYPE QWindowsAccessible::get_accRole(VARIANT varID, VARIANT Role role = accessible->role(varID.lVal); if (role != NoRole) { + if (role == LayeredPane) + role = QAccessible::Pane; (*pvarRole).vt = VT_I4; (*pvarRole).lVal = role; } else { diff --git a/src/gui/dialogs/qfiledialog.cpp b/src/gui/dialogs/qfiledialog.cpp index 849f4b3..8b4e1b1 100644 --- a/src/gui/dialogs/qfiledialog.cpp +++ b/src/gui/dialogs/qfiledialog.cpp @@ -1604,12 +1604,7 @@ QString QFileDialog::getOpenFileName(QWidget *parent, args.parent = parent; args.caption = caption; args.directory = QFileDialogPrivate::workingDirectory(dir); - //If workingDirectory returned a different path than the initial one, - //it means that the initial path was invalid. There is no point to try select a file - if (args.directory != QFileInfo(dir).path()) - args.selection = QString(); - else - args.selection = QFileDialogPrivate::initialSelection(dir); + args.selection = QFileDialogPrivate::initialSelection(dir); args.filter = filter; args.mode = ExistingFile; args.options = options; @@ -1687,18 +1682,13 @@ QStringList QFileDialog::getOpenFileNames(QWidget *parent, QString *selectedFilter, Options options) { - if (qt_filedialog_open_filenames_hook) + if (qt_filedialog_open_filenames_hook && !(options & DontUseNativeDialog)) return qt_filedialog_open_filenames_hook(parent, caption, dir, filter, selectedFilter, options); QFileDialogArgs args; args.parent = parent; args.caption = caption; args.directory = QFileDialogPrivate::workingDirectory(dir); - //If workingDirectory returned a different path than the initial one, - //it means that the initial path was invalid. There is no point to try select a file - if (args.directory != QFileInfo(dir).path()) - args.selection = QString(); - else - args.selection = QFileDialogPrivate::initialSelection(dir); + args.selection = QFileDialogPrivate::initialSelection(dir); args.filter = filter; args.mode = ExistingFiles; args.options = options; @@ -1778,18 +1768,13 @@ QString QFileDialog::getSaveFileName(QWidget *parent, QString *selectedFilter, Options options) { - if (qt_filedialog_save_filename_hook) + if (qt_filedialog_save_filename_hook && !(options & DontUseNativeDialog)) return qt_filedialog_save_filename_hook(parent, caption, dir, filter, selectedFilter, options); QFileDialogArgs args; args.parent = parent; args.caption = caption; args.directory = QFileDialogPrivate::workingDirectory(dir); - //If workingDirectory returned a different path than the initial one, - //it means that the initial path was invalid. There is no point to try select a file - if (args.directory != QFileInfo(dir).path()) - args.selection = QString(); - else - args.selection = QFileDialogPrivate::initialSelection(dir); + args.selection = QFileDialogPrivate::initialSelection(dir); args.filter = filter; args.mode = AnyFile; args.options = options; @@ -1858,7 +1843,7 @@ QString QFileDialog::getExistingDirectory(QWidget *parent, const QString &dir, Options options) { - if (qt_filedialog_existing_directory_hook) + if (qt_filedialog_existing_directory_hook && !(options & DontUseNativeDialog)) return qt_filedialog_existing_directory_hook(parent, caption, dir, options); QFileDialogArgs args; args.parent = parent; diff --git a/src/gui/dialogs/qfiledialog_win.cpp b/src/gui/dialogs/qfiledialog_win.cpp index 6883bf9..9bf82c3 100644 --- a/src/gui/dialogs/qfiledialog_win.cpp +++ b/src/gui/dialogs/qfiledialog_win.cpp @@ -60,6 +60,13 @@ #include <shlobj.h> +#include <objbase.h> + +#if defined(__IFileDialog_INTERFACE_DEFINED__) \ + && defined(__IFileOpenDialog_INTERFACE_DEFINED__) +#define USE_COMMON_ITEM_DIALOG +#endif + #ifdef Q_WS_WINCE #include <commdlg.h> # ifndef BFFM_SETSELECTION @@ -401,14 +408,202 @@ QString qt_win_get_save_file_name(const QFileDialogArgs &args, return fi.absoluteFilePath(); } + +#if defined(USE_COMMON_ITEM_DIALOG) + +typedef HRESULT (WINAPI *PtrSHCreateItemFromParsingName)(PCWSTR pszPath, IBindCtx *pbc, REFIID riid, void **ppv); +static PtrSHCreateItemFromParsingName pSHCreateItemFromParsingName = 0; + +static bool qt_win_set_IFileDialogOptions(IFileDialog *pfd, + const QString& initialSelection, + const QString& initialDirectory, + const QString& title, + const QStringList& filterLst, + QFileDialog::FileMode mode, + QFileDialog::Options options) +{ + if (!pSHCreateItemFromParsingName) { + // This function is available only in Vista & above. + QLibrary shellLib(QLatin1String("Shell32")); + pSHCreateItemFromParsingName = (PtrSHCreateItemFromParsingName) + shellLib.resolve("SHCreateItemFromParsingName"); + if (!pSHCreateItemFromParsingName) + return false; + } + HRESULT hr; + QString winfilters; + int numFilters = 0; + quint32 currentOffset = 0; + QList<quint32> offsets; + QStringList::ConstIterator it = filterLst.begin(); + // Create the native filter string and save offset to each entry. + for (; it != filterLst.end(); ++it) { + QString subfilter = *it; + if (!subfilter.isEmpty()) { + offsets<<currentOffset; + winfilters += subfilter; // The name of the filter. + winfilters += QChar(); + currentOffset += subfilter.size()+1; + offsets<<currentOffset; + QString spec = qt_win_extract_filter(subfilter); + winfilters += spec; // The actual filter spec. + winfilters += QChar(); + currentOffset += spec.size()+1; + numFilters++; + } + } + // Add the filters to the file dialog. + if (numFilters) { + wchar_t *szData = (wchar_t*)winfilters.utf16(); + COMDLG_FILTERSPEC *filterSpec = new COMDLG_FILTERSPEC[numFilters]; + for(int i = 0; i<numFilters; i++) { + filterSpec[i].pszName = szData+offsets[i*2]; + filterSpec[i].pszSpec = szData+offsets[(i*2)+1]; + } + hr = pfd->SetFileTypes(numFilters, filterSpec); + delete []filterSpec; + } + // Set the starting folder. + tInitDir = QDir::toNativeSeparators(initialDirectory); + if (!tInitDir.isEmpty()) { + IShellItem *psiDefaultFolder; + hr = pSHCreateItemFromParsingName((wchar_t*)tInitDir.utf16(), + NULL, + IID_PPV_ARGS(&psiDefaultFolder)); + + if (SUCCEEDED(hr)) { + hr = pfd->SetFolder(psiDefaultFolder); + psiDefaultFolder->Release(); + } + } + // Set the currently selected file. + QString initSel = QDir::toNativeSeparators(initialSelection); + if (!initSel.isEmpty()) { + initSel.remove(QLatin1Char('<')); + initSel.remove(QLatin1Char('>')); + initSel.remove(QLatin1Char('\"')); + initSel.remove(QLatin1Char('|')); + } + if (!initSel.isEmpty()) { + hr = pfd->SetFileName((wchar_t*)initSel.utf16()); + } + // Set the title for the file dialog. + if (!title.isEmpty()) { + hr = pfd->SetTitle((wchar_t*)title.utf16()); + } + // Set other flags for the dialog. + DWORD newOptions; + hr = pfd->GetOptions(&newOptions); + if (SUCCEEDED(hr)) { + newOptions |= (FOS_NOCHANGEDIR | FOS_NOREADONLYRETURN); + if (mode == QFileDialog::ExistingFile || + mode == QFileDialog::ExistingFiles) + newOptions |= (FOS_FILEMUSTEXIST | FOS_PATHMUSTEXIST); + if (mode == QFileDialog::ExistingFiles) + newOptions |= FOS_ALLOWMULTISELECT; + if (!(options & QFileDialog::DontConfirmOverwrite)) + newOptions |= FOS_OVERWRITEPROMPT; + hr = pfd->SetOptions(newOptions); + } + return SUCCEEDED(hr); +} + +QStringList qt_win_CID_get_open_file_names(const QFileDialogArgs &args, + QString *initialDirectory, + const QStringList &filterList, + QString *selectedFilter, + int selectedFilterIndex) +{ + QStringList result; + QDialog modal_widget; + modal_widget.setAttribute(Qt::WA_NoChildEventsForParent, true); + modal_widget.setParent(args.parent, Qt::Window); + QApplicationPrivate::enterModal(&modal_widget); + // Multiple selection is allowed only in IFileOpenDialog. + IFileOpenDialog *pfd; + HRESULT hr = CoCreateInstance(CLSID_FileOpenDialog, + NULL, + CLSCTX_INPROC_SERVER, + IID_PPV_ARGS(&pfd)); + + if (SUCCEEDED(hr)) { + qt_win_set_IFileDialogOptions(pfd, args.selection, + args.directory, args.caption, + filterList, QFileDialog::ExistingFiles, + args.options); + // Set the currently selected filter (one-based index). + hr = pfd->SetFileTypeIndex(selectedFilterIndex+1); + QWidget *parentWindow = args.parent; + if (parentWindow) + parentWindow = parentWindow->window(); + else + parentWindow = QApplication::activeWindow(); + // Show the file dialog. + hr = pfd->Show(parentWindow ? parentWindow->winId() : 0); + if (SUCCEEDED(hr)) { + // Retrieve the results. + IShellItemArray *psiaResults; + hr = pfd->GetResults(&psiaResults); + if (SUCCEEDED(hr)) { + DWORD numItems = 0; + psiaResults->GetCount(&numItems); + for (DWORD i = 0; i<numItems; i++) { + IShellItem *psi = 0; + hr = psiaResults->GetItemAt(i, &psi); + if (SUCCEEDED(hr)) { + // Retrieve the file name from shell item. + wchar_t *pszPath; + hr = psi->GetDisplayName(SIGDN_FILESYSPATH, &pszPath); + if (SUCCEEDED(hr)) { + QString fileName = QString::fromWCharArray(pszPath); + result.append(fileName); + CoTaskMemFree(pszPath); + } + psi->Release(); // Free the current item. + } + } + psiaResults->Release(); // Free the array of items. + } + } + } + QApplicationPrivate::leaveModal(&modal_widget); + + qt_win_eatMouseMove(); + + if (!result.isEmpty()) { + // Retrieve the current folder name. + IShellItem *psi = 0; + hr = pfd->GetFolder(&psi); + if (SUCCEEDED(hr)) { + wchar_t *pszPath; + hr = psi->GetDisplayName(SIGDN_FILESYSPATH, &pszPath); + if (SUCCEEDED(hr)) { + *initialDirectory = QString::fromWCharArray(pszPath); + CoTaskMemFree(pszPath); + } + psi->Release(); + } + // Retrieve the currently selected filter. + if (selectedFilter) { + quint32 filetype = 0; + hr = pfd->GetFileTypeIndex(&filetype); + if (SUCCEEDED(hr) && filetype && filetype <= (quint32)filterList.length()) { + // This is a one-based index, not zero-based. + *selectedFilter = filterList[filetype-1]; + } + } + } + return result; +} + +#endif + QStringList qt_win_get_open_file_names(const QFileDialogArgs &args, QString *initialDirectory, QString *selectedFilter) { - QStringList result; QFileInfo fi; QDir dir; - QString isel; if (initialDirectory && initialDirectory->left(5) == QLatin1String("file:")) initialDirectory->remove(0, 5); @@ -416,7 +611,6 @@ QStringList qt_win_get_open_file_names(const QFileDialogArgs &args, if (initialDirectory && !fi.isDir()) { *initialDirectory = fi.absolutePath(); - isel = fi.fileName(); } if (!fi.exists()) @@ -424,12 +618,21 @@ QStringList qt_win_get_open_file_names(const QFileDialogArgs &args, DWORD selFilIdx = 0; + QStringList filterLst = qt_win_make_filters_list(args.filter); int idx = 0; if (selectedFilter) { - QStringList filterLst = qt_win_make_filters_list(args.filter); idx = filterLst.indexOf(*selectedFilter); } + // Windows Vista (& above) allows users to search from file dialogs. If user selects + // multiple files belonging to different folders from these search results, the + // GetOpenFileName() will return only one folder name for all the files. To retrieve + // the correct path for all selected files, we have to use Common Item Dialog interfaces. +#if defined(USE_COMMON_ITEM_DIALOG) + if (QSysInfo::WindowsVersion >= QSysInfo::WV_VISTA && QSysInfo::WindowsVersion < QSysInfo::WV_NT_based) + return qt_win_CID_get_open_file_names(args, initialDirectory, filterLst, selectedFilter, idx); +#endif + QStringList result; QDialog modal_widget; modal_widget.setAttribute(Qt::WA_NoChildEventsForParent, true); modal_widget.setParent(args.parent, Qt::Window); diff --git a/src/gui/dialogs/qmessagebox.cpp b/src/gui/dialogs/qmessagebox.cpp index b7fa420..31f73b9 100644 --- a/src/gui/dialogs/qmessagebox.cpp +++ b/src/gui/dialogs/qmessagebox.cpp @@ -1362,8 +1362,10 @@ void QMessageBox::setVisible(bool visible) /*! \overload - Opens the dialog and connects its accepted() signal to the slot specified - by \a receiver and \a member. + Opens the dialog and connects its finished() or buttonClicked() signal to + the slot specified by \a receiver and \a member. If the slot in \a member + has a pointer for its first parameter the connection is to buttonClicked(), + otherwise the connection is to finished(). The signal will be disconnected from the slot when the dialog is closed. */ diff --git a/src/gui/dialogs/qpagesetupdialog_win.cpp b/src/gui/dialogs/qpagesetupdialog_win.cpp index a84a7ce..3f2fb34 100644 --- a/src/gui/dialogs/qpagesetupdialog_win.cpp +++ b/src/gui/dialogs/qpagesetupdialog_win.cpp @@ -78,8 +78,8 @@ int QPageSetupDialog::exec() psd.lStructSize = sizeof(PAGESETUPDLG); // we need a temp DEVMODE struct if we don't have a global DEVMODE - HGLOBAL hDevMode; - int devModeSize; + HGLOBAL hDevMode = 0; + int devModeSize = 0; if (!ep->globalDevMode) { devModeSize = sizeof(DEVMODE) + ep->devMode->dmDriverExtra; hDevMode = GlobalAlloc(GHND, devModeSize); diff --git a/src/gui/dialogs/qwizard.cpp b/src/gui/dialogs/qwizard.cpp index a7dccd8..a97aedd 100644 --- a/src/gui/dialogs/qwizard.cpp +++ b/src/gui/dialogs/qwizard.cpp @@ -343,8 +343,8 @@ void QWizardHeader::setup(const QWizardLayoutInfo &info, const QString &title, { bool modern = ((info.wizStyle == QWizard::ModernStyle) #if !defined(QT_NO_STYLE_WINDOWSVISTA) - || ((info.wizStyle == QWizard::AeroStyle) - && (QVistaHelper::vistaState() == QVistaHelper::Classic) || vistaDisabled()) + || ((info.wizStyle == QWizard::AeroStyle + && QVistaHelper::vistaState() == QVistaHelper::Classic) || vistaDisabled()) #endif ); diff --git a/src/gui/dialogs/qwizard_win.cpp b/src/gui/dialogs/qwizard_win.cpp index 840149b..1def47f 100644 --- a/src/gui/dialogs/qwizard_win.cpp +++ b/src/gui/dialogs/qwizard_win.cpp @@ -616,7 +616,7 @@ bool QVistaHelper::drawTitleText(QPainter *painter, const QString &text, const Q // Set up a memory DC and bitmap that we'll draw into HDC dcMem; HBITMAP bmp; - BITMAPINFO dib = {0}; + BITMAPINFO dib = {{0}}; dcMem = CreateCompatibleDC(hdc); dib.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); @@ -662,7 +662,7 @@ bool QVistaHelper::drawBlackRect(const QRect &rect, HDC hdc) // Set up a memory DC and bitmap that we'll draw into HDC dcMem; HBITMAP bmp; - BITMAPINFO dib = {0}; + BITMAPINFO dib = {{0}}; dcMem = CreateCompatibleDC(hdc); dib.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); diff --git a/src/gui/embedded/qscreenproxy_qws.cpp b/src/gui/embedded/qscreenproxy_qws.cpp index ade16ca..3d7451b 100644 --- a/src/gui/embedded/qscreenproxy_qws.cpp +++ b/src/gui/embedded/qscreenproxy_qws.cpp @@ -537,7 +537,7 @@ int QProxyScreen::transformOrientation() const } /*! -\reimp +\internal */ int QProxyScreen::memoryNeeded(const QString &str) { @@ -548,7 +548,7 @@ int QProxyScreen::memoryNeeded(const QString &str) } /*! -\reimp +\internal */ int QProxyScreen::sharedRamSize(void *ptr) { @@ -559,7 +559,7 @@ int QProxyScreen::sharedRamSize(void *ptr) } /*! -\reimp +\internal */ void QProxyScreen::haltUpdates() { @@ -568,7 +568,7 @@ void QProxyScreen::haltUpdates() } /*! -\reimp +\internal */ void QProxyScreen::resumeUpdates() { diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp index 638f20f..37c034a 100644 --- a/src/gui/graphicsview/qgraphicsitem.cpp +++ b/src/gui/graphicsview/qgraphicsitem.cpp @@ -1274,7 +1274,7 @@ QGraphicsItem *QGraphicsItem::topLevelItem() const } /*! - \since 4.4 + \since 4.6 Returns a pointer to the item's parent, cast to a QGraphicsObject. returns 0 if the parent item is not a QGraphicsObject. @@ -2346,8 +2346,8 @@ void QGraphicsItem::setAcceptsHoverEvents(bool enabled) /*! \since 4.6 - Returns true if an item accepts touch events (QTouchEvent); otherwise, returns false. By - default, items do not accept touch events. + Returns true if an item accepts \l{QTouchEvent}{touch events}; + otherwise, returns false. By default, items do not accept touch events. \sa setAcceptTouchEvents() */ @@ -2359,7 +2359,7 @@ bool QGraphicsItem::acceptTouchEvents() const /*! \since 4.6 - If \a enabled is true, this item will accept touch events; + If \a enabled is true, this item will accept \l{QTouchEvent}{touch events}; otherwise, it will ignore them. By default, items do not accept touch events. */ @@ -2375,6 +2375,8 @@ void QGraphicsItem::setAcceptTouchEvents(bool enabled) } /*! + \since 4.6 + Returns true if this item filters child events (i.e., all events intended for any of its children are instead sent to this item); otherwise, false is returned. @@ -2389,13 +2391,15 @@ bool QGraphicsItem::filtersChildEvents() const } /*! + \since 4.6 + If \a enabled is true, this item is set to filter all events for all its children (i.e., all events intented for any of its children are instead sent to this item); otherwise, if \a enabled is false, this item will only handle its own events. The default value is false. - \sa filtersChildEvents() + \sa filtersChildEvents() */ void QGraphicsItem::setFiltersChildEvents(bool enabled) { @@ -2675,10 +2679,12 @@ QPointF QGraphicsItem::pos() const */ /*! - Set's the \a x coordinate of the item's position. Equivalent to - calling setPos(x, y()). + \since 4.6 + + Set's the \a x coordinate of the item's position. Equivalent to + calling setPos(x, y()). - \sa x(), setPos() + \sa x(), setPos() */ void QGraphicsItem::setX(qreal x) { @@ -2694,10 +2700,12 @@ void QGraphicsItem::setX(qreal x) */ /*! - Set's the \a y coordinate of the item's position. Equivalent to - calling setPos(x(), y). + \since 4.6 - \sa x(), setPos() + Set's the \a y coordinate of the item's position. Equivalent to + calling setPos(x(), y). + + \sa x(), setPos() */ void QGraphicsItem::setY(qreal y) { @@ -3195,7 +3203,7 @@ void QGraphicsItem::setShear(qreal sh, qreal sv) /*! \since 4.6 - Returns the origin point used for transformation in item coordinate. + Returns the origin point for the transformation in item coordinates. The default is QPointF(0,0). @@ -3211,7 +3219,7 @@ QPointF QGraphicsItem::transformOrigin() const /*! \since 4.6 - Sets the \a origin for transformation in item coordinate + Sets the \a origin point for the transformation in item coordinates. \sa transformOrigin(), {Transformations} */ @@ -3232,9 +3240,9 @@ void QGraphicsItem::setTransformOrigin(const QPointF &origin) \since 4.6 \overload - Sets the origin for the transformation to the point - composed of \a x and \a y. - + Sets the origin point for the transformation in item coordinates. + This is equivalent to calling setTransformOrigin(QPointF(\a x, \a y)). + \sa setTransformOrigin(), {Transformations} */ diff --git a/src/gui/graphicsview/qgraphicslayoutitem.cpp b/src/gui/graphicsview/qgraphicslayoutitem.cpp index 656af33..e280162 100644 --- a/src/gui/graphicsview/qgraphicslayoutitem.cpp +++ b/src/gui/graphicsview/qgraphicslayoutitem.cpp @@ -808,6 +808,8 @@ bool QGraphicsLayoutItem::isLayout() const } /*! + \since 4.6 + Returns whether a layout should delete this item in its destructor. If its true, then the layout will delete it. If its false, then it is assumed that another object has the ownership of it, and the layout won't @@ -834,6 +836,8 @@ bool QGraphicsLayoutItem::ownedByLayout() const return d_func()->ownedByLayout; } /*! + \since 4.6 + Sets whether a layout should delete this item in its destructor or not. \a ownership must be true to in order for the layout to delete it. \sa ownedByLayout() diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp index 6488265..8eb21a3 100644 --- a/src/gui/graphicsview/qgraphicsscene.cpp +++ b/src/gui/graphicsview/qgraphicsscene.cpp @@ -1587,10 +1587,16 @@ QList<QGraphicsItem *> QGraphicsScene::items(Qt::SortOrder order) const } /*! + \obsolete + Returns all visible items at position \a pos in the scene. The items are listed in descending stacking order (i.e., the first item in the list is the top-most item, and the last item is the bottom-most item). + This function is deprecated and returns incorrect results if the scene + contains items that ignore transformations. Use the overload that takes + a QTransform instead. + \sa itemAt() */ QList<QGraphicsItem *> QGraphicsScene::items(const QPointF &pos) const @@ -1600,9 +1606,8 @@ QList<QGraphicsItem *> QGraphicsScene::items(const QPointF &pos) const } /*! - \fn QList<QGraphicsItem *> QGraphicsScene::items(const QRectF &rectangle, Qt::ItemSelectionMode mode) const - \overload + \obsolete Returns all visible items that, depending on \a mode, are either inside or intersect with the specified \a rectangle. @@ -1610,23 +1615,47 @@ QList<QGraphicsItem *> QGraphicsScene::items(const QPointF &pos) const The default value for \a mode is Qt::IntersectsItemShape; all items whose exact shape intersects with or is contained by \a rectangle are returned. + This function is deprecated and returns incorrect results if the scene + contains items that ignore transformations. Use the overload that takes + a QTransform instead. + \sa itemAt() */ -QList<QGraphicsItem *> QGraphicsScene::items(const QRectF &rect, Qt::ItemSelectionMode mode) const +QList<QGraphicsItem *> QGraphicsScene::items(const QRectF &rectangle, Qt::ItemSelectionMode mode) const { Q_D(const QGraphicsScene); - return d->index->items(rect, mode, Qt::AscendingOrder); + return d->index->items(rectangle, mode, Qt::AscendingOrder); } /*! \fn QList<QGraphicsItem *> QGraphicsScene::items(qreal x, qreal y, qreal w, qreal h, Qt::ItemSelectionMode mode) const + \obsolete \since 4.3 This convenience function is equivalent to calling items(QRectF(\a x, \a y, \a w, \a h), \a mode). + + This function is deprecated and returns incorrect results if the scene + contains items that ignore transformations. Use the overload that takes + a QTransform instead. +*/ + +/*! + \fn QList<QGraphicsItem *> QGraphicsScene::items(qreal x, qreal y, qreal w, qreal h, + Qt::ItemSelectionMode mode, Qt::SortOrder order, const QTransform &deviceTransform) const + \overload + \since 4.6 + + Returns all visible items that, depending on \a mode, are either inside or + intersect with the rectangle defined by \a x, \a y, \a w and \a h, in a list + sorted using \a order. + + \a deviceTransform is the transformation that applies to the view, and needs to + be provided if the scene contains items that ignore transformations. */ /*! \overload + \obsolete Returns all visible items that, depending on \a mode, are either inside or intersect with the polygon \a polygon. @@ -1634,6 +1663,10 @@ QList<QGraphicsItem *> QGraphicsScene::items(const QRectF &rect, Qt::ItemSelecti The default value for \a mode is Qt::IntersectsItemShape; all items whose exact shape intersects with or is contained by \a polygon are returned. + This function is deprecated and returns incorrect results if the scene + contains items that ignore transformations. Use the overload that takes + a QTransform instead. + \sa itemAt() */ QList<QGraphicsItem *> QGraphicsScene::items(const QPolygonF &polygon, Qt::ItemSelectionMode mode) const @@ -1644,6 +1677,7 @@ QList<QGraphicsItem *> QGraphicsScene::items(const QPolygonF &polygon, Qt::ItemS /*! \overload + \obsolete Returns all visible items that, depending on \a path, are either inside or intersect with the path \a path. @@ -1651,6 +1685,10 @@ QList<QGraphicsItem *> QGraphicsScene::items(const QPolygonF &polygon, Qt::ItemS The default value for \a mode is Qt::IntersectsItemShape; all items whose exact shape intersects with or is contained by \a path are returned. + This function is deprecated and returns incorrect results if the scene + contains items that ignore transformations. Use the overload that takes + a QTransform instead. + \sa itemAt() */ QList<QGraphicsItem *> QGraphicsScene::items(const QPainterPath &path, Qt::ItemSelectionMode mode) const @@ -1660,13 +1698,16 @@ QList<QGraphicsItem *> QGraphicsScene::items(const QPainterPath &path, Qt::ItemS } /*! + \since 4.6 + Returns all visible items that, depending on \a mode, are at the specified \a pos - and return a list sorted using \a order. + in a list sorted using \a order. The default value for \a mode is Qt::IntersectsItemShape; all items whose exact shape intersects with \a pos are returned. - \a deviceTransform is the transformation apply to the view. + \a deviceTransform is the transformation that applies to the view, and needs to + be provided if the scene contains items that ignore transformations. \sa itemAt() */ @@ -1679,6 +1720,7 @@ QList<QGraphicsItem *> QGraphicsScene::items(const QPointF &pos, Qt::ItemSelecti /*! \overload + \since 4.6 Returns all visible items that, depending on \a mode, are either inside or intersect with the specified \a rect and return a list sorted using \a order. @@ -1686,7 +1728,8 @@ QList<QGraphicsItem *> QGraphicsScene::items(const QPointF &pos, Qt::ItemSelecti The default value for \a mode is Qt::IntersectsItemShape; all items whose exact shape intersects with or is contained by \a rect are returned. - \a deviceTransform is the transformation apply to the view. + \a deviceTransform is the transformation that applies to the view, and needs to + be provided if the scene contains items that ignore transformations. \sa itemAt() */ @@ -1699,6 +1742,7 @@ QList<QGraphicsItem *> QGraphicsScene::items(const QRectF &rect, Qt::ItemSelecti /*! \overload + \since 4.6 Returns all visible items that, depending on \a mode, are either inside or intersect with the specified \a polygon and return a list sorted using \a order. @@ -1706,7 +1750,8 @@ QList<QGraphicsItem *> QGraphicsScene::items(const QRectF &rect, Qt::ItemSelecti The default value for \a mode is Qt::IntersectsItemShape; all items whose exact shape intersects with or is contained by \a polygon are returned. - \a deviceTransform is the transformation apply to the view. + \a deviceTransform is the transformation that applies to the view, and needs to + be provided if the scene contains items that ignore transformations. \sa itemAt() */ @@ -1718,7 +1763,8 @@ QList<QGraphicsItem *> QGraphicsScene::items(const QPolygonF &polygon, Qt::ItemS } /*! - \overload + \overload + \since 4.6 Returns all visible items that, depending on \a mode, are either inside or intersect with the specified \a path and return a list sorted using \a order. @@ -1726,7 +1772,8 @@ QList<QGraphicsItem *> QGraphicsScene::items(const QPolygonF &polygon, Qt::ItemS The default value for \a mode is Qt::IntersectsItemShape; all items whose exact shape intersects with or is contained by \a path are returned. - \a deviceTransform is the transformation apply to the view. + \a deviceTransform is the transformation that applies to the view, and needs to + be provided if the scene contains items that ignore transformations. \sa itemAt() */ @@ -1767,31 +1814,67 @@ QList<QGraphicsItem *> QGraphicsScene::collidingItems(const QGraphicsItem *item, } /*! - \fn QGraphicsItem *QGraphicsScene::itemAt(const QPointF &position) const + \overload + \obsolete Returns the topmost visible item at the specified \a position, or 0 if there are no items at this position. \note The topmost item is the one with the highest Z-value. + This function is deprecated and returns incorrect results if the scene + contains items that ignore transformations. Use the overload that takes + a QTransform instead. + \sa items(), collidingItems(), QGraphicsItem::setZValue() */ -QGraphicsItem *QGraphicsScene::itemAt(const QPointF &pos) const +QGraphicsItem *QGraphicsScene::itemAt(const QPointF &position) const { - QList<QGraphicsItem *> itemsAtPoint = items(pos); + QList<QGraphicsItem *> itemsAtPoint = items(position); return itemsAtPoint.isEmpty() ? 0 : itemsAtPoint.first(); } -QGraphicsItem *QGraphicsScene::itemAt(const QPointF &pos, const QTransform &deviceTransform) const +/*! + \since 4.6 + + Returns the topmost visible item at the specified \a position, or 0 + if there are no items at this position. + + \a deviceTransform is the transformation that applies to the view, and needs to + be provided if the scene contains items that ignore transformations. + + \note The topmost item is the one with the highest Z-value. + + \sa items(), collidingItems(), QGraphicsItem::setZValue() + */ +QGraphicsItem *QGraphicsScene::itemAt(const QPointF &position, const QTransform &deviceTransform) const { - QList<QGraphicsItem *> itemsAtPoint = items(pos, Qt::IntersectsItemShape, + QList<QGraphicsItem *> itemsAtPoint = items(position, Qt::IntersectsItemShape, Qt::AscendingOrder, deviceTransform); return itemsAtPoint.isEmpty() ? 0 : itemsAtPoint.first(); } /*! + \fn QGraphicsScene::itemAt(qreal x, qreal y, const QTransform &deviceTransform) const + \overload + \since 4.6 + + Returns the topmost item at the position specified by (\a x, \a + y), or 0 if there are no items at this position. + + \a deviceTransform is the transformation that applies to the view, and needs to + be provided if the scene contains items that ignore transformations. + + This convenience function is equivalent to calling \c + {itemAt(QPointF(x, y), deviceTransform)}. + + \note The topmost item is the one with the highest Z-value. +*/ + +/*! \fn QGraphicsScene::itemAt(qreal x, qreal y) const \overload + \obsolete Returns the topmost item at the position specified by (\a x, \a y), or 0 if there are no items at this position. @@ -1799,6 +1882,10 @@ QGraphicsItem *QGraphicsScene::itemAt(const QPointF &pos, const QTransform &devi This convenience function is equivalent to calling \c {itemAt(QPointF(x, y))}. + This function is deprecated and returns incorrect results if the scene + contains items that ignore transformations. Use the overload that takes + a QTransform instead. + \note The topmost item is the one with the highest Z-value. */ @@ -1839,21 +1926,42 @@ QPainterPath QGraphicsScene::selectionArea() const } /*! + \since 4.6 + Sets the selection area to \a path. All items within this area are immediately selected, and all items outside are unselected. You can get the list of all selected items by calling selectedItems(). + \a deviceTransform is the transformation that applies to the view, and needs to + be provided if the scene contains items that ignore transformations. + For an item to be selected, it must be marked as \e selectable (QGraphicsItem::ItemIsSelectable). \sa clearSelection(), selectionArea() */ +void QGraphicsScene::setSelectionArea(const QPainterPath &path, const QTransform &deviceTransform) +{ + setSelectionArea(path, Qt::IntersectsItemShape, deviceTransform); +} + +/*! + \obsolete + \overload + + Sets the selection area to \a path. + + This function is deprecated and leads to incorrect results if the scene + contains items that ignore transformations. Use the overload that takes + a QTransform instead. +*/ void QGraphicsScene::setSelectionArea(const QPainterPath &path) { - setSelectionArea(path, Qt::IntersectsItemShape); + setSelectionArea(path, Qt::IntersectsItemShape, QTransform()); } /*! + \obsolete \overload \since 4.3 @@ -1869,11 +1977,14 @@ void QGraphicsScene::setSelectionArea(const QPainterPath &path, Qt::ItemSelectio /*! \overload - \since 4.3 + \since 4.6 Sets the selection area to \a path using \a mode to determine if items are included in the selection area. + \a deviceTransform is the transformation that applies to the view, and needs to + be provided if the scene contains items that ignore transformations. + \sa clearSelection(), selectionArea() */ void QGraphicsScene::setSelectionArea(const QPainterPath &path, Qt::ItemSelectionMode mode, @@ -2665,13 +2776,17 @@ void QGraphicsScene::clearFocus() /*! \property QGraphicsScene::stickyFocus - \brief whether or not clicking the scene will clear focus + \brief whether clicking into the scene background will clear focus + + \since 4.6 + + In a QGraphicsScene with stickyFocus set to true, focus will remain + unchanged when the user clicks into the scene background or on an item + that does not accept focus. Otherwise, focus will be cleared. - If this property is false (the default), then clicking on the scene - background or on an item that does not accept focus, will clear - focus. Otherwise, focus will remain unchanged. + By default, this property is false. - The focus change happens in response to a mouse press. You can reimplement + Focus changes in response to a mouse press. You can reimplement mousePressEvent() in a subclass of QGraphicsScene to toggle this property based on where the user has clicked. diff --git a/src/gui/graphicsview/qgraphicsscene.h b/src/gui/graphicsview/qgraphicsscene.h index e599652..2fe58b9 100644 --- a/src/gui/graphicsview/qgraphicsscene.h +++ b/src/gui/graphicsview/qgraphicsscene.h @@ -182,8 +182,9 @@ public: QList<QGraphicsItem *> selectedItems() const; QPainterPath selectionArea() const; - void setSelectionArea(const QPainterPath &path); - void setSelectionArea(const QPainterPath &path, Qt::ItemSelectionMode mode); + void setSelectionArea(const QPainterPath &path); // ### obsolete + void setSelectionArea(const QPainterPath &path, const QTransform &deviceTransform); + void setSelectionArea(const QPainterPath &path, Qt::ItemSelectionMode mode); // ### obsolete void setSelectionArea(const QPainterPath &path, Qt::ItemSelectionMode mode, const QTransform &deviceTransform); QGraphicsItemGroup *createItemGroup(const QList<QGraphicsItem *> &items); diff --git a/src/gui/graphicsview/qgraphicsscenebsptreeindex.cpp b/src/gui/graphicsview/qgraphicsscenebsptreeindex.cpp index a54ade9..3cb33d1 100644 --- a/src/gui/graphicsview/qgraphicsscenebsptreeindex.cpp +++ b/src/gui/graphicsview/qgraphicsscenebsptreeindex.cpp @@ -34,7 +34,7 @@ ** met: http://www.gnu.org/copyleft/gpl.html. ** ** If you are unsure which license is appropriate for your use, please -** contact the sales department at qt-sales@nokia.com. +** contact the sales department at http://www.qtsoftware.com/contact. ** $QT_END_LICENSE$ ** ****************************************************************************/ @@ -75,6 +75,8 @@ \sa QGraphicsScene, QGraphicsView, QGraphicsSceneIndex */ +#include <QtCore/qglobal.h> + #ifndef QT_NO_GRAPHICSVIEW #include <private/qgraphicsscene_p.h> @@ -542,6 +544,7 @@ void QGraphicsSceneBspTreeIndex::clear() d->indexedItems.clear(); d->unindexedItems.clear(); d->untransformableItems.clear(); + d->regenerateIndex = true; } /*! diff --git a/src/gui/graphicsview/qgraphicsscenebsptreeindex_p.h b/src/gui/graphicsview/qgraphicsscenebsptreeindex_p.h index 2e02458..2293a8e 100644 --- a/src/gui/graphicsview/qgraphicsscenebsptreeindex_p.h +++ b/src/gui/graphicsview/qgraphicsscenebsptreeindex_p.h @@ -1,9 +1,9 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Qt Software Information (qt-info@nokia.com) +** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtCore module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage @@ -34,7 +34,7 @@ ** met: http://www.gnu.org/copyleft/gpl.html. ** ** If you are unsure which license is appropriate for your use, please -** contact the sales department at qt-sales@nokia.com. +** contact the sales department at http://www.qtsoftware.com/contact. ** $QT_END_LICENSE$ ** ****************************************************************************/ @@ -53,11 +53,7 @@ #ifndef QGRAPHICSBSPTREEINDEX_H #define QGRAPHICSBSPTREEINDEX_H -QT_BEGIN_HEADER - -QT_BEGIN_NAMESPACE - -QT_MODULE(Gui) +#include <QtCore/qglobal.h> #if !defined(QT_NO_GRAPHICSVIEW) || (QT_EDITION & QT_MODULE_GRAPHICSVIEW) != QT_MODULE_GRAPHICSVIEW @@ -65,10 +61,11 @@ QT_MODULE(Gui) #include "qgraphicsitem_p.h" #include "qgraphicsscene_bsp_p.h" -#include <QtCore/qglobal.h> #include <QtCore/qrect.h> #include <QtCore/qlist.h> +QT_BEGIN_NAMESPACE + static const int QGRAPHICSSCENE_INDEXTIMER_TIMEOUT = 2000; class QGraphicsScene; @@ -204,10 +201,8 @@ static inline bool QRectF_intersects(const QRectF &s, const QRectF &r) return !(t1 >= b2 || t2 >= b1); } -#endif // QT_NO_GRAPHICSVIEW - QT_END_NAMESPACE -QT_END_HEADER +#endif // QT_NO_GRAPHICSVIEW #endif // QGRAPHICSBSPTREEINDEX_H diff --git a/src/gui/graphicsview/qgraphicssceneindex.cpp b/src/gui/graphicsview/qgraphicssceneindex.cpp index 01efde4..ab5ca85 100644 --- a/src/gui/graphicsview/qgraphicssceneindex.cpp +++ b/src/gui/graphicsview/qgraphicssceneindex.cpp @@ -34,7 +34,7 @@ ** met: http://www.gnu.org/copyleft/gpl.html. ** ** If you are unsure which license is appropriate for your use, please -** contact the sales department at qt-sales@nokia.com. +** contact the sales department at http://www.qtsoftware.com/contact. ** $QT_END_LICENSE$ ** ****************************************************************************/ @@ -553,20 +553,9 @@ QList<QGraphicsItem *> QGraphicsSceneIndex::estimateTopLevelItems(const QRectF & } /*! - \fn virtual QList<QGraphicsItem *> - QGraphicsSceneIndex::estimateItems(const QRectF &rect, Qt::SortOrder - order, const QTransform &deviceTransform) const = 0 - - This pure virtual function return an estimation of items in the \a rect. - This method return a list sorted using \a order. - - \a deviceTransform is the transformation apply to the view. -*/ - -/*! - \fn virtual QList<QGraphicsItem *> - QGraphicsSceneIndex::items(Qt::SortOrder order = Qt::AscendingOrder) const - = 0; This pure virtual function all items in the index and sort them using + \fn QList<QGraphicsItem *> QGraphicsSceneIndex::items(Qt::SortOrder order = Qt::AscendingOrder) const + + This pure virtual function all items in the index and sort them using \a order. */ diff --git a/src/gui/graphicsview/qgraphicssceneindex_p.h b/src/gui/graphicsview/qgraphicssceneindex_p.h index 8cf0294..37dffb8 100644 --- a/src/gui/graphicsview/qgraphicssceneindex_p.h +++ b/src/gui/graphicsview/qgraphicssceneindex_p.h @@ -1,9 +1,9 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Qt Software Information (qt-info@nokia.com) +** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtCore module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage @@ -34,7 +34,7 @@ ** met: http://www.gnu.org/copyleft/gpl.html. ** ** If you are unsure which license is appropriate for your use, please -** contact the sales department at qt-sales@nokia.com. +** contact the sales department at http://www.qtsoftware.com/contact. ** $QT_END_LICENSE$ ** ****************************************************************************/ diff --git a/src/gui/graphicsview/qgraphicsscenelinearindex.cpp b/src/gui/graphicsview/qgraphicsscenelinearindex.cpp index 5e6ac30..52bbc79 100644 --- a/src/gui/graphicsview/qgraphicsscenelinearindex.cpp +++ b/src/gui/graphicsview/qgraphicsscenelinearindex.cpp @@ -1,11 +1,50 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + /*! \class QGraphicsSceneLinearIndex \brief The QGraphicsSceneLinearIndex class provides an implementation of a linear indexing algorithm for discovering items in QGraphicsScene. \since 4.6 - \ingroup multimedia \ingroup graphicsview-api - \mainclass \internal QGraphicsSceneLinearIndex index is default linear implementation to discover items. @@ -30,32 +69,26 @@ /*! - \fn virtual QList<QGraphicsItem *> QGraphicsSceneLinearIndex::estimateItems(const QRectF &rect, Qt::SortOrder order) const; + \fn virtual QList<QGraphicsItem *> QGraphicsSceneLinearIndex::estimateItems(const QRectF &rect, Qt::SortOrder order) const Returns an estimation visible items that are either inside or intersect with the specified \a rect and return a list sorted using \a order. */ /*! - \fn QRectF QGraphicsSceneLinearIndex::indexedRect() const; - \reimp - Return the rect indexed by the the index. -*/ - -/*! - \fn void QGraphicsSceneLinearIndex::clear(); - \reimp + \fn void QGraphicsSceneLinearIndex::clear() + \internal Clear the all the BSP index. */ /*! - \fn virtual void QGraphicsSceneLinearIndex::addItem(QGraphicsItem *item); + \fn virtual void QGraphicsSceneLinearIndex::addItem(QGraphicsItem *item) Add the \a item into the index. */ /*! - \fn virtual void QGraphicsSceneLinearIndex::removeItem(QGraphicsItem *item); + \fn virtual void QGraphicsSceneLinearIndex::removeItem(QGraphicsItem *item) Add the \a item from the index. */ diff --git a/src/gui/graphicsview/qgraphicsscenelinearindex_p.h b/src/gui/graphicsview/qgraphicsscenelinearindex_p.h index 56dde3a..1f3d58b 100644 --- a/src/gui/graphicsview/qgraphicsscenelinearindex_p.h +++ b/src/gui/graphicsview/qgraphicsscenelinearindex_p.h @@ -1,9 +1,9 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Qt Software Information (qt-info@nokia.com) +** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtGui module of the Qt Toolkit. +** This file is part of the QtCore module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage @@ -34,7 +34,7 @@ ** met: http://www.gnu.org/copyleft/gpl.html. ** ** If you are unsure which license is appropriate for your use, please -** contact the sales department at qt-sales@nokia.com. +** contact the sales department at http://www.qtsoftware.com/contact. ** $QT_END_LICENSE$ ** ****************************************************************************/ @@ -53,13 +53,7 @@ // We mean it. // -#include <QtCore/qlist.h> - -QT_BEGIN_HEADER - -QT_BEGIN_NAMESPACE - -QT_MODULE(Gui) +#include <QtCore/qglobal.h> #if !defined(QT_NO_GRAPHICSVIEW) || (QT_EDITION & QT_MODULE_GRAPHICSVIEW) != QT_MODULE_GRAPHICSVIEW @@ -68,6 +62,12 @@ QT_MODULE(Gui) #include <QtGui/qgraphicsitem.h> #include <private/qgraphicssceneindex_p.h> +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +QT_MODULE(Gui) + class Q_AUTOTEST_EXPORT QGraphicsSceneLinearIndex : public QGraphicsSceneIndex { Q_OBJECT diff --git a/src/gui/graphicsview/qgraphicsview.cpp b/src/gui/graphicsview/qgraphicsview.cpp index 1cea8db..53b044c 100644 --- a/src/gui/graphicsview/qgraphicsview.cpp +++ b/src/gui/graphicsview/qgraphicsview.cpp @@ -3129,7 +3129,7 @@ void QGraphicsView::mouseReleaseEvent(QMouseEvent *event) } } else #endif - if (d->dragMode == QGraphicsView::ScrollHandDrag) { + if (d->dragMode == QGraphicsView::ScrollHandDrag && event->button() == Qt::LeftButton) { #ifndef QT_NO_CURSOR // Restore the open hand cursor. ### There might be items // under the mouse that have a valid cursor at this time, so @@ -3552,6 +3552,8 @@ QTransform QGraphicsView::viewportTransform() const } /*! + \since 4.6 + Returns true if the view is transformed (i.e., a non-identity transform has been assigned, or the scrollbars are adjusted). diff --git a/src/gui/image/qimage.cpp b/src/gui/image/qimage.cpp index fa1ce29..7d7dde1 100644 --- a/src/gui/image/qimage.cpp +++ b/src/gui/image/qimage.cpp @@ -612,9 +612,6 @@ bool QImageData::checkForAlphaPixels() const \table \header \o Function \o Description \row - \o setAlphaChannel() - \o Sets the alpha channel of the image. - \row \o setDotsPerMeterX() \o Defines the aspect ratio by setting the number of pixels that fit horizontally in a physical meter. @@ -5269,7 +5266,7 @@ QPaintEngine *QImage::paintEngine() const /*! - \reimp + \internal Returns the size for the specified \a metric on the device. */ @@ -5587,7 +5584,7 @@ bool QImage::isDetached() const Note that the image will be converted to the Format_ARGB32_Premultiplied format if the function succeeds. - Use one of the composition mods in QPainter::CompositionMode instead. + Use one of the composition modes in QPainter::CompositionMode instead. \warning This function is expensive. @@ -5665,6 +5662,8 @@ void QImage::setAlphaChannel(const QImage &alphaChannel) /*! + \obsolete + Returns the alpha channel of the image as a new grayscale QImage in which each pixel's red, green, and blue values are given the alpha value of the original image. The color depth of the returned image is 8-bit. @@ -5744,7 +5743,7 @@ QImage QImage::alphaChannel() const Returns true if the image has a format that respects the alpha channel, otherwise returns false. - \sa alphaChannel(), {QImage#Image Information}{Image Information} + \sa {QImage#Image Information}{Image Information} */ bool QImage::hasAlphaChannel() const { diff --git a/src/gui/image/qpicture.cpp b/src/gui/image/qpicture.cpp index 874de81..ea1392b 100644 --- a/src/gui/image/qpicture.cpp +++ b/src/gui/image/qpicture.cpp @@ -954,6 +954,8 @@ bool QPicture::exec(QPainter *painter, QDataStream &s, int nrecords) } /*! + \internal + Internal implementation of the virtual QPaintDevice::metric() function. diff --git a/src/gui/image/qpixmap.cpp b/src/gui/image/qpixmap.cpp index 61be832..3e5c9b7 100644 --- a/src/gui/image/qpixmap.cpp +++ b/src/gui/image/qpixmap.cpp @@ -380,6 +380,7 @@ QPixmap QPixmap::copy(const QRect &rect) const /*! \fn QPixmap::scroll(int dx, int dy, int x, int y, int width, int height, QRegion *exposed) + \since 4.6 This convenience function is equivalent to calling QPixmap::scroll(\a dx, \a dy, QRect(\a x, \a y, \a width, \a height), \a exposed). @@ -388,6 +389,8 @@ QPixmap QPixmap::copy(const QRect &rect) const */ /*! + \since 4.6 + Scrolls the area \a rect of this pixmap by (\a dx, \a dy). The exposed region is left unchanged. You can optionally pass a pointer to an empty QRegion to get the region that is \a exposed by the scroll operation. @@ -1569,24 +1572,24 @@ QPixmap QPixmap::transformed(const QMatrix &matrix, Qt::TransformationMode mode) designed and optimized for showing images on screen. QBitmap is only a convenience class that inherits QPixmap, ensuring a depth of 1. The isQBitmap() function returns true if a QPixmap object is - really a bitmap, otherwise returns false. Finally, the QPicture class is a - paint device that records and replays QPainter commands. + really a bitmap, otherwise returns false. Finally, the QPicture class + is a paint device that records and replays QPainter commands. A QPixmap can easily be displayed on the screen using QLabel or one of QAbstractButton's subclasses (such as QPushButton and QToolButton). QLabel has a pixmap property, whereas - QAbstractButton has an icon property. And because QPixmap is a - QPaintDevice subclass, QPainter can be used to draw directly onto - pixmaps. + QAbstractButton has an icon property. In addition to the ordinary constructors, a QPixmap can be constructed using the static grabWidget() and grabWindow() functions which creates a QPixmap and paints the given widget, or - window, in it. + window, into it. + + QPixmap objects can be passed around by value since the QPixmap + class uses implicit data sharing. For more information, see the \l + {Implicit Data Sharing} documentation. QPixmap objects can also be + streamed. - Note that the pixel data in a pixmap is internal and is managed by - the underlying window system. Pixels can only be accessed through - QPainter functions or by converting the QPixmap to a QImage. Depending on the system, QPixmap is stored using a RGB32 or a premultiplied alpha format. If the image has an alpha channel, and if the system allows, the preferred format is premultiplied alpha. @@ -1597,6 +1600,13 @@ QPixmap QPixmap::transformed(const QMatrix &matrix, Qt::TransformationMode mode) QPixmap are stored on the client side and don't use any GDI resources). + Note that the pixel data in a pixmap is internal and is managed by + the underlying window system. Because QPixmap is a QPaintDevice + subclass, QPainter can be used to draw directly onto pixmaps. + Pixels can only be accessed through QPainter functions or by + converting the QPixmap to a QImage. However, the fill() function + is available for initializing the entire pixmap with a given color. + There are functions to convert between QImage and QPixmap. Typically, the QImage class is used to load an image file, optionally manipulating the image data, before the QImage @@ -1611,11 +1621,6 @@ QPixmap QPixmap::transformed(const QMatrix &matrix, Qt::TransformationMode mode) there are several functions that enables transformation of the pixmap. - QPixmap objects can be passed around by value since the QPixmap - class uses implicit data sharing. For more information, see the \l - {Implicit Data Sharing} documentation. QPixmap objects can also be - streamed. - \tableofcontents \section1 Reading and Writing Image Files @@ -1672,12 +1677,15 @@ QPixmap QPixmap::transformed(const QMatrix &matrix, Qt::TransformationMode mode) The hasAlphaChannel() returns true if the pixmap has a format that respects the alpha channel, otherwise returns false, while the hasAlpha() function returns true if the pixmap has an alpha - channel \e or a mask (otherwise false). + channel \e or a mask (otherwise false). The mask() function returns + the mask as a QBitmap object, which can be set using setMask(). - The alphaChannel() function returns the alpha channel as a new - QPixmap object, while the mask() function returns the mask as a - QBitmap object. The alpha channel and mask can be set using the - setAlphaChannel() and setMask() functions, respectively. + The createHeuristicMask() function creates and returns a 1-bpp + heuristic mask (i.e. a QBitmap) for this pixmap. It works by + selecting a color from one of the corners and then chipping away + pixels of that color, starting at all the edges. The + createMaskFromColor() function creates and returns a mask (i.e. a + QBitmap) for the pixmap based on a given color. \row \o Low-level information @@ -1715,14 +1723,7 @@ QPixmap QPixmap::transformed(const QMatrix &matrix, Qt::TransformationMode mode) \section1 Pixmap Transformations QPixmap supports a number of functions for creating a new pixmap - that is a transformed version of the original: The - createHeuristicMask() function creates and returns a 1-bpp - heuristic mask (i.e. a QBitmap) for this pixmap. It works by - selecting a color from one of the corners and then chipping away - pixels of that color, starting at all the edges. The - createMaskFromColor() function creates and returns a mask (i.e. a - QBitmap) for the pixmap based on a given color. - + that is a transformed version of the original: The scaled(), scaledToWidth() and scaledToHeight() functions return scaled copies of the pixmap, while the copy() function @@ -1737,11 +1738,6 @@ QPixmap QPixmap::transformed(const QMatrix &matrix, Qt::TransformationMode mode) function returns the actual matrix used for transforming the pixmap. - There are also functions for changing attributes of a pixmap. - in-place: The fill() function fills the entire image with the - given color, the setMask() function sets a mask bitmap, and the - setAlphaChannel() function sets the pixmap's alpha channel. - \sa QBitmap, QImage, QImageReader, QImageWriter */ @@ -1760,7 +1756,7 @@ QPixmap QPixmap::transformed(const QMatrix &matrix, Qt::TransformationMode mode) Returns true if this pixmap has an alpha channel, \e or has a mask, otherwise returns false. - \sa hasAlphaChannel(), alphaChannel(), mask() + \sa hasAlphaChannel(), mask() */ bool QPixmap::hasAlpha() const { @@ -1771,7 +1767,7 @@ bool QPixmap::hasAlpha() const Returns true if the pixmap has a format that respects the alpha channel, otherwise returns false. - \sa alphaChannel(), hasAlpha() + \sa hasAlpha() */ bool QPixmap::hasAlphaChannel() const { @@ -1779,7 +1775,7 @@ bool QPixmap::hasAlphaChannel() const } /*! - \reimp + \internal */ int QPixmap::metric(PaintDeviceMetric metric) const { @@ -1788,6 +1784,7 @@ int QPixmap::metric(PaintDeviceMetric metric) const /*! \fn void QPixmap::setAlphaChannel(const QPixmap &alphaChannel) + \obsolete Sets the alpha channel of this pixmap to the given \a alphaChannel by converting the \a alphaChannel into 32 bit and using the @@ -1825,6 +1822,8 @@ void QPixmap::setAlphaChannel(const QPixmap &alphaChannel) } /*! + \obsolete + Returns the alpha channel of the pixmap as a new grayscale QPixmap in which each pixel's red, green, and blue values are given the alpha value of the original pixmap. The color depth of the returned pixmap is the system depth @@ -1843,7 +1842,9 @@ void QPixmap::setAlphaChannel(const QPixmap &alphaChannel) \image alphachannelimage.png The pixmap and channelImage QPixmaps \warning This is an expensive operation. The alpha channel of the - pixmap is extracted dynamically from the pixeldata. + pixmap is extracted dynamically from the pixeldata. Most usecases of this + function are covered by QPainter and compositionModes which will normally + execute faster. \sa setAlphaChannel(), {QPixmap#Pixmap Information}{Pixmap Information} @@ -1854,7 +1855,7 @@ QPixmap QPixmap::alphaChannel() const } /*! - \reimp + \internal */ QPaintEngine *QPixmap::paintEngine() const { @@ -1864,7 +1865,7 @@ QPaintEngine *QPixmap::paintEngine() const /*! \fn QBitmap QPixmap::mask() const - Extracts a bitmap mask from the pixmap's alphachannel. + Extracts a bitmap mask from the pixmap's alpha channel. \warning This is potentially an expensive operation. The mask of the pixmap is extracted dynamically from the pixeldata. diff --git a/src/gui/image/qpixmap_mac.cpp b/src/gui/image/qpixmap_mac.cpp index c281fe9..25ef8ba 100644 --- a/src/gui/image/qpixmap_mac.cpp +++ b/src/gui/image/qpixmap_mac.cpp @@ -1169,25 +1169,6 @@ IconRef qt_mac_create_iconref(const QPixmap &px) } #endif -QPixmap qt_mac_convert_iconref(const IconRef icon, int width, int height) -{ - QPixmap ret(width, height); - ret.fill(QColor(0, 0, 0, 0)); - - CGRect rect = CGRectMake(0, 0, width, height); - - CGContextRef ctx = qt_mac_cg_context(&ret); - CGAffineTransform old_xform = CGContextGetCTM(ctx); - CGContextConcatCTM(ctx, CGAffineTransformInvert(old_xform)); - CGContextConcatCTM(ctx, CGAffineTransformIdentity); - - ::RGBColor b; - b.blue = b.green = b.red = 255*255; - PlotIconRefInContext(ctx, &rect, kAlignNone, kTransformNone, &b, kPlotIconRefNormalFlags, icon); - CGContextRelease(ctx); - return ret; -} - /*! \internal */ QPaintEngine* QMacPixmapData::paintEngine() const { diff --git a/src/gui/image/qpixmapcache.cpp b/src/gui/image/qpixmapcache.cpp index 2ef42ee..ecdcd8c 100644 --- a/src/gui/image/qpixmapcache.cpp +++ b/src/gui/image/qpixmapcache.cpp @@ -64,25 +64,24 @@ QT_BEGIN_NAMESPACE access the global pixmap cache. It creates an internal QCache object for caching the pixmaps. - The cache associates a pixmap with a string as a key or with a QPixmapCache::Key. - The QPixmapCache::Key is faster than using strings as key. The string API is - very convenient for complex keys but the QPixmapCache::Key API will be very efficient - and convenient for a 1 object <-> 1 pixmap mapping (then you can store the key as - a member). - If two pixmaps are inserted into the cache using equal keys, then the - last pixmap will hide the first pixmap. The QHash and QCache classes do - exactly the same. + The cache associates a pixmap with a user-provided string as a key, + or with a QPixmapCache::Key that the cache generates. + Using QPixmapCache::Key for keys is faster than using strings. The string API is + very convenient for complex keys but the QPixmapCache::Key API will be very + efficient and convenient for a one-to-one object-to-pixmap mapping \mdash in + this case, you can store the keys as members of an object. + + If two pixmaps are inserted into the cache using equal keys then the + last pixmap will replace the first pixmap in the cache. This follows the + behavior of the QHash and QCache classes. The cache becomes full when the total size of all pixmaps in the cache exceeds cacheLimit(). The initial cache limit is - 2048 KB(2 MB) for Embedded, 10240 KB (10 - MB) for Desktops; it is changed with setCacheLimit(). - A pixmap takes roughly (\e{width} * \e{height} * \e{depth})/8 bytes of memory. - - The \e{Qt Quarterly} article - \l{http://doc.trolltech.com/qq/qq12-qpixmapcache.html}{Optimizing - with QPixmapCache} explains how to use QPixmapCache to speed up - applications by caching the results of painting. + 2048 KB (2 MB) on embedded platforms, 10240 KB (10 MB) on desktop + platforms; you can change this by calling setCacheLimit() with the + required value. + A pixmap takes roughly (\e{width} * \e{height} * \e{depth})/8 bytes of + memory. \sa QCache, QPixmap */ @@ -94,6 +93,17 @@ static int cache_limit = 10240; // 10 MB cache limit for desktop #endif /*! + \class QPixmapCache::Key + \brief The QPixmapCache::Key class can be used for efficient access + to the QPixmapCache. + \since 4.6 + + Use QPixmapCache::insert() to receive an instance of Key generated + by the pixmap cache. You can store the key in your own objects for + a very efficient one-to-one object-to-pixmap mapping. +*/ + +/*! Constructs an empty Key object. */ QPixmapCache::Key::Key() : d(0) @@ -112,7 +122,7 @@ QPixmapCache::Key::Key(const Key &other) } /*! - Destructor; called immediately before the object is deleted. + Destroys the key. */ QPixmapCache::Key::~Key() { @@ -123,7 +133,8 @@ QPixmapCache::Key::~Key() /*! \internal - Returns true if this key is the same as the given \a key. + Returns true if this key is the same as the given \a key; otherwise returns + false. */ bool QPixmapCache::Key::operator ==(const Key &key) const { @@ -407,7 +418,7 @@ QPixmapCache::KeyData* QPMCache::getKeyData(QPixmapCache::Key *key) Q_GLOBAL_STATIC(QPMCache, pm_cache) /*! - \obsolete + \obsolete \overload Returns the pixmap associated with the \a key in the cache, or @@ -440,7 +451,7 @@ bool QPixmapCache::find(const QString &key, QPixmap& pixmap) } /*! - Looks for a cached pixmap associated with the \a key in the cache. + Looks for a cached pixmap associated with the given \a key in the cache. If the pixmap is found, the function sets \a pixmap to that pixmap and returns true; otherwise it leaves \a pixmap alone and returns false. @@ -459,10 +470,10 @@ bool QPixmapCache::find(const QString &key, QPixmap* pixmap) } /*! - Looks for a cached pixmap associated with the \a key in the cache. + Looks for a cached pixmap associated with the given \a key in the cache. If the pixmap is found, the function sets \a pixmap to that pixmap and returns true; otherwise it leaves \a pixmap alone and returns false. If - the pixmap is not found, it means that the \a key is not valid anymore, + the pixmap is not found, it means that the \a key is no longer valid, so it will be released for the next insertion. \since 4.6 @@ -504,8 +515,8 @@ bool QPixmapCache::insert(const QString &key, const QPixmap &pixmap) } /*! - Inserts a copy of the pixmap \a pixmap into - the cache and return you the key. + Inserts a copy of the given \a pixmap into the cache and returns a key + that can be used to retrieve it. When a pixmap is inserted and the cache is about to exceed its limit, it removes pixmaps until there is enough room for the @@ -524,9 +535,9 @@ QPixmapCache::Key QPixmapCache::insert(const QPixmap &pixmap) } /*! - Replace the pixmap associated to the \a key into - the cache. It return true if the pixmap \a pixmap has been correctly - inserted into the cache false otherwise. + Replaces the pixmap associated with the given \a key with the \a pixmap + specified. Returns true if the \a pixmap has been correctly inserted into + the cache; otherwise returns false. \sa setCacheLimit(), insert() @@ -543,8 +554,8 @@ bool QPixmapCache::replace(const Key &key, const QPixmap &pixmap) /*! Returns the cache limit (in kilobytes). - The default cache limit is 2048 KB for Embedded, 10240 KB for - Desktops. + The default cache limit is 2048 KB on embedded platforms, 10240 KB on + desktop platforms. \sa setCacheLimit() */ @@ -557,8 +568,8 @@ int QPixmapCache::cacheLimit() /*! Sets the cache limit to \a n kilobytes. - The default setting is 2048 KB for Embedded, 10240 KB for - Desktops. + The default setting is 2048 KB on embedded platforms, 10240 KB on + desktop platforms. \sa cacheLimit() */ @@ -578,7 +589,7 @@ void QPixmapCache::remove(const QString &key) } /*! - Removes the pixmap associated with \a key from the cache and release + Removes the pixmap associated with \a key from the cache and releases the key for a future insertion. \since 4.6 diff --git a/src/gui/image/qpixmapfilter.cpp b/src/gui/image/qpixmapfilter.cpp index c5f3663..184bd65 100644 --- a/src/gui/image/qpixmapfilter.cpp +++ b/src/gui/image/qpixmapfilter.cpp @@ -293,8 +293,6 @@ int QPixmapConvolutionFilter::columns() const /*! - \reimp - \internal */ QRectF QPixmapConvolutionFilter::boundingRectFor(const QRectF &rect) const @@ -405,8 +403,6 @@ static void convolute( } /*! - \reimp - \internal */ void QPixmapConvolutionFilter::draw(QPainter *painter, const QPointF &p, const QPixmap &src, const QRectF& srcRect) const @@ -581,8 +577,6 @@ void QPixmapColorizeFilter::setColor(const QColor &color) } /*! - \reimp - \internal */ void QPixmapColorizeFilter::draw(QPainter *painter, const QPointF &dest, const QPixmap &src, const QRectF &srcRect) const @@ -805,8 +799,6 @@ void QPixmapDropShadowFilter::setOffset(const QPointF &offset) */ /*! - \reimp - \internal */ QRectF QPixmapDropShadowFilter::boundingRectFor(const QRectF &rect) const @@ -822,8 +814,6 @@ QRectF QPixmapDropShadowFilter::boundingRectFor(const QRectF &rect) const } /*! - \reimp - \internal */ void QPixmapDropShadowFilter::draw(QPainter *p, diff --git a/src/gui/itemviews/qdirmodel.cpp b/src/gui/itemviews/qdirmodel.cpp index c25149b..c5618b6 100644 --- a/src/gui/itemviews/qdirmodel.cpp +++ b/src/gui/itemviews/qdirmodel.cpp @@ -228,7 +228,10 @@ void QDirModelPrivate::invalidate() \note QDirModel requires an instance of a GUI application. - \sa nameFilters(), setFilter(), filter(), QListView, QTreeView, + \note The usage of QDirModel is not recommended anymore. The + QFileSystemModel class is a more performant alternative. + + \sa nameFilters(), setFilter(), filter(), QListView, QTreeView, QFileSystemModel {Dir View Example}, {Model Classes} */ diff --git a/src/gui/itemviews/qfileiconprovider.cpp b/src/gui/itemviews/qfileiconprovider.cpp index 1856f4d..dd4341b 100644 --- a/src/gui/itemviews/qfileiconprovider.cpp +++ b/src/gui/itemviews/qfileiconprovider.cpp @@ -45,15 +45,15 @@ #include <qstyle.h> #include <qapplication.h> #include <qdir.h> +#include <qpixmapcache.h> #if defined(Q_WS_WIN) #define _WIN32_IE 0x0500 #include <qt_windows.h> #include <commctrl.h> #include <objbase.h> #include <private/qpixmapdata_p.h> -#include <qpixmapcache.h> #elif defined(Q_WS_MAC) -#include <private/qt_mac_p.h> +#include <private/qt_cocoa_helpers_mac_p.h> #endif #include <private/qfunctions_p.h> @@ -314,6 +314,31 @@ QIcon QFileIconProviderPrivate::getWinIcon(const QFileInfo &fileInfo) const QIcon QFileIconProviderPrivate::getMacIcon(const QFileInfo &fi) const { QIcon retIcon; + QString fileExtension = fi.suffix().toUpper(); + fileExtension.prepend(QLatin1String(".")); + + const QString keyBase = QLatin1String("qt_") + fileExtension; + + QPixmap pixmap; + if (fi.isFile() && !fi.isExecutable() && !fi.isSymLink()) { + QPixmapCache::find(keyBase + QLatin1String("16"), pixmap); + } + + if (!pixmap.isNull()) { + retIcon.addPixmap(pixmap); + if (QPixmapCache::find(keyBase + QLatin1String("32"), pixmap)) { + retIcon.addPixmap(pixmap); + if (QPixmapCache::find(keyBase + QLatin1String("64"), pixmap)) { + retIcon.addPixmap(pixmap); + if (QPixmapCache::find(keyBase + QLatin1String("128"), pixmap)) { + retIcon.addPixmap(pixmap); + return retIcon; + } + } + } + } + + FSRef macRef; OSStatus status = FSPathMakeRef(reinterpret_cast<const UInt8*>(fi.canonicalFilePath().toUtf8().constData()), &macRef, 0); @@ -326,12 +351,23 @@ QIcon QFileIconProviderPrivate::getMacIcon(const QFileInfo &fi) const return retIcon; IconRef iconRef; SInt16 iconLabel; - status = GetIconRefFromFileInfo(&macRef, macName.length, macName.unicode, kIconServicesCatalogInfoMask, &info, kIconServicesNormalUsageFlag, &iconRef, &iconLabel); + status = GetIconRefFromFileInfo(&macRef, macName.length, macName.unicode, + kIconServicesCatalogInfoMask, &info, kIconServicesNormalUsageFlag, + &iconRef, &iconLabel); if (status != noErr) return retIcon; - extern void qt_mac_constructQIconFromIconRef(const IconRef, const IconRef, QIcon*, QStyle::StandardPixmap = QStyle::SP_CustomBase); // qmacstyle_mac.cpp qt_mac_constructQIconFromIconRef(iconRef, 0, &retIcon); ReleaseIconRef(iconRef); + + pixmap = retIcon.pixmap(16); + QPixmapCache::insert(keyBase + QLatin1String("16"), pixmap); + pixmap = retIcon.pixmap(32); + QPixmapCache::insert(keyBase + QLatin1String("32"), pixmap); + pixmap = retIcon.pixmap(64); + QPixmapCache::insert(keyBase + QLatin1String("64"), pixmap); + pixmap = retIcon.pixmap(128); + QPixmapCache::insert(keyBase + QLatin1String("128"), pixmap); + return retIcon; } #endif diff --git a/src/gui/itemviews/qitemdelegate.cpp b/src/gui/itemviews/qitemdelegate.cpp index 2dd5540..336ca79 100644 --- a/src/gui/itemviews/qitemdelegate.cpp +++ b/src/gui/itemviews/qitemdelegate.cpp @@ -861,6 +861,8 @@ void QItemDelegate::drawBackground(QPainter *painter, /*! \internal + + Code duplicated in QCommonStylePrivate::viewItemLayout */ void QItemDelegate::doLayout(const QStyleOptionViewItem &option, @@ -882,8 +884,10 @@ void QItemDelegate::doLayout(const QStyleOptionViewItem &option, int w, h; textRect->adjust(-textMargin, 0, textMargin, 0); // add width padding - if (textRect->height() == 0 && !hasPixmap) + if (textRect->height() == 0 && (!hasPixmap || !hint)) { + //if there is no text, we still want to have a decent height for the item sizeHint and the editor size textRect->setHeight(option.fontMetrics.height()); + } QSize pm(0, 0); if (hasPixmap) { @@ -1219,15 +1223,12 @@ bool QItemDelegate::eventFilter(QObject *object, QEvent *event) if (editor->parentWidget()) editor->parentWidget()->setFocus(); return true; - } else if (event->type() == QEvent::FocusOut || event->type() == QEvent::Hide) { + } else if (event->type() == QEvent::FocusOut || (event->type() == QEvent::Hide && editor->isWindow())) { //the Hide event will take care of he editors that are in fact complete dialogs if (!editor->isActiveWindow() || (QApplication::focusWidget() != editor)) { - QWidget *w = QApplication::focusWidget(); - while (w) { // don't worry about focus changes internally in the editor - if (w == editor) - return false; - w = w->parentWidget(); - } + if (editor->isAncestorOf(QApplication::focusWidget())) + return false; // don't worry about focus changes internally in the editor + #ifndef QT_NO_DRAGANDDROP // The window may lose focus during an drag operation. // i.e when dragging involves the taskbar on Windows. diff --git a/src/gui/itemviews/qlistview.cpp b/src/gui/itemviews/qlistview.cpp index 40f28d4..148d204 100644 --- a/src/gui/itemviews/qlistview.cpp +++ b/src/gui/itemviews/qlistview.cpp @@ -1563,7 +1563,10 @@ void QListView::setSelection(const QRect &rect, QItemSelectionModel::SelectionFl } // middle rectangle if (top.bottom() < bottom.top()) { - middle.setTop(top.bottom() + 1); + if (gridSize().isValid() && !gridSize().isNull()) + middle.setTop(top.top() + gridSize().height()); + else + middle.setTop(top.bottom() + 1); middle.setLeft(qMin(top.left(), bottom.left())); middle.setBottom(bottom.top() - 1); middle.setRight(qMax(top.right(), bottom.right())); @@ -1590,7 +1593,10 @@ void QListView::setSelection(const QRect &rect, QItemSelectionModel::SelectionFl // only set middle if the middle.setTop(0); middle.setBottom(ch); - middle.setLeft(left.right() + 1); + if (gridSize().isValid() && !gridSize().isNull()) + middle.setLeft(left.left() + gridSize().width()); + else + middle.setLeft(left.right() + 1); middle.setRight(right.left() - 1); } else if (left.bottom() < right.top()) { left.setBottom(right.top() - 1); diff --git a/src/gui/itemviews/qsortfilterproxymodel.cpp b/src/gui/itemviews/qsortfilterproxymodel.cpp index 30a8c96..fdc09ca 100644 --- a/src/gui/itemviews/qsortfilterproxymodel.cpp +++ b/src/gui/itemviews/qsortfilterproxymodel.cpp @@ -146,6 +146,7 @@ public: const QModelIndex &source_parent) const; QModelIndex proxy_to_source(const QModelIndex &proxyIndex) const; QModelIndex source_to_proxy(const QModelIndex &sourceIndex) const; + bool can_create_mapping(const QModelIndex &source_parent) const; void remove_from_mapping(const QModelIndex &source_parent); @@ -354,6 +355,25 @@ QModelIndex QSortFilterProxyModelPrivate::source_to_proxy(const QModelIndex &sou return create_index(proxy_row, proxy_column, it); } +bool QSortFilterProxyModelPrivate::can_create_mapping(const QModelIndex &source_parent) const +{ + if (source_parent.isValid()) { + QModelIndex source_grand_parent = source_parent.parent(); + IndexMap::const_iterator it = source_index_mapping.constFind(source_grand_parent); + if (it == source_index_mapping.constEnd()) { + // Don't care, since we don't have mapping for the grand parent + return false; + } + Mapping *gm = it.value(); + if (gm->proxy_rows.at(source_parent.row()) == -1 || + gm->proxy_columns.at(source_parent.column()) == -1) { + // Don't care, since parent is filtered + return false; + } + } + return true; +} + /*! \internal @@ -659,20 +679,8 @@ void QSortFilterProxyModelPrivate::source_items_inserted( return; IndexMap::const_iterator it = source_index_mapping.constFind(source_parent); if (it == source_index_mapping.constEnd()) { - if (source_parent.isValid()) { - QModelIndex source_grand_parent = source_parent.parent(); - it = source_index_mapping.constFind(source_grand_parent); - if (it == source_index_mapping.constEnd()) { - // Don't care, since we don't have mapping for the grand parent - return; - } - Mapping *gm = it.value(); - if (gm->proxy_rows.at(source_parent.row()) == -1 || - gm->proxy_columns.at(source_parent.column()) == -1) { - // Don't care, since parent is filtered - return; - } - } + if (!can_create_mapping(source_parent)) + return; it = create_mapping(source_parent); Mapping *m = it.value(); QModelIndex proxy_parent = q->mapFromSource(source_parent); @@ -1186,7 +1194,8 @@ void QSortFilterProxyModelPrivate::_q_sourceRowsAboutToBeInserted( Q_UNUSED(end); //Force the creation of a mapping now, even if its empty. //We need it because the proxy can be acessed at the moment it emits rowsAboutToBeInserted in insert_source_items - create_mapping(source_parent); + if (can_create_mapping(source_parent)) + create_mapping(source_parent); } void QSortFilterProxyModelPrivate::_q_sourceRowsInserted( @@ -1217,7 +1226,8 @@ void QSortFilterProxyModelPrivate::_q_sourceColumnsAboutToBeInserted( Q_UNUSED(end); //Force the creation of a mapping now, even if its empty. //We need it because the proxy can be acessed at the moment it emits columnsAboutToBeInserted in insert_source_items - create_mapping(source_parent); + if (can_create_mapping(source_parent)) + create_mapping(source_parent); } void QSortFilterProxyModelPrivate::_q_sourceColumnsInserted( diff --git a/src/gui/itemviews/qstyleditemdelegate.cpp b/src/gui/itemviews/qstyleditemdelegate.cpp index edca724..bd8fdac 100644 --- a/src/gui/itemviews/qstyleditemdelegate.cpp +++ b/src/gui/itemviews/qstyleditemdelegate.cpp @@ -671,15 +671,12 @@ bool QStyledItemDelegate::eventFilter(QObject *object, QEvent *event) if (editor->parentWidget()) editor->parentWidget()->setFocus(); return true; - } else if (event->type() == QEvent::FocusOut || event->type() == QEvent::Hide) { + } else if (event->type() == QEvent::FocusOut || (event->type() == QEvent::Hide && editor->isWindow())) { //the Hide event will take care of he editors that are in fact complete dialogs if (!editor->isActiveWindow() || (QApplication::focusWidget() != editor)) { - QWidget *w = QApplication::focusWidget(); - while (w) { // don't worry about focus changes internally in the editor - if (w == editor) - return false; - w = w->parentWidget(); - } + if (editor->isAncestorOf(QApplication::focusWidget())) + return false; // don't worry about focus changes internally in the editor + #ifndef QT_NO_DRAGANDDROP // The window may lose focus during an drag operation. // i.e when dragging involves the taskbar on Windows. diff --git a/src/gui/itemviews/qtreeview.cpp b/src/gui/itemviews/qtreeview.cpp index 7084e6d..7536d72 100644 --- a/src/gui/itemviews/qtreeview.cpp +++ b/src/gui/itemviews/qtreeview.cpp @@ -1095,18 +1095,22 @@ void QTreeView::scrollTo(const QModelIndex &index, ScrollHint hint) } else if (hint == PositionAtTop || (hint == EnsureVisible && item < top)) { verticalScrollBar()->setValue(item); } else { // PositionAtBottom or PositionAtCenter - int itemLocation = item; + const int currentItemHeight = d->itemHeight(item); int y = (hint == PositionAtCenter - ? area.height() / 2 + //we center on the current item with a preference to the top item (ie. -1) + ? area.height() / 2 + currentItemHeight - 1 + //otherwise we simply take the whole space : area.height()); - while (y > 0 && item > 0) - y -= d->itemHeight(item--); - // end up half over the top of the area - if (y < 0 && item < itemLocation) - ++item; - // end up half over the bottom of the area - if (item >= 0 && item < itemLocation) - ++item; + if (y > currentItemHeight) { + while (item >= 0) { + y -= d->itemHeight(item); + if (y < 0) { //there is no more space left + item++; + break; + } + item--; + } + } verticalScrollBar()->setValue(item); } } else { // ScrollPerPixel @@ -2849,7 +2853,7 @@ int QTreeView::rowHeight(const QModelIndex &index) const } /*! - \reimp + \internal */ void QTreeView::horizontalScrollbarAction(int action) { diff --git a/src/gui/kernel/qaction.cpp b/src/gui/kernel/qaction.cpp index 4ee17f4..e7cb5c2 100644 --- a/src/gui/kernel/qaction.cpp +++ b/src/gui/kernel/qaction.cpp @@ -81,7 +81,7 @@ static QString qt_strippedText(QString s) QActionPrivate::QActionPrivate() : group(0), enabled(1), forceDisabled(0), visible(1), forceInvisible(0), checkable(0), checked(0), separator(0), fontSet(false), - menuRole(QAction::TextHeuristicRole), iconVisibleInMenu(-1) + menuRole(QAction::TextHeuristicRole), priority(QAction::NormalPriority), iconVisibleInMenu(-1) { #ifdef QT3_SUPPORT static int qt_static_action_id = -1; @@ -909,6 +909,52 @@ QString QAction::whatsThis() const return d->whatsthis; } +/*! + \enum QAction::Priority + \since 4.6 + + This enum defines priorities for actions in user interface. + + \value LowPriority The action should not be prioritized in + the user interface. + + \value NormalPriority + + \value HighPriority The action should be prioritized in + the user interface. + + \sa priority +*/ + + +/*! + \property QAction::priority + \since 4.6 + + \brief the actions's priority in the user interface. + + This property can be set to indicate how the action should be prioritized + in the user interface. + + For instance, when toolbars have the Qt::ToolButtonTextBesideIcon + mode set, then actions with LowPriority will not show the text + labels. +*/ +void QAction::setPriority(Priority priority) +{ + Q_D(QAction); + if (d->priority == priority) + return; + + d->priority = priority; + d->sendDataChanged(); +} + +QAction::Priority QAction::priority() const +{ + Q_D(const QAction); + return d->priority; +} /*! \property QAction::checkable diff --git a/src/gui/kernel/qaction.h b/src/gui/kernel/qaction.h index 3ac30ed..cb681c4 100644 --- a/src/gui/kernel/qaction.h +++ b/src/gui/kernel/qaction.h @@ -67,6 +67,7 @@ class Q_GUI_EXPORT QAction : public QObject Q_DECLARE_PRIVATE(QAction) Q_ENUMS(MenuRole) + Q_ENUMS(Priority) Q_PROPERTY(bool checkable READ isCheckable WRITE setCheckable NOTIFY changed) Q_PROPERTY(bool checked READ isChecked WRITE setChecked DESIGNABLE isCheckable NOTIFY toggled) Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY changed) @@ -85,10 +86,14 @@ class Q_GUI_EXPORT QAction : public QObject Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY changed) Q_PROPERTY(MenuRole menuRole READ menuRole WRITE setMenuRole NOTIFY changed) Q_PROPERTY(bool iconVisibleInMenu READ isIconVisibleInMenu WRITE setIconVisibleInMenu NOTIFY changed) + Q_PROPERTY(Priority priority READ priority WRITE setPriority) public: enum MenuRole { NoRole, TextHeuristicRole, ApplicationSpecificRole, AboutQtRole, AboutRole, PreferencesRole, QuitRole }; + enum Priority { LowPriority = 0, + NormalPriority = 128, + HighPriority = 256}; explicit QAction(QObject* parent); QAction(const QString &text, QObject* parent); QAction(const QIcon &icon, const QString &text, QObject* parent); @@ -123,6 +128,9 @@ public: void setWhatsThis(const QString &what); QString whatsThis() const; + void setPriority(Priority priority); + Priority priority() const; + #ifndef QT_NO_MENU QMenu *menu() const; void setMenu(QMenu *menu); diff --git a/src/gui/kernel/qaction_p.h b/src/gui/kernel/qaction_p.h index bae9bbf..4745ed1 100644 --- a/src/gui/kernel/qaction_p.h +++ b/src/gui/kernel/qaction_p.h @@ -102,6 +102,7 @@ public: uint separator : 1; uint fontSet : 1; QAction::MenuRole menuRole; + QAction::Priority priority; int iconVisibleInMenu : 3; // Only has values -1, 0, and 1 QList<QWidget *> widgets; #ifndef QT_NO_GRAPHICSVIEW diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp index b168188..3453408 100644 --- a/src/gui/kernel/qapplication.cpp +++ b/src/gui/kernel/qapplication.cpp @@ -819,6 +819,12 @@ QApplication::QApplication(Display *dpy, int &argc, char **argv, #endif // Q_WS_X11 extern void qInitDrawhelperAsm(); +extern int qRegisterGuiVariant(); +extern int qUnregisterGuiVariant(); +#ifndef QT_NO_STATEMACHINE +extern int qRegisterGuiStateMachine(); +extern int qUnregisterGuiStateMachine(); +#endif /*! \fn void QApplicationPrivate::initialize() @@ -832,11 +838,9 @@ void QApplicationPrivate::initialize() if (qt_appType != QApplication::Tty) (void) QApplication::style(); // trigger creation of application style // trigger registering of QVariant's GUI types - extern int qRegisterGuiVariant(); qRegisterGuiVariant(); #ifndef QT_NO_STATEMACHINE // trigger registering of QStateMachine's GUI types - extern int qRegisterGuiStateMachine(); qRegisterGuiStateMachine(); #endif @@ -1060,11 +1064,9 @@ QApplication::~QApplication() #ifndef QT_NO_STATEMACHINE // trigger unregistering of QStateMachine's GUI types - extern int qUnregisterGuiStateMachine(); qUnregisterGuiStateMachine(); #endif // trigger unregistering of QVariant's GUI types - extern int qUnregisterGuiVariant(); qUnregisterGuiVariant(); } diff --git a/src/gui/kernel/qapplication_p.h b/src/gui/kernel/qapplication_p.h index 90eaba0..595f220 100644 --- a/src/gui/kernel/qapplication_p.h +++ b/src/gui/kernel/qapplication_p.h @@ -192,101 +192,57 @@ extern "C" { #endif #if defined(Q_WS_WIN) -typedef BOOL (WINAPI *qt_RegisterTouchWindowPtr)(HWND, ULONG); -typedef BOOL (WINAPI *qt_GetTouchInputInfoPtr)(HANDLE, UINT, PVOID, int); -typedef BOOL (WINAPI *qt_CloseTouchInputHandlePtr)(HANDLE); +typedef BOOL (WINAPI *PtrRegisterTouchWindow)(HWND, ULONG); +typedef BOOL (WINAPI *PtrGetTouchInputInfo)(HANDLE, UINT, PVOID, int); +typedef BOOL (WINAPI *PtrCloseTouchInputHandle)(HANDLE); + +typedef BOOL (WINAPI *PtrGetGestureInfo)(HANDLE, PVOID); +typedef BOOL (WINAPI *PtrGetGestureExtraArgs)(HANDLE, UINT, PBYTE); +typedef BOOL (WINAPI *PtrCloseGestureInfoHandle)(HANDLE); +typedef BOOL (WINAPI *PtrSetGestureConfig)(HWND, DWORD, UINT, PVOID, UINT); +typedef BOOL (WINAPI *PtrGetGestureConfig)(HWND, DWORD, DWORD, PUINT, PVOID, UINT); + +typedef BOOL (WINAPI *PtrBeginPanningFeedback)(HWND); +typedef BOOL (WINAPI *PtrUpdatePanningFeedback)(HWND, LONG, LONG, BOOL); +typedef BOOL (WINAPI *PtrEndPanningFeedback)(HWND, BOOL); #ifndef WM_GESTURE +# define WM_GESTURE 0x0119 + +# define GID_BEGIN 1 +# define GID_END 2 +# define GID_ZOOM 3 +# define GID_PAN 4 +# define GID_ROTATE 5 +# define GID_TWOFINGERTAP 6 +# define GID_ROLLOVER 7 -#define WM_GESTURE 0x0119 -#define WM_GESTURE_NOTIFY 0x011A - -DECLARE_HANDLE(HGESTUREINFO); - -#define GF_BEGIN 0x00000001 -#define GF_INERTIA 0x00000002 -#define GF_END 0x00000004 - -/* - * Gesture IDs - */ -#define GID_BEGIN 1 -#define GID_END 2 -#define GID_ZOOM 3 -#define GID_PAN 4 -#define GID_ROTATE 5 -#define GID_TWOFINGERTAP 6 -#define GID_ROLLOVER 7 - -typedef struct tagGESTUREINFO { - UINT cbSize; // size, in bytes, of this structure (including variable length Args field) - DWORD dwFlags; // see GF_* flags - DWORD dwID; // gesture ID, see GID_* defines - HWND hwndTarget; // handle to window targeted by this gesture - POINTS ptsLocation; // current location of this gesture - DWORD dwInstanceID; // internally used - DWORD dwSequenceID; // internally used - ULONGLONG ullArguments; // arguments for gestures whose arguments fit in 8 BYTES - UINT cbExtraArgs; // size, in bytes, of extra arguments, if any, that accompany this gesture -} GESTUREINFO, *PGESTUREINFO; -typedef GESTUREINFO const * PCGESTUREINFO; - -typedef struct tagGESTURENOTIFYSTRUCT { - UINT cbSize; // size, in bytes, of this structure - DWORD dwFlags; // unused - HWND hwndTarget; // handle to window targeted by the gesture - POINTS ptsLocation; // starting location - DWORD dwInstanceID; // internally used -} GESTURENOTIFYSTRUCT, *PGESTURENOTIFYSTRUCT; - -/* - * Gesture argument helpers - * - Angle should be a double in the range of -2pi to +2pi - * - Argument should be an unsigned 16-bit value - */ -#define GID_ROTATE_ANGLE_TO_ARGUMENT(_arg_) ((USHORT)((((_arg_) + 2.0 * 3.14159265) / (4.0 * 3.14159265)) * 65535.0)) -#define GID_ROTATE_ANGLE_FROM_ARGUMENT(_arg_) ((((double)(_arg_) / 65535.0) * 4.0 * 3.14159265) - 2.0 * 3.14159265) - -typedef struct tagGESTURECONFIG { - DWORD dwID; // gesture ID - DWORD dwWant; // settings related to gesture ID that are to be turned on - DWORD dwBlock; // settings related to gesture ID that are to be turned off -} GESTURECONFIG, *PGESTURECONFIG; - -#define GC_ALLGESTURES 0x00000001 -#define GC_ZOOM 0x00000001 -#define GC_PAN 0x00000001 -#define GC_PAN_WITH_SINGLE_FINGER_VERTICALLY 0x00000002 -#define GC_PAN_WITH_SINGLE_FINGER_HORIZONTALLY 0x00000004 -#define GC_PAN_WITH_GUTTER 0x00000008 -#define GC_PAN_WITH_INERTIA 0x00000010 -#define GC_ROTATE 0x00000001 -#define GC_TWOFINGERTAP 0x00000001 -#define GC_ROLLOVER 0x00000001 -#define GESTURECONFIGMAXCOUNT 256 // Maximum number of gestures that can be included - // in a single call to SetGestureConfig / GetGestureConfig - - - -#define GCF_INCLUDE_ANCESTORS 0x00000001 // If specified, GetGestureConfig returns consolidated configuration - // for the specified window and it's parent window chain - -typedef BOOL (*PtrGetGestureInfo)(HGESTUREINFO hGestureInfo, PGESTUREINFO pGestureInfo); -typedef BOOL (*PtrGetGestureExtraArgs)(HGESTUREINFO hGestureInfo, UINT cbExtraArgs, PBYTE pExtraArgs); -typedef BOOL (*PtrCloseGestureInfoHandle)(HGESTUREINFO hGestureInfo); -typedef BOOL (*PtrSetGestureConfig)(HWND hwnd, DWORD dwReserved, UINT cIDs, - PGESTURECONFIG pGestureConfig, - UINT cbSize); -typedef BOOL (*PtrGetGestureConfig)(HWND hwnd, DWORD dwReserved, - DWORD dwFlags, PUINT pcIDs, - PGESTURECONFIG pGestureConfig, - UINT cbSize); - -typedef BOOL (*PtrBeginPanningFeedback)(HWND hwnd); -typedef BOOL (*PtrUpdatePanningFeedback)(HWND hwnd, LONG, LONG, BOOL); -typedef BOOL (*PtrEndPanningFeedback)(HWND hwnd, BOOL); +typedef struct tagGESTUREINFO +{ + UINT cbSize; + DWORD dwFlags; + DWORD dwID; + HWND hwndTarget; + POINTS ptsLocation; + DWORD dwInstanceID; + DWORD dwSequenceID; + ULONGLONG ullArguments; + UINT cbExtraArgs; +} GESTUREINFO; + +# define GC_PAN 0x00000001 +# define GC_PAN_WITH_SINGLE_FINGER_VERTICALLY 0x00000002 +# define GC_PAN_WITH_SINGLE_FINGER_HORIZONTALLY 0x00000004 + +typedef struct tagGESTURECONFIG +{ + DWORD dwID; + DWORD dwWant; + DWORD dwBlock; +} GESTURECONFIG; #endif // WM_GESTURE + #endif // Q_WS_WIN class QPanGesture; @@ -558,9 +514,9 @@ public: const QList<QTouchEvent::TouchPoint> &touchPoints); #if defined(Q_WS_WIN) - static qt_RegisterTouchWindowPtr RegisterTouchWindow; - static qt_GetTouchInputInfoPtr GetTouchInputInfo; - static qt_CloseTouchInputHandlePtr CloseTouchInputHandle; + static PtrRegisterTouchWindow RegisterTouchWindow; + static PtrGetTouchInputInfo GetTouchInputInfo; + static PtrCloseTouchInputHandle CloseTouchInputHandle; QHash<DWORD, int> touchInputIDToTouchPointID; QList<QTouchEvent::TouchPoint> appAllTouchPoints; diff --git a/src/gui/kernel/qapplication_qws.cpp b/src/gui/kernel/qapplication_qws.cpp index f568438..347afc8 100644 --- a/src/gui/kernel/qapplication_qws.cpp +++ b/src/gui/kernel/qapplication_qws.cpp @@ -661,10 +661,14 @@ void QWSDisplay::Data::sendSynchronousCommand(QWSCommand & cmd) int QWSDisplay::Data::takeId() { - if (unused_identifiers.count() == 10) + int unusedIdCount = unused_identifiers.count(); + if (unusedIdCount == 10) create(15); - if (unused_identifiers.count() == 0) + if (unusedIdCount == 0) { + create(1); // Make sure we have an incoming id to wait for, just in case we're recursive waitForCreation(); + } + return unused_identifiers.takeFirst(); } diff --git a/src/gui/kernel/qapplication_win.cpp b/src/gui/kernel/qapplication_win.cpp index 164a228..d5c820c 100644 --- a/src/gui/kernel/qapplication_win.cpp +++ b/src/gui/kernel/qapplication_win.cpp @@ -275,6 +275,8 @@ extern HRGN qt_tryCreateRegion(QRegion::RegionType type, int left, int top, int #define GET_XBUTTON_WPARAM(wParam) (HIWORD(wParam)) #define XBUTTON1 0x0001 #define XBUTTON2 0x0002 +#endif +#ifndef MK_XBUTTON1 #define MK_XBUTTON1 0x0020 #define MK_XBUTTON2 0x0040 #endif @@ -807,9 +809,10 @@ void qt_init(QApplicationPrivate *priv, int) ptrUpdateLayeredWindowIndirect = qt_updateLayeredWindowIndirect; // Notify Vista and Windows 7 that we support highter DPI settings - if (ptrSetProcessDPIAware = (PtrSetProcessDPIAware) - QLibrary::resolve(QLatin1String("user32"), "SetProcessDPIAware")) - ptrSetProcessDPIAware(); + ptrSetProcessDPIAware = (PtrSetProcessDPIAware) + QLibrary::resolve(QLatin1String("user32"), "SetProcessDPIAware"); + if (ptrSetProcessDPIAware) + ptrSetProcessDPIAware(); #endif priv->lastGestureId = 0; @@ -1006,6 +1009,8 @@ const QString qt_reg_winclass(QWidget *w) // register window class #ifndef QT_NO_DEBUG if (!atom) qErrnoWarning("QApplication::regClass: Registering window class failed."); +#else + Q_UNUSED(atom); #endif winclassNames()->insert(cname, 1); @@ -1351,13 +1356,13 @@ static int inputcharset = CP_ACP; static bool qt_is_translatable_mouse_event(UINT message) { - return (message >= WM_MOUSEFIRST && message <= WM_MOUSELAST || - message >= WM_XBUTTONDOWN && message <= WM_XBUTTONDBLCLK) + return (((message >= WM_MOUSEFIRST && message <= WM_MOUSELAST) || + (message >= WM_XBUTTONDOWN && message <= WM_XBUTTONDBLCLK)) && message != WM_MOUSEWHEEL - && message != WM_MOUSEHWHEEL + && message != WM_MOUSEHWHEEL) #ifndef Q_WS_WINCE - || message >= WM_NCMOUSEMOVE && message <= WM_NCMBUTTONDBLCLK + || (message >= WM_NCMOUSEMOVE && message <= WM_NCMBUTTONDBLCLK) #endif ; } @@ -2601,7 +2606,7 @@ bool qt_try_modal(QWidget *widget, MSG *msg, int& ret) bool block_event = false; #ifndef Q_WS_WINCE - if (type != WM_NCHITTEST) + if (type != WM_NCHITTEST) { #endif if ((type >= WM_MOUSEFIRST && type <= WM_MOUSELAST) || type == WM_MOUSEWHEEL || type == WM_MOUSEHWHEEL || @@ -2631,17 +2636,18 @@ bool qt_try_modal(QWidget *widget, MSG *msg, int& ret) block_event = true; } #ifndef Q_WS_WINCE - else if (type == WM_MOUSEACTIVATE || type == WM_NCLBUTTONDOWN){ - if (!top->isActiveWindow()) { - top->activateWindow(); - } else { - QApplication::beep(); - } - block_event = true; - ret = MA_NOACTIVATEANDEAT; - } else if (type == WM_SYSCOMMAND) { - if (!(msg->wParam == SC_RESTORE && widget->isMinimized())) + else if (type == WM_MOUSEACTIVATE || type == WM_NCLBUTTONDOWN){ + if (!top->isActiveWindow()) { + top->activateWindow(); + } else { + QApplication::beep(); + } block_event = true; + ret = MA_NOACTIVATEANDEAT; + } else if (type == WM_SYSCOMMAND) { + if (!(msg->wParam == SC_RESTORE && widget->isMinimized())) + block_event = true; + } } #endif @@ -2843,7 +2849,7 @@ void qt_win_eatMouseMove() // remove all those messages (usually 1) and post the last one with a // reset button state - MSG msg = {0, 0, 0, 0, 0, 0, 0}; + MSG msg = {0, 0, 0, 0, 0, {0, 0} }; while (PeekMessage(&msg, 0, WM_MOUSEMOVE, WM_MOUSEMOVE, PM_REMOVE)) ; if (msg.message == WM_MOUSEMOVE) @@ -3721,7 +3727,7 @@ bool QETWidget::translateGestureEvent(const MSG &msg) gi.dwSequenceID = 0; QApplicationPrivate *qAppPriv = getQApplicationPrivateInternal(); - BOOL bResult = qAppPriv->GetGestureInfo((HGESTUREINFO)msg.lParam, &gi); + BOOL bResult = qAppPriv->GetGestureInfo((HANDLE)msg.lParam, &gi); const QPoint widgetPos = QPoint(gi.ptsLocation.x, gi.ptsLocation.y); QWidget *alienWidget = !internalWinId() ? this : childAt(widgetPos); @@ -3759,7 +3765,7 @@ bool QETWidget::translateGestureEvent(const MSG &msg) if (dwErr > 0) qWarning() << "translateGestureEvent: error = " << dwErr; } - qAppPriv->CloseGestureInfoHandle((HGESTUREINFO)msg.lParam); + qAppPriv->CloseGestureInfoHandle((HANDLE)msg.lParam); return true; } @@ -3945,16 +3951,17 @@ void QSessionManager::cancel() #endif //QT_NO_SESSIONMANAGER -qt_RegisterTouchWindowPtr QApplicationPrivate::RegisterTouchWindow = 0; -qt_GetTouchInputInfoPtr QApplicationPrivate::GetTouchInputInfo = 0; -qt_CloseTouchInputHandlePtr QApplicationPrivate::CloseTouchInputHandle = 0; +PtrRegisterTouchWindow QApplicationPrivate::RegisterTouchWindow = 0; +PtrGetTouchInputInfo QApplicationPrivate::GetTouchInputInfo = 0; +PtrCloseTouchInputHandle QApplicationPrivate::CloseTouchInputHandle = 0; void QApplicationPrivate::initializeMultitouch_sys() { QLibrary library(QLatin1String("user32")); - RegisterTouchWindow = reinterpret_cast<qt_RegisterTouchWindowPtr>(library.resolve("RegisterTouchWindow")); - GetTouchInputInfo = reinterpret_cast<qt_GetTouchInputInfoPtr>(library.resolve("GetTouchInputInfo")); - CloseTouchInputHandle = reinterpret_cast<qt_CloseTouchInputHandlePtr>(library.resolve("CloseTouchInputHandle")); + // MinGW (g++ 3.4.5) accepts only C casts. + RegisterTouchWindow = (PtrRegisterTouchWindow)(library.resolve("RegisterTouchWindow")); + GetTouchInputInfo = (PtrGetTouchInputInfo)(library.resolve("GetTouchInputInfo")); + CloseTouchInputHandle = (PtrCloseTouchInputHandle)(library.resolve("CloseTouchInputHandle")); touchInputIDToTouchPointID.clear(); } diff --git a/src/gui/kernel/qapplication_x11.cpp b/src/gui/kernel/qapplication_x11.cpp index 5ef6b2e..4016563 100644 --- a/src/gui/kernel/qapplication_x11.cpp +++ b/src/gui/kernel/qapplication_x11.cpp @@ -117,7 +117,9 @@ extern "C" { #define XK_MISCELLANY #include <X11/keysymdef.h> +#if !defined(QT_NO_XINPUT) #include <X11/extensions/XI.h> +#endif #include <stdlib.h> #include <string.h> @@ -655,11 +657,13 @@ static int qt_x_errhandler(Display *dpy, XErrorEvent *err) break; default: +#if !defined(QT_NO_XINPUT) if (err->request_code == X11->xinput_major && err->error_code == (X11->xinput_errorbase + XI_BadDevice) && err->minor_code == 3 /* X_OpenDevice */) { return 0; } +#endif break; } @@ -1392,6 +1396,18 @@ static void qt_set_x11_resources(const char* font = 0, const char* fg = 0, color = kdeColor(QLatin1String("Colors:Button/ForegroundNormal"), theKdeSettings); if (color.isValid()) pal.setColor(QPalette::ButtonText, color); + + color = kdeColor(QLatin1String("linkColor"), theKdeSettings); + if (!color.isValid()) + color = kdeColor(QLatin1String("Colors:View/ForegroundLink"), theKdeSettings); + if (color.isValid()) + pal.setColor(QPalette::Link, color); + + color = kdeColor(QLatin1String("visitedLinkColor"), theKdeSettings); + if (!color.isValid()) + color = kdeColor(QLatin1String("Colors:View/ForegroundVisited"), theKdeSettings); + if (color.isValid()) + pal.setColor(QPalette::LinkVisited, color); } if (highlight.isValid() && highlightText.isValid()) { @@ -3230,48 +3246,43 @@ int QApplication::x11ProcessEvent(XEvent* event) #ifdef ALIEN_DEBUG //qDebug() << "QApplication::x11ProcessEvent:" << event->type; #endif - Time time = 0, userTime = 0; switch (event->type) { case ButtonPress: pressed_window = event->xbutton.window; - userTime = event->xbutton.time; + X11->userTime = event->xbutton.time; // fallthrough intended case ButtonRelease: - time = event->xbutton.time; + X11->time = event->xbutton.time; break; case MotionNotify: - time = event->xmotion.time; + X11->time = event->xmotion.time; break; case XKeyPress: - userTime = event->xkey.time; + X11->userTime = event->xkey.time; // fallthrough intended case XKeyRelease: - time = event->xkey.time; + X11->time = event->xkey.time; break; case PropertyNotify: - time = event->xproperty.time; + X11->time = event->xproperty.time; break; case EnterNotify: case LeaveNotify: - time = event->xcrossing.time; + X11->time = event->xcrossing.time; break; case SelectionClear: - time = event->xselectionclear.time; + X11->time = event->xselectionclear.time; break; default: -#ifndef QT_NO_XFIXES - if (X11->use_xfixes && event->type == (X11->xfixes_eventbase + XFixesSelectionNotify)) { - XFixesSelectionNotifyEvent *req = - reinterpret_cast<XFixesSelectionNotifyEvent *>(event); - time = req->selection_timestamp; - } -#endif break; } - if (time > X11->time) - X11->time = time; - if (userTime > X11->userTime) - X11->userTime = userTime; +#ifndef QT_NO_XFIXES + if (X11->use_xfixes && event->type == (X11->xfixes_eventbase + XFixesSelectionNotify)) { + XFixesSelectionNotifyEvent *req = + reinterpret_cast<XFixesSelectionNotifyEvent *>(event); + X11->time = req->selection_timestamp; + } +#endif QETWidget *widget = (QETWidget*)QWidget::find((WId)event->xany.window); @@ -3437,19 +3448,10 @@ int QApplication::x11ProcessEvent(XEvent* event) QSize oldSize(w->size()); w->data->crect.setWidth(DisplayWidth(X11->display, scr)); w->data->crect.setHeight(DisplayHeight(X11->display, scr)); - QVarLengthArray<QRect> oldSizes(desktop->numScreens()); - for (int i = 0; i < desktop->numScreens(); ++i) - oldSizes[i] = desktop->screenGeometry(i); QResizeEvent e(w->size(), oldSize); QApplication::sendEvent(w, &e); - for (int i = 0; i < qMin(oldSizes.count(), desktop->numScreens()); ++i) { - if (oldSizes[i] != desktop->screenGeometry(i)) - emit desktop->resized(i); - } - for (int i = oldSizes.count(); i < desktop->numScreens(); ++i) - emit desktop->resized(i); // added - for (int i = desktop->numScreens(); i < oldSizes.count(); ++i) - emit desktop->resized(i); // removed + if (w != desktop) + QApplication::sendEvent(desktop, &e); } #endif // QT_NO_XRANDR diff --git a/src/gui/kernel/qcocoaview_mac.mm b/src/gui/kernel/qcocoaview_mac.mm index 52685ca..3e5bfb6 100644 --- a/src/gui/kernel/qcocoaview_mac.mm +++ b/src/gui/kernel/qcocoaview_mac.mm @@ -550,15 +550,7 @@ extern "C" { qwidget->objectName().local8Bit().data()); #endif QPainter p(qwidget); - QAbstractScrollArea *scrollArea = qobject_cast<QAbstractScrollArea *>(qwidget->parent()); - QPoint scrollAreaOffset; - if (scrollArea && scrollArea->viewport() == qwidget) { - QAbstractScrollAreaPrivate *priv - = static_cast<QAbstractScrollAreaPrivate *>(qt_widget_private(scrollArea)); - scrollAreaOffset = priv->contentsOffset(); - p.translate(-scrollAreaOffset); - } - qwidgetprivate->paintBackground(&p, qrgn, scrollAreaOffset, + qwidgetprivate->paintBackground(&p, qrgn, qwidget->isWindow() ? QWidgetPrivate::DrawAsRoot : 0); p.end(); } diff --git a/src/gui/kernel/qcursor_win.cpp b/src/gui/kernel/qcursor_win.cpp index db00835..26e395c 100644 --- a/src/gui/kernel/qcursor_win.cpp +++ b/src/gui/kernel/qcursor_win.cpp @@ -476,7 +476,11 @@ void QCursorData::update() qWarning("QCursor::update: Invalid cursor shape %d", cshape); return; } +#ifdef Q_WS_WINCE + hcurs = LoadCursor(0, sh); +#else hcurs = (HCURSOR)LoadImage(0, sh, IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED); +#endif } QT_END_NAMESPACE diff --git a/src/gui/kernel/qdesktopwidget.h b/src/gui/kernel/qdesktopwidget.h index 470f10a..a21ae9d 100644 --- a/src/gui/kernel/qdesktopwidget.h +++ b/src/gui/kernel/qdesktopwidget.h @@ -56,6 +56,9 @@ class QDesktopWidgetPrivate; class Q_GUI_EXPORT QDesktopWidget : public QWidget { Q_OBJECT + Q_PROPERTY(bool virtualDesktop READ isVirtualDesktop) + Q_PROPERTY(int screenCount READ screenCount NOTIFY screenCountChanged) + Q_PROPERTY(int primaryScreen READ primaryScreen) public: QDesktopWidget(); ~QDesktopWidget(); @@ -63,6 +66,7 @@ public: bool isVirtualDesktop() const; int numScreens() const; + int screenCount() const; int primaryScreen() const; int screenNumber(const QWidget *widget = 0) const; @@ -85,6 +89,7 @@ public: Q_SIGNALS: void resized(int); void workAreaResized(int); + void screenCountChanged(int); protected: void resizeEvent(QResizeEvent *e); @@ -97,6 +102,9 @@ private: friend class QApplicationPrivate; }; +inline int QDesktopWidget::screenCount() const +{ return numScreens(); } + QT_END_NAMESPACE QT_END_HEADER diff --git a/src/gui/kernel/qdesktopwidget_mac.mm b/src/gui/kernel/qdesktopwidget_mac.mm index 2489fe4..705387d 100644 --- a/src/gui/kernel/qdesktopwidget_mac.mm +++ b/src/gui/kernel/qdesktopwidget_mac.mm @@ -97,15 +97,13 @@ QT_USE_NAMESPACE Q_GLOBAL_STATIC(QDesktopWidgetImplementation, qdesktopWidgetImplementation) QDesktopWidgetImplementation::QDesktopWidgetImplementation() - : appScreen(0), displays(0) + : appScreen(0) { onResize(); } QDesktopWidgetImplementation::~QDesktopWidgetImplementation() { - if (displays) - [displays release]; } QDesktopWidgetImplementation *QDesktopWidgetImplementation::instance() @@ -118,13 +116,7 @@ QRect QDesktopWidgetImplementation::availableRect(int screenIndex) const if (screenIndex < 0 || screenIndex >= screenCount) screenIndex = appScreen; - NSRect r = [[displays objectAtIndex:screenIndex] visibleFrame]; - NSRect primaryRect = [[displays objectAtIndex:0] frame]; - - const int flippedY = - r.origin.y + // account for position offset and - primaryRect.size.height - r.size.height; // height difference. - return QRectF(r.origin.x, flippedY, - r.size.width, r.size.height).toRect(); + return availableRects[screenIndex].toRect(); } QRect QDesktopWidgetImplementation::screenRect(int screenIndex) const @@ -132,22 +124,28 @@ QRect QDesktopWidgetImplementation::screenRect(int screenIndex) const if (screenIndex < 0 || screenIndex >= screenCount) screenIndex = appScreen; - NSRect r = [[displays objectAtIndex:screenIndex] frame]; - NSRect primaryRect = [[displays objectAtIndex:0] frame]; - - const int flippedY = - r.origin.y + // account for position offset and - primaryRect.size.height - r.size.height; // height difference. - return QRectF(r.origin.x, flippedY, - r.size.width, r.size.height).toRect(); + return screenRects[screenIndex].toRect(); } void QDesktopWidgetImplementation::onResize() { - if (displays) - [displays release]; - - displays = [[NSScreen screens] retain]; - screenCount = [displays count]; + QMacCocoaAutoReleasePool pool; + NSArray *displays = [NSScreen screens]; + screenCount = [displays count]; + + screenRects.clear(); + availableRects.clear(); + NSRect primaryRect = [[displays objectAtIndex:0] frame]; + for (int i = 0; i<screenCount; i++) { + NSRect r = [[displays objectAtIndex:i] frame]; + const int flippedY = - r.origin.y + // account for position offset and + primaryRect.size.height - r.size.height; // height difference. + screenRects.append(QRectF(r.origin.x, flippedY, + r.size.width, r.size.height)); + r = [[displays objectAtIndex:i] visibleFrame]; + availableRects.append(QRectF(r.origin.x, flippedY, + r.size.width, r.size.height)); + } } @@ -195,7 +193,7 @@ const QRect QDesktopWidget::screenGeometry(int screen) const int QDesktopWidget::screenNumber(const QWidget *widget) const { - QDesktopWidgetImplementation *d = qdesktopWidgetImplementation(); + QDesktopWidgetImplementation *d = qdesktopWidgetImplementation(); if (!widget) return d->appScreen; QRect frame = widget->frameGeometry(); @@ -216,7 +214,7 @@ int QDesktopWidget::screenNumber(const QWidget *widget) const int QDesktopWidget::screenNumber(const QPoint &point) const { - QDesktopWidgetImplementation *d = qdesktopWidgetImplementation(); + QDesktopWidgetImplementation *d = qdesktopWidgetImplementation(); int closestScreen = -1; int shortestDistance = INT_MAX; for (int i = 0; i < d->screenCount; ++i) { @@ -232,13 +230,25 @@ int QDesktopWidget::screenNumber(const QPoint &point) const void QDesktopWidget::resizeEvent(QResizeEvent *) { - QDesktopWidgetImplementation *d = qdesktopWidgetImplementation(); + QDesktopWidgetImplementation *d = qdesktopWidgetImplementation(); + + const int oldScreenCount = d->screenCount; + const QVector<QRectF> oldRects(d->screenRects); + const QVector<QRectF> oldWorks(d->availableRects); d->onResize(); - for (int i = 0; i < d->screenCount; ++i) { - emit resized(i); + for (int i = 0; i < qMin(oldScreenCount, d->screenCount); ++i) { + if (oldRects.at(i) != d->screenRects.at(i)) + emit resized(i); + } + for (int i = 0; i < qMin(oldScreenCount, d->screenCount); ++i) { + if (oldWorks.at(i) != d->availableRects.at(i)) + emit workAreaResized(i); } + + if (oldScreenCount != d->screenCount) + emit screenCountChanged(d->screenCount); } QT_END_NAMESPACE diff --git a/src/gui/kernel/qdesktopwidget_mac_p.h b/src/gui/kernel/qdesktopwidget_mac_p.h index 0fdc455..e9d5d9f 100644 --- a/src/gui/kernel/qdesktopwidget_mac_p.h +++ b/src/gui/kernel/qdesktopwidget_mac_p.h @@ -64,7 +64,8 @@ public: int appScreen; int screenCount; - NSArray *displays; + QVector<QRectF> availableRects; + QVector<QRectF> screenRects; QRect availableRect(int screenIndex) const; QRect screenRect(int screenIndex) const; diff --git a/src/gui/kernel/qdesktopwidget_win.cpp b/src/gui/kernel/qdesktopwidget_win.cpp index fb176b7..a89e08f 100644 --- a/src/gui/kernel/qdesktopwidget_win.cpp +++ b/src/gui/kernel/qdesktopwidget_win.cpp @@ -354,10 +354,8 @@ int QDesktopWidget::screenNumber(const QPoint &point) const void QDesktopWidget::resizeEvent(QResizeEvent *) { Q_D(QDesktopWidget); - QVector<QRect> oldrects; - oldrects = *d->rects; - QVector<QRect> oldworkrects; - oldworkrects = *d->workrects; + const QVector<QRect> oldrects(*d->rects); + const QVector<QRect> oldworkrects(*d->workrects); int oldscreencount = d->screenCount; QDesktopWidgetPrivate::cleanup(); @@ -368,18 +366,22 @@ void QDesktopWidget::resizeEvent(QResizeEvent *) #endif for (int i = 0; i < qMin(oldscreencount, d->screenCount); ++i) { - QRect oldrect = oldrects[i]; - QRect newrect = d->rects->at(i); + const QRect oldrect = oldrects[i]; + const QRect newrect = d->rects->at(i); if (oldrect != newrect) emit resized(i); } for (int j = 0; j < qMin(oldscreencount, d->screenCount); ++j) { - QRect oldrect = oldworkrects[j]; - QRect newrect = d->workrects->at(j); + const QRect oldrect = oldworkrects[j]; + const QRect newrect = d->workrects->at(j); if (oldrect != newrect) emit workAreaResized(j); } + + if (oldscreencount != d->screenCount) { + emit screenCountChanged(d->screenCount); + } } #ifdef Q_CC_MSVC diff --git a/src/gui/kernel/qdesktopwidget_x11.cpp b/src/gui/kernel/qdesktopwidget_x11.cpp index 59d3239..1555fc0 100644 --- a/src/gui/kernel/qdesktopwidget_x11.cpp +++ b/src/gui/kernel/qdesktopwidget_x11.cpp @@ -372,7 +372,32 @@ int QDesktopWidget::screenNumber(const QPoint &point) const void QDesktopWidget::resizeEvent(QResizeEvent *event) { Q_D(QDesktopWidget); + int oldScreenCount = d->screenCount; + QVector<QRect> oldRects(oldScreenCount); + QVector<QRect> oldWorks(oldScreenCount); + for (int i = 0; i < oldScreenCount; ++i) { + oldRects[i] = d->rects[i]; + oldWorks[i] = d->workareas[i]; + } + d->init(); + + for (int i = 0; i < qMin(oldScreenCount, d->screenCount); ++i) { + if (oldRects.at(i) != d->rects[i]) + emit resized(i); + } + + // ### workareas are just reset by init, not filled with new values + // ### so this will not work correctly + for (int j = 0; j < qMin(oldScreenCount, d->screenCount); ++j) { + if (oldWorks.at(j) != d->workareas[j]) + emit workAreaResized(j); + } + + if (oldScreenCount != d->screenCount) { + emit screenCountChanged(d->screenCount); + } + qt_desktopwidget_workarea_dirty = true; QWidget::resizeEvent(event); } diff --git a/src/gui/kernel/qevent.cpp b/src/gui/kernel/qevent.cpp index 21b96eb..a035acf 100644 --- a/src/gui/kernel/qevent.cpp +++ b/src/gui/kernel/qevent.cpp @@ -120,7 +120,7 @@ QInputEvent::~QInputEvent() will not be propagated further up the parent widget chain. The state of the keyboard modifier keys can be found by calling the - \l{QInputEvent::modifiers()}{modifiers()} function, inhertied from + \l{QInputEvent::modifiers()}{modifiers()} function, inherited from QInputEvent. The functions pos(), x(), and y() give the cursor position @@ -3570,21 +3570,23 @@ QMenubarUpdatedEvent::QMenubarUpdatedEvent(QMenuBar * const menuBar) #endif /*! \class QTouchEvent - \brief The QTouchEvent class contains parameters that describe a touch event -. + \brief The QTouchEvent class contains parameters that describe a touch event. \since 4.6 \ingroup events Touch events occur when pressing, releasing, or moving one or more touch points on a touch device (such as a touch-screen or - track-pad), and if the widget has the Qt::WA_AcceptTouchEvents - attribute. + track-pad). To receive touch events, widgets have to have the + Qt::WA_AcceptTouchEvents attribute set and graphics items need to have + the \l{QGraphicsItem::setAcceptTouchEvents()}{acceptTouchEvents} + attribute set to true. All touch events are of type QEvent::TouchBegin, QEvent::TouchUpdate, or QEvent::TouchEnd. The touchPoints() function returns a list of all touch points contained in the event. - Information about each touch point can be retreived using the - QTouchEvent::TouchPoint class. + Information about each touch point can be retrieved using the + QTouchEvent::TouchPoint class. The Qt::TouchPointState enum + describes the different states that a touch point may have. Similar to QMouseEvent, Qt automatically grabs each touch point on the first press inside a widget; the widget will receive all @@ -3602,10 +3604,11 @@ QMenubarUpdatedEvent::QMenubarUpdatedEvent(QMenuBar * const menuBar) then mouse events are simulated from the state of the first touch point. - The Qt::TouchPointState enum describes the different states that a - touch point may have. + Reimplement QWidget::event() for widgets and QGraphicsItem::sceneEvent() + for items in a graphics view to receive touch events. - QTouchEvent::TouchPoint Qt::TouchPointState Qt::WA_AcceptTouchEvents + \sa QTouchEvent::TouchPoint, Qt::TouchPointState, Qt::WA_AcceptTouchEvents, + QGraphicsItem::acceptTouchEvents() */ /*! \enum Qt::TouchPointState @@ -3623,13 +3626,7 @@ QMenubarUpdatedEvent::QMenubarUpdatedEvent(QMenuBar * const menuBar) \omitvalue TouchPointPrimary */ -/*! \class QTouchEvent::TouchPoint - \brief The QTouchEvent::TouchPoint class provide information about a touch point in a QTouchEvent. - \since 4.6 -*/ - /*! \enum QTouchEvent::DeviceType - \since 4.6 This enum represents the type of device that generated a QTouchEvent. @@ -3708,6 +3705,11 @@ QTouchEvent::~QTouchEvent() Sets the list of touch points for this event. */ +/*! \class QTouchEvent::TouchPoint + \brief The QTouchEvent::TouchPoint class provides information about a touch point in a QTouchEvent. + \since 4.6 +*/ + /*! \internal Constructs a QTouchEvent::TouchPoint for use in a QTouchEvent. @@ -3767,7 +3769,9 @@ bool QTouchEvent::TouchPoint::isPrimary() const /*! Returns the position of this touch point, relative to the widget - or item that received the event. + or QGraphicsItem that received the event. + + \sa startPos(), lastPos(), screenPos(), scenePos(), normalizedPos() */ QPointF QTouchEvent::TouchPoint::pos() const { @@ -3776,6 +3780,13 @@ QPointF QTouchEvent::TouchPoint::pos() const /*! Returns the scene position of this touch point. + + The scene position is the position in QGraphicsScene coordinates + if the QTouchEvent is handled by a QGraphicsItem::touchEvent() + reimplementation, and identical to the screen position for + widgets. + + \sa startScenePos(), lastScenePos(), pos() */ QPointF QTouchEvent::TouchPoint::scenePos() const { @@ -3784,6 +3795,8 @@ QPointF QTouchEvent::TouchPoint::scenePos() const /*! Returns the screen position of this touch point. + + \sa startScreenPos(), lastScreenPos(), pos() */ QPointF QTouchEvent::TouchPoint::screenPos() const { @@ -3791,8 +3804,12 @@ QPointF QTouchEvent::TouchPoint::screenPos() const } /*! - Returns the position of this touch point. The coordinates are normalized to size of the touch - device, i.e. (0,0) is the top-left corner and (1,1) is the bottom-right corner. + Returns the normalized position of this touch point. + + The coordinates are normalized to the size of the touch device, + i.e. (0,0) is the top-left corner and (1,1) is the bottom-right corner. + + \sa startNormalizedPos(), lastNormalizedPos(), pos() */ QPointF QTouchEvent::TouchPoint::normalizedPos() const { @@ -3801,7 +3818,9 @@ QPointF QTouchEvent::TouchPoint::normalizedPos() const /*! Returns the starting position of this touch point, relative to the - widget that received the event. + widget or QGraphicsItem that received the event. + + \sa pos(), lastPos() */ QPointF QTouchEvent::TouchPoint::startPos() const { @@ -3810,6 +3829,13 @@ QPointF QTouchEvent::TouchPoint::startPos() const /*! Returns the starting scene position of this touch point. + + The scene position is the position in QGraphicsScene coordinates + if the QTouchEvent is handled by a QGraphicsItem::touchEvent() + reimplementation, and identical to the screen position for + widgets. + + \sa scenePos(), lastScenePos() */ QPointF QTouchEvent::TouchPoint::startScenePos() const { @@ -3818,6 +3844,8 @@ QPointF QTouchEvent::TouchPoint::startScenePos() const /*! Returns the starting screen position of this touch point. + + \sa screenPos(), lastScreenPos() */ QPointF QTouchEvent::TouchPoint::startScreenPos() const { @@ -3825,8 +3853,12 @@ QPointF QTouchEvent::TouchPoint::startScreenPos() const } /*! - Returns the starting position of this touch point. The coordinates are normalized to size of - the touch device, i.e. (0,0) is the top-left corner and (1,1) is the bottom-right corner. + Returns the normalized starting position of this touch point. + + The coordinates are normalized to the size of the touch device, + i.e. (0,0) is the top-left corner and (1,1) is the bottom-right corner. + + \sa normalizedPos(), lastNormalizedPos() */ QPointF QTouchEvent::TouchPoint::startNormalizedPos() const { @@ -3835,7 +3867,9 @@ QPointF QTouchEvent::TouchPoint::startNormalizedPos() const /*! Returns the position of this touch point from the previous touch - event, relative to the widget that received the event. + event, relative to the widget or QGraphicsItem that received the event. + + \sa pos(), startPos() */ QPointF QTouchEvent::TouchPoint::lastPos() const { @@ -3845,6 +3879,13 @@ QPointF QTouchEvent::TouchPoint::lastPos() const /*! Returns the scene position of this touch point from the previous touch event. + + The scene position is the position in QGraphicsScene coordinates + if the QTouchEvent is handled by a QGraphicsItem::touchEvent() + reimplementation, and identical to the screen position for + widgets. + + \sa scenePos(), startScenePos() */ QPointF QTouchEvent::TouchPoint::lastScenePos() const { @@ -3854,6 +3895,8 @@ QPointF QTouchEvent::TouchPoint::lastScenePos() const /*! Returns the screen position of this touch point from the previous touch event. + + \sa screenPos(), startScreenPos() */ QPointF QTouchEvent::TouchPoint::lastScreenPos() const { @@ -3861,9 +3904,13 @@ QPointF QTouchEvent::TouchPoint::lastScreenPos() const } /*! - Returns the position of this touch point from the previous touch event. The coordinates are - normalized to size of the touch device, i.e. (0,0) is the top-left corner and (1,1) is the - bottom-right corner. + Returns the normalized position of this touch point from the + previous touch event. + + The coordinates are normalized to the size of the touch device, + i.e. (0,0) is the top-left corner and (1,1) is the bottom-right corner. + + \sa normalizedPos(), startNormalizedPos() */ QPointF QTouchEvent::TouchPoint::lastNormalizedPos() const { @@ -3871,8 +3918,11 @@ QPointF QTouchEvent::TouchPoint::lastNormalizedPos() const } /*! - Returns the rect for this touch point. The rect is centered around the point returned by pos(). - Note this function returns an empty rect if the device does not report touch point sizes. + Returns the rect for this touch point, relative to the widget + or QGraphicsItem that received the event. The rect is centered + around the point returned by pos(). + + \note This function returns an empty rect if the device does not report touch point sizes. */ QRectF QTouchEvent::TouchPoint::rect() const { @@ -3881,6 +3931,10 @@ QRectF QTouchEvent::TouchPoint::rect() const /*! Returns the rect for this touch point in scene coordinates. + + \note This function returns an empty rect if the device does not report touch point sizes. + + \sa scenePos(), rect() */ QRectF QTouchEvent::TouchPoint::sceneRect() const { @@ -3889,6 +3943,10 @@ QRectF QTouchEvent::TouchPoint::sceneRect() const /*! Returns the rect for this touch point in screen coordinates. + + \note This function returns an empty rect if the device does not report touch point sizes. + + \sa screenPos(), rect() */ QRectF QTouchEvent::TouchPoint::screenRect() const { diff --git a/src/gui/kernel/qeventdispatcher_mac.mm b/src/gui/kernel/qeventdispatcher_mac.mm index 99a1fc1..cde0c47 100644 --- a/src/gui/kernel/qeventdispatcher_mac.mm +++ b/src/gui/kernel/qeventdispatcher_mac.mm @@ -264,12 +264,16 @@ void qt_mac_socket_callback(CFSocketRef s, CFSocketCallBackType callbackType, CF int nativeSocket = CFSocketGetNative(s); MacSocketInfo *socketInfo = eventDispatcher->macSockets.value(nativeSocket); QEvent notifierEvent(QEvent::SockAct); + + // There is a race condition that happen where we disable the notifier and + // the kernel still has a notification to pass on. We then get this + // notification after we've successfully disabled the CFSocket, but our Qt + // notifier is now gone. The upshot is we have to check the notifier + // everytime. if (callbackType == kCFSocketReadCallBack) { - Q_ASSERT(socketInfo->readNotifier); - QApplication::sendEvent(socketInfo->readNotifier, ¬ifierEvent); + if (socketInfo->readNotifier) + QApplication::sendEvent(socketInfo->readNotifier, ¬ifierEvent); } else if (callbackType == kCFSocketWriteCallBack) { - // ### Bug in Apple socket notifiers seems to send write even - // ### after the notifier has been disabled, need to investigate further. if (socketInfo->writeNotifier) QApplication::sendEvent(socketInfo->writeNotifier, ¬ifierEvent); } diff --git a/src/gui/kernel/qgesture.h b/src/gui/kernel/qgesture.h index cc46916..1cd9cae 100644 --- a/src/gui/kernel/qgesture.h +++ b/src/gui/kernel/qgesture.h @@ -42,12 +42,12 @@ #ifndef QGESTURE_H #define QGESTURE_H -#include "qobject.h" -#include "qlist.h" -#include "qdatetime.h" -#include "qpoint.h" -#include "qrect.h" -#include "qmetatype.h" +#include <QtCore/qobject.h> +#include <QtCore/qlist.h> +#include <QtCore/qdatetime.h> +#include <QtCore/qpoint.h> +#include <QtCore/qrect.h> +#include <QtCore/qmetatype.h> QT_BEGIN_HEADER diff --git a/src/gui/kernel/qguivariant.cpp b/src/gui/kernel/qguivariant.cpp index 01df47d..ab69cdf 100644 --- a/src/gui/kernel/qguivariant.cpp +++ b/src/gui/kernel/qguivariant.cpp @@ -60,6 +60,11 @@ #include "qregion.h" #include "qsizepolicy.h" #include "qtextformat.h" +#include "qmatrix4x4.h" +#include "qvector2d.h" +#include "qvector3d.h" +#include "qvector4d.h" +#include "qquaternion.h" #include "private/qvariant_p.h" @@ -148,6 +153,31 @@ static void construct(QVariant::Private *x, const void *copy) v_construct<QColor>(x, &color); break; } +#ifndef QT_NO_MATRIX4X4 + case QVariant::Matrix4x4: + v_construct<QMatrix4x4>(x, copy); + break; +#endif +#ifndef QT_NO_VECTOR2D + case QVariant::Vector2D: + v_construct<QVector2D>(x, copy); + break; +#endif +#ifndef QT_NO_VECTOR3D + case QVariant::Vector3D: + v_construct<QVector3D>(x, copy); + break; +#endif +#ifndef QT_NO_VECTOR4D + case QVariant::Vector4D: + v_construct<QVector4D>(x, copy); + break; +#endif +#ifndef QT_NO_QUATERNION + case QVariant::Quaternion: + v_construct<QQuaternion>(x, copy); + break; +#endif default: qcoreVariantHandler()->construct(x, copy); return; @@ -221,6 +251,31 @@ static void clear(QVariant::Private *d) case QVariant::Pen: v_clear<QPen>(d); break; +#ifndef QT_NO_MATRIX4X4 + case QVariant::Matrix4x4: + v_clear<QMatrix4x4>(d); + break; +#endif +#ifndef QT_NO_VECTOR2D + case QVariant::Vector2D: + v_clear<QVector2D>(d); + break; +#endif +#ifndef QT_NO_VECTOR3D + case QVariant::Vector3D: + v_clear<QVector3D>(d); + break; +#endif +#ifndef QT_NO_VECTOR4D + case QVariant::Vector4D: + v_clear<QVector4D>(d); + break; +#endif +#ifndef QT_NO_QUATERNION + case QVariant::Quaternion: + v_clear<QVector4D>(d); + break; +#endif default: qcoreVariantHandler()->clear(d); return; @@ -266,7 +321,26 @@ static bool isNull(const QVariant::Private *d) case QVariant::KeySequence: #endif case QVariant::Pen: +#ifndef QT_NO_MATRIX4X4 + case QVariant::Matrix4x4: +#endif break; +#ifndef QT_NO_VECTOR2D + case QVariant::Vector2D: + return v_cast<QVector2D>(d)->isNull(); +#endif +#ifndef QT_NO_VECTOR3D + case QVariant::Vector3D: + return v_cast<QVector3D>(d)->isNull(); +#endif +#ifndef QT_NO_VECTOR4D + case QVariant::Vector4D: + return v_cast<QVector4D>(d)->isNull(); +#endif +#ifndef QT_NO_QUATERNION + case QVariant::Quaternion: + return v_cast<QQuaternion>(d)->isNull(); +#endif default: return qcoreVariantHandler()->isNull(d); } @@ -326,6 +400,26 @@ static bool compare(const QVariant::Private *a, const QVariant::Private *b) #endif case QVariant::Pen: return *v_cast<QPen>(a) == *v_cast<QPen>(b); +#ifndef QT_NO_MATRIX4X4 + case QVariant::Matrix4x4: + return *v_cast<QMatrix4x4>(a) == *v_cast<QMatrix4x4>(b); +#endif +#ifndef QT_NO_VECTOR2D + case QVariant::Vector2D: + return *v_cast<QVector2D>(a) == *v_cast<QVector2D>(b); +#endif +#ifndef QT_NO_VECTOR3D + case QVariant::Vector3D: + return *v_cast<QVector3D>(a) == *v_cast<QVector3D>(b); +#endif +#ifndef QT_NO_VECTOR4D + case QVariant::Vector4D: + return *v_cast<QVector4D>(a) == *v_cast<QVector4D>(b); +#endif +#ifndef QT_NO_QUATERNION + case QVariant::Quaternion: + return *v_cast<QQuaternion>(a) == *v_cast<QQuaternion>(b); +#endif default: break; } @@ -513,6 +607,31 @@ static void streamDebug(QDebug dbg, const QVariant &v) case QVariant::Pen: dbg.nospace() << qvariant_cast<QPen>(v); break; +#ifndef QT_NO_MATRIX4X4 + case QVariant::Matrix4x4: + dbg.nospace() << qvariant_cast<QMatrix4x4>(v); + break; +#endif +#ifndef QT_NO_VECTOR2D + case QVariant::Vector2D: + dbg.nospace() << qvariant_cast<QVector2D>(v); + break; +#endif +#ifndef QT_NO_VECTOR3D + case QVariant::Vector3D: + dbg.nospace() << qvariant_cast<QVector3D>(v); + break; +#endif +#ifndef QT_NO_VECTOR4D + case QVariant::Vector4D: + dbg.nospace() << qvariant_cast<QVector4D>(v); + break; +#endif +#ifndef QT_NO_QUATERNION + case QVariant::Quaternion: + dbg.nospace() << qvariant_cast<QQuaternion>(v); + break; +#endif default: qcoreVariantHandler()->debugStream(dbg, v); break; @@ -596,6 +715,21 @@ Q_DECL_METATYPE_HELPER(QTextLength) Q_DECL_METATYPE_HELPER(QTextFormat) Q_DECL_METATYPE_HELPER(QMatrix) Q_DECL_METATYPE_HELPER(QTransform) +#ifndef QT_NO_MATRIX4X4 +Q_DECL_METATYPE_HELPER(QMatrix4x4) +#endif +#ifndef QT_NO_VECTOR2D +Q_DECL_METATYPE_HELPER(QVector2D) +#endif +#ifndef QT_NO_VECTOR3D +Q_DECL_METATYPE_HELPER(QVector3D) +#endif +#ifndef QT_NO_VECTOR4D +Q_DECL_METATYPE_HELPER(QVector4D) +#endif +#ifndef QT_NO_QUATERNION +Q_DECL_METATYPE_HELPER(QQuaternion) +#endif #ifdef QT_NO_DATASTREAM # define Q_IMPL_METATYPE_HELPER(TYPE) \ @@ -645,7 +779,32 @@ static const QMetaTypeGuiHelper qVariantGuiHelper[] = { Q_IMPL_METATYPE_HELPER(QTextLength), Q_IMPL_METATYPE_HELPER(QTextFormat), Q_IMPL_METATYPE_HELPER(QMatrix), - Q_IMPL_METATYPE_HELPER(QTransform) + Q_IMPL_METATYPE_HELPER(QTransform), +#ifndef QT_NO_MATRIX4X4 + Q_IMPL_METATYPE_HELPER(QMatrix4x4), +#else + {0, 0, 0, 0}, +#endif +#ifndef QT_NO_VECTOR2D + Q_IMPL_METATYPE_HELPER(QVector2D), +#else + {0, 0, 0, 0}, +#endif +#ifndef QT_NO_VECTOR3D + Q_IMPL_METATYPE_HELPER(QVector3D), +#else + {0, 0, 0, 0}, +#endif +#ifndef QT_NO_VECTOR4D + Q_IMPL_METATYPE_HELPER(QVector4D), +#else + {0, 0, 0, 0}, +#endif +#ifndef QT_NO_QUATERNION + Q_IMPL_METATYPE_HELPER(QQuaternion) +#else + {0, 0, 0, 0} +#endif }; static const QVariant::Handler *qt_guivariant_last_handler = 0; diff --git a/src/gui/kernel/qkeymapper_win.cpp b/src/gui/kernel/qkeymapper_win.cpp index b13e622..0998631 100644 --- a/src/gui/kernel/qkeymapper_win.cpp +++ b/src/gui/kernel/qkeymapper_win.cpp @@ -851,8 +851,8 @@ bool QKeyMapperPrivate::translateKeyEvent(QWidget *widget, const MSG &msg, bool } } else if (msgType == WM_KEYUP) { if (dirStatus == VK_LSHIFT - && (msg.wParam == VK_SHIFT && GetKeyState(VK_LCONTROL) - || msg.wParam == VK_CONTROL && GetKeyState(VK_LSHIFT))) { + && ((msg.wParam == VK_SHIFT && GetKeyState(VK_LCONTROL)) + || (msg.wParam == VK_CONTROL && GetKeyState(VK_LSHIFT)))) { k0 = q->sendKeyEvent(widget, grab, QEvent::KeyPress, Qt::Key_Direction_L, 0, QString(), false, 0, scancode, msg.wParam, nModifiers); @@ -861,8 +861,8 @@ bool QKeyMapperPrivate::translateKeyEvent(QWidget *widget, const MSG &msg, bool scancode, msg.wParam, nModifiers); dirStatus = 0; } else if (dirStatus == VK_RSHIFT - && (msg.wParam == VK_SHIFT && GetKeyState(VK_RCONTROL) - || msg.wParam == VK_CONTROL && GetKeyState(VK_RSHIFT))) { + && ( (msg.wParam == VK_SHIFT && GetKeyState(VK_RCONTROL)) + || (msg.wParam == VK_CONTROL && GetKeyState(VK_RSHIFT)))) { k0 = q->sendKeyEvent(widget, grab, QEvent::KeyPress, Qt::Key_Direction_R, 0, QString(), false, 0, scancode, msg.wParam, nModifiers); diff --git a/src/gui/kernel/qmime_win.cpp b/src/gui/kernel/qmime_win.cpp index c7559d8..acd7cfc 100644 --- a/src/gui/kernel/qmime_win.cpp +++ b/src/gui/kernel/qmime_win.cpp @@ -170,7 +170,7 @@ static QByteArray getData(int cf, IDataObject *pDataObj) if (pDataObj->GetData(&formatetc, &s) == S_OK) { char szBuffer[4096]; ULONG actualRead = 0; - LARGE_INTEGER pos = {0, 0}; + LARGE_INTEGER pos = {{0, 0}}; //Move to front (can fail depending on the data model implemented) HRESULT hr = s.pstm->Seek(pos, STREAM_SEEK_SET, NULL); while(SUCCEEDED(hr)){ diff --git a/src/gui/kernel/qstandardgestures.h b/src/gui/kernel/qstandardgestures.h index db96ef6..2234702 100644 --- a/src/gui/kernel/qstandardgestures.h +++ b/src/gui/kernel/qstandardgestures.h @@ -42,11 +42,10 @@ #ifndef QSTANDARDGESTURES_H #define QSTANDARDGESTURES_H -#include "qevent.h" -#include "qbasictimer.h" -#include "qdebug.h" +#include <QtGui/qevent.h> +#include <QtCore/qbasictimer.h> -#include "qgesture.h" +#include <QtGui/qgesture.h> QT_BEGIN_HEADER diff --git a/src/gui/kernel/qt_cocoa_helpers_mac.mm b/src/gui/kernel/qt_cocoa_helpers_mac.mm index a98a7f8..223e36b 100644 --- a/src/gui/kernel/qt_cocoa_helpers_mac.mm +++ b/src/gui/kernel/qt_cocoa_helpers_mac.mm @@ -77,6 +77,7 @@ #include <qwidget.h> #include <qdesktopwidget.h> #include <qevent.h> +#include <qpixmapcache.h> #include <private/qevent_p.h> #include <private/qt_cocoa_helpers_mac_p.h> #include <private/qt_mac_p.h> @@ -1147,4 +1148,49 @@ QString qt_mac_get_pasteboardString() } } +QPixmap qt_mac_convert_iconref(const IconRef icon, int width, int height) +{ + QPixmap ret(width, height); + ret.fill(QColor(0, 0, 0, 0)); + + CGRect rect = CGRectMake(0, 0, width, height); + + CGContextRef ctx = qt_mac_cg_context(&ret); + CGAffineTransform old_xform = CGContextGetCTM(ctx); + CGContextConcatCTM(ctx, CGAffineTransformInvert(old_xform)); + CGContextConcatCTM(ctx, CGAffineTransformIdentity); + + ::RGBColor b; + b.blue = b.green = b.red = 255*255; + PlotIconRefInContext(ctx, &rect, kAlignNone, kTransformNone, &b, kPlotIconRefNormalFlags, icon); + CGContextRelease(ctx); + return ret; +} + +void qt_mac_constructQIconFromIconRef(const IconRef icon, const IconRef overlayIcon, QIcon *retIcon, QStyle::StandardPixmap standardIcon) +{ + int size = 16; + while (size <= 128) { + + const QString cacheKey = QLatin1String("qt_mac_constructQIconFromIconRef") + QString::number(standardIcon) + QString::number(size); + QPixmap mainIcon; + if (standardIcon >= QStyle::SP_CustomBase) { + mainIcon = qt_mac_convert_iconref(icon, size, size); + } else if (QPixmapCache::find(cacheKey, mainIcon) == false) { + mainIcon = qt_mac_convert_iconref(icon, size, size); + QPixmapCache::insert(cacheKey, mainIcon); + } + + if (overlayIcon) { + int littleSize = size / 2; + QPixmap overlayPix = qt_mac_convert_iconref(overlayIcon, littleSize, littleSize); + QPainter painter(&mainIcon); + painter.drawPixmap(size - littleSize, size - littleSize, overlayPix); + } + + retIcon->addPixmap(mainIcon); + size += size; // 16 -> 32 -> 64 -> 128 + } +} + QT_END_NAMESPACE diff --git a/src/gui/kernel/qt_cocoa_helpers_mac_p.h b/src/gui/kernel/qt_cocoa_helpers_mac_p.h index 5f6204f..af3b4cb 100644 --- a/src/gui/kernel/qt_cocoa_helpers_mac_p.h +++ b/src/gui/kernel/qt_cocoa_helpers_mac_p.h @@ -105,6 +105,8 @@ #include <qpoint.h> #include "private/qt_mac_p.h" +struct HIContentBorderMetrics; + #ifdef Q_WS_MAC32 typedef struct _NSPoint NSPoint; // Just redefine here so I don't have to pull in all of Cocoa. #else @@ -122,7 +124,6 @@ bool macWindowToolbarIsVisible( void * /*OSWindowRef*/ window ); void macWindowSetHasShadow( void * /*OSWindowRef*/ window, bool hasShadow ); void macWindowFlush(void * /*OSWindowRef*/ window); void macSendToolbarChangeEvent(QWidget *widget); -struct HIContentBorderMetrics; void qt_mac_updateContentBorderMetricts(void * /*OSWindowRef */window, const ::HIContentBorderMetrics &metrics); void * /*NSImage */qt_mac_create_nsimage(const QPixmap &pm); void qt_mac_update_mouseTracking(QWidget *widget); @@ -143,6 +144,9 @@ struct ::TabletProximityRec; void qt_dispatchTabletProximityEvent(const ::TabletProximityRec &proxRec); Qt::KeyboardModifiers qt_cocoaModifiers2QtModifiers(ulong modifierFlags); Qt::KeyboardModifiers qt_cocoaDragOperation2QtModifiers(uint dragOperations); +QPixmap qt_mac_convert_iconref(const IconRef icon, int width, int height); +void qt_mac_constructQIconFromIconRef(const IconRef icon, const IconRef overlayIcon, QIcon *retIcon, + QStyle::StandardPixmap standardIcon = QStyle::SP_CustomBase); inline int flipYCoordinate(int y) { return QApplication::desktop()->screenGeometry(0).height() - y; diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index 474bd5d..9ee877e 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -1972,10 +1972,9 @@ void QPixmap::fill( const QWidget *widget, const QPoint &off ) QPainter p(this); p.translate(-off); widget->d_func()->paintBackground(&p, QRect(off, size())); - } -static inline void fillRegion(QPainter *painter, const QRegion &rgn, const QPoint &offset, const QBrush &brush) +static inline void fillRegion(QPainter *painter, const QRegion &rgn, const QBrush &brush) { Q_ASSERT(painter); @@ -1984,26 +1983,39 @@ static inline void fillRegion(QPainter *painter, const QRegion &rgn, const QPoin // Optimize pattern filling on mac by using HITheme directly // when filling with the standard widget background. // Defined in qmacstyle_mac.cpp - extern void qt_mac_fill_background(QPainter *painter, const QRegion &rgn, const QPoint &offset, const QBrush &brush); - qt_mac_fill_background(painter, rgn, offset, brush); + extern void qt_mac_fill_background(QPainter *painter, const QRegion &rgn, const QBrush &brush); + qt_mac_fill_background(painter, rgn, brush); #else - const QRegion translated = rgn.translated(offset); - const QRect rect(translated.boundingRect()); - painter->setClipRegion(translated); + const QRect rect(rgn.boundingRect()); + painter->setClipRegion(rgn); painter->drawTiledPixmap(rect, brush.texture(), rect.topLeft()); #endif } else { const QVector<QRect> &rects = rgn.rects(); for (int i = 0; i < rects.size(); ++i) - painter->fillRect(rects.at(i).translated(offset), brush); + painter->fillRect(rects.at(i), brush); } } - -void QWidgetPrivate::paintBackground(QPainter *painter, const QRegion &rgn, const QPoint &offset, int flags) const +void QWidgetPrivate::paintBackground(QPainter *painter, const QRegion &rgn, int flags) const { Q_Q(const QWidget); +#ifndef QT_NO_SCROLLAREA + bool resetBrushOrigin = false; + QPointF oldBrushOrigin; + //If we are painting the viewport of a scrollarea, we must apply an offset to the brush in case we are drawing a texture + QAbstractScrollArea *scrollArea = qobject_cast<QAbstractScrollArea *>(parent); + if (scrollArea && scrollArea->viewport() == q) { + QObjectData *scrollPrivate = static_cast<QWidget *>(scrollArea)->d_ptr; + QAbstractScrollAreaPrivate *priv = static_cast<QAbstractScrollAreaPrivate *>(scrollPrivate); + oldBrushOrigin = painter->brushOrigin(); + resetBrushOrigin = true; + painter->setBrushOrigin(-priv->contentsOffset()); + + } +#endif // QT_NO_SCROLLAREA + const QBrush autoFillBrush = q->palette().brush(q->backgroundRole()); if ((flags & DrawAsRoot) && !(q->autoFillBackground() && autoFillBrush.isOpaque())) { @@ -2012,18 +2024,24 @@ void QWidgetPrivate::paintBackground(QPainter *painter, const QRegion &rgn, cons if (!(flags & DontSetCompositionMode) && painter->paintEngine()->hasFeature(QPaintEngine::PorterDuff)) painter->setCompositionMode(QPainter::CompositionMode_Source); //copy alpha straight in #endif - fillRegion(painter, rgn, offset, bg); + fillRegion(painter, rgn, bg); } if (q->autoFillBackground()) - fillRegion(painter, rgn, offset, autoFillBrush); + fillRegion(painter, rgn, autoFillBrush); + if (q->testAttribute(Qt::WA_StyledBackground)) { - painter->setClipRegion(rgn.translated(offset)); + painter->setClipRegion(rgn); QStyleOption opt; opt.initFrom(q); q->style()->drawPrimitive(QStyle::PE_Widget, &opt, painter, q); } + +#ifndef QT_NO_SCROLLAREA + if (resetBrushOrigin) + painter->setBrushOrigin(oldBrushOrigin); +#endif // QT_NO_SCROLLAREA } /* @@ -5004,19 +5022,7 @@ void QWidgetPrivate::drawWidget(QPaintDevice *pdev, const QRegion &rgn, const QP && !q->testAttribute(Qt::WA_OpaquePaintEvent) && !q->testAttribute(Qt::WA_NoSystemBackground)) { QPainter p(q); - QPoint scrollAreaOffset; - -#ifndef QT_NO_SCROLLAREA - QAbstractScrollArea *scrollArea = qobject_cast<QAbstractScrollArea *>(parent); - if (scrollArea && scrollArea->viewport() == q) { - QObjectData *scrollPrivate = static_cast<QWidget *>(scrollArea)->d_ptr; - QAbstractScrollAreaPrivate *priv = static_cast<QAbstractScrollAreaPrivate *>(scrollPrivate); - scrollAreaOffset = priv->contentsOffset(); - p.translate(-scrollAreaOffset); - } -#endif // QT_NO_SCROLLAREA - - paintBackground(&p, toBePainted, scrollAreaOffset, (asRoot || onScreen) ? flags | DrawAsRoot : 0); + paintBackground(&p, toBePainted, (asRoot || onScreen) ? flags | DrawAsRoot : 0); } if (!sharedPainter) diff --git a/src/gui/kernel/qwidget_mac.mm b/src/gui/kernel/qwidget_mac.mm index 5577224..1717fbd 100644 --- a/src/gui/kernel/qwidget_mac.mm +++ b/src/gui/kernel/qwidget_mac.mm @@ -1198,22 +1198,13 @@ OSStatus QWidgetPrivate::qt_widget_event(EventHandlerCallRef er, EventRef event, p.setClipping(false); if(was_unclipped) widget->setAttribute(Qt::WA_PaintUnclipped); - - QAbstractScrollArea *scrollArea = qobject_cast<QAbstractScrollArea *>(widget->parent()); - QPoint scrollAreaOffset; - if (scrollArea && scrollArea->viewport() == widget) { - QAbstractScrollAreaPrivate *priv = static_cast<QAbstractScrollAreaPrivate *>(static_cast<QWidget *>(scrollArea)->d_ptr); - scrollAreaOffset = priv->contentsOffset(); - p.translate(-scrollAreaOffset); - } - - widget->d_func()->paintBackground(&p, qrgn, scrollAreaOffset, widget->isWindow() ? DrawAsRoot : 0); + widget->d_func()->paintBackground(&p, qrgn, widget->isWindow() ? DrawAsRoot : 0); if (widget->testAttribute(Qt::WA_TintedBackground)) { QColor tint = widget->palette().window().color(); tint.setAlphaF(.6); const QVector<QRect> &rects = qrgn.rects(); for (int i = 0; i < rects.size(); ++i) - p.fillRect(rects.at(i).translated(scrollAreaOffset), tint); + p.fillRect(rects.at(i), tint); } p.end(); if (!redirectionOffset.isNull()) diff --git a/src/gui/kernel/qwidget_p.h b/src/gui/kernel/qwidget_p.h index 626950e..998181e 100644 --- a/src/gui/kernel/qwidget_p.h +++ b/src/gui/kernel/qwidget_p.h @@ -295,7 +295,7 @@ public: void setUpdatesEnabled_helper(bool ); - void paintBackground(QPainter *, const QRegion &, const QPoint & = QPoint(), int flags = DrawAsRoot) const; + void paintBackground(QPainter *, const QRegion &, int flags = DrawAsRoot) const; bool isAboutToShow() const; QRegion prepareToRender(const QRegion ®ion, QWidget::RenderFlags renderFlags); void render_helper(QPainter *painter, const QPoint &targetOffset, const QRegion &sourceRegion, diff --git a/src/gui/kernel/qwidget_win.cpp b/src/gui/kernel/qwidget_win.cpp index dcf541c..46fa3be 100644 --- a/src/gui/kernel/qwidget_win.cpp +++ b/src/gui/kernel/qwidget_win.cpp @@ -264,7 +264,7 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO HINSTANCE appinst = qWinAppInst(); HWND parentw, destroyw = 0; - WId id; + WId id = 0; QString windowClassName = qt_reg_winclass(q); diff --git a/src/gui/math3d/qmatrix4x4.cpp b/src/gui/math3d/qmatrix4x4.cpp index 88f58c8..b4c54a0 100644 --- a/src/gui/math3d/qmatrix4x4.cpp +++ b/src/gui/math3d/qmatrix4x4.cpp @@ -1794,6 +1794,51 @@ QDebug operator<<(QDebug dbg, const QMatrix4x4 &m) #endif -#endif +#ifndef QT_NO_DATASTREAM + +/*! + \fn QDataStream &operator<<(QDataStream &stream, const QMatrix4x4 &matrix) + \relates QMatrix4x4 + + Writes the given \a matrix to the given \a stream and returns a + reference to the stream. + + \sa {Format of the QDataStream Operators} +*/ + +QDataStream &operator<<(QDataStream &stream, const QMatrix4x4 &matrix) +{ + for (int row = 0; row < 4; ++row) + for (int col = 0; col < 4; ++col) + stream << double(matrix(row, col)); + return stream; +} + +/*! + \fn QDataStream &operator>>(QDataStream &stream, QMatrix4x4 &matrix) + \relates QMatrix4x4 + + Reads a 4x4 matrix from the given \a stream into the given \a matrix + and returns a reference to the stream. + + \sa {Format of the QDataStream Operators} +*/ + +QDataStream &operator>>(QDataStream &stream, QMatrix4x4 &matrix) +{ + double x; + for (int row = 0; row < 4; ++row) { + for (int col = 0; col < 4; ++col) { + stream >> x; + matrix(row, col) = float(x); + } + } + matrix.inferSpecialType(); + return stream; +} + +#endif // QT_NO_DATASTREAM + +#endif // QT_NO_MATRIX4X4 QT_END_NAMESPACE diff --git a/src/gui/math3d/qmatrix4x4.h b/src/gui/math3d/qmatrix4x4.h index d63de70..f7246bb 100644 --- a/src/gui/math3d/qmatrix4x4.h +++ b/src/gui/math3d/qmatrix4x4.h @@ -960,6 +960,11 @@ inline float *QMatrix4x4::data() Q_GUI_EXPORT QDebug operator<<(QDebug dbg, const QMatrix4x4 &m); #endif +#ifndef QT_NO_DATASTREAM +Q_GUI_EXPORT QDataStream &operator<<(QDataStream &, const QMatrix4x4 &); +Q_GUI_EXPORT QDataStream &operator>>(QDataStream &, QMatrix4x4 &); +#endif + template <int N, int M> QMatrix4x4 qGenericMatrixToMatrix4x4(const QGenericMatrix<N, M, qreal, float>& matrix) { @@ -989,10 +994,6 @@ QGenericMatrix<N, M, qreal, float> qGenericMatrixFromMatrix4x4(const QMatrix4x4& QT_END_NAMESPACE -#ifndef QT_NO_MATRIX4X4 -Q_DECLARE_METATYPE(QMatrix4x4) -#endif - QT_END_HEADER #endif diff --git a/src/gui/math3d/qquaternion.cpp b/src/gui/math3d/qquaternion.cpp index d9d4160..841a4c0 100644 --- a/src/gui/math3d/qquaternion.cpp +++ b/src/gui/math3d/qquaternion.cpp @@ -571,6 +571,51 @@ QDebug operator<<(QDebug dbg, const QQuaternion &q) #endif +#ifndef QT_NO_DATASTREAM + +/*! + \fn QDataStream &operator<<(QDataStream &stream, const QQuaternion &quaternion) + \relates QQuaternion + + Writes the given \a quaternion to the given \a stream and returns a + reference to the stream. + + \sa {Format of the QDataStream Operators} +*/ + +QDataStream &operator<<(QDataStream &stream, const QQuaternion &quaternion) +{ + stream << double(quaternion.scalar()) << double(quaternion.x()) + << double(quaternion.y()) << double(quaternion.z()); + return stream; +} + +/*! + \fn QDataStream &operator>>(QDataStream &stream, QQuaternion &quaternion) + \relates QQuaternion + + Reads a quaternion from the given \a stream into the given \a quaternion + and returns a reference to the stream. + + \sa {Format of the QDataStream Operators} +*/ + +QDataStream &operator>>(QDataStream &stream, QQuaternion &quaternion) +{ + double scalar, x, y, z; + stream >> scalar; + stream >> x; + stream >> y; + stream >> z; + quaternion.setScalar(qreal(scalar)); + quaternion.setX(qreal(x)); + quaternion.setY(qreal(y)); + quaternion.setZ(qreal(z)); + return stream; +} + +#endif // QT_NO_DATASTREAM + #endif QT_END_NAMESPACE diff --git a/src/gui/math3d/qquaternion.h b/src/gui/math3d/qquaternion.h index 6b24a04..55c871d 100644 --- a/src/gui/math3d/qquaternion.h +++ b/src/gui/math3d/qquaternion.h @@ -324,14 +324,15 @@ inline QVector4D QQuaternion::toVector4D() const Q_GUI_EXPORT QDebug operator<<(QDebug dbg, const QQuaternion &q); #endif +#ifndef QT_NO_DATASTREAM +Q_GUI_EXPORT QDataStream &operator<<(QDataStream &, const QQuaternion &); +Q_GUI_EXPORT QDataStream &operator>>(QDataStream &, QQuaternion &); #endif -QT_END_NAMESPACE - -#ifndef QT_NO_QUATERNION -Q_DECLARE_METATYPE(QQuaternion) #endif +QT_END_NAMESPACE + QT_END_HEADER #endif diff --git a/src/gui/math3d/qvector2d.cpp b/src/gui/math3d/qvector2d.cpp index b492aa8..28f6b7a 100644 --- a/src/gui/math3d/qvector2d.cpp +++ b/src/gui/math3d/qvector2d.cpp @@ -410,6 +410,46 @@ QDebug operator<<(QDebug dbg, const QVector2D &vector) #endif -#endif +#ifndef QT_NO_DATASTREAM + +/*! + \fn QDataStream &operator<<(QDataStream &stream, const QVector2D &vector) + \relates QVector2D + + Writes the given \a vector to the given \a stream and returns a + reference to the stream. + + \sa {Format of the QDataStream Operators} +*/ + +QDataStream &operator<<(QDataStream &stream, const QVector2D &vector) +{ + stream << double(vector.x()) << double(vector.y()); + return stream; +} + +/*! + \fn QDataStream &operator>>(QDataStream &stream, QVector2D &vector) + \relates QVector2D + + Reads a 2D vector from the given \a stream into the given \a vector + and returns a reference to the stream. + + \sa {Format of the QDataStream Operators} +*/ + +QDataStream &operator>>(QDataStream &stream, QVector2D &vector) +{ + double x, y; + stream >> x; + stream >> y; + vector.setX(qreal(x)); + vector.setY(qreal(y)); + return stream; +} + +#endif // QT_NO_DATASTREAM + +#endif // QT_NO_VECTOR2D QT_END_NAMESPACE diff --git a/src/gui/math3d/qvector2d.h b/src/gui/math3d/qvector2d.h index bb62afe..d473c2f 100644 --- a/src/gui/math3d/qvector2d.h +++ b/src/gui/math3d/qvector2d.h @@ -243,14 +243,15 @@ inline QPointF QVector2D::toPointF() const Q_GUI_EXPORT QDebug operator<<(QDebug dbg, const QVector2D &vector); #endif +#ifndef QT_NO_DATASTREAM +Q_GUI_EXPORT QDataStream &operator<<(QDataStream &, const QVector2D &); +Q_GUI_EXPORT QDataStream &operator>>(QDataStream &, QVector2D &); #endif -QT_END_NAMESPACE - -#ifndef QT_NO_VECTOR2D -Q_DECLARE_METATYPE(QVector2D) #endif +QT_END_NAMESPACE + QT_END_HEADER #endif diff --git a/src/gui/math3d/qvector3d.cpp b/src/gui/math3d/qvector3d.cpp index 95550cd..881f47c 100644 --- a/src/gui/math3d/qvector3d.cpp +++ b/src/gui/math3d/qvector3d.cpp @@ -558,6 +558,49 @@ QDebug operator<<(QDebug dbg, const QVector3D &vector) #endif -#endif +#ifndef QT_NO_DATASTREAM + +/*! + \fn QDataStream &operator<<(QDataStream &stream, const QVector3D &vector) + \relates QVector3D + + Writes the given \a vector to the given \a stream and returns a + reference to the stream. + + \sa {Format of the QDataStream Operators} +*/ + +QDataStream &operator<<(QDataStream &stream, const QVector3D &vector) +{ + stream << double(vector.x()) << double(vector.y()) + << double(vector.z()); + return stream; +} + +/*! + \fn QDataStream &operator>>(QDataStream &stream, QVector3D &vector) + \relates QVector3D + + Reads a 3D vector from the given \a stream into the given \a vector + and returns a reference to the stream. + + \sa {Format of the QDataStream Operators} +*/ + +QDataStream &operator>>(QDataStream &stream, QVector3D &vector) +{ + double x, y, z; + stream >> x; + stream >> y; + stream >> z; + vector.setX(qreal(x)); + vector.setY(qreal(y)); + vector.setZ(qreal(z)); + return stream; +} + +#endif // QT_NO_DATASTREAM + +#endif // QT_NO_VECTOR3D QT_END_NAMESPACE diff --git a/src/gui/math3d/qvector3d.h b/src/gui/math3d/qvector3d.h index 873b388..7494dcf 100644 --- a/src/gui/math3d/qvector3d.h +++ b/src/gui/math3d/qvector3d.h @@ -271,14 +271,15 @@ inline QPointF QVector3D::toPointF() const Q_GUI_EXPORT QDebug operator<<(QDebug dbg, const QVector3D &vector); #endif +#ifndef QT_NO_DATASTREAM +Q_GUI_EXPORT QDataStream &operator<<(QDataStream &, const QVector3D &); +Q_GUI_EXPORT QDataStream &operator>>(QDataStream &, QVector3D &); #endif -QT_END_NAMESPACE - -#ifndef QT_NO_VECTOR3D -Q_DECLARE_METATYPE(QVector3D) #endif +QT_END_NAMESPACE + QT_END_HEADER #endif diff --git a/src/gui/math3d/qvector4d.cpp b/src/gui/math3d/qvector4d.cpp index 1f7d921..1a84db6 100644 --- a/src/gui/math3d/qvector4d.cpp +++ b/src/gui/math3d/qvector4d.cpp @@ -509,6 +509,51 @@ QDebug operator<<(QDebug dbg, const QVector4D &vector) #endif -#endif +#ifndef QT_NO_DATASTREAM + +/*! + \fn QDataStream &operator<<(QDataStream &stream, const QVector4D &vector) + \relates QVector4D + + Writes the given \a vector to the given \a stream and returns a + reference to the stream. + + \sa {Format of the QDataStream Operators} +*/ + +QDataStream &operator<<(QDataStream &stream, const QVector4D &vector) +{ + stream << double(vector.x()) << double(vector.y()) + << double(vector.z()) << double(vector.w()); + return stream; +} + +/*! + \fn QDataStream &operator>>(QDataStream &stream, QVector4D &vector) + \relates QVector4D + + Reads a 4D vector from the given \a stream into the given \a vector + and returns a reference to the stream. + + \sa {Format of the QDataStream Operators} +*/ + +QDataStream &operator>>(QDataStream &stream, QVector4D &vector) +{ + double x, y, z, w; + stream >> x; + stream >> y; + stream >> z; + stream >> w; + vector.setX(qreal(x)); + vector.setY(qreal(y)); + vector.setZ(qreal(z)); + vector.setW(qreal(w)); + return stream; +} + +#endif // QT_NO_DATASTREAM + +#endif // QT_NO_VECTOR4D QT_END_NAMESPACE diff --git a/src/gui/math3d/qvector4d.h b/src/gui/math3d/qvector4d.h index dcfd87a..cd61496 100644 --- a/src/gui/math3d/qvector4d.h +++ b/src/gui/math3d/qvector4d.h @@ -276,14 +276,15 @@ inline QPointF QVector4D::toPointF() const Q_GUI_EXPORT QDebug operator<<(QDebug dbg, const QVector4D &vector); #endif +#ifndef QT_NO_DATASTREAM +Q_GUI_EXPORT QDataStream &operator<<(QDataStream &, const QVector4D &); +Q_GUI_EXPORT QDataStream &operator>>(QDataStream &, QVector4D &); #endif -QT_END_NAMESPACE - -#ifndef QT_NO_VECTOR4D -Q_DECLARE_METATYPE(QVector4D) #endif +QT_END_NAMESPACE + QT_END_HEADER #endif diff --git a/src/gui/painting/qdrawutil.cpp b/src/gui/painting/qdrawutil.cpp index bcea571..062c3a9 100644 --- a/src/gui/painting/qdrawutil.cpp +++ b/src/gui/painting/qdrawutil.cpp @@ -1008,8 +1008,7 @@ void qDrawItem(QPainter *p, Qt::GUIStyle gs, ; #ifndef QT_NO_IMAGE_HEURISTIC_MASK } else { // color pixmap, no mask - QString k; - k.sprintf("$qt-drawitem-%llx", pm.cacheKey()); + QString k = QString::fromLatin1("$qt-drawitem-%1").arg(pm.cacheKey()); if (!QPixmapCache::find(k, pm)) { pm = pm.createHeuristicMask(); pm.setMask((QBitmap&)pm); diff --git a/src/gui/painting/qdrawutil.h b/src/gui/painting/qdrawutil.h index 8f6797c..ce07c1f 100644 --- a/src/gui/painting/qdrawutil.h +++ b/src/gui/painting/qdrawutil.h @@ -133,7 +133,7 @@ Q_GUI_EXPORT QT3_SUPPORT void qDrawArrow(QPainter *p, Qt::ArrowType type, Qt::GU const QPalette &pal, bool enabled); #endif -struct Q_GUI_EXPORT QMargins +struct QMargins { inline QMargins(int margin = 0) : top(margin), @@ -151,7 +151,7 @@ struct Q_GUI_EXPORT QMargins int right; }; -struct Q_GUI_EXPORT QTileRules +struct QTileRules { inline QTileRules(Qt::TileRule horizontalRule, Qt::TileRule verticalRule = Qt::Stretch) : horizontal(horizontalRule), vertical(verticalRule) {} @@ -168,8 +168,7 @@ Q_GUI_EXPORT void qDrawBorderPixmap(QPainter *painter, const QRect &sourceRect, const QMargins &sourceMargins, const QTileRules &rules = QTileRules()); - -Q_GUI_EXPORT inline void qDrawBorderPixmap(QPainter *painter, +inline void qDrawBorderPixmap(QPainter *painter, const QRect &target, const QMargins &margins, const QPixmap &pixmap) diff --git a/src/gui/painting/qgraphicssystemfactory.cpp b/src/gui/painting/qgraphicssystemfactory.cpp index b618d8b..ddc66f3 100644 --- a/src/gui/painting/qgraphicssystemfactory.cpp +++ b/src/gui/painting/qgraphicssystemfactory.cpp @@ -64,6 +64,10 @@ QGraphicsSystem *QGraphicsSystemFactory::create(const QString& key) if (system.isEmpty()) { system = QLatin1String("opengl"); } +#elif defined (QT_GRAPHICSSYSTEM_OPENVG) + if (system.isEmpty()) { + system = QLatin1String("openvg"); + } #elif defined (QT_GRAPHICSSYSTEM_RASTER) && !defined(Q_WS_WIN) if (system.isEmpty()) { system = QLatin1String("raster"); diff --git a/src/gui/painting/qpaintengine_raster.cpp b/src/gui/painting/qpaintengine_raster.cpp index 4c35004..e9ff752 100644 --- a/src/gui/painting/qpaintengine_raster.cpp +++ b/src/gui/painting/qpaintengine_raster.cpp @@ -110,10 +110,6 @@ extern bool qt_scaleForTransform(const QTransform &transform, qreal *scale); // #define qt_swap_int(x, y) { int tmp = (x); (x) = (y); (y) = tmp; } #define qt_swap_qreal(x, y) { qreal tmp = (x); (x) = (y); (y) = tmp; } -#ifdef Q_WS_WIN -static bool qt_enable_16bit_colors = false; -#endif - // #define QT_DEBUG_DRAW #ifdef QT_DEBUG_DRAW void dumpClip(int width, int height, QClipData *clip); @@ -4661,104 +4657,6 @@ static int qt_intersect_spans(QT_FT_Span *spans, int numSpans, return n; } -/* - \internal - Clip spans to \a{clip}-region. - Returns number of unclipped spans -*/ -static int qt_intersect_spans(QT_FT_Span *spans, int numSpans, - int *currSpan, - QT_FT_Span *outSpans, int maxOut, - const QRegion &clip) -{ - const QVector<QRect> rects = clip.rects(); - const int numRects = rects.size(); - - int r = 0; - short miny, minx, maxx, maxy; - { - const QRect &rect = rects[0]; - miny = rect.top(); - minx = rect.left(); - maxx = rect.right(); - maxy = rect.bottom(); - } - - // TODO: better mapping of currY and startRect - - int n = 0; - int i = *currSpan; - int currY = spans[i].y; - while (i < numSpans) { - - if (spans[i].y != currY && r != 0) { - currY = spans[i].y; - r = 0; - const QRect &rect = rects[r]; - miny = rect.top(); - minx = rect.left(); - maxx = rect.right(); - maxy = rect.bottom(); - } - - if (spans[i].y < miny) { - ++i; - continue; - } - - if (spans[i].y > maxy || spans[i].x > maxx) { - if (++r >= numRects) { - ++i; - continue; - } - - const QRect &rect = rects[r]; - miny = rect.top(); - minx = rect.left(); - maxx = rect.right(); - maxy = rect.bottom(); - continue; - } - - if (spans[i].x + spans[i].len <= minx) { - ++i; - continue; - } - - outSpans[n].y = spans[i].y; - outSpans[n].coverage = spans[i].coverage; - - if (spans[i].x < minx) { - const ushort cutaway = minx - spans[i].x; - outSpans[n].len = qMin(spans[i].len - cutaway, maxx - minx + 1); - outSpans[n].x = minx; - if (outSpans[n].len == spans[i].len - cutaway) { - ++i; - } else { - // span wider than current rect - spans[i].len -= outSpans[n].len + cutaway; - spans[i].x = maxx + 1; - } - } else { // span starts inside current rect - outSpans[n].x = spans[i].x; - outSpans[n].len = qMin(spans[i].len, - ushort(maxx - spans[i].x + 1)); - if (outSpans[n].len == spans[i].len) { - ++i; - } else { - // span wider than current rect - spans[i].len -= outSpans[n].len; - spans[i].x = maxx + 1; - } - } - - if (++n >= maxOut) - break; - } - - *currSpan = i; - return n; -} static void qt_span_fill_clipRect(int count, const QSpan *spans, void *userData) diff --git a/src/gui/painting/qpdf.cpp b/src/gui/painting/qpdf.cpp index 178d519..6735ee6 100644 --- a/src/gui/painting/qpdf.cpp +++ b/src/gui/painting/qpdf.cpp @@ -968,8 +968,7 @@ QPdfBaseEngine::QPdfBaseEngine(QPdfBaseEnginePrivate &dd, PaintEngineFeatures f) void QPdfBaseEngine::drawPoints (const QPointF *points, int pointCount) { - Q_D(QPdfBaseEngine); - if (!points || !d->hasPen) + if (!points) return; QPainterPath p; @@ -999,6 +998,12 @@ void QPdfBaseEngine::drawRects (const QRectF *rects, int rectCount) return; Q_D(QPdfBaseEngine); + if (d->useAlphaEngine) { + QAlphaPaintEngine::drawRects(rects, rectCount); + if (!continueCall()) + return; + } + if (d->clipEnabled && d->allClipped) return; if (!d->hasPen && !d->hasBrush) diff --git a/src/gui/painting/qprinter.cpp b/src/gui/painting/qprinter.cpp index 8823b18..411b74d 100644 --- a/src/gui/painting/qprinter.cpp +++ b/src/gui/painting/qprinter.cpp @@ -793,7 +793,8 @@ QPrinter::OutputFormat QPrinter::outputFormat() const -/*! \reimp */ +/*! \internal +*/ int QPrinter::devType() const { return QInternal::Printer; diff --git a/src/gui/painting/qregion_win.cpp b/src/gui/painting/qregion_win.cpp index 873439e..249b1a6 100644 --- a/src/gui/painting/qregion_win.cpp +++ b/src/gui/painting/qregion_win.cpp @@ -59,7 +59,7 @@ HRGN qt_tryCreateRegion(QRegion::RegionType type, int left, int top, int right, { const int tries = 10; for (int i = 0; i < tries; ++i) { - HRGN region; + HRGN region = 0; switch (type) { case QRegion::Rectangle: region = CreateRectRgn(left, top, right, bottom); diff --git a/src/gui/painting/qwindowsurface_qws.cpp b/src/gui/painting/qwindowsurface_qws.cpp index 639bc92..d5a5c20 100644 --- a/src/gui/painting/qwindowsurface_qws.cpp +++ b/src/gui/painting/qwindowsurface_qws.cpp @@ -421,7 +421,8 @@ QWSWindowSurface::QWSWindowSurface(QWidget *widget) QWSWindowSurface::~QWSWindowSurface() { #ifdef Q_BACKINGSTORE_SUBSURFACES - winIdToSurfaceMap()->remove(winId()); + if (d_ptr->winId) + winIdToSurfaceMap()->remove(d_ptr->winId); #endif delete d_ptr; diff --git a/src/gui/styles/gtksymbols.cpp b/src/gui/styles/gtksymbols.cpp index f553d27..c2c7876 100644 --- a/src/gui/styles/gtksymbols.cpp +++ b/src/gui/styles/gtksymbols.cpp @@ -68,6 +68,7 @@ #include <QtGui/QStatusBar> #include <QtGui/QMenuBar> #include <QtGui/QToolBar> +#include <QtGui/QToolButton> #include <QtGui/QX11Info> #include <X11/Xlib.h> @@ -166,6 +167,7 @@ Ptr_gtk_file_filter_set_name QGtk::gtk_file_filter_set_name = 0; Ptr_gtk_file_filter_add_pattern QGtk::gtk_file_filter_add_pattern = 0; Ptr_gtk_file_chooser_add_filter QGtk::gtk_file_chooser_add_filter = 0; Ptr_gtk_file_chooser_set_filter QGtk::gtk_file_chooser_set_filter = 0; +Ptr_gtk_file_chooser_get_filter QGtk::gtk_file_chooser_get_filter = 0; Ptr_gtk_file_chooser_dialog_new QGtk::gtk_file_chooser_dialog_new = 0; Ptr_gtk_file_chooser_set_current_folder QGtk::gtk_file_chooser_set_current_folder = 0; Ptr_gtk_file_chooser_get_filename QGtk::gtk_file_chooser_get_filename = 0; @@ -220,6 +222,7 @@ static void resolveGtk() QGtk::gtk_file_filter_add_pattern = (Ptr_gtk_file_filter_add_pattern)libgtk.resolve("gtk_file_filter_add_pattern"); QGtk::gtk_file_chooser_add_filter = (Ptr_gtk_file_chooser_add_filter)libgtk.resolve("gtk_file_chooser_add_filter"); QGtk::gtk_file_chooser_set_filter = (Ptr_gtk_file_chooser_set_filter)libgtk.resolve("gtk_file_chooser_set_filter"); + QGtk::gtk_file_chooser_get_filter = (Ptr_gtk_file_chooser_get_filter)libgtk.resolve("gtk_file_chooser_get_filter"); QGtk::gtk_file_chooser_dialog_new = (Ptr_gtk_file_chooser_dialog_new)libgtk.resolve("gtk_file_chooser_dialog_new"); QGtk::gtk_file_chooser_set_current_folder = (Ptr_gtk_file_chooser_set_current_folder)libgtk.resolve("gtk_file_chooser_set_current_folder"); QGtk::gtk_file_chooser_get_filename = (Ptr_gtk_file_chooser_get_filename)libgtk.resolve("gtk_file_chooser_get_filename"); @@ -633,6 +636,20 @@ GtkStyle* QGtk::gtkStyle(const QString &path) return 0; } +static void update_toolbar_style(GtkWidget *gtkToolBar, GParamSpec *pspec, gpointer user_data) +{ + GtkToolbarStyle toolbar_style = GTK_TOOLBAR_ICONS; + g_object_get(gtkToolBar, "toolbar-style", &toolbar_style, NULL); + QWidgetList widgets = QApplication::allWidgets(); + for (int i = 0; i < widgets.size(); ++i) { + QWidget *widget = widgets.at(i); + if (qobject_cast<QToolButton*>(widget)) { + QEvent event(QEvent::StyleChange); + QApplication::sendEvent(widget, &event); + } + } +} + void QGtk::initGtkWidgets() { // From gtkmain.c @@ -679,6 +696,7 @@ void QGtk::initGtkWidgets() add_widget(QGtk::gtk_spin_button_new((GtkAdjustment*) (QGtk::gtk_adjustment_new(1, 0, 1, 0, 0, 0)), 0.1, 3)); GtkWidget *toolbar = QGtk::gtk_toolbar_new(); + g_signal_connect (toolbar, "notify::toolbar-style", G_CALLBACK (update_toolbar_style), toolbar); QGtk::gtk_toolbar_insert((GtkToolbar*)toolbar, QGtk::gtk_separator_tool_item_new(), -1); add_widget(toolbar); init_gtk_treeview(); @@ -720,7 +738,8 @@ extern QStringList qt_make_filter_list(const QString &filter); static void setupGtkFileChooser(GtkWidget* gtkFileChooser, QWidget *parent, const QString &dir, const QString &filter, QString *selectedFilter, - QFileDialog::Options options, bool isSaveDialog = false) + QFileDialog::Options options, bool isSaveDialog = false, + QMap<GtkFileFilter *, QString> *filterMap = 0) { g_object_set(gtkFileChooser, "do-overwrite-confirmation", gboolean(!(options & QFileDialog::DontConfirmOverwrite)), NULL); g_object_set(gtkFileChooser, "local_only", gboolean(true), NULL); @@ -735,6 +754,8 @@ static void setupGtkFileChooser(GtkWidget* gtkFileChooser, QWidget *parent, foreach (const QString &fileExtension, extensions) { QGtk::gtk_file_filter_add_pattern (gtkFilter, qPrintable(fileExtension)); } + if (filterMap) + filterMap->insert(gtkFilter, rawfilter); QGtk::gtk_file_chooser_add_filter((GtkFileChooser*)gtkFileChooser, gtkFilter); if (selectedFilter && (rawfilter == *selectedFilter)) QGtk::gtk_file_chooser_set_filter((GtkFileChooser*)gtkFileChooser, gtkFilter); @@ -771,7 +792,7 @@ static void setupGtkFileChooser(GtkWidget* gtkFileChooser, QWidget *parent, QString QGtk::openFilename(QWidget *parent, const QString &caption, const QString &dir, const QString &filter, QString *selectedFilter, QFileDialog::Options options) { - + QMap<GtkFileFilter *, QString> filterMap; GtkWidget *gtkFileChooser = QGtk::gtk_file_chooser_dialog_new (qPrintable(caption), NULL, GTK_FILE_CHOOSER_ACTION_OPEN, @@ -779,7 +800,7 @@ QString QGtk::openFilename(QWidget *parent, const QString &caption, const QStrin GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); - setupGtkFileChooser(gtkFileChooser, parent, dir, filter, selectedFilter, options); + setupGtkFileChooser(gtkFileChooser, parent, dir, filter, selectedFilter, options, false, &filterMap); QWidget modal_widget; modal_widget.setAttribute(Qt::WA_NoChildEventsForParent, true); @@ -791,6 +812,10 @@ QString QGtk::openFilename(QWidget *parent, const QString &caption, const QStrin char *gtk_filename = QGtk::gtk_file_chooser_get_filename ((GtkFileChooser*)gtkFileChooser); filename = QString::fromUtf8(gtk_filename); g_free (gtk_filename); + if (selectedFilter) { + GtkFileFilter *gtkFilter = QGtk::gtk_file_chooser_get_filter ((GtkFileChooser*)gtkFileChooser); + *selectedFilter = filterMap.value(gtkFilter); + } } QApplicationPrivate::leaveModal(&modal_widget); @@ -801,6 +826,7 @@ QString QGtk::openFilename(QWidget *parent, const QString &caption, const QStrin QString QGtk::openDirectory(QWidget *parent, const QString &caption, const QString &dir, QFileDialog::Options options) { + QMap<GtkFileFilter *, QString> filterMap; GtkWidget *gtkFileChooser = QGtk::gtk_file_chooser_dialog_new (qPrintable(caption), NULL, GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, @@ -830,6 +856,7 @@ QStringList QGtk::openFilenames(QWidget *parent, const QString &caption, const Q QString *selectedFilter, QFileDialog::Options options) { QStringList filenames; + QMap<GtkFileFilter *, QString> filterMap; GtkWidget *gtkFileChooser = QGtk::gtk_file_chooser_dialog_new (qPrintable(caption), NULL, GTK_FILE_CHOOSER_ACTION_OPEN, @@ -837,7 +864,7 @@ QStringList QGtk::openFilenames(QWidget *parent, const QString &caption, const Q GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); - setupGtkFileChooser(gtkFileChooser, parent, dir, filter, selectedFilter, options); + setupGtkFileChooser(gtkFileChooser, parent, dir, filter, selectedFilter, options, false, &filterMap); g_object_set(gtkFileChooser, "select-multiple", gboolean(true), NULL); QWidget modal_widget; @@ -850,6 +877,10 @@ QStringList QGtk::openFilenames(QWidget *parent, const QString &caption, const Q for (GSList *iterator = gtk_file_names ; iterator; iterator = iterator->next) filenames << QString::fromUtf8((const char*)iterator->data); g_slist_free(gtk_file_names); + if (selectedFilter) { + GtkFileFilter *gtkFilter = QGtk::gtk_file_chooser_get_filter ((GtkFileChooser*)gtkFileChooser); + *selectedFilter = filterMap.value(gtkFilter); + } } QApplicationPrivate::leaveModal(&modal_widget); @@ -860,13 +891,14 @@ QStringList QGtk::openFilenames(QWidget *parent, const QString &caption, const Q QString QGtk::saveFilename(QWidget *parent, const QString &caption, const QString &dir, const QString &filter, QString *selectedFilter, QFileDialog::Options options) { + QMap<GtkFileFilter *, QString> filterMap; GtkWidget *gtkFileChooser = QGtk::gtk_file_chooser_dialog_new (qPrintable(caption), NULL, GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL); - setupGtkFileChooser(gtkFileChooser, parent, dir, filter, selectedFilter, options, true); + setupGtkFileChooser(gtkFileChooser, parent, dir, filter, selectedFilter, options, true, &filterMap); QWidget modal_widget; modal_widget.setAttribute(Qt::WA_NoChildEventsForParent, true); @@ -878,6 +910,10 @@ QString QGtk::saveFilename(QWidget *parent, const QString &caption, const QStrin char *gtk_filename = QGtk::gtk_file_chooser_get_filename ((GtkFileChooser*)gtkFileChooser); filename = QString::fromUtf8(gtk_filename); g_free (gtk_filename); + if (selectedFilter) { + GtkFileFilter *gtkFilter = QGtk::gtk_file_chooser_get_filter ((GtkFileChooser*)gtkFileChooser); + *selectedFilter = filterMap.value(gtkFilter); + } } QApplicationPrivate::leaveModal(&modal_widget); diff --git a/src/gui/styles/gtksymbols_p.h b/src/gui/styles/gtksymbols_p.h index b0195d2..18c6dc5 100644 --- a/src/gui/styles/gtksymbols_p.h +++ b/src/gui/styles/gtksymbols_p.h @@ -162,6 +162,7 @@ typedef void (*Ptr_gtk_file_filter_set_name)(GtkFileFilter *, const gchar *); typedef void (*Ptr_gtk_file_filter_add_pattern)(GtkFileFilter *filter, const gchar *pattern); typedef void (*Ptr_gtk_file_chooser_add_filter)(GtkFileChooser *chooser, GtkFileFilter *filter); typedef void (*Ptr_gtk_file_chooser_set_filter)(GtkFileChooser *chooser, GtkFileFilter *filter); +typedef GtkFileFilter* (*Ptr_gtk_file_chooser_get_filter)(GtkFileChooser *chooser); typedef gchar* (*Ptr_gtk_file_chooser_get_filename)(GtkFileChooser *chooser); typedef GSList* (*Ptr_gtk_file_chooser_get_filenames)(GtkFileChooser *chooser); typedef GtkWidget* (*Ptr_gtk_file_chooser_dialog_new)(const gchar *title, @@ -302,6 +303,7 @@ public: static Ptr_gtk_file_filter_add_pattern gtk_file_filter_add_pattern; static Ptr_gtk_file_chooser_add_filter gtk_file_chooser_add_filter; static Ptr_gtk_file_chooser_set_filter gtk_file_chooser_set_filter; + static Ptr_gtk_file_chooser_get_filter gtk_file_chooser_get_filter; static Ptr_gtk_file_chooser_dialog_new gtk_file_chooser_dialog_new; static Ptr_gtk_file_chooser_set_current_folder gtk_file_chooser_set_current_folder; static Ptr_gtk_file_chooser_get_filename gtk_file_chooser_get_filename; diff --git a/src/gui/styles/qcleanlooksstyle.cpp b/src/gui/styles/qcleanlooksstyle.cpp index 01f19c6..8f88781 100644 --- a/src/gui/styles/qcleanlooksstyle.cpp +++ b/src/gui/styles/qcleanlooksstyle.cpp @@ -1745,10 +1745,9 @@ void QCleanlooksStyle::drawControl(ControlElement element, const QStyleOption *o int maxWidth = rect.width() - 4; int minWidth = 4; - qint64 progress = (qint64)qMax(bar->progress, bar->minimum); // workaround for bug in QProgressBar - double vc6_workaround = ((progress - qint64(bar->minimum)) / qMax(double(1.0), double(qint64(bar->maximum) - qint64(bar->minimum))) * maxWidth); - int progressBarWidth = (int(vc6_workaround) > minWidth ) ? int(vc6_workaround) : minWidth; - int width = indeterminate ? maxWidth : progressBarWidth; + qreal progress = qMax(bar->progress, bar->minimum); // workaround for bug in QProgressBar + int progressBarWidth = (progress - bar->minimum) * qreal(maxWidth) / qMax(qreal(1.0), qreal(bar->maximum) - bar->minimum); + int width = indeterminate ? maxWidth : qMax(minWidth, progressBarWidth); bool reverse = (!vertical && (bar->direction == Qt::RightToLeft)) || vertical; if (inverted) diff --git a/src/gui/styles/qcommonstyle.cpp b/src/gui/styles/qcommonstyle.cpp index 7b8b75e..308a0b8 100644 --- a/src/gui/styles/qcommonstyle.cpp +++ b/src/gui/styles/qcommonstyle.cpp @@ -84,6 +84,8 @@ #ifdef Q_WS_X11 # include <private/qt_x11_p.h> +#elif defined(Q_WS_MAC) +# include <private/qt_cocoa_helpers_mac_p.h> #endif QT_BEGIN_NAMESPACE @@ -840,6 +842,11 @@ static void drawArrow(const QStyle *style, const QStyleOptionToolButton *toolbut #ifdef Q_WS_X11 // These functions are used to parse the X11 freedesktop icon spec +static int kdeVersion() +{ + static int kdeVersion = qgetenv("KDE_SESSION_VERSION").toInt(); + return kdeVersion; +} void QCommonStylePrivate::lookupIconTheme() const { @@ -858,8 +865,7 @@ void QCommonStylePrivate::lookupIconTheme() const QFileInfo fileInfo(QLatin1String("/usr/share/icons/default.kde")); QDir dir(fileInfo.canonicalFilePath()); - int kdeVersion = qgetenv("KDE_SESSION_VERSION").toInt(); - QString kdeDefault = kdeVersion >= 4 ? QString::fromLatin1("oxygen") : QString::fromLatin1("crystalsvg"); + QString kdeDefault = kdeVersion() >= 4 ? QString::fromLatin1("oxygen") : QString::fromLatin1("crystalsvg"); QString defaultTheme = fileInfo.exists() ? dir.dirName() : kdeDefault; QSettings settings(QApplicationPrivate::kdeHome() + QLatin1String("/share/config/kdeglobals"), QSettings::IniFormat); @@ -997,6 +1003,29 @@ QIcon QCommonStylePrivate::createIcon(const QString &name) const icon.addPixmap(findIcon(32, name)); return icon; } +/*!internal + +Checks if you are running KDE and looks up the toolbar +from the KDE configuration file + +*/ +int QCommonStylePrivate::lookupToolButtonStyle() const +{ + int result = Qt::ToolButtonIconOnly; + if (kdeVersion() >= 4) { + QSettings settings(QApplicationPrivate::kdeHome() + + QLatin1String("/share/config/kdeglobals"), QSettings::IniFormat); + settings.beginGroup(QLatin1String("Toolbar style")); + QString toolbarStyle = settings.value(QLatin1String("ToolButtonStyle"), QLatin1String("TextBesideIcon")).toString(); + if (toolbarStyle == QLatin1String("TextBesideIcon")) + result = Qt::ToolButtonTextBesideIcon; + else if (toolbarStyle == QLatin1String("TextOnly")) + result = Qt::ToolButtonTextOnly; + else if (toolbarStyle == QLatin1String("TextUnderIcon")) + result = Qt::ToolButtonTextUnderIcon; + } + return result; +} #endif //Q_WS_X11 @@ -1155,8 +1184,14 @@ void QCommonStylePrivate::viewItemDrawText(QPainter *p, const QStyleOptionViewIt } } -/* Set sizehint to false to layout the elements inside opt->rect. Set sizehint to true to ignore - opt->rect and return rectangles in infinite space */ +/*! \internal + compute the position for the different component of an item (pixmap, text, checkbox) + + Set sizehint to false to layout the elements inside opt->rect. Set sizehint to true to ignore + opt->rect and return rectangles in infinite space + + Code duplicated in QItemDelegate::doLayout +*/ void QCommonStylePrivate::viewItemLayout(const QStyleOptionViewItemV4 *opt, QRect *checkRect, QRect *pixmapRect, QRect *textRect, bool sizehint) const { @@ -1177,8 +1212,10 @@ void QCommonStylePrivate::viewItemLayout(const QStyleOptionViewItemV4 *opt, QRe int y = opt->rect.top(); int w, h; - if (textRect->height() == 0 && !hasPixmap) + if (textRect->height() == 0 && (!hasPixmap || !sizehint)) { + //if there is no text, we still want to have a decent height for the item sizeHint and the editor size textRect->setHeight(opt->fontMetrics.height()); + } QSize pm(0, 0); if (hasPixmap) { @@ -4841,7 +4878,14 @@ int QCommonStyle::pixelMetric(PixelMetric m, const QStyleOption *opt, const QWid ret = int(QStyleHelper::dpiScaled(13.)); break; case PM_MessageBoxIconSize: - ret = int(QStyleHelper::dpiScaled(32.)); +#ifdef Q_WS_MAC + if (QApplication::desktopSettingsAware()) { + ret = 64; // No DPI scaling, it's handled elsewhere. + } else +#endif + { + ret = int(QStyleHelper::dpiScaled(32.)); + } break; case PM_TextCursorWidth: ret = 1; @@ -5290,6 +5334,16 @@ int QCommonStyle::styleHint(StyleHint sh, const QStyleOption *opt, const QWidget case SH_DockWidget_ButtonsHaveFrame: ret = true; break; + case SH_ToolButtonStyle: + ret = Qt::ToolButtonIconOnly; +#ifdef Q_WS_X11 + { + Q_D(const QCommonStyle); + static int buttonStyle = d->lookupToolButtonStyle(); + return buttonStyle; + } +#endif + break; default: ret = 0; break; @@ -5729,9 +5783,9 @@ QIcon QCommonStyle::standardIconImplementation(StandardPixmap standardIcon, cons const QWidget *widget) const { QIcon icon; -#ifdef Q_WS_X11 - Q_D(const QCommonStyle); if (QApplication::desktopSettingsAware()) { +#ifdef Q_WS_X11 + Q_D(const QCommonStyle); d->lookupIconTheme(); QPixmap pixmap; switch (standardIcon) { @@ -5750,6 +5804,7 @@ QIcon QCommonStyle::standardIconImplementation(StandardPixmap standardIcon, cons case SP_MessageBoxWarning: { icon = d->createIcon(QLatin1String("dialog-warning.png")); + icon = d->createIcon(QLatin1String("dialog-warning.png")); if (icon.isNull()) icon = d->createIcon(QLatin1String("messagebox_warning.png")); break; @@ -5975,8 +6030,101 @@ QIcon QCommonStyle::standardIconImplementation(StandardPixmap standardIcon, cons } if (!icon.isNull()) return icon; +#elif defined(Q_WS_MAC) + OSType iconType = 0; + switch (standardIcon) { + case QStyle::SP_MessageBoxQuestion: + case QStyle::SP_MessageBoxInformation: + case QStyle::SP_MessageBoxWarning: + case QStyle::SP_MessageBoxCritical: + iconType = kGenericApplicationIcon; + break; + case SP_DesktopIcon: + iconType = kDesktopIcon; + break; + case SP_TrashIcon: + iconType = kTrashIcon; + break; + case SP_ComputerIcon: + iconType = kComputerIcon; + break; + case SP_DriveFDIcon: + iconType = kGenericFloppyIcon; + break; + case SP_DriveHDIcon: + iconType = kGenericHardDiskIcon; + break; + case SP_DriveCDIcon: + case SP_DriveDVDIcon: + iconType = kGenericCDROMIcon; + break; + case SP_DriveNetIcon: + iconType = kGenericNetworkIcon; + break; + case SP_DirOpenIcon: + iconType = kOpenFolderIcon; + break; + case SP_DirClosedIcon: + case SP_DirLinkIcon: + iconType = kGenericFolderIcon; + break; + case SP_FileLinkIcon: + case SP_FileIcon: + iconType = kGenericDocumentIcon; + break; + case SP_DirIcon: { + // A rather special case + QIcon closeIcon = QStyle::standardIcon(SP_DirClosedIcon, option, widget); + QIcon openIcon = QStyle::standardIcon(SP_DirOpenIcon, option, widget); + closeIcon.addPixmap(openIcon.pixmap(16, 16), QIcon::Normal, QIcon::On); + closeIcon.addPixmap(openIcon.pixmap(32, 32), QIcon::Normal, QIcon::On); + closeIcon.addPixmap(openIcon.pixmap(64, 64), QIcon::Normal, QIcon::On); + closeIcon.addPixmap(openIcon.pixmap(128, 128), QIcon::Normal, QIcon::On); + return closeIcon; } -#endif//Q_WS_X11 + case SP_TitleBarNormalButton: + case SP_TitleBarCloseButton: { + QIcon titleBarIcon; + if (standardIcon == SP_TitleBarCloseButton) { + titleBarIcon.addFile(QLatin1String(":/trolltech/styles/macstyle/images/closedock-16.png")); + titleBarIcon.addFile(QLatin1String(":/trolltech/styles/macstyle/images/closedock-down-16.png"), QSize(16, 16), QIcon::Normal, QIcon::On); + } else { + titleBarIcon.addFile(QLatin1String(":/trolltech/styles/macstyle/images/dockdock-16.png")); + titleBarIcon.addFile(QLatin1String(":/trolltech/styles/macstyle/images/dockdock-down-16.png"), QSize(16, 16), QIcon::Normal, QIcon::On); + } + return titleBarIcon; + } + default: + break; + } + if (iconType != 0) { + QIcon retIcon; + IconRef icon; + IconRef overlayIcon = 0; + if (iconType != kGenericApplicationIcon) { + GetIconRef(kOnSystemDisk, kSystemIconsCreator, iconType, &icon); + } else { + FSRef fsRef; + ProcessSerialNumber psn = { 0, kCurrentProcess }; + GetProcessBundleLocation(&psn, &fsRef); + GetIconRefFromFileInfo(&fsRef, 0, 0, 0, 0, kIconServicesNormalUsageFlag, &icon, 0); + if (standardIcon == SP_MessageBoxCritical) { + overlayIcon = icon; + GetIconRef(kOnSystemDisk, kSystemIconsCreator, kAlertCautionIcon, &icon); + } + } + if (icon) { + qt_mac_constructQIconFromIconRef(icon, overlayIcon, &retIcon, standardIcon); + ReleaseIconRef(icon); + } + if (overlayIcon) + ReleaseIconRef(overlayIcon); + return retIcon; + } + +#endif //Q_WS_X11 || Q_WS_MAC + } + switch (standardIcon) { #ifndef QT_NO_IMAGEFORMAT_PNG diff --git a/src/gui/styles/qcommonstyle_p.h b/src/gui/styles/qcommonstyle_p.h index 27ebc05..f2af5b2 100644 --- a/src/gui/styles/qcommonstyle_p.h +++ b/src/gui/styles/qcommonstyle_p.h @@ -126,6 +126,7 @@ public: //icon detection on X11 #ifdef Q_WS_X11 void lookupIconTheme() const; + int lookupToolButtonStyle() const; QIcon createIcon(const QString &) const; QPixmap findIcon(int size, const QString &) const; QPixmap findIconHelper(int size, const QString &, const QString &, QStringList &visited) const; diff --git a/src/gui/styles/qgtkstyle.cpp b/src/gui/styles/qgtkstyle.cpp index 67586ac..660b4c3 100644 --- a/src/gui/styles/qgtkstyle.cpp +++ b/src/gui/styles/qgtkstyle.cpp @@ -70,6 +70,7 @@ #include <qpixmapcache.h> #undef signals // Collides with GTK stymbols #include "qgtkpainter_p.h" +#include "qstylehelper_p.h" #include <private/qcleanlooksstyle_p.h> @@ -208,17 +209,6 @@ static GdkColor fromQColor(const QColor &color) return retval; } -// Note this is different from uniqueName as used in QGtkPainter -static QString uniqueName(const QString &key, const QStyleOption *option, const QSize &size) -{ - QString tmp; - const QStyleOptionComplex *complexOption = qstyleoption_cast<const QStyleOptionComplex *>(option); - tmp.sprintf("%s-%d-%d-%d-%lld-%dx%d", key.toLatin1().constData(), uint(option->state), - option->direction, complexOption ? uint(complexOption->activeSubControls) : uint(0), - option->palette.cacheKey(), size.width(), size.height()); - return tmp; -} - /*! \class QGtkStyle \brief The QGtkStyle class provides a widget style rendered by GTK+ @@ -609,6 +599,26 @@ int QGtkStyle::styleHint(StyleHint hint, const QStyleOption *option, const QWidg break; + case SH_ToolButtonStyle: + { + if (QGtk::isKDE4Session()) + return QCleanlooksStyle::styleHint(hint, option, widget, returnData); + GtkWidget *gtkToolbar = QGtk::gtkWidget(QLS("GtkToolbar")); + GtkToolbarStyle toolbar_style = GTK_TOOLBAR_ICONS; + g_object_get(gtkToolbar, "toolbar-style", &toolbar_style, NULL); + switch (toolbar_style) { + case GTK_TOOLBAR_TEXT: + return Qt::ToolButtonTextOnly; + case GTK_TOOLBAR_BOTH: + return Qt::ToolButtonTextUnderIcon; + case GTK_TOOLBAR_BOTH_HORIZ: + return Qt::ToolButtonTextBesideIcon; + case GTK_TOOLBAR_ICONS: + default: + return Qt::ToolButtonIconOnly; + } + } + break; case SH_SpinControls_DisableOnBounds: return int(true); @@ -2065,8 +2075,8 @@ void QGtkStyle::drawControl(ControlElement element, } if (vertical) rect = QRect(rect.left(), rect.top(), rect.height(), rect.width()); // flip width and height - const int progressIndicatorPos = static_cast<int>((bar->progress - qint64(bar->minimum)) / - qMax(double(1.0), double(qint64(bar->maximum) - qint64(bar->minimum))) * rect.width()); + const int progressIndicatorPos = (bar->progress - qreal(bar->minimum)) * rect.width() / + qMax(qreal(1.0), qreal(bar->maximum) - bar->minimum); if (progressIndicatorPos >= 0 && progressIndicatorPos <= rect.width()) leftRect = QRect(rect.left(), rect.top(), progressIndicatorPos, rect.height()); if (vertical) diff --git a/src/gui/styles/qmacstyle_mac.mm b/src/gui/styles/qmacstyle_mac.mm index c08009b..2f93034 100644 --- a/src/gui/styles/qmacstyle_mac.mm +++ b/src/gui/styles/qmacstyle_mac.mm @@ -558,7 +558,6 @@ QT_END_INCLUDE_NAMESPACE External functions *****************************************************************************/ extern CGContextRef qt_mac_cg_context(const QPaintDevice *); //qpaintdevice_mac.cpp -extern QPixmap qt_mac_convert_iconref(const IconRef, int, int); //qpixmap_mac.cpp extern QRegion qt_mac_convert_mac_region(HIShapeRef); //qregion_mac.cpp void qt_mac_dispose_rgn(RgnHandle r); //qregion_mac.cpp extern QPaintDevice *qt_mac_safe_pdev; //qapplication_mac.cpp @@ -1871,24 +1870,23 @@ QPixmap QMacStylePrivate::generateBackgroundPattern() const Fills the given \a rect with the pattern stored in \a brush. As an optimization, HIThemeSetFill us used directly if we are filling with the standard background. */ -void qt_mac_fill_background(QPainter *painter, const QRegion &rgn, const QPoint &offset, const QBrush &brush) +void qt_mac_fill_background(QPainter *painter, const QRegion &rgn, const QBrush &brush) { QPoint dummy; const QPaintDevice *target = painter->device(); const QPaintDevice *redirected = QPainter::redirected(target, &dummy); const bool usePainter = redirected && redirected != target; - const QRegion translated = rgn.translated(offset); if (!usePainter && qt_mac_backgroundPattern && qt_mac_backgroundPattern->cacheKey() == brush.texture().cacheKey()) { - painter->setClipRegion(translated); + painter->setClipRegion(rgn); CGContextRef cg = qt_mac_cg_context(target); CGContextSaveGState(cg); HIThemeSetFill(kThemeBrushDialogBackgroundActive, 0, cg, kHIThemeOrientationInverted); - const QVector<QRect> &rects = translated.rects(); + const QVector<QRect> &rects = rgn.rects(); for (int i = 0; i < rects.size(); ++i) { const QRect rect(rects.at(i)); // Anchor the pattern to the top so it stays put when the window is resized. @@ -1899,8 +1897,8 @@ void qt_mac_fill_background(QPainter *painter, const QRegion &rgn, const QPoint CGContextRestoreGState(cg); } else { - const QRect rect(translated.boundingRect()); - painter->setClipRegion(translated); + const QRect rect(rgn.boundingRect()); + painter->setClipRegion(rgn); painter->drawTiledPixmap(rect, brush.texture(), rect.topLeft()); } } @@ -2304,9 +2302,6 @@ int QMacStyle::pixelMetric(PixelMetric metric, const QStyleOption *opt, const QW case PM_ToolBarItemSpacing: ret = 4; break; - case PM_MessageBoxIconSize: - ret = 64; - break; case PM_SplitterWidth: ret = qMax(7, QApplication::globalStrut().width()); break; @@ -3362,6 +3357,9 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter } proxy()->drawItemPixmap(p, pr, Qt::AlignCenter, pixmap); break; } + default: + Q_ASSERT(false); + break; } if (needText) { @@ -5856,76 +5854,12 @@ bool QMacStyle::event(QEvent *e) return false; } -void qt_mac_constructQIconFromIconRef(const IconRef icon, const IconRef overlayIcon, QIcon *retIcon, QStyle::StandardPixmap standardIcon = QStyle::SP_CustomBase) -{ - int size = 16; - while (size <= 128) { - - const QString cacheKey = QLatin1String("qt_mac_constructQIconFromIconRef") + QString::number(standardIcon) + QString::number(size); - QPixmap mainIcon; - if (standardIcon >= QStyle::SP_CustomBase) { - mainIcon = qt_mac_convert_iconref(icon, size, size); - } else if (QPixmapCache::find(cacheKey, mainIcon) == false) { - mainIcon = qt_mac_convert_iconref(icon, size, size); - QPixmapCache::insert(cacheKey, mainIcon); - } - - if (overlayIcon) { - int littleSize = size / 2; - QPixmap overlayPix = qt_mac_convert_iconref(overlayIcon, littleSize, littleSize); - QPainter painter(&mainIcon); - painter.drawPixmap(size - littleSize, size - littleSize, overlayPix); - } - - retIcon->addPixmap(mainIcon); - size += size; // 16 -> 32 -> 64 -> 128 - } -} - QIcon QMacStyle::standardIconImplementation(StandardPixmap standardIcon, const QStyleOption *opt, const QWidget *widget) const { - OSType iconType = 0; switch (standardIcon) { - case QStyle::SP_MessageBoxQuestion: - case QStyle::SP_MessageBoxInformation: - case QStyle::SP_MessageBoxWarning: - case QStyle::SP_MessageBoxCritical: - iconType = kGenericApplicationIcon; - break; - case SP_DesktopIcon: - iconType = kDesktopIcon; - break; - case SP_TrashIcon: - iconType = kTrashIcon; - break; - case SP_ComputerIcon: - iconType = kComputerIcon; - break; - case SP_DriveFDIcon: - iconType = kGenericFloppyIcon; - break; - case SP_DriveHDIcon: - iconType = kGenericHardDiskIcon; - break; - case SP_DriveCDIcon: - case SP_DriveDVDIcon: - iconType = kGenericCDROMIcon; - break; - case SP_DriveNetIcon: - iconType = kGenericNetworkIcon; - break; - case SP_DirOpenIcon: - iconType = kOpenFolderIcon; - break; - case SP_DirClosedIcon: - case SP_DirLinkIcon: - iconType = kGenericFolderIcon; - break; - case SP_FileLinkIcon: - case SP_FileIcon: - iconType = kGenericDocumentIcon; - break; + default: + return QWindowsStyle::standardIconImplementation(standardIcon, opt, widget); case SP_ToolBarHorizontalExtensionButton: case SP_ToolBarVerticalExtensionButton: { QPixmap pixmap(qt_mac_toolbar_ext); @@ -5939,58 +5873,8 @@ QIcon QMacStyle::standardIconImplementation(StandardPixmap standardIcon, const Q return pix2; } return pixmap; - } - break; - case SP_DirIcon: { - // A rather special case - QIcon closeIcon = QStyle::standardIcon(SP_DirClosedIcon, opt, widget); - QIcon openIcon = QStyle::standardIcon(SP_DirOpenIcon, opt, widget); - closeIcon.addPixmap(openIcon.pixmap(16, 16), QIcon::Normal, QIcon::On); - closeIcon.addPixmap(openIcon.pixmap(32, 32), QIcon::Normal, QIcon::On); - closeIcon.addPixmap(openIcon.pixmap(64, 64), QIcon::Normal, QIcon::On); - closeIcon.addPixmap(openIcon.pixmap(128, 128), QIcon::Normal, QIcon::On); - return closeIcon; - } - case SP_TitleBarNormalButton: - case SP_TitleBarCloseButton: { - QIcon titleBarIcon; - if (standardIcon == SP_TitleBarCloseButton) { - titleBarIcon.addFile(QLatin1String(":/trolltech/styles/macstyle/images/closedock-16.png")); - titleBarIcon.addFile(QLatin1String(":/trolltech/styles/macstyle/images/closedock-down-16.png"), QSize(16, 16), QIcon::Normal, QIcon::On); - } else { - titleBarIcon.addFile(QLatin1String(":/trolltech/styles/macstyle/images/dockdock-16.png")); - titleBarIcon.addFile(QLatin1String(":/trolltech/styles/macstyle/images/dockdock-down-16.png"), QSize(16, 16), QIcon::Normal, QIcon::On); - } - return titleBarIcon; - } - default: - break; } - if (iconType != 0) { - QIcon retIcon; - IconRef icon; - IconRef overlayIcon = 0; - if (iconType != kGenericApplicationIcon) { - GetIconRef(kOnSystemDisk, kSystemIconsCreator, iconType, &icon); - } else { - FSRef fsRef; - ProcessSerialNumber psn = { 0, kCurrentProcess }; - GetProcessBundleLocation(&psn, &fsRef); - GetIconRefFromFileInfo(&fsRef, 0, 0, 0, 0, kIconServicesNormalUsageFlag, &icon, 0); - if (standardIcon == SP_MessageBoxCritical) { - overlayIcon = icon; - GetIconRef(kOnSystemDisk, kSystemIconsCreator, kAlertCautionIcon, &icon); - } - } - if (icon) { - qt_mac_constructQIconFromIconRef(icon, overlayIcon, &retIcon, standardIcon); - ReleaseIconRef(icon); - } - if (overlayIcon) - ReleaseIconRef(overlayIcon); - return retIcon; } - return QWindowsStyle::standardIconImplementation(standardIcon, opt, widget); } int QMacStyle::layoutSpacingImplementation(QSizePolicy::ControlType control1, diff --git a/src/gui/styles/qplastiquestyle.cpp b/src/gui/styles/qplastiquestyle.cpp index 12aa679..80c9881 100644 --- a/src/gui/styles/qplastiquestyle.cpp +++ b/src/gui/styles/qplastiquestyle.cpp @@ -730,16 +730,6 @@ static QColor mergedColors(const QColor &colorA, const QColor &colorB, int facto return tmp; } -static QString uniqueName(const QString &key, const QStyleOption *option, const QSize &size) -{ - QString tmp; - const QStyleOptionComplex *complexOption = qstyleoption_cast<const QStyleOptionComplex *>(option); - tmp.sprintf("%s-%d-%d-%d-%lld-%dx%d", key.toLatin1().constData(), uint(option->state), - option->direction, complexOption ? uint(complexOption->activeSubControls) : uint(0), - option->palette.cacheKey(), size.width(), size.height()); - return tmp; -} - static void qt_plastique_draw_gradient(QPainter *painter, const QRect &rect, const QColor &gradientStart, const QColor &gradientStop) { @@ -1512,7 +1502,7 @@ void QPlastiqueStyle::drawPrimitive(PrimitiveElement element, const QStyleOption rect.adjust(2, 0, -2, 0); } #endif - QString pixmapName = uniqueName(QLatin1String("toolbarhandle"), option, rect.size()); + QString pixmapName = QStyleHelper::uniqueName(QLatin1String("toolbarhandle"), option, rect.size()); if (!QPixmapCache::find(pixmapName, cache)) { cache = QPixmap(rect.size()); cache.fill(Qt::transparent); @@ -2581,8 +2571,7 @@ void QPlastiqueStyle::drawControl(ControlElement element, const QStyleOption *op painter->setTransform(m, true); } - double vc6_workaround = ((bar->progress - qint64(bar->minimum)) / qMax(double(1.0), double(qint64(bar->maximum) - qint64(bar->minimum))) * rect.width()); - int progressIndicatorPos = int(vc6_workaround); + int progressIndicatorPos = (bar->progress - qreal(bar->minimum)) / qMax(qreal(1.0), qreal(bar->maximum) - bar->minimum) * rect.width(); bool flip = (!vertical && (((bar->direction == Qt::RightToLeft) && !inverted) || ((bar->direction == Qt::LeftToRight) && inverted))) || (vertical && ((!inverted && !bottomToTop) || (inverted && bottomToTop))); @@ -2777,7 +2766,7 @@ void QPlastiqueStyle::drawControl(ControlElement element, const QStyleOption *op // contents painter->setPen(QPen()); - QString progressBarName = uniqueName(QLatin1String("progressBarContents"), + QString progressBarName = QStyleHelper::uniqueName(QLatin1String("progressBarContents"), option, rect.size()); QPixmap cache; if (!QPixmapCache::find(progressBarName, cache) && rect.height() > 7) { @@ -2837,7 +2826,7 @@ void QPlastiqueStyle::drawControl(ControlElement element, const QStyleOption *op // Draws the header in tables. if (const QStyleOptionHeader *header = qstyleoption_cast<const QStyleOptionHeader *>(option)) { QPixmap cache; - QString pixmapName = uniqueName(QLatin1String("headersection"), option, option->rect.size()); + QString pixmapName = QStyleHelper::uniqueName(QLatin1String("headersection"), option, option->rect.size()); pixmapName += QString::number(- int(header->position)); pixmapName += QString::number(- int(header->orientation)); @@ -3084,7 +3073,7 @@ void QPlastiqueStyle::drawControl(ControlElement element, const QStyleOption *op // Draws a menu bar item; File, Edit, Help etc.. if ((option->state & State_Selected)) { QPixmap cache; - QString pixmapName = uniqueName(QLatin1String("menubaritem"), option, option->rect.size()); + QString pixmapName = QStyleHelper::uniqueName(QLatin1String("menubaritem"), option, option->rect.size()); if (!QPixmapCache::find(pixmapName, cache)) { cache = QPixmap(option->rect.size()); cache.fill(Qt::white); @@ -3447,7 +3436,7 @@ void QPlastiqueStyle::drawControl(ControlElement element, const QStyleOption *op bool reverse = scrollBar->direction == Qt::RightToLeft; bool sunken = scrollBar->state & State_Sunken; - QString addLinePixmapName = uniqueName(QLatin1String("scrollbar_addline"), option, option->rect.size()); + QString addLinePixmapName = QStyleHelper::uniqueName(QLatin1String("scrollbar_addline"), option, option->rect.size()); QPixmap cache; if (!QPixmapCache::find(addLinePixmapName, cache)) { cache = QPixmap(option->rect.size()); @@ -3519,7 +3508,7 @@ void QPlastiqueStyle::drawControl(ControlElement element, const QStyleOption *op bool sunken = scrollBar->state & State_Sunken; bool horizontal = scrollBar->orientation == Qt::Horizontal; - QString groovePixmapName = uniqueName(QLatin1String("scrollbar_groove"), option, option->rect.size()); + QString groovePixmapName = QStyleHelper::uniqueName(QLatin1String("scrollbar_groove"), option, option->rect.size()); if (sunken) groovePixmapName += QLatin1String("-sunken"); if (element == CE_ScrollBarAddPage) @@ -3578,7 +3567,7 @@ void QPlastiqueStyle::drawControl(ControlElement element, const QStyleOption *op button2.setRect(scrollBarSubLine.left(), scrollBarSubLine.bottom() - (scrollBarExtent - 1), scrollBarSubLine.width(), scrollBarExtent); } - QString subLinePixmapName = uniqueName(QLatin1String("scrollbar_subline"), option, button1.size()); + QString subLinePixmapName = QStyleHelper::uniqueName(QLatin1String("scrollbar_subline"), option, button1.size()); QPixmap cache; if (!QPixmapCache::find(subLinePixmapName, cache)) { cache = QPixmap(button1.size()); @@ -3653,7 +3642,7 @@ void QPlastiqueStyle::drawControl(ControlElement element, const QStyleOption *op // The slider if (option->rect.isValid()) { - QString sliderPixmapName = uniqueName(QLatin1String("scrollbar_slider"), option, option->rect.size()); + QString sliderPixmapName = QStyleHelper::uniqueName(QLatin1String("scrollbar_slider"), option, option->rect.size()); if (horizontal) sliderPixmapName += QLatin1String("-horizontal"); @@ -3873,7 +3862,7 @@ void QPlastiqueStyle::drawComplexControl(ComplexControl control, const QStyleOpt } if ((option->subControls & SC_SliderHandle) && handle.isValid()) { - QString handlePixmapName = uniqueName(QLatin1String("slider_handle"), option, handle.size()); + QString handlePixmapName = QStyleHelper::uniqueName(QLatin1String("slider_handle"), option, handle.size()); if (ticksAbove && !ticksBelow) handlePixmapName += QLatin1String("-flipped"); if ((option->activeSubControls & SC_SliderHandle) && (option->state & State_Sunken)) diff --git a/src/gui/styles/qstyle.cpp b/src/gui/styles/qstyle.cpp index 797886c..a5ab80e 100644 --- a/src/gui/styles/qstyle.cpp +++ b/src/gui/styles/qstyle.cpp @@ -526,8 +526,9 @@ void QStyle::drawItemText(QPainter *painter, const QRect &rect, int alignment, c } if (!enabled) { if (styleHint(SH_DitherDisabledText)) { - painter->drawText(rect, alignment, text); - painter->fillRect(painter->boundingRect(rect, alignment, text), QBrush(painter->background().color(), Qt::Dense5Pattern)); + QRect br; + painter->drawText(rect, alignment, text, &br); + painter->fillRect(br, QBrush(painter->background().color(), Qt::Dense5Pattern)); return; } else if (styleHint(SH_EtchDisabledText)) { QPen pen = painter->pen(); @@ -1865,6 +1866,8 @@ void QStyle::drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, \value SH_DockWidget_ButtonsHaveFrame Determines if dockwidget buttons should have frames. Default is true. + \value SH_ToolButtonStyle Determines the default system style for tool buttons that uses Qt::ToolButtonFollowStyle. + \omitvalue SH_UnderlineAccelerator \sa styleHint() diff --git a/src/gui/styles/qstyle.h b/src/gui/styles/qstyle.h index d79c39c..f22bf55 100644 --- a/src/gui/styles/qstyle.h +++ b/src/gui/styles/qstyle.h @@ -730,7 +730,7 @@ public: SH_ItemView_DrawDelegateFrame, SH_TabBar_CloseButtonPosition, SH_DockWidget_ButtonsHaveFrame, - + SH_ToolButtonStyle, // Add new style hint values here #ifdef QT3_SUPPORT diff --git a/src/gui/styles/qstyle_p.h b/src/gui/styles/qstyle_p.h index 854874f..2d6ef22 100644 --- a/src/gui/styles/qstyle_p.h +++ b/src/gui/styles/qstyle_p.h @@ -43,6 +43,7 @@ #define QSTYLE_P_H #include "private/qobject_p.h" +#include "private/qstylehelper_p.h" #include <QtGui/qstyle.h> QT_BEGIN_NAMESPACE @@ -78,7 +79,7 @@ public: QPixmap internalPixmapCache; \ QImage imageCache; \ QPainter *p = painter; \ - QString unique = uniqueName((a), option, option->rect.size()); \ + QString unique = QStyleHelper::uniqueName((a), option, option->rect.size()); \ int txType = painter->deviceTransform().type() | painter->worldTransform().type(); \ bool doPixmapCache = txType <= QTransform::TxTranslate; \ if (doPixmapCache && QPixmapCache::find(unique, internalPixmapCache)) { \ diff --git a/src/gui/styles/qstylehelper.cpp b/src/gui/styles/qstylehelper.cpp index f9010e8..4877ec4 100644 --- a/src/gui/styles/qstylehelper.cpp +++ b/src/gui/styles/qstylehelper.cpp @@ -60,11 +60,10 @@ namespace QStyleHelper { QString uniqueName(const QString &key, const QStyleOption *option, const QSize &size) { - QString tmp; const QStyleOptionComplex *complexOption = qstyleoption_cast<const QStyleOptionComplex *>(option); - tmp.sprintf("%s-%d-%d-%lld-%dx%d-%d", key.toLatin1().constData(), uint(option->state), - complexOption ? uint(complexOption->activeSubControls) : uint(0), - option->palette.cacheKey(), size.width(), size.height(), option->direction); + QString tmp = QString::fromLatin1("%1-%2-%3-%4-%5-%6x%7").arg(key).arg(uint(option->state)).arg(option->direction) + .arg(complexOption ? uint(complexOption->activeSubControls) : uint(0)) + .arg(option->palette.cacheKey()).arg(size.width()).arg(size.height()); #ifndef QT_NO_SPINBOX if (const QStyleOptionSpinBox *spinBox = qstyleoption_cast<const QStyleOptionSpinBox *>(option)) { tmp.append(QLatin1Char('-')); diff --git a/src/gui/styles/qstylesheetstyle.cpp b/src/gui/styles/qstylesheetstyle.cpp index 01d8aad..2efa4a7 100644 --- a/src/gui/styles/qstylesheetstyle.cpp +++ b/src/gui/styles/qstylesheetstyle.cpp @@ -4171,7 +4171,7 @@ void QStyleSheetStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *op if (!rule.hasDrawable()) { QWidget *container = containerWidget(w); if (autoFillDisabledWidgets->contains(container) - && (container == w || !renderRule(container, opt).hasDrawable())) { + && (container == w || !renderRule(container, opt).hasBackground())) { //we do not have a background, but we disabled the autofillbackground anyway. so fill the background now. // (this may happen if we have rules like :focus) p->fillRect(opt->rect, opt->palette.brush(w->backgroundRole())); diff --git a/src/gui/styles/qwindowsstyle.cpp b/src/gui/styles/qwindowsstyle.cpp index 4f25e68..4c66bbb 100644 --- a/src/gui/styles/qwindowsstyle.cpp +++ b/src/gui/styles/qwindowsstyle.cpp @@ -1061,6 +1061,8 @@ QPixmap QWindowsStyle::standardPixmap(StandardPixmap standardPixmap, const QStyl } } break; + default: + break; } if (!desktopIcon.isNull()) { return desktopIcon; @@ -1375,11 +1377,8 @@ void QWindowsStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QRect r = opt->rect; int size = qMin(r.height(), r.width()); QPixmap pixmap; - QString pixmapName; - pixmapName.sprintf("%s-%s-%d-%d-%d-%lld", - "$qt_ia", metaObject()->className(), - uint(opt->state), pe, - size, opt->palette.cacheKey()); + QString pixmapName = QStyleHelper::uniqueName(QLatin1String("$qt_ia-") + QLatin1String(metaObject()->className()), opt, QSize(size, size)) + + QLatin1Char('-') + QString::number(pe); if (!QPixmapCache::find(pixmapName, pixmap)) { int border = size/5; int sqsize = 2*(size/2); diff --git a/src/gui/styles/qwindowsvistastyle.cpp b/src/gui/styles/qwindowsvistastyle.cpp index 3e65eef..f3d0f04 100644 --- a/src/gui/styles/qwindowsvistastyle.cpp +++ b/src/gui/styles/qwindowsvistastyle.cpp @@ -735,7 +735,7 @@ void QWindowsVistaStyle::drawPrimitive(PrimitiveElement element, const QStyleOpt if (const QListView *listview = qobject_cast<const QListView *>(widget)) { if (listview->viewMode() == QListView::IconMode) newStyle = true; - } else if (const QTreeView* treeview = qobject_cast<const QTreeView *>(widget)) { + } else if (qobject_cast<const QTreeView *>(widget)) { newStyle = true; } if (newStyle && view && (vopt = qstyleoption_cast<const QStyleOptionViewItemV4 *>(option))) { @@ -1093,7 +1093,7 @@ void QWindowsVistaStyle::drawControl(ControlElement element, const QStyleOption XPThemeData theme(widget, painter, QLatin1String("PROGRESS"), vertical ? PP_FILLVERT : PP_FILL); theme.rect = option->rect; - bool reverse = bar->direction == Qt::LeftToRight && inverted || bar->direction == Qt::RightToLeft && !inverted; + bool reverse = bar->direction == (Qt::LeftToRight && inverted) || (bar->direction == Qt::RightToLeft && !inverted); QTime current = QTime::currentTime(); if (isIndeterminate) { @@ -1271,7 +1271,7 @@ void QWindowsVistaStyle::drawControl(ControlElement element, const QStyleOption int yoff = y-2 + h / 2; QPoint p1 = QPoint(x + checkcol, yoff); QPoint p2 = QPoint(x + w + 6 , yoff); - int stateId = stateId = MBI_HOT; + stateId = MBI_HOT; QRect subRect(p1.x(), p1.y(), p2.x() - p1.x(), 6); subRect = QStyle::visualRect(option->direction, option->rect, subRect ); XPThemeData theme2(widget, painter, QLatin1String("MENU"), MENU_POPUPSEPARATOR, stateId, subRect); @@ -1283,7 +1283,7 @@ void QWindowsVistaStyle::drawControl(ControlElement element, const QStyleOption menuitem->rect.y(), checkcol - 6, menuitem->rect.height())); if (act) { - int stateId = stateId = MBI_HOT; + stateId = MBI_HOT; XPThemeData theme2(widget, painter, QLatin1String("MENU"), MENU_POPUPITEM, stateId, option->rect); d->drawBackground(theme2); } @@ -1403,7 +1403,7 @@ void QWindowsVistaStyle::drawControl(ControlElement element, const QStyleOption break; case CE_MenuBarEmptyArea: { - int stateId = MBI_NORMAL; + stateId = MBI_NORMAL; if (!(state & State_Enabled)) stateId = MBI_DISABLED; XPThemeData theme(widget, painter, QLatin1String("MENU"), MENU_BARBACKGROUND, stateId, option->rect); @@ -1500,7 +1500,7 @@ void QWindowsVistaStyle::drawControl(ControlElement element, const QStyleOption if (const QListView *listview = qobject_cast<const QListView *>(widget)) { if (listview->viewMode() == QListView::IconMode) newStyle = true; - } else if (const QTreeView* treeview = qobject_cast<const QTreeView *>(widget)) { + } else if (qobject_cast<const QTreeView *>(widget)) { newStyle = true; } if (newStyle && view && (vopt = qstyleoption_cast<const QStyleOptionViewItemV4 *>(option))) { @@ -2014,7 +2014,7 @@ QRect QWindowsVistaStyle::subElementRect(SubElement element, const QStyleOption MARGINS borderSize; HTHEME theme = pOpenThemeData(widget ? QWindowsVistaStylePrivate::winId(widget) : 0, L"Button"); if (theme) { - int stateId; + int stateId = PBS_NORMAL; if (!(option->state & State_Enabled)) stateId = PBS_DISABLED; else if (option->state & State_Sunken) @@ -2023,8 +2023,6 @@ QRect QWindowsVistaStyle::subElementRect(SubElement element, const QStyleOption stateId = PBS_HOT; else if (btn->features & QStyleOptionButton::DefaultButton) stateId = PBS_DEFAULTED; - else - stateId = PBS_NORMAL; int border = proxy()->pixelMetric(PM_DefaultFrameWidth, btn, widget); rect = option->rect.adjusted(border, border, -border, -border); @@ -2097,7 +2095,7 @@ QRect QWindowsVistaStyle::subElementRect(SubElement element, const QStyleOption rect = QCommonStyle::subElementRect(SE_ProgressBarGroove, option, widget); break; case SE_ItemViewItemDecoration: - if (const QStyleOptionViewItemV4 *vopt = qstyleoption_cast<const QStyleOptionViewItemV4 *>(option)) + if (qstyleoption_cast<const QStyleOptionViewItemV4 *>(option)) rect.adjust(-2, 0, 2, 0); break; case SE_ItemViewItemFocusRect: @@ -2303,6 +2301,8 @@ QRect QWindowsVistaStyle::subControlRect(ComplexControl control, const QStyleOpt rect = visualRect(option->direction, option->rect, rect); } break; + default: + break; } } break; diff --git a/src/gui/styles/qwindowsxpstyle.cpp b/src/gui/styles/qwindowsxpstyle.cpp index 9c4afee..9560c4b 100644 --- a/src/gui/styles/qwindowsxpstyle.cpp +++ b/src/gui/styles/qwindowsxpstyle.cpp @@ -1202,7 +1202,8 @@ QRect QWindowsXPStyle::subElementRect(SubElement sr, const QStyleOption *option, if (const QStyleOptionButton *btn = qstyleoption_cast<const QStyleOptionButton *>(option)) { MARGINS borderSize; if (widget) { - HTHEME theme = pOpenThemeData(QWindowsXPStylePrivate::winId(widget), L"Button"); + XPThemeData buttontheme(widget, 0, QLatin1String("Button")); + HTHEME theme = buttontheme.handle(); if (theme) { int stateId; if (!(option->state & State_Enabled)) @@ -1918,8 +1919,8 @@ void QWindowsXPStyle::drawControl(ControlElement element, const QStyleOption *op { name = QLatin1String("BUTTON"); partId = BP_PUSHBUTTON; - bool justFlat = (btn->features & QStyleOptionButton::Flat) && !(flags & (State_On|State_Sunken)) - || (btn->features & QStyleOptionButton::CommandLinkButton + bool justFlat = ((btn->features & QStyleOptionButton::Flat) && !(flags & (State_On|State_Sunken))) + || ((btn->features & QStyleOptionButton::CommandLinkButton) && !(flags & State_MouseOver) && !(btn->features & QStyleOptionButton::DefaultButton)); if (!(flags & State_Enabled) && !(btn->features & QStyleOptionButton::Flat)) @@ -3244,7 +3245,7 @@ int QWindowsXPStyle::pixelMetric(PixelMetric pm, const QStyleOption *option, con if (theme.isValid()) { SIZE size; pGetThemePartSize(theme.handle(), 0, theme.partId, theme.stateId, 0, TS_TRUE, &size); - res = (pm == PM_IndicatorWidth ? size.cx : res = size.cy); + res = (pm == PM_IndicatorWidth) ? size.cx : size.cy; } } break; @@ -3256,7 +3257,7 @@ int QWindowsXPStyle::pixelMetric(PixelMetric pm, const QStyleOption *option, con if (theme.isValid()) { SIZE size; pGetThemePartSize(theme.handle(), 0, theme.partId, theme.stateId, 0, TS_TRUE, &size); - res = (pm == PM_ExclusiveIndicatorWidth ? size.cx : res = size.cy); + res = (pm == PM_ExclusiveIndicatorWidth) ? size.cx : size.cy; } } break; @@ -3536,6 +3537,8 @@ QRect QWindowsXPStyle::subControlRect(ComplexControl cc, const QStyleOptionCompl rect = QRect(frameWidth + hPad, controlTop + vPad, iconSize.width(), iconSize.height()); } break; + default: + break; } } break; @@ -3562,6 +3565,9 @@ QRect QWindowsXPStyle::subControlRect(ComplexControl cc, const QStyleOptionCompl case SC_ComboBoxListBoxPopup: rect = cmb->rect; break; + + default: + break; } } break; @@ -3626,7 +3632,8 @@ QSize QWindowsXPStyle::sizeFromContents(ContentsType ct, const QStyleOption *opt case CT_LineEdit: case CT_ComboBox: { - HTHEME theme = pOpenThemeData(QWindowsXPStylePrivate::winId(widget), L"Button"); + XPThemeData buttontheme(widget, 0, QLatin1String("Button")); + HTHEME theme = buttontheme.handle(); MARGINS borderSize; if (theme) { int result = pGetThemeMargins(theme, @@ -3802,6 +3809,8 @@ QPixmap QWindowsXPStyle::standardPixmap(StandardPixmap standardPixmap, const QSt } } break; + default: + break; } return QWindowsStyle::standardPixmap(standardPixmap, option, widget); } @@ -3923,6 +3932,8 @@ QIcon QWindowsXPStyle::standardIconImplementation(StandardPixmap standardIcon, } break; + default: + break; } return QWindowsStyle::standardIconImplementation(standardIcon, option, widget); diff --git a/src/gui/text/qabstracttextdocumentlayout.cpp b/src/gui/text/qabstracttextdocumentlayout.cpp index 8d7540c..04df2aa 100644 --- a/src/gui/text/qabstracttextdocumentlayout.cpp +++ b/src/gui/text/qabstracttextdocumentlayout.cpp @@ -79,6 +79,7 @@ QT_BEGIN_NAMESPACE \class QTextObjectInterface \brief The QTextObjectInterface class allows drawing of custom text objects in \l{QTextDocument}s. + \since 4.5 A text object describes the structure of one or more elements in a text document; for instance, images imported from HTML are diff --git a/src/gui/text/qfontdatabase_win.cpp b/src/gui/text/qfontdatabase_win.cpp index 2e8e5e4..974b955 100644 --- a/src/gui/text/qfontdatabase_win.cpp +++ b/src/gui/text/qfontdatabase_win.cpp @@ -1026,6 +1026,8 @@ static void getFamiliesAndSignatures(const QByteArray &fontData, QFontDatabasePr signature.fsCsb[0] = qFromBigEndian<quint32>(table + 78); signature.fsCsb[1] = qFromBigEndian<quint32>(table + 82); + } else { + memset(&signature, 0, sizeof(signature)); } appFont->signatures << signature; } diff --git a/src/gui/text/qfontengine_win.cpp b/src/gui/text/qfontengine_win.cpp index f4adc9a..c6717e3 100644 --- a/src/gui/text/qfontengine_win.cpp +++ b/src/gui/text/qfontengine_win.cpp @@ -125,8 +125,6 @@ HDC shared_dc() } #endif -static HFONT stock_sysfont = 0; - typedef BOOL (WINAPI *PtrGetCharWidthI)(HDC, UINT, UINT, LPWORD, LPINT); static PtrGetCharWidthI ptrGetCharWidthI = 0; static bool resolvedGetCharWidthI = false; @@ -542,13 +540,6 @@ glyph_metrics_t QFontEngineWin::boundingBox(const QGlyphLayout &glyphs) } - - -#ifndef Q_WS_WINCE -typedef HRESULT (WINAPI *pGetCharABCWidthsFloat)(HDC, UINT, UINT, LPABCFLOAT); -static pGetCharABCWidthsFloat qt_GetCharABCWidthsFloat = 0; -#endif - glyph_metrics_t QFontEngineWin::boundingBox(glyph_t glyph, const QTransform &t) { #ifndef Q_WS_WINCE @@ -1143,8 +1134,7 @@ QNativeImage *QFontEngineWin::drawGDIGlyph(HFONT font, glyph_t glyph, int margin memset(&mat, 0, sizeof(mat)); mat.eM11.value = mat.eM22.value = 1; - int error = GetGlyphOutline(hdc, glyph, ggo_options, &tgm, 0, 0, &mat); - if (error == GDI_ERROR) { + if (GetGlyphOutline(hdc, glyph, ggo_options, &tgm, 0, 0, &mat) == GDI_ERROR) { qWarning("QWinFontEngine: unable to query transformed glyph metrics..."); return 0; } diff --git a/src/gui/text/qsyntaxhighlighter.cpp b/src/gui/text/qsyntaxhighlighter.cpp index f69562d..56c7ca1 100644 --- a/src/gui/text/qsyntaxhighlighter.cpp +++ b/src/gui/text/qsyntaxhighlighter.cpp @@ -367,7 +367,7 @@ QTextDocument *QSyntaxHighlighter::document() const /*! \since 4.2 - Redoes the highlighting of the whole document. + Reapplies the highlighting to the whole document. \sa rehighlightBlock() */ @@ -384,7 +384,7 @@ void QSyntaxHighlighter::rehighlight() /*! \since 4.6 - Redoes the highlighting of the given QTextBlock \a block. + Reapplies the highlighting to the given QTextBlock \a block. \sa rehighlight() */ diff --git a/src/gui/text/qtextcursor.cpp b/src/gui/text/qtextcursor.cpp index 0e3cb56..19d4cc4 100644 --- a/src/gui/text/qtextcursor.cpp +++ b/src/gui/text/qtextcursor.cpp @@ -1856,6 +1856,8 @@ bool QTextCursor::atStart() const } /*! + \since 4.6 + Returns true if the cursor is at the end of the document; otherwise returns false. diff --git a/src/gui/text/qzip.cpp b/src/gui/text/qzip.cpp index 5fbc36d..ccb4e6b 100644 --- a/src/gui/text/qzip.cpp +++ b/src/gui/text/qzip.cpp @@ -56,13 +56,23 @@ #if defined(Q_OS_WIN) #undef S_IFREG #define S_IFREG 0100000 -# define S_ISDIR(x) ((x) & 0040000) > 0 -# define S_ISREG(x) ((x) & 0170000) == S_IFREG +# ifndef S_ISDIR +# define S_ISDIR(x) ((x) & 0040000) > 0 +# endif +# ifndef S_ISREG +# define S_ISREG(x) ((x) & 0170000) == S_IFREG +# endif # define S_IFLNK 020000 # define S_ISLNK(x) ((x) & S_IFLNK) > 0 -# define S_IRUSR 0400 -# define S_IWUSR 0200 -# define S_IXUSR 0100 +# ifndef S_IRUSR +# define S_IRUSR 0400 +# endif +# ifndef S_IWUSR +# define S_IWUSR 0200 +# endif +# ifndef S_IXUSR +# define S_IXUSR 0100 +# endif # define S_IRGRP 0040 # define S_IWGRP 0020 # define S_IXGRP 0010 diff --git a/src/gui/util/qcompleter.cpp b/src/gui/util/qcompleter.cpp index d68e309..bf1fa6a 100644 --- a/src/gui/util/qcompleter.cpp +++ b/src/gui/util/qcompleter.cpp @@ -134,7 +134,7 @@ To provide completions, QCompleter needs to know the path from an index. This is provided by pathFromIndex(). The default implementation of - pathFromIndex(), returns the data for the \l{Qt::EditRole}{edit role} + pathFromIndex(), returns the data for the \l{Qt::EditRole}{edit role} for list models and the absolute file path if the mode is a QDirModel. \sa QAbstractItemModel, QLineEdit, QComboBox, {Completer Example} @@ -772,7 +772,7 @@ QMatchData QUnsortedModelEngine::filter(const QString& part, const QModelIndex& /////////////////////////////////////////////////////////////////////////////// QCompleterPrivate::QCompleterPrivate() : widget(0), proxy(0), popup(0), cs(Qt::CaseSensitive), role(Qt::EditRole), column(0), - sorting(QCompleter::UnsortedModel), wrap(true), eatFocusOut(true) + sorting(QCompleter::UnsortedModel), wrap(true), maxVisibleItems(7), eatFocusOut(true) { } @@ -861,7 +861,7 @@ void QCompleterPrivate::showPopup(const QRect& rect) Qt::LayoutDirection dir = widget->layoutDirection(); QPoint pos; int rw, rh, w; - int h = (popup->sizeHintForRow(0) * qMin(7, popup->model()->rowCount()) + 3) + 3; + int h = (popup->sizeHintForRow(0) * qMin(maxVisibleItems, popup->model()->rowCount()) + 3) + 3; QScrollBar *hsb = popup->horizontalScrollBar(); if (hsb && hsb->isVisible()) h += popup->horizontalScrollBar()->sizeHint().height(); @@ -1510,6 +1510,30 @@ bool QCompleter::wrapAround() const } /*! + \property QCompleter::maxVisibleItems + \brief the maximum allowed size on screen of the completer, measured in items + \since 4.6 + + By default, this property has a value of 7. +*/ +int QCompleter::maxVisibleItems() const +{ + Q_D(const QCompleter); + return d->maxVisibleItems; +} + +void QCompleter::setMaxVisibleItems(int maxItems) +{ + Q_D(QCompleter); + if (maxItems < 0) { + qWarning("QCompleter::setMaxVisibleItems: " + "Invalid max visible items (%d) must be >= 0", maxItems); + return; + } + d->maxVisibleItems = maxItems; +} + +/*! \property QCompleter::caseSensitivity \brief the case sensitivity of the matching diff --git a/src/gui/util/qcompleter.h b/src/gui/util/qcompleter.h index c1169ef..a419154 100644 --- a/src/gui/util/qcompleter.h +++ b/src/gui/util/qcompleter.h @@ -69,6 +69,7 @@ class Q_GUI_EXPORT QCompleter : public QObject Q_PROPERTY(CompletionMode completionMode READ completionMode WRITE setCompletionMode) Q_PROPERTY(int completionColumn READ completionColumn WRITE setCompletionColumn) Q_PROPERTY(int completionRole READ completionRole WRITE setCompletionRole) + Q_PROPERTY(int maxVisibleItems READ maxVisibleItems WRITE setMaxVisibleItems) Q_PROPERTY(Qt::CaseSensitivity caseSensitivity READ caseSensitivity WRITE setCaseSensitivity) Q_PROPERTY(bool wrapAround READ wrapAround WRITE setWrapAround) @@ -118,6 +119,9 @@ public: bool wrapAround() const; + int maxVisibleItems() const; + void setMaxVisibleItems(int maxItems); + int completionCount() const; bool setCurrentRow(int row); int currentRow() const; diff --git a/src/gui/util/qcompleter_p.h b/src/gui/util/qcompleter_p.h index dc4189f..288f531 100644 --- a/src/gui/util/qcompleter_p.h +++ b/src/gui/util/qcompleter_p.h @@ -87,6 +87,7 @@ public: Qt::CaseSensitivity cs; int role; int column; + int maxVisibleItems; QCompleter::ModelSorting sorting; bool wrap; diff --git a/src/gui/util/qdesktopservices_win.cpp b/src/gui/util/qdesktopservices_win.cpp index 00cb4ae..62ab2f7 100644 --- a/src/gui/util/qdesktopservices_win.cpp +++ b/src/gui/util/qdesktopservices_win.cpp @@ -66,8 +66,10 @@ static bool openDocument(const QUrl &file) { if (!file.isValid()) return false; - - quintptr returnValue = (quintptr)ShellExecute(0, 0, (wchar_t*)file.toString().utf16(), 0, 0, SW_SHOWNORMAL); + QString filePath = file.toLocalFile(); + if (filePath.isEmpty()) + filePath = file.toString(); + quintptr returnValue = (quintptr)ShellExecute(0, 0, (wchar_t*)filePath.utf16(), 0, 0, SW_SHOWNORMAL); return (returnValue > 32); //ShellExecute returns a value greater than 32 if successful } diff --git a/src/gui/widgets/qdatetimeedit.cpp b/src/gui/widgets/qdatetimeedit.cpp index 1a5fa8d..5ddf7f7 100644 --- a/src/gui/widgets/qdatetimeedit.cpp +++ b/src/gui/widgets/qdatetimeedit.cpp @@ -1934,7 +1934,6 @@ QDateTime QDateTimeEditPrivate::validateAndInterpret(QString &input, int &positi /*! \internal - \reimp */ QString QDateTimeEditPrivate::textFromValue(const QVariant &f) const @@ -1945,7 +1944,6 @@ QString QDateTimeEditPrivate::textFromValue(const QVariant &f) const /*! \internal - \reimp This function's name is slightly confusing; it is not to be confused with QAbstractSpinBox::valueFromText(). @@ -2103,7 +2101,6 @@ QDateTime QDateTimeEditPrivate::stepBy(int sectionIndex, int steps, bool test) c /*! \internal - \reimp */ void QDateTimeEditPrivate::emitSignals(EmitPolicy ep, const QVariant &old) @@ -2133,7 +2130,6 @@ void QDateTimeEditPrivate::emitSignals(EmitPolicy ep, const QVariant &old) /*! \internal - \reimp */ void QDateTimeEditPrivate::_q_editorCursorPositionChanged(int oldpos, int newpos) diff --git a/src/gui/widgets/qprogressbar.cpp b/src/gui/widgets/qprogressbar.cpp index d168028..6593cd6 100644 --- a/src/gui/widgets/qprogressbar.cpp +++ b/src/gui/widgets/qprogressbar.cpp @@ -443,11 +443,11 @@ QSize QProgressBar::minimumSizeHint() const QString QProgressBar::text() const { Q_D(const QProgressBar); - if (d->maximum == 0 || d->value < d->minimum + if ((d->maximum == 0 && d->minimum == 0) || d->value < d->minimum || (d->value == INT_MIN && d->minimum == INT_MIN)) return QString(); - qint64 totalSteps = qint64(d->maximum) - qint64(d->minimum); + qint64 totalSteps = qint64(d->maximum) - d->minimum; QString result = d->format; result.replace(QLatin1String("%m"), QString::number(totalSteps)); @@ -461,7 +461,7 @@ QString QProgressBar::text() const return result; } - int progress = int(((qreal(d->value) - qreal(d->minimum)) * 100.0) / totalSteps); + int progress = (qreal(d->value) - d->minimum) * 100.0 / totalSteps; result.replace(QLatin1String("%p"), QString::number(progress)); return result; } diff --git a/src/gui/widgets/qspinbox.cpp b/src/gui/widgets/qspinbox.cpp index 3933272..7441df4 100644 --- a/src/gui/widgets/qspinbox.cpp +++ b/src/gui/widgets/qspinbox.cpp @@ -1206,7 +1206,7 @@ bool QDoubleSpinBoxPrivate::isIntermediateValue(const QString &str) const return false; } if (doright) { - QSBDEBUG("match %lld min_left %lld max_left %lld", match, min_left, max_left); + QSBDEBUG() << "match" << match << "min_left" << min_left << "max_left" << max_left; if (!doleft) { if (min_left == max_left) { const bool ret = isIntermediateValueHelper(qAbs(left), @@ -1473,7 +1473,7 @@ QString QDoubleSpinBoxPrivate::textFromValue(const QVariant &f) const static bool isIntermediateValueHelper(qint64 num, qint64 min, qint64 max, qint64 *match) { - QSBDEBUG("%lld %lld %lld", num, min, max); + QSBDEBUG() << num << min << max; if (num >= min && num <= max) { if (match) diff --git a/src/gui/widgets/qtoolbar.cpp b/src/gui/widgets/qtoolbar.cpp index b65f1ba..426c3e1 100644 --- a/src/gui/widgets/qtoolbar.cpp +++ b/src/gui/widgets/qtoolbar.cpp @@ -874,7 +874,7 @@ QAction *QToolBar::insertSeparator(QAction *before) If you add a QToolButton with this method, the tools bar's Qt::ToolButtonStyle will not be respected. - Note: You should use QAction::setVisible() to change the + \note You should use QAction::setVisible() to change the visibility of the widget. Using QWidget::setVisible(), QWidget::show() and QWidget::hide() does not work. diff --git a/src/gui/widgets/qtoolbutton.cpp b/src/gui/widgets/qtoolbutton.cpp index 6dcbfec..2c85dc5 100644 --- a/src/gui/widgets/qtoolbutton.cpp +++ b/src/gui/widgets/qtoolbutton.cpp @@ -378,7 +378,17 @@ void QToolButton::initStyleOption(QStyleOptionToolButton *option) const if (d->hasMenu()) option->features |= QStyleOptionToolButton::HasMenu; #endif - option->toolButtonStyle = d->toolButtonStyle; + if (d->toolButtonStyle == Qt::ToolButtonFollowStyle) { + option->toolButtonStyle = Qt::ToolButtonStyle(style()->styleHint(QStyle::SH_ToolButtonStyle, option, this)); + } else + option->toolButtonStyle = d->toolButtonStyle; + + if (option->toolButtonStyle == Qt::ToolButtonTextBesideIcon) { + // If the action is not prioritized, remove the text label to save space + if (d->defaultAction && d->defaultAction->priority() < QAction::NormalPriority) + option->toolButtonStyle = Qt::ToolButtonIconOnly; + } + if (d->icon.isNull() && d->arrowType == Qt::NoArrow && !forceNoText) { if (!d->text.isEmpty()) option->toolButtonStyle = Qt::ToolButtonTextOnly; @@ -476,6 +486,9 @@ QSize QToolButton::minimumSizeHint() const The default is Qt::ToolButtonIconOnly. + To have the style of toolbuttons follow the system settings (as available + in GNOME and KDE desktop environments), set this property to Qt::ToolButtonFollowStyle. + QToolButton automatically connects this slot to the relevant signal in the QMainWindow in which is resides. */ diff --git a/src/network/access/qabstractnetworkcache.cpp b/src/network/access/qabstractnetworkcache.cpp index cfc9fe7..3f44059 100644 --- a/src/network/access/qabstractnetworkcache.cpp +++ b/src/network/access/qabstractnetworkcache.cpp @@ -283,6 +283,8 @@ void QNetworkCacheMetaData::setExpirationDate(const QDateTime &dateTime) } /*! + \since 4.6 + Returns all the attributes stored with this cache item. \sa setAttributes(), QNetworkRequest::Attribute @@ -293,6 +295,8 @@ QNetworkCacheMetaData::AttributesMap QNetworkCacheMetaData::attributes() const } /*! + \since 4.6 + Sets all attributes of this cache item to be the map \a attributes. \sa attributes(), QNetworkRequest::setAttribute() diff --git a/src/network/access/qhttp.cpp b/src/network/access/qhttp.cpp index 7a02ab6..faa2398 100644 --- a/src/network/access/qhttp.cpp +++ b/src/network/access/qhttp.cpp @@ -513,6 +513,7 @@ public: /*! \class QHttpHeader + \obsolete \brief The QHttpHeader class contains header information for HTTP. \ingroup io @@ -1007,6 +1008,7 @@ public: /*! \class QHttpResponseHeader + \obsolete \brief The QHttpResponseHeader class contains response header information for HTTP. \ingroup io @@ -1152,7 +1154,7 @@ int QHttpResponseHeader::minorVersion() const return d->minVer; } -/*! \reimp +/*! \internal */ bool QHttpResponseHeader::parseLine(const QString &line, int number) { @@ -1211,6 +1213,7 @@ public: /*! \class QHttpRequestHeader + \obsolete \brief The QHttpRequestHeader class contains request header information for HTTP. \ingroup io @@ -1366,7 +1369,7 @@ int QHttpRequestHeader::minorVersion() const return d->minVer; } -/*! \reimp +/*! \internal */ bool QHttpRequestHeader::parseLine(const QString &line, int number) { diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp index f1da244..c824fac 100644 --- a/src/network/access/qhttpnetworkconnection.cpp +++ b/src/network/access/qhttpnetworkconnection.cpp @@ -175,26 +175,43 @@ bool QHttpNetworkConnectionPrivate::isSocketReading(QAbstractSocket *socket) con return (i != -1 && (channels[i].state & ReadingState)); } +void QHttpNetworkConnectionPrivate::appendUncompressedData(QHttpNetworkReply &reply, QByteArray &qba) +{ + reply.d_func()->responseData.append(qba); + + // clear the original! helps with implicit sharing and + // avoiding memcpy when the user is reading the data + qba.clear(); +} -void QHttpNetworkConnectionPrivate::appendUncompressedData(QHttpNetworkReply &reply, const QByteArray &fragment) +void QHttpNetworkConnectionPrivate::appendUncompressedData(QHttpNetworkReply &reply, QByteDataBuffer &data) { - char *dst = reply.d_func()->responseData.reserve(fragment.size()); - qMemCopy(dst, fragment.constData(), fragment.size()); + reply.d_func()->responseData.append(data); + + // clear the original! helps with implicit sharing and + // avoiding memcpy when the user is reading the data + data.clear(); } -void QHttpNetworkConnectionPrivate::appendCompressedData(QHttpNetworkReply &reply, const QByteArray &fragment) +void QHttpNetworkConnectionPrivate::appendCompressedData(QHttpNetworkReply &reply, QByteDataBuffer &data) { - reply.d_func()->compressedData.append(fragment); + // Work in progress: Later we will directly use a list of QByteArray or a QRingBuffer + // instead of one QByteArray. + for(int i = 0; i < data.bufferCount(); i++) { + QByteArray &byteData = data[i]; + reply.d_func()->compressedData.append(byteData.constData(), byteData.size()); + } + data.clear(); } qint64 QHttpNetworkConnectionPrivate::uncompressedBytesAvailable(const QHttpNetworkReply &reply) const { - return reply.d_func()->responseData.size(); + return reply.d_func()->responseData.byteAmount(); } qint64 QHttpNetworkConnectionPrivate::uncompressedBytesAvailableNextBlock(const QHttpNetworkReply &reply) const { - return reply.d_func()->responseData.nextDataBlockSize(); + return reply.d_func()->responseData.sizeNextBlock(); } qint64 QHttpNetworkConnectionPrivate::compressedBytesAvailable(const QHttpNetworkReply &reply) const @@ -202,21 +219,6 @@ qint64 QHttpNetworkConnectionPrivate::compressedBytesAvailable(const QHttpNetwor return reply.d_func()->compressedData.size(); } -qint64 QHttpNetworkConnectionPrivate::read(QHttpNetworkReply &reply, QByteArray &data, qint64 maxSize) -{ - QRingBuffer *rb = &reply.d_func()->responseData; - if (maxSize == -1 || maxSize >= rb->size()) { - // read the whole data - data = rb->readAll(); - rb->clear(); - } else { - // read only the requested length - data.resize(maxSize); - rb->read(data.data(), maxSize); - } - return data.size(); -} - void QHttpNetworkConnectionPrivate::eraseData(QHttpNetworkReply *reply) { reply->d_func()->compressedData.clear(); @@ -259,7 +261,12 @@ void QHttpNetworkConnectionPrivate::prepareRequest(HttpMessagePair &messagePair) #ifndef QT_NO_NETWORKPROXY } #endif - // set the gzip header + + // If the request had a accept-encoding set, we better not mess + // with it. If it was not set, we announce that we understand gzip + // and remember this fact in request.d->autoDecompress so that + // we can later decompress the HTTP reply if it has such an + // encoding. value = request.headerField("accept-encoding"); if (value.isEmpty()) { #ifndef QT_NO_COMPRESS @@ -333,8 +340,9 @@ bool QHttpNetworkConnectionPrivate::ensureConnection(QAbstractSocket *socket) #ifndef QT_NO_OPENSSL QSslSocket *sslSocket = qobject_cast<QSslSocket*>(socket); sslSocket->connectToHostEncrypted(connectHost, connectPort); - if (channels[index].ignoreSSLErrors) + if (channels[index].ignoreAllSslErrors) sslSocket->ignoreSslErrors(); + sslSocket->ignoreSslErrors(channels[index].ignoreSslErrorsList); #else emitReplyError(socket, channels[index].reply, QNetworkReply::ProtocolUnknownError); #endif @@ -556,6 +564,8 @@ bool QHttpNetworkConnectionPrivate::expand(QAbstractSocket *socket, QHttpNetwork reply->d_func()->totalProgress += inflated.size(); appendUncompressedData(*reply, inflated); if (shouldEmitSignals(reply)) { + // important: At the point of this readyRead(), inflated must be cleared, + // else implicit sharing will trigger memcpy when the user is reading data! emit reply->readyRead(); // make sure that the reply is valid if (channels[i].reply != reply) @@ -672,18 +682,19 @@ void QHttpNetworkConnectionPrivate::receiveReply(QAbstractSocket *socket, QHttpN { // use the traditional slower reading (for compressed encoding, chunked encoding, // no content-length etc) - QBuffer fragment; - fragment.open(QIODevice::WriteOnly); - bytes = reply->d_func()->readBody(socket, &fragment); + QByteDataBuffer byteDatas; + bytes = reply->d_func()->readBody(socket, &byteDatas); if (bytes) { if (reply->d_func()->autoDecompress) - appendCompressedData(*reply, fragment.data()); + appendCompressedData(*reply, byteDatas); else - appendUncompressedData(*reply, fragment.data()); + appendUncompressedData(*reply, byteDatas); if (!reply->d_func()->autoDecompress) { - reply->d_func()->totalProgress += fragment.size(); + reply->d_func()->totalProgress += bytes; if (shouldEmitSignals(reply)) { + // important: At the point of this readyRead(), the byteDatas list must be empty, + // else implicit sharing will trigger memcpy when the user is reading data! emit reply->readyRead(); // make sure that the reply is valid if (channels[i].reply != reply) @@ -1438,15 +1449,32 @@ void QHttpNetworkConnection::ignoreSslErrors(int channel) if (channel == -1) { // ignore for all channels for (int i = 0; i < d->channelCount; ++i) { static_cast<QSslSocket *>(d->channels[i].socket)->ignoreSslErrors(); - d->channels[i].ignoreSSLErrors = true; + d->channels[i].ignoreAllSslErrors = true; } } else { static_cast<QSslSocket *>(d->channels[channel].socket)->ignoreSslErrors(); - d->channels[channel].ignoreSSLErrors = true; + d->channels[channel].ignoreAllSslErrors = true; } } +void QHttpNetworkConnection::ignoreSslErrors(const QList<QSslError> &errors, int channel) +{ + Q_D(QHttpNetworkConnection); + if (!d->encrypt) + return; + + if (channel == -1) { // ignore for all channels + for (int i = 0; i < d->channelCount; ++i) { + static_cast<QSslSocket *>(d->channels[i].socket)->ignoreSslErrors(errors); + d->channels[i].ignoreSslErrorsList = errors; + } + + } else { + static_cast<QSslSocket *>(d->channels[channel].socket)->ignoreSslErrors(errors); + d->channels[channel].ignoreSslErrorsList = errors; + } +} #endif //QT_NO_OPENSSL diff --git a/src/network/access/qhttpnetworkconnection_p.h b/src/network/access/qhttpnetworkconnection_p.h index a0813d4..52a73a7 100644 --- a/src/network/access/qhttpnetworkconnection_p.h +++ b/src/network/access/qhttpnetworkconnection_p.h @@ -79,6 +79,7 @@ QT_BEGIN_NAMESPACE class QHttpNetworkRequest; class QHttpNetworkReply; +class QByteArray; class QHttpNetworkConnectionPrivate; class Q_AUTOTEST_EXPORT QHttpNetworkConnection : public QObject @@ -116,6 +117,7 @@ public: #ifndef QT_NO_OPENSSL void setSslConfiguration(const QSslConfiguration &config); void ignoreSslErrors(int channel = -1); + void ignoreSslErrors(const QList<QSslError> &errors, int channel = -1); Q_SIGNALS: void sslErrors(const QList<QSslError> &errors); @@ -240,13 +242,14 @@ public: QAuthenticator authenticator; QAuthenticator proxyAuthenticator; #ifndef QT_NO_OPENSSL - bool ignoreSSLErrors; + bool ignoreAllSslErrors; + QList<QSslError> ignoreSslErrorsList; #endif Channel() : socket(0), state(IdleState), reply(0), written(0), bytesTotal(0), resendCurrent(false), lastStatus(0), pendingEncrypt(false), reconnectAttempts(2), authMehtod(QAuthenticatorPrivate::None), proxyAuthMehtod(QAuthenticatorPrivate::None) #ifndef QT_NO_OPENSSL - , ignoreSSLErrors(false) + , ignoreAllSslErrors(false) #endif {} }; @@ -255,15 +258,14 @@ public: bool pendingAuthSignal; // there is an incomplete authentication signal bool pendingProxyAuthSignal; // there is an incomplete proxy authentication signal - void appendUncompressedData(QHttpNetworkReply &reply, const QByteArray &fragment); - void appendCompressedData(QHttpNetworkReply &reply, const QByteArray &fragment); + void appendUncompressedData(QHttpNetworkReply &reply, QByteArray &qba); + void appendUncompressedData(QHttpNetworkReply &reply, QByteDataBuffer &data); + void appendCompressedData(QHttpNetworkReply &reply, QByteDataBuffer &data); qint64 uncompressedBytesAvailable(const QHttpNetworkReply &reply) const; qint64 uncompressedBytesAvailableNextBlock(const QHttpNetworkReply &reply) const; qint64 compressedBytesAvailable(const QHttpNetworkReply &reply) const; - qint64 read(QHttpNetworkReply &reply, QByteArray &data, qint64 maxSize); - void emitReplyError(QAbstractSocket *socket, QHttpNetworkReply *reply, QNetworkReply::NetworkError errorCode); bool handleAuthenticateChallenge(QAbstractSocket *socket, QHttpNetworkReply *reply, bool isProxy, bool &resend); void allDone(QAbstractSocket *socket, QHttpNetworkReply *reply); diff --git a/src/network/access/qhttpnetworkreply.cpp b/src/network/access/qhttpnetworkreply.cpp index 7a616aa..a623999 100644 --- a/src/network/access/qhttpnetworkreply.cpp +++ b/src/network/access/qhttpnetworkreply.cpp @@ -176,15 +176,6 @@ qint64 QHttpNetworkReply::bytesAvailableNextBlock() const return -1; } -QByteArray QHttpNetworkReply::read(qint64 maxSize) -{ - Q_D(QHttpNetworkReply); - QByteArray data; - if (d->connection) - d->connection->d_func()->read(*this, data, maxSize); - return data; -} - QByteArray QHttpNetworkReply::readAny() { Q_D(QHttpNetworkReply); @@ -203,7 +194,7 @@ QHttpNetworkReplyPrivate::QHttpNetworkReplyPrivate(const QUrl &newUrl) majorVersion(0), minorVersion(0), bodyLength(0), contentRead(0), totalProgress(0), chunkedTransferEncoding(0), currentChunkSize(0), currentChunkRead(0), connection(0), initInflate(false), - autoDecompress(false), responseData(0), requestIsPrepared(false) + autoDecompress(false), responseData(), requestIsPrepared(false) { } @@ -561,17 +552,19 @@ bool QHttpNetworkReplyPrivate::connectionCloseEnabled() // note this function can only be used for non-chunked, non-compressed with // known content length -qint64 QHttpNetworkReplyPrivate::readBodyFast(QAbstractSocket *socket, QRingBuffer *rb) -{ - quint64 toBeRead = qMin(socket->bytesAvailable(), bodyLength - contentRead); - char* dst = rb->reserve(toBeRead); - qint64 haveRead = socket->read(dst, toBeRead); +qint64 QHttpNetworkReplyPrivate::readBodyFast(QAbstractSocket *socket, QByteDataBuffer *rb) +{ + qint64 toBeRead = qMin(socket->bytesAvailable(), bodyLength - contentRead); + QByteArray bd; + bd.resize(toBeRead); + qint64 haveRead = socket->read(bd.data(), bd.size()); if (haveRead == -1) { - rb->chop(toBeRead); + bd.clear(); return 0; // ### error checking here; } + bd.resize(haveRead); - rb->chop(toBeRead - haveRead); + rb->append(bd); if (contentRead + haveRead == bodyLength) { state = AllDoneState; @@ -583,7 +576,7 @@ qint64 QHttpNetworkReplyPrivate::readBodyFast(QAbstractSocket *socket, QRingBuff } -qint64 QHttpNetworkReplyPrivate::readBody(QAbstractSocket *socket, QIODevice *out) +qint64 QHttpNetworkReplyPrivate::readBody(QAbstractSocket *socket, QByteDataBuffer *out) { qint64 bytes = 0; if (isChunked()) { @@ -601,33 +594,35 @@ qint64 QHttpNetworkReplyPrivate::readBody(QAbstractSocket *socket, QIODevice *ou return bytes; } -qint64 QHttpNetworkReplyPrivate::readReplyBodyRaw(QIODevice *in, QIODevice *out, qint64 size) +qint64 QHttpNetworkReplyPrivate::readReplyBodyRaw(QIODevice *in, QByteDataBuffer *out, qint64 size) { qint64 bytes = 0; Q_ASSERT(in); Q_ASSERT(out); int toBeRead = qMin<qint64>(128*1024, qMin<qint64>(size, in->bytesAvailable())); - QByteArray raw(toBeRead, 0); - while (size > 0) { - qint64 read = in->read(raw.data(), raw.size()); - if (read == 0) - return bytes; - // ### error checking here - qint64 written = out->write(raw.data(), read); - if (written == 0) + while (toBeRead > 0) { + QByteArray byteData; + byteData.resize(toBeRead); + qint64 haveRead = in->read(byteData.data(), byteData.size()); + if (haveRead <= 0) { + // ### error checking here + byteData.clear(); return bytes; - if (read != written) - qDebug() << "### read" << read << "written" << written; - bytes += read; - size -= read; - out->waitForBytesWritten(-1); // throttle + } + + byteData.resize(haveRead); + out->append(byteData); + bytes += haveRead; + size -= haveRead; + + toBeRead = qMin<qint64>(128*1024, qMin<qint64>(size, in->bytesAvailable())); } return bytes; } -qint64 QHttpNetworkReplyPrivate::readReplyBodyChunked(QIODevice *in, QIODevice *out) +qint64 QHttpNetworkReplyPrivate::readReplyBodyChunked(QIODevice *in, QByteDataBuffer *out) { qint64 bytes = 0; while (in->bytesAvailable()) { // while we can read from input @@ -648,17 +643,14 @@ qint64 QHttpNetworkReplyPrivate::readReplyBodyChunked(QIODevice *in, QIODevice * state = AllDoneState; break; } - // otherwise, read data - qint64 readSize = qMin(in->bytesAvailable(), currentChunkSize - currentChunkRead); - QByteArray buffer(readSize, 0); - qint64 read = in->read(buffer.data(), readSize); - bytes += read; - currentChunkRead += read; - qint64 written = out->write(buffer); - Q_UNUSED(written); // Avoid compile warning when building release - Q_ASSERT(read == written); + + // otherwise, try to read what is missing for this chunk + qint64 haveRead = readReplyBodyRaw (in, out, currentChunkSize - currentChunkRead); + currentChunkRead += haveRead; + bytes += haveRead; + // ### error checking here - out->waitForBytesWritten(-1); + } return bytes; } @@ -720,6 +712,13 @@ void QHttpNetworkReply::ignoreSslErrors() d->connection->ignoreSslErrors(); } +void QHttpNetworkReply::ignoreSslErrors(const QList<QSslError> &errors) +{ + Q_D(QHttpNetworkReply); + if (d->connection) + d->connection->ignoreSslErrors(errors); +} + #endif //QT_NO_OPENSSL diff --git a/src/network/access/qhttpnetworkreply_p.h b/src/network/access/qhttpnetworkreply_p.h index 5eb70ce..575e824 100644 --- a/src/network/access/qhttpnetworkreply_p.h +++ b/src/network/access/qhttpnetworkreply_p.h @@ -80,6 +80,7 @@ static const unsigned char gz_magic[2] = {0x1f, 0x8b}; // gzip magic header #include <private/qhttpnetworkrequest_p.h> #include <private/qauthenticator_p.h> #include <private/qringbuffer_p.h> +#include <private/qbytedata_p.h> QT_BEGIN_NAMESPACE @@ -122,7 +123,6 @@ public: qint64 bytesAvailable() const; qint64 bytesAvailableNextBlock() const; - QByteArray read(qint64 maxSize = -1); QByteArray readAny(); bool isFinished() const; @@ -131,6 +131,7 @@ public: QSslConfiguration sslConfiguration() const; void setSslConfiguration(const QSslConfiguration &config); void ignoreSslErrors(); + void ignoreSslErrors(const QList<QSslError> &errors); Q_SIGNALS: void sslErrors(const QList<QSslError> &errors); @@ -160,14 +161,14 @@ public: bool parseStatus(const QByteArray &status); qint64 readHeader(QAbstractSocket *socket); void parseHeader(const QByteArray &header); - qint64 readBody(QAbstractSocket *socket, QIODevice *out); - qint64 readBodyFast(QAbstractSocket *socket, QRingBuffer *rb); + qint64 readBody(QAbstractSocket *socket, QByteDataBuffer *out); + qint64 readBodyFast(QAbstractSocket *socket, QByteDataBuffer *rb); bool findChallenge(bool forProxy, QByteArray &challenge) const; QAuthenticatorPrivate::Method authenticationMethod(bool isProxy) const; void clear(); - qint64 readReplyBodyRaw(QIODevice *in, QIODevice *out, qint64 size); - qint64 readReplyBodyChunked(QIODevice *in, QIODevice *out); + qint64 readReplyBodyRaw(QIODevice *in, QByteDataBuffer *out, qint64 size); + qint64 readReplyBodyChunked(QIODevice *in, QByteDataBuffer *out); qint64 getChunkSize(QIODevice *in, qint64 *chunkSize); qint64 bytesAvailable() const; @@ -209,7 +210,7 @@ public: #endif bool autoDecompress; - QRingBuffer responseData; // uncompressed body + QByteDataBuffer responseData; // uncompressed body QByteArray compressedData; // compressed body (temporary) bool requestIsPrepared; }; diff --git a/src/network/access/qnetworkaccessbackend.cpp b/src/network/access/qnetworkaccessbackend.cpp index 88ae894..caaa38e 100644 --- a/src/network/access/qnetworkaccessbackend.cpp +++ b/src/network/access/qnetworkaccessbackend.cpp @@ -165,6 +165,12 @@ void QNetworkAccessBackend::ignoreSslErrors() // do nothing } +void QNetworkAccessBackend::ignoreSslErrors(const QList<QSslError> &errors) +{ + Q_UNUSED(errors); + // do nothing +} + void QNetworkAccessBackend::fetchSslConfiguration(QSslConfiguration &) const { // do nothing @@ -217,9 +223,9 @@ qint64 QNetworkAccessBackend::nextDownstreamBlockSize() const return reply->nextDownstreamBlockSize(); } -void QNetworkAccessBackend::writeDownstreamData(const QByteArray &data) +void QNetworkAccessBackend::writeDownstreamData(QByteDataBuffer &list) { - reply->appendDownstreamData(data); + reply->appendDownstreamData(list); } void QNetworkAccessBackend::writeDownstreamData(QIODevice *data) diff --git a/src/network/access/qnetworkaccessbackend_p.h b/src/network/access/qnetworkaccessbackend_p.h index 21cb4a6..27da5bc 100644 --- a/src/network/access/qnetworkaccessbackend_p.h +++ b/src/network/access/qnetworkaccessbackend_p.h @@ -118,6 +118,7 @@ public: virtual void downstreamReadyWrite(); virtual void copyFinished(QIODevice *); virtual void ignoreSslErrors(); + virtual void ignoreSslErrors(const QList<QSslError> &errors); virtual void fetchSslConfiguration(QSslConfiguration &configuration) const; virtual void setSslConfiguration(const QSslConfiguration &configuration); @@ -166,7 +167,7 @@ protected: // these functions control the downstream mechanism // that is, data that has come via the connection and is going out the backend qint64 nextDownstreamBlockSize() const; - void writeDownstreamData(const QByteArray &data); + void writeDownstreamData(QByteDataBuffer &list); public slots: // for task 251801, needs to be a slot to be called asynchronously diff --git a/src/network/access/qnetworkaccesscachebackend.cpp b/src/network/access/qnetworkaccesscachebackend.cpp index f46a50a..8571ba3 100644 --- a/src/network/access/qnetworkaccesscachebackend.cpp +++ b/src/network/access/qnetworkaccesscachebackend.cpp @@ -86,6 +86,20 @@ bool QNetworkAccessCacheBackend::sendCacheContents() setAttribute(QNetworkRequest::HttpReasonPhraseAttribute, attributes.value(QNetworkRequest::HttpReasonPhraseAttribute)); setAttribute(QNetworkRequest::SourceIsFromCacheAttribute, true); + // set the raw headers + QNetworkCacheMetaData::RawHeaderList rawHeaders = item.rawHeaders(); + QNetworkCacheMetaData::RawHeaderList::ConstIterator it = rawHeaders.constBegin(), + end = rawHeaders.constEnd(); + for ( ; it != end; ++it) + setRawHeader(it->first, it->second); + + // handle a possible redirect + QVariant redirectionTarget = attributes.value(QNetworkRequest::RedirectionTargetAttribute); + if (redirectionTarget.isValid()) { + setAttribute(QNetworkRequest::RedirectionTargetAttribute, redirectionTarget); + redirectionRequested(redirectionTarget.toUrl()); + } + // signal we're open metaDataChanged(); diff --git a/src/network/access/qnetworkaccessdatabackend.cpp b/src/network/access/qnetworkaccessdatabackend.cpp index 609f0c5..4436cf4 100644 --- a/src/network/access/qnetworkaccessdatabackend.cpp +++ b/src/network/access/qnetworkaccessdatabackend.cpp @@ -117,7 +117,11 @@ void QNetworkAccessDataBackend::open() setHeader(QNetworkRequest::ContentLengthHeader, payload.size()); emit metaDataChanged(); - writeDownstreamData(payload); + QByteDataBuffer list; + list.append(payload); + payload.clear(); // important because of implicit sharing! + writeDownstreamData(list); + finished(); return; } diff --git a/src/network/access/qnetworkaccessdebugpipebackend.cpp b/src/network/access/qnetworkaccessdebugpipebackend.cpp index 54fcddd..394e196 100644 --- a/src/network/access/qnetworkaccessdebugpipebackend.cpp +++ b/src/network/access/qnetworkaccessdebugpipebackend.cpp @@ -155,7 +155,11 @@ void QNetworkAccessDebugPipeBackend::pushFromSocketToDownstream() // have read something buffer.resize(haveRead); bytesDownloaded += haveRead; - writeDownstreamData(buffer); + + QByteDataBuffer list; + list.append(buffer); + buffer.clear(); // important because of implicit sharing! + writeDownstreamData(list); } } } @@ -276,6 +280,7 @@ void QNetworkAccessDebugPipeBackend::socketConnected() bool QNetworkAccessDebugPipeBackend::waitForDownstreamReadyRead(int ms) { + Q_UNUSED(ms); qCritical("QNetworkAccess: Debug pipe backend does not support waitForReadyRead()"); return false; } diff --git a/src/network/access/qnetworkaccessfilebackend.cpp b/src/network/access/qnetworkaccessfilebackend.cpp index e3fc8bf..533fc75 100644 --- a/src/network/access/qnetworkaccessfilebackend.cpp +++ b/src/network/access/qnetworkaccessfilebackend.cpp @@ -263,7 +263,11 @@ bool QNetworkAccessFileBackend::readMoreFromFile() data.resize(actuallyRead); totalBytes += actuallyRead; - writeDownstreamData(data); + + QByteDataBuffer list; + list.append(data); + data.clear(); // important because of implicit sharing! + writeDownstreamData(list); } return true; } diff --git a/src/network/access/qnetworkaccessftpbackend.cpp b/src/network/access/qnetworkaccessftpbackend.cpp index d6276a3..911b31a 100644 --- a/src/network/access/qnetworkaccessftpbackend.cpp +++ b/src/network/access/qnetworkaccessftpbackend.cpp @@ -355,7 +355,11 @@ void QNetworkAccessFtpBackend::ftpDone() void QNetworkAccessFtpBackend::ftpReadyRead() { - writeDownstreamData(ftp->readAll()); + QByteArray data = ftp->readAll(); + QByteDataBuffer list; + list.append(data); + data.clear(); // important because of implicit sharing! + writeDownstreamData(list); } void QNetworkAccessFtpBackend::ftpRawCommandReply(int code, const QString &text) diff --git a/src/network/access/qnetworkaccesshttpbackend.cpp b/src/network/access/qnetworkaccesshttpbackend.cpp index db84e58..5c85735 100644 --- a/src/network/access/qnetworkaccesshttpbackend.cpp +++ b/src/network/access/qnetworkaccesshttpbackend.cpp @@ -294,7 +294,7 @@ public: QNetworkAccessHttpBackend::QNetworkAccessHttpBackend() : QNetworkAccessBackend(), httpReply(0), http(0), uploadDevice(0) #ifndef QT_NO_OPENSSL - , pendingSslConfiguration(0), pendingIgnoreSslErrors(false) + , pendingSslConfiguration(0), pendingIgnoreAllSslErrors(false) #endif { } @@ -521,8 +521,9 @@ void QNetworkAccessHttpBackend::postRequest() #ifndef QT_NO_OPENSSL if (pendingSslConfiguration) httpReply->setSslConfiguration(*pendingSslConfiguration); - if (pendingIgnoreSslErrors) + if (pendingIgnoreAllSslErrors) httpReply->ignoreSslErrors(); + httpReply->ignoreSslErrors(pendingIgnoreSslErrorsList); #endif connect(httpReply, SIGNAL(readyRead()), SLOT(replyReadyRead())); @@ -653,10 +654,15 @@ void QNetworkAccessHttpBackend::readFromHttp() // this is not a critical thing since it is already in the // memory anyway - while (httpReply->bytesAvailable() != 0 && nextDownstreamBlockSize() != 0) { - const QByteArray data = httpReply->readAny(); - writeDownstreamData(data); + QByteDataBuffer list; + + while (httpReply->bytesAvailable() != 0 && nextDownstreamBlockSize() != 0 && nextDownstreamBlockSize() > list.byteAmount()) { + QByteArray data = httpReply->readAny(); + list.append(data); } + + if (!list.isEmpty()) + writeDownstreamData(list); } void QNetworkAccessHttpBackend::replyFinished() @@ -878,7 +884,18 @@ void QNetworkAccessHttpBackend::ignoreSslErrors() if (httpReply) httpReply->ignoreSslErrors(); else - pendingIgnoreSslErrors = true; + pendingIgnoreAllSslErrors = true; +} + +void QNetworkAccessHttpBackend::ignoreSslErrors(const QList<QSslError> &errors) +{ + if (httpReply) { + httpReply->ignoreSslErrors(errors); + } else { + // the pending list is set if QNetworkReply::ignoreSslErrors(const QList<QSslError> &errors) + // is called before QNetworkAccessManager::get() (or post(), etc.) + pendingIgnoreSslErrorsList = errors; + } } void QNetworkAccessHttpBackend::fetchSslConfiguration(QSslConfiguration &config) const diff --git a/src/network/access/qnetworkaccesshttpbackend_p.h b/src/network/access/qnetworkaccesshttpbackend_p.h index dec69d0..968f4a5 100644 --- a/src/network/access/qnetworkaccesshttpbackend_p.h +++ b/src/network/access/qnetworkaccesshttpbackend_p.h @@ -85,6 +85,7 @@ public: virtual void copyFinished(QIODevice *); #ifndef QT_NO_OPENSSL virtual void ignoreSslErrors(); + virtual void ignoreSslErrors(const QList<QSslError> &errors); virtual void fetchSslConfiguration(QSslConfiguration &configuration) const; virtual void setSslConfiguration(const QSslConfiguration &configuration); @@ -112,7 +113,8 @@ private: #ifndef QT_NO_OPENSSL QSslConfiguration *pendingSslConfiguration; - bool pendingIgnoreSslErrors; + bool pendingIgnoreAllSslErrors; + QList<QSslError> pendingIgnoreSslErrorsList; #endif void disconnectFromHttp(); diff --git a/src/network/access/qnetworkaccessmanager.cpp b/src/network/access/qnetworkaccessmanager.cpp index 907aaef..61e5601 100644 --- a/src/network/access/qnetworkaccessmanager.cpp +++ b/src/network/access/qnetworkaccessmanager.cpp @@ -540,10 +540,10 @@ void QNetworkAccessManager::setCookieJar(QNetworkCookieJar *cookieJar) } /*! - This function is used to post a request to obtain the network - headers for \a request. It takes its name after the HTTP request - associated (HEAD). It returns a new QNetworkReply object which - will contain such headers. + Posts a request to obtain the network headers for \a request + and returns a new QNetworkReply object which will contain such headers + + The function is named after the HTTP request associated (HEAD). */ QNetworkReply *QNetworkAccessManager::head(const QNetworkRequest &request) { @@ -551,11 +551,12 @@ QNetworkReply *QNetworkAccessManager::head(const QNetworkRequest &request) } /*! - This function is used to post a request to obtain the contents of - the target \a request. It will cause the contents to be - downloaded, along with the headers associated with it. It returns - a new QNetworkReply object opened for reading which emits its - QIODevice::readyRead() signal whenever new data arrives. + Posts a request to obtain the contents of the target \a request + and returns a new QNetworkReply object opened for reading which emits the + \l{QIODevice::readyRead()}{readyRead()} signal whenever new data + arrives. + + The contents as well as associated headers will be downloaded. \sa post(), put(), deleteResource() */ @@ -565,18 +566,15 @@ QNetworkReply *QNetworkAccessManager::get(const QNetworkRequest &request) } /*! - This function is used to send an HTTP POST request to the - destination specified by \a request. The contents of the \a data + Sends an HTTP POST request to the destination specified by \a request + and returns a new QNetworkReply object opened for reading that will + contain the reply sent by the server. The contents of the \a data device will be uploaded to the server. - \a data must be opened for reading when this function is called - and must remain valid until the finished() signal is emitted for - this reply. - - The returned QNetworkReply object will be open for reading and - will contain the reply sent by the server to the POST request. + \a data must be open for reading and must remain valid until the + finished() signal is emitted for this reply. - Note: sending a POST request on protocols other than HTTP and + \note Sending a POST request on protocols other than HTTP and HTTPS is undefined and will probably fail. \sa get(), put(), deleteResource() @@ -588,8 +586,9 @@ QNetworkReply *QNetworkAccessManager::post(const QNetworkRequest &request, QIODe /*! \overload - This function sends the contents of the \a data byte array to the - destination specified by \a request. + + Sends the contents of the \a data byte array to the destination + specified by \a request. */ QNetworkReply *QNetworkAccessManager::post(const QNetworkRequest &request, const QByteArray &data) { @@ -603,20 +602,19 @@ QNetworkReply *QNetworkAccessManager::post(const QNetworkRequest &request, const } /*! - This function is used to upload the contents of \a data to the - destination \a request. + Uploads the contents of \a data to the destination \a request and + returnes a new QNetworkReply object that will be open for reply. \a data must be opened for reading when this function is called and must remain valid until the finished() signal is emitted for this reply. - The returned QNetworkReply object will be open for reply, but - whether anything will be available for reading is protocol - dependent. For HTTP, the server may send a small HTML page - indicating the upload was successful (or not). Other protocols - will probably have content in their replies. + Whether anything will be available for reading from the returned + object is protocol dependent. For HTTP, the server may send a + small HTML page indicating the upload was successful (or not). + Other protocols will probably have content in their replies. - For HTTP, this request will send a PUT request, which most servers + \note For HTTP, this request will send a PUT request, which most servers do not allow. Form upload mechanisms, including that of uploading files through HTML forms, use the POST mechanism. @@ -629,8 +627,8 @@ QNetworkReply *QNetworkAccessManager::put(const QNetworkRequest &request, QIODev /*! \overload - This function sends the contents of the \a data byte array to the - destination specified by \a request. + Sends the contents of the \a data byte array to the destination + specified by \a request. */ QNetworkReply *QNetworkAccessManager::put(const QNetworkRequest &request, const QByteArray &data) { @@ -646,9 +644,10 @@ QNetworkReply *QNetworkAccessManager::put(const QNetworkRequest &request, const /*! \since 4.6 - This function is used to send a request to delete the resource - identified by the URL of \a request. - This feature is currently available for HTTP only, performing an HTTP DELETE request. + Sends a request to delete the resource identified by the URL of \a request. + + \note This feature is currently available for HTTP only, performing an + HTTP DELETE request. \sa get(), post(), put() */ diff --git a/src/network/access/qnetworkreply.cpp b/src/network/access/qnetworkreply.cpp index e807d29..3abf927 100644 --- a/src/network/access/qnetworkreply.cpp +++ b/src/network/access/qnetworkreply.cpp @@ -584,6 +584,38 @@ void QNetworkReply::setSslConfiguration(const QSslConfiguration &config) qt_metacall(QMetaObject::InvokeMetaMethod, id, arr); } } + +/*! + \overload + \since 4.6 + + If this function is called, the SSL errors given in \a errors + will be ignored. + + Note that you can set the expected certificate in the SSL error: + If, for instance, you want to issue a request to a server that uses + a self-signed certificate, consider the following snippet: + + \snippet doc/src/snippets/code/src_network_access_qnetworkreply.cpp 0 + + Multiple calls to this function will replace the list of errors that + were passed in previous calls. + You can clear the list of errors you want to ignore by calling this + function with an empty list. + + \sa sslConfiguration(), sslErrors(), QSslSocket::ignoreSslErrors() +*/ +void QNetworkReply::ignoreSslErrors(const QList<QSslError> &errors) +{ + // do this cryptic trick, because we could not add a virtual method to this class later on + // since that breaks binary compatibility + int id = metaObject()->indexOfMethod("ignoreSslErrorsImplementation(QList<QSslError>)"); + if (id != -1) { + QList<QSslError> copy(errors); + void *arr[] = { 0, © }; + qt_metacall(QMetaObject::InvokeMetaMethod, id, arr); + } +} #endif /*! @@ -598,7 +630,7 @@ void QNetworkReply::setSslConfiguration(const QSslConfiguration &config) sslErrors() signal, which indicates which errors were found. - \sa sslConfiguration(), sslErrors() + \sa sslConfiguration(), sslErrors(), QSslSocket::ignoreSslErrors() */ void QNetworkReply::ignoreSslErrors() { diff --git a/src/network/access/qnetworkreply.h b/src/network/access/qnetworkreply.h index 30e89f1..679ab71 100644 --- a/src/network/access/qnetworkreply.h +++ b/src/network/access/qnetworkreply.h @@ -134,6 +134,7 @@ public: #ifndef QT_NO_OPENSSL QSslConfiguration sslConfiguration() const; void setSslConfiguration(const QSslConfiguration &configuration); + void ignoreSslErrors(const QList<QSslError> &errors); #endif public Q_SLOTS: diff --git a/src/network/access/qnetworkreplyimpl.cpp b/src/network/access/qnetworkreplyimpl.cpp index 55b8b7f..de7f8b4 100644 --- a/src/network/access/qnetworkreplyimpl.cpp +++ b/src/network/access/qnetworkreplyimpl.cpp @@ -103,16 +103,17 @@ void QNetworkReplyImplPrivate::_q_copyReadyRead() break; bytesToRead = qBound<qint64>(1, bytesToRead, copyDevice->bytesAvailable()); - char *ptr = readBuffer.reserve(bytesToRead); - qint64 bytesActuallyRead = copyDevice->read(ptr, bytesToRead); + QByteArray byteData; + byteData.resize(bytesToRead); + qint64 bytesActuallyRead = copyDevice->read(byteData.data(), byteData.size()); if (bytesActuallyRead == -1) { - readBuffer.chop(bytesToRead); + byteData.clear(); backendNotify(NotifyCopyFinished); break; } - if (bytesActuallyRead != bytesToRead) - readBuffer.chop(bytesToRead - bytesActuallyRead); + byteData.resize(bytesActuallyRead); + readBuffer.append(byteData); if (!copyDevice->isSequential() && copyDevice->atEnd()) { backendNotify(NotifyCopyFinished); @@ -384,25 +385,33 @@ qint64 QNetworkReplyImplPrivate::nextDownstreamBlockSize() const if (readBufferMaxSize == 0) return DesiredBufferSize; - return qMax<qint64>(0, readBufferMaxSize - readBuffer.size()); + return qMax<qint64>(0, readBufferMaxSize - readBuffer.byteAmount()); } // we received downstream data and send this to the cache // and to our readBuffer (which in turn gets read by the user of QNetworkReply) -void QNetworkReplyImplPrivate::appendDownstreamData(const QByteArray &data) +void QNetworkReplyImplPrivate::appendDownstreamData(QByteDataBuffer &data) { Q_Q(QNetworkReplyImpl); if (!q->isOpen()) return; - readBuffer.append(data); - if (cacheEnabled && !cacheSaveDevice) { // save the meta data QNetworkCacheMetaData metaData; metaData.setUrl(url); metaData = backend->fetchCacheMetaData(metaData); + + // save the redirect request also in the cache + QVariant redirectionTarget = q->attribute(QNetworkRequest::RedirectionTargetAttribute); + if (redirectionTarget.isValid()) { + QNetworkCacheMetaData::AttributesMap attributes = metaData.attributes(); + attributes.insert(QNetworkRequest::RedirectionTargetAttribute, redirectionTarget); + metaData.setAttributes(attributes); + } + cacheSaveDevice = networkCache->prepare(metaData); + if (!cacheSaveDevice || (cacheSaveDevice && !cacheSaveDevice->isOpen())) { if (cacheSaveDevice && !cacheSaveDevice->isOpen()) qCritical("QNetworkReplyImpl: network cache returned a device that is not open -- " @@ -415,10 +424,19 @@ void QNetworkReplyImplPrivate::appendDownstreamData(const QByteArray &data) } } - if (cacheSaveDevice) - cacheSaveDevice->write(data); + qint64 bytesWritten = 0; + for (int i = 0; i < data.bufferCount(); i++) { + QByteArray item = data[i]; + + if (cacheSaveDevice) + cacheSaveDevice->write(item.constData(), item.size()); + readBuffer.append(item); - bytesDownloaded += data.size(); + bytesWritten += item.size(); + } + data.clear(); + + bytesDownloaded += bytesWritten; lastBytesDownloaded = bytesDownloaded; QPointer<QNetworkReplyImpl> qq = q; @@ -427,6 +445,8 @@ void QNetworkReplyImplPrivate::appendDownstreamData(const QByteArray &data) pauseNotificationHandling(); emit q->downloadProgress(bytesDownloaded, totalSize.isNull() ? Q_INT64_C(-1) : totalSize.toLongLong()); + // important: At the point of this readyRead(), the data parameter list must be empty, + // else implicit sharing will trigger memcpy when the user is reading data! emit q->readyRead(); // hopefully we haven't been deleted here @@ -602,14 +622,14 @@ void QNetworkReplyImpl::close() */ qint64 QNetworkReplyImpl::bytesAvailable() const { - return QNetworkReply::bytesAvailable() + d_func()->readBuffer.size(); + return QNetworkReply::bytesAvailable() + d_func()->readBuffer.byteAmount(); } void QNetworkReplyImpl::setReadBufferSize(qint64 size) { Q_D(QNetworkReplyImpl); if (size > d->readBufferMaxSize && - size == d->readBuffer.size()) + size > d->readBuffer.byteAmount()) d->backendNotify(QNetworkReplyImplPrivate::NotifyDownstreamReadyWrite); QNetworkReply::setReadBufferSize(size); @@ -639,6 +659,12 @@ void QNetworkReplyImpl::ignoreSslErrors() d->backend->ignoreSslErrors(); } +void QNetworkReplyImpl::ignoreSslErrorsImplementation(const QList<QSslError> &errors) +{ + Q_D(QNetworkReplyImpl); + if (d->backend) + d->backend->ignoreSslErrors(errors); +} #endif // QT_NO_OPENSSL /*! @@ -657,7 +683,7 @@ qint64 QNetworkReplyImpl::readData(char *data, qint64 maxlen) return 1; } - maxlen = qMin<qint64>(maxlen, d->readBuffer.size()); + maxlen = qMin<qint64>(maxlen, d->readBuffer.byteAmount()); return d->readBuffer.read(data, maxlen); } diff --git a/src/network/access/qnetworkreplyimpl_p.h b/src/network/access/qnetworkreplyimpl_p.h index 454185a..fba8d34 100644 --- a/src/network/access/qnetworkreplyimpl_p.h +++ b/src/network/access/qnetworkreplyimpl_p.h @@ -61,6 +61,7 @@ #include "QtCore/qqueue.h" #include "QtCore/qbuffer.h" #include "private/qringbuffer_p.h" +#include "private/qbytedata_p.h" QT_BEGIN_NAMESPACE @@ -88,6 +89,7 @@ public: Q_INVOKABLE QSslConfiguration sslConfigurationImplementation() const; Q_INVOKABLE void setSslConfigurationImplementation(const QSslConfiguration &configuration); virtual void ignoreSslErrors(); + Q_INVOKABLE virtual void ignoreSslErrorsImplementation(const QList<QSslError> &errors); #endif Q_DECLARE_PRIVATE(QNetworkReplyImpl) @@ -144,7 +146,7 @@ public: void consume(qint64 count); void emitUploadProgress(qint64 bytesSent, qint64 bytesTotal); qint64 nextDownstreamBlockSize() const; - void appendDownstreamData(const QByteArray &data); + void appendDownstreamData(QByteDataBuffer &data); void appendDownstreamData(QIODevice *data); void finished(); void error(QNetworkReply::NetworkError code, const QString &errorString); @@ -172,7 +174,7 @@ public: QList<QNetworkProxy> proxyList; #endif - QRingBuffer readBuffer; + QByteDataBuffer readBuffer; qint64 bytesDownloaded; qint64 lastBytesDownloaded; qint64 bytesUploaded; diff --git a/src/network/access/qnetworkrequest.cpp b/src/network/access/qnetworkrequest.cpp index 42e3f09..c1fc87d 100644 --- a/src/network/access/qnetworkrequest.cpp +++ b/src/network/access/qnetworkrequest.cpp @@ -153,9 +153,7 @@ QT_BEGIN_NAMESPACE future uses. If the value is false, the data obtained will not be automatically cached. If true, data may be cached, provided it is cacheable (what is cacheable depends on the protocol - being used). Note that the default QNetworkAccessManager - implementation does not support caching, so it will ignore - this attribute. + being used). \value SourceIsFromCacheAttribute Replies only, type: QVariant::Bool (default: false) diff --git a/src/network/socket/qhttpsocketengine.cpp b/src/network/socket/qhttpsocketengine.cpp index 7bac1f2..156a9f4 100644 --- a/src/network/socket/qhttpsocketengine.cpp +++ b/src/network/socket/qhttpsocketengine.cpp @@ -454,6 +454,7 @@ void QHttpSocketEngine::slotSocketConnected() data += path; data += " HTTP/1.1\r\n"; data += "Proxy-Connection: keep-alive\r\n" + "User-Agent: Mozilla/5.0\r\n" "Host: " + peerAddress + "\r\n"; QAuthenticatorPrivate *priv = QAuthenticatorPrivate::getPrivate(d->authenticator); //qDebug() << "slotSocketConnected: priv=" << priv << (priv ? (int)priv->method : -1); diff --git a/src/network/socket/qlocalsocket_win.cpp b/src/network/socket/qlocalsocket_win.cpp index 794b2b7..3a36ac0 100644 --- a/src/network/socket/qlocalsocket_win.cpp +++ b/src/network/socket/qlocalsocket_win.cpp @@ -514,7 +514,7 @@ bool QLocalSocket::waitForReadyRead(int msecs) return false; } - qWarning("QLocalSocket::waitForReadyRead WaitForSingleObject failed with error code %d.", GetLastError()); + qWarning("QLocalSocket::waitForReadyRead WaitForSingleObject failed with error code %d.", int(GetLastError())); return false; } diff --git a/src/network/socket/qnativesocketengine_win.cpp b/src/network/socket/qnativesocketengine_win.cpp index ce8d810..6bc23ce 100644 --- a/src/network/socket/qnativesocketengine_win.cpp +++ b/src/network/socket/qnativesocketengine_win.cpp @@ -166,11 +166,11 @@ static QByteArray qt_prettyDebug(const char *data, int len, int maxLength) Extracts the port and address from a sockaddr, and stores them in \a port and \a addr if they are non-null. */ -static inline void qt_socket_getPortAndAddress(SOCKET socketDescriptor, struct sockaddr *sa, quint16 *port, QHostAddress *address) +static inline void qt_socket_getPortAndAddress(SOCKET socketDescriptor, const qt_sockaddr *sa, quint16 *port, QHostAddress *address) { #if !defined (QT_NO_IPV6) - if (sa->sa_family == AF_INET6) { - qt_sockaddr_in6 *sa6 = (qt_sockaddr_in6 *)sa; + if (sa->a.sa_family == AF_INET6) { + const qt_sockaddr_in6 *sa6 = &sa->a6; Q_IPV6ADDR tmp; for (int i = 0; i < 16; ++i) tmp.c[i] = sa6->sin6_addr.qt_s6_addr[i]; @@ -182,8 +182,8 @@ static inline void qt_socket_getPortAndAddress(SOCKET socketDescriptor, struct s WSANtohs(socketDescriptor, sa6->sin6_port, port); } else #endif - if (sa->sa_family == AF_INET) { - struct sockaddr_in *sa4 = (struct sockaddr_in *)sa; + if (sa->a.sa_family == AF_INET) { + const sockaddr_in *sa4 = &sa->a4; unsigned long addr; WSANtohl(socketDescriptor, sa4->sin_addr.s_addr, &addr); QHostAddress a; @@ -463,20 +463,15 @@ bool QNativeSocketEnginePrivate::fetchConnectionParameters() if (socketDescriptor == -1) return false; -#if !defined (QT_NO_IPV6) - struct qt_sockaddr_storage sa; -#else - struct sockaddr_in sa; -#endif - struct sockaddr *pSa = (struct sockaddr *) &sa; - - QT_SOCKLEN_T sz = sizeof(sa); + qt_sockaddr sa; + QT_SOCKLEN_T sockAddrSize = sizeof(sa); + // Determine local address memset(&sa, 0, sizeof(sa)); - if (::getsockname(socketDescriptor, pSa, &sz) == 0) { - qt_socket_getPortAndAddress(socketDescriptor, pSa, &localPort, &localAddress); + if (::getsockname(socketDescriptor, &sa.a, &sockAddrSize) == 0) { + qt_socket_getPortAndAddress(socketDescriptor, &sa, &localPort, &localAddress); // Determine protocol family - switch (pSa->sa_family) { + switch (sa.a.sa_family) { case AF_INET: socketProtocol = QAbstractSocket::IPv4Protocol; break; @@ -500,8 +495,8 @@ bool QNativeSocketEnginePrivate::fetchConnectionParameters() } memset(&sa, 0, sizeof(sa)); - if (::getpeername(socketDescriptor, pSa, &sz) == 0) { - qt_socket_getPortAndAddress(socketDescriptor, pSa, &peerPort, &peerAddress); + if (::getpeername(socketDescriptor, &sa.a, &sockAddrSize) == 0) { + qt_socket_getPortAndAddress(socketDescriptor, &sa, &peerPort, &peerAddress); } else { WS_ERROR_DEBUG(WSAGetLastError()); } @@ -533,8 +528,8 @@ bool QNativeSocketEnginePrivate::nativeConnect(const QHostAddress &address, quin struct sockaddr_in sockAddrIPv4; qt_sockaddr_in6 sockAddrIPv6; - struct sockaddr *sockAddrPtr; - QT_SOCKLEN_T sockAddrSize; + struct sockaddr *sockAddrPtr = 0; + QT_SOCKLEN_T sockAddrSize = 0; qt_socket_setPortAndAddress(socketDescriptor, &sockAddrIPv4, &sockAddrIPv6, port, address, &sockAddrPtr, &sockAddrSize); @@ -638,8 +633,8 @@ bool QNativeSocketEnginePrivate::nativeBind(const QHostAddress &address, quint16 { struct sockaddr_in sockAddrIPv4; qt_sockaddr_in6 sockAddrIPv6; - struct sockaddr *sockAddrPtr; - QT_SOCKLEN_T sockAddrSize; + struct sockaddr *sockAddrPtr = 0; + QT_SOCKLEN_T sockAddrSize = 0; qt_socket_setPortAndAddress(socketDescriptor, &sockAddrIPv4, &sockAddrIPv6, port, address, &sockAddrPtr, &sockAddrSize); @@ -766,20 +761,9 @@ bool QNativeSocketEnginePrivate::nativeHasPendingDatagrams() const { #if !defined(Q_OS_WINCE) // Create a sockaddr struct and reset its port number. -#if !defined(QT_NO_IPV6) - qt_sockaddr_in6 storage; - qt_sockaddr_in6 *storagePtrIPv6 = reinterpret_cast<qt_sockaddr_in6 *>(&storage); - storagePtrIPv6->sin6_port = 0; -#else - struct sockaddr storage; -#endif - sockaddr *storagePtr = reinterpret_cast<sockaddr *>(&storage); - storagePtr->sa_family = 0; - - sockaddr_in *storagePtrIPv4 = reinterpret_cast<sockaddr_in *>(&storage); - storagePtrIPv4->sin_port = 0; + qt_sockaddr storage; QT_SOCKLEN_T storageSize = sizeof(storage); - + memset(&storage, 0, storageSize); bool result = false; @@ -791,7 +775,7 @@ bool QNativeSocketEnginePrivate::nativeHasPendingDatagrams() const buf.len = sizeof(c); DWORD available = 0; DWORD flags = MSG_PEEK; - int ret = ::WSARecvFrom(socketDescriptor, &buf, 1, &available, &flags, storagePtr, &storageSize,0,0); + int ret = ::WSARecvFrom(socketDescriptor, &buf, 1, &available, &flags, &storage.a, &storageSize,0,0); int err = WSAGetLastError(); if (ret == SOCKET_ERROR && err != WSAEMSGSIZE) { WS_ERROR_DEBUG(err); @@ -801,7 +785,7 @@ bool QNativeSocketEnginePrivate::nativeHasPendingDatagrams() const // notifiers. flags = 0; ::WSARecvFrom(socketDescriptor, &buf, 1, &available, &flags, - storagePtr, &storageSize, 0, 0); + &storage.a, &storageSize, 0, 0); } } else { // If there's no error, or if our buffer was too small, there must be @@ -893,14 +877,11 @@ qint64 QNativeSocketEnginePrivate::nativeReceiveDatagram(char *data, qint64 maxL { qint64 ret = 0; -#if !defined(QT_NO_IPV6) - qt_sockaddr_storage aa; -#else - struct sockaddr_in aa; -#endif + qt_sockaddr aa; memset(&aa, 0, sizeof(aa)); QT_SOCKLEN_T sz; sz = sizeof(aa); + WSABUF buf; buf.buf = data; buf.len = maxLength; @@ -915,7 +896,7 @@ qint64 QNativeSocketEnginePrivate::nativeReceiveDatagram(char *data, qint64 maxL DWORD flags = 0; DWORD bytesRead = 0; - int wsaRet = ::WSARecvFrom(socketDescriptor, &buf, 1, &bytesRead, &flags, (struct sockaddr *) &aa, &sz,0,0); + int wsaRet = ::WSARecvFrom(socketDescriptor, &buf, 1, &bytesRead, &flags, &aa.a, &sz,0,0); if (wsaRet == SOCKET_ERROR) { int err = WSAGetLastError(); WS_ERROR_DEBUG(err); @@ -925,7 +906,7 @@ qint64 QNativeSocketEnginePrivate::nativeReceiveDatagram(char *data, qint64 maxL ret = qint64(bytesRead); } - qt_socket_getPortAndAddress(socketDescriptor, (struct sockaddr *) &aa, port, address); + qt_socket_getPortAndAddress(socketDescriptor, &aa, port, address); #if defined (QNATIVESOCKETENGINE_DEBUG) qDebug("QNativeSocketEnginePrivate::nativeReceiveDatagram(%p \"%s\", %li, %s, %i) == %li", @@ -944,8 +925,8 @@ qint64 QNativeSocketEnginePrivate::nativeSendDatagram(const char *data, qint64 l qint64 ret = -1; struct sockaddr_in sockAddrIPv4; qt_sockaddr_in6 sockAddrIPv6; - struct sockaddr *sockAddrPtr; - QT_SOCKLEN_T sockAddrSize; + struct sockaddr *sockAddrPtr = 0; + QT_SOCKLEN_T sockAddrSize = 0; qt_socket_setPortAndAddress(socketDescriptor, &sockAddrIPv4, &sockAddrIPv6, port, address, &sockAddrPtr, &sockAddrSize); diff --git a/src/network/socket/qnet_unix_p.h b/src/network/socket/qnet_unix_p.h index b33d225..03ed3b4 100644 --- a/src/network/socket/qnet_unix_p.h +++ b/src/network/socket/qnet_unix_p.h @@ -138,7 +138,8 @@ static inline int qt_safe_listen(int s, int backlog) static inline int qt_safe_connect(int sockfd, const struct sockaddr *addr, QT_SOCKLEN_T addrlen) { register int ret; - EINTR_LOOP(ret, QT_SOCKET_CONNECT(sockfd, addr, addrlen)); + // Solaris e.g. expects a non-const 2nd parameter + EINTR_LOOP(ret, QT_SOCKET_CONNECT(sockfd, const_cast<struct sockaddr *>(addr), addrlen)); return ret; } #undef QT_SOCKET_CONNECT diff --git a/src/network/socket/qudpsocket.cpp b/src/network/socket/qudpsocket.cpp index ea7753c..797becb 100644 --- a/src/network/socket/qudpsocket.cpp +++ b/src/network/socket/qudpsocket.cpp @@ -70,6 +70,9 @@ pendingDatagramSize() to obtain the size of the first pending datagram, and readDatagram() to read it. + \note An incoming datagram should be read when you receive the readyRead() + signal, otherwise this signal will not be emitted for the next datagram. + Example: \snippet doc/src/snippets/code/src_network_socket_qudpsocket.cpp 0 diff --git a/src/network/ssl/qsslsocket.cpp b/src/network/ssl/qsslsocket.cpp index fc297e4..df0afe3 100644 --- a/src/network/ssl/qsslsocket.cpp +++ b/src/network/ssl/qsslsocket.cpp @@ -356,7 +356,7 @@ QSslSocket::~QSslSocket() want to ignore the errors and continue connecting, you must call ignoreSslErrors(), either from inside a slot function connected to the sslErrors() signal, or prior to entering encrypted mode. If - ignoreSslErrors is not called, the connection is dropped, signal + ignoreSslErrors() is not called, the connection is dropped, signal disconnected() is emitted, and QSslSocket returns to the UnconnectedState. @@ -1592,7 +1592,33 @@ void QSslSocket::startServerEncryption() void QSslSocket::ignoreSslErrors() { Q_D(QSslSocket); - d->ignoreSslErrors = true; + d->ignoreAllSslErrors = true; +} + +/*! + \overload + \since 4.6 + + This method tells QSslSocket to ignore only the errors given in \a + errors. + + Note that you can set the expected certificate in the SSL error: + If, for instance, you want to connect to a server that uses + a self-signed certificate, consider the following snippet: + + \snippet doc/src/snippets/code/src_network_ssl_qsslsocket.cpp 6 + + Multiple calls to this function will replace the list of errors that + were passed in previous calls. + You can clear the list of errors you want to ignore by calling this + function with an empty list. + + \sa sslErrors() +*/ +void QSslSocket::ignoreSslErrors(const QList<QSslError> &errors) +{ + Q_D(QSslSocket); + d->ignoreErrorsList = errors; } /*! @@ -1732,7 +1758,11 @@ void QSslSocketPrivate::init() mode = QSslSocket::UnencryptedMode; autoStartHandshake = false; connectionEncrypted = false; - ignoreSslErrors = false; + ignoreAllSslErrors = false; + + // we don't want to clear the ignoreErrorsList, so + // that it is possible setting it before connecting +// ignoreErrorsList.clear(); readBuffer.clear(); writeBuffer.clear(); diff --git a/src/network/ssl/qsslsocket.h b/src/network/ssl/qsslsocket.h index 785a083..cab0667 100644 --- a/src/network/ssl/qsslsocket.h +++ b/src/network/ssl/qsslsocket.h @@ -169,6 +169,7 @@ public: QList<QSslError> sslErrors() const; static bool supportsSsl(); + void ignoreSslErrors(const QList<QSslError> &errors); public Q_SLOTS: void startClientEncryption(); diff --git a/src/network/ssl/qsslsocket_openssl.cpp b/src/network/ssl/qsslsocket_openssl.cpp index ea62a4d..130494e 100644 --- a/src/network/ssl/qsslsocket_openssl.cpp +++ b/src/network/ssl/qsslsocket_openssl.cpp @@ -839,7 +839,27 @@ bool QSslSocketBackendPrivate::startHandshake() if (!errors.isEmpty()) { sslErrors = errors; emit q->sslErrors(errors); - if (doVerifyPeer && !ignoreSslErrors) { + + bool doEmitSslError; + if (!ignoreErrorsList.empty()) { + // check whether the errors we got are all in the list of expected errors + // (applies only if the method QSslSocket::ignoreSslErrors(const QList<QSslError> &errors) + // was called) + doEmitSslError = false; + for (int a = 0; a < errors.count(); a++) { + if (!ignoreErrorsList.contains(errors.at(a))) { + doEmitSslError = true; + break; + } + } + } else { + // if QSslSocket::ignoreSslErrors(const QList<QSslError> &errors) was not called and + // we get an SSL error, emit a signal unless we ignored all errors (by calling + // QSslSocket::ignoreSslErrors() ) + doEmitSslError = !ignoreAllSslErrors; + } + // check whether we need to emit an SSL handshake error + if (doVerifyPeer && doEmitSslError) { q->setErrorString(sslErrors.first().errorString()); q->setSocketError(QAbstractSocket::SslHandshakeFailedError); emit q->error(QAbstractSocket::SslHandshakeFailedError); diff --git a/src/network/ssl/qsslsocket_p.h b/src/network/ssl/qsslsocket_p.h index dc8e4f5..8fd2154 100644 --- a/src/network/ssl/qsslsocket_p.h +++ b/src/network/ssl/qsslsocket_p.h @@ -79,7 +79,8 @@ public: QSslSocket::SslMode mode; bool autoStartHandshake; bool connectionEncrypted; - bool ignoreSslErrors; + bool ignoreAllSslErrors; + QList<QSslError> ignoreErrorsList; bool* readyReadEmittedPointer; QRingBuffer readBuffer; diff --git a/src/opengl/gl2paintengineex/qglengineshadermanager.cpp b/src/opengl/gl2paintengineex/qglengineshadermanager.cpp index 27636f4..d7c91b8 100644 --- a/src/opengl/gl2paintengineex/qglengineshadermanager.cpp +++ b/src/opengl/gl2paintengineex/qglengineshadermanager.cpp @@ -49,6 +49,28 @@ QT_BEGIN_NAMESPACE +static void QGLEngineShaderManager_free(void *ptr) +{ + delete reinterpret_cast<QGLEngineShaderManager *>(ptr); +} + +Q_GLOBAL_STATIC_WITH_ARGS(QGLContextResource, qt_shader_managers, (QGLEngineShaderManager_free)) + +QGLEngineShaderManager *QGLEngineShaderManager::managerForContext(const QGLContext *context) +{ + QGLEngineShaderManager *p = reinterpret_cast<QGLEngineShaderManager *>(qt_shader_managers()->value(context)); + if (!p) { + QGLContext *oldContext = const_cast<QGLContext *>(QGLContext::currentContext()); + if (oldContext != context) + const_cast<QGLContext *>(context)->makeCurrent(); + p = new QGLEngineShaderManager(const_cast<QGLContext *>(context)); + qt_shader_managers()->insert(context, p); + if (oldContext && oldContext != context) + oldContext->makeCurrent(); + } + return p; +} + const char* QGLEngineShaderManager::qglEngineShaderSourceCode[] = { 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, diff --git a/src/opengl/gl2paintengineex/qglengineshadermanager_p.h b/src/opengl/gl2paintengineex/qglengineshadermanager_p.h index 442edfe..99711bd40 100644 --- a/src/opengl/gl2paintengineex/qglengineshadermanager_p.h +++ b/src/opengl/gl2paintengineex/qglengineshadermanager_p.h @@ -220,6 +220,7 @@ #include <QGLShader> #include <QGLShaderProgram> #include <QPainter> +#include <private/qgl_p.h> QT_BEGIN_HEADER @@ -314,6 +315,8 @@ public: QGLShaderProgram* simpleProgram(); // Used to draw into e.g. stencil buffers QGLShaderProgram* blitProgram(); // Used to blit a texture into the framebuffer + static QGLEngineShaderManager *managerForContext(const QGLContext *context); + enum ShaderName { MainVertexShader, MainWithTexCoordsVertexShader, diff --git a/src/opengl/gl2paintengineex/qglgradientcache.cpp b/src/opengl/gl2paintengineex/qglgradientcache.cpp index 8c6b4f0..7c54bb9 100644 --- a/src/opengl/gl2paintengineex/qglgradientcache.cpp +++ b/src/opengl/gl2paintengineex/qglgradientcache.cpp @@ -46,6 +46,28 @@ QT_BEGIN_NAMESPACE +static void QGL2GradientCache_free(void *ptr) +{ + delete reinterpret_cast<QGL2GradientCache *>(ptr); +} + +Q_GLOBAL_STATIC_WITH_ARGS(QGLContextResource, qt_gradient_caches, (QGL2GradientCache_free)) + +QGL2GradientCache *QGL2GradientCache::cacheForContext(const QGLContext *context) +{ + QGL2GradientCache *p = reinterpret_cast<QGL2GradientCache *>(qt_gradient_caches()->value(context)); + if (!p) { + QGLContext *oldContext = const_cast<QGLContext *>(QGLContext::currentContext()); + if (oldContext != context) + const_cast<QGLContext *>(context)->makeCurrent(); + p = new QGL2GradientCache; + qt_gradient_caches()->insert(context, p); + if (oldContext && oldContext != context) + oldContext->makeCurrent(); + } + return p; +} + void QGL2GradientCache::cleanCache() { QGLGradientColorTableHash::const_iterator it = cache.constBegin(); for (; it != cache.constEnd(); ++it) { @@ -55,13 +77,8 @@ void QGL2GradientCache::cleanCache() { cache.clear(); } -GLuint QGL2GradientCache::getBuffer(const QGradient &gradient, qreal opacity, const QGLContext *ctx) +GLuint QGL2GradientCache::getBuffer(const QGradient &gradient, qreal opacity) { - if (buffer_ctx && !qgl_share_reg()->checkSharing(buffer_ctx, ctx)) - cleanCache(); - - buffer_ctx = ctx; - quint64 hash_val = 0; QGradientStops stops = gradient.stops(); diff --git a/src/opengl/gl2paintengineex/qglgradientcache_p.h b/src/opengl/gl2paintengineex/qglgradientcache_p.h index 55c7b65..ba698bc 100644 --- a/src/opengl/gl2paintengineex/qglgradientcache_p.h +++ b/src/opengl/gl2paintengineex/qglgradientcache_p.h @@ -53,12 +53,12 @@ #include <QMultiHash> #include <QObject> #include <QtOpenGL/QtOpenGL> +#include <private/qgl_p.h> QT_BEGIN_NAMESPACE -class QGL2GradientCache : public QObject +class QGL2GradientCache { - Q_OBJECT struct CacheInfo { inline CacheInfo(QGradientStops s, qreal op, QGradient::InterpolationMode mode) : @@ -73,16 +73,12 @@ class QGL2GradientCache : public QObject typedef QMultiHash<quint64, CacheInfo> QGLGradientColorTableHash; public: - QGL2GradientCache() : QObject(), buffer_ctx(0) - { -/* - connect(QGLSignalProxy::instance(), - SIGNAL(aboutToDestroyContext(const QGLContext *)), - SLOT(cleanupGLContextRefs(const QGLContext *))); -*/ - } + static QGL2GradientCache *cacheForContext(const QGLContext *context); + + QGL2GradientCache() { } + ~QGL2GradientCache() {cleanCache();} - GLuint getBuffer(const QGradient &gradient, qreal opacity, const QGLContext *ctx); + GLuint getBuffer(const QGradient &gradient, qreal opacity); inline int paletteSize() const { return 1024; } protected: @@ -95,15 +91,6 @@ protected: void cleanCache(); QGLGradientColorTableHash cache; - const QGLContext *buffer_ctx; - -public slots: - void cleanupGLContextRefs(const QGLContext *context) { - if (context == buffer_ctx) { - cleanCache(); - buffer_ctx = 0; - } - } }; QT_END_NAMESPACE diff --git a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp index bcff29b..167eb64 100644 --- a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp +++ b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp @@ -74,6 +74,7 @@ #include <private/qpainter_p.h> #include <private/qfontengine_p.h> #include <private/qtextureglyphcache_p.h> +#include <private/qpixmapdata_gl_p.h> #include "qglgradientcache_p.h" #include "qglengineshadermanager_p.h" @@ -115,6 +116,7 @@ public Q_SLOTS: glDeleteFramebuffers(1, &m_fbo); if (m_width || m_height) glDeleteTextures(1, &m_texture); + ctx = 0; } else { // since the context holding the texture is shared, and // about to be destroyed, we have to transfer ownership @@ -151,10 +153,17 @@ QGLTextureGlyphCache::QGLTextureGlyphCache(QGLContext *context, QFontEngineGlyph QGLTextureGlyphCache::~QGLTextureGlyphCache() { - glDeleteFramebuffers(1, &m_fbo); - - if (m_width || m_height) - glDeleteTextures(1, &m_texture); + if (ctx) { + QGLContext *oldContext = const_cast<QGLContext *>(QGLContext::currentContext()); + if (oldContext != ctx) + ctx->makeCurrent(); + glDeleteFramebuffers(1, &m_fbo); + + if (m_width || m_height) + glDeleteTextures(1, &m_texture); + if (oldContext && oldContext != ctx) + oldContext->makeCurrent(); + } } void QGLTextureGlyphCache::createTextureData(int width, int height) @@ -252,8 +261,11 @@ void QGLTextureGlyphCache::fillTexture(const Coord &c, glyph_t glyph) if (mask.format() == QImage::Format_RGB32) { glTexSubImage2D(GL_TEXTURE_2D, 0, c.x, m_height - c.y, maskWidth, maskHeight, GL_BGRA, GL_UNSIGNED_BYTE, mask.bits()); } else { - mask = mask.convertToFormat(QImage::Format_Indexed8); - glTexSubImage2D(GL_TEXTURE_2D, 0, c.x, c.y, maskWidth, maskHeight, GL_ALPHA, GL_UNSIGNED_BYTE, mask.bits()); + // If the width of the uploaded data is not a multiple of four bytes, we get some garbage + // in the glyph cache, probably because of a driver bug. + // Convert to ARGB32 to get a multiple of 4 bytes per line. + mask = mask.convertToFormat(QImage::Format_ARGB32); + glTexSubImage2D(GL_TEXTURE_2D, 0, c.x, c.y, maskWidth, maskHeight, GL_BGRA, GL_UNSIGNED_BYTE, mask.bits()); } } @@ -263,10 +275,6 @@ extern QImage qt_imageForBrush(int brushStyle, bool invert); QGL2PaintEngineExPrivate::~QGL2PaintEngineExPrivate() { - if (shaderManager) { - delete shaderManager; - shaderManager = 0; - } } void QGL2PaintEngineExPrivate::updateTextureFilter(GLenum target, GLenum wrapMode, bool smoothPixmapTransform, GLuint id) @@ -292,6 +300,7 @@ void QGL2PaintEngineExPrivate::updateTextureFilter(GLenum target, GLenum wrapMod QColor QGL2PaintEngineExPrivate::premultiplyColor(QColor c, GLfloat opacity) { qreal alpha = c.alphaF() * opacity; + c.setAlphaF(alpha); c.setRedF(c.redF() * alpha); c.setGreenF(c.greenF() * alpha); c.setBlueF(c.blueF() * alpha); @@ -335,9 +344,6 @@ void QGL2PaintEngineExPrivate::useSimpleShader() } } - -Q_GLOBAL_STATIC(QGL2GradientCache, qt_opengl_gradient_cache) - void QGL2PaintEngineExPrivate::updateBrushTexture() { // qDebug("QGL2PaintEngineExPrivate::updateBrushTexture()"); @@ -358,7 +364,10 @@ void QGL2PaintEngineExPrivate::updateBrushTexture() // We apply global opacity in the fragment shaders, so we always pass 1.0 // for opacity to the cache. - GLuint texId = qt_opengl_gradient_cache()->getBuffer(*g, 1.0, ctx); + GLuint texId = QGL2GradientCache::cacheForContext(ctx)->getBuffer(*g, 1.0); + + glActiveTexture(GL_TEXTURE0 + QT_BRUSH_TEXTURE_UNIT); + glBindTexture(GL_TEXTURE_2D, texId); if (g->spread() == QGradient::RepeatSpread || g->type() == QGradient::ConicalGradient) updateTextureFilter(GL_TEXTURE_2D, GL_REPEAT, true); @@ -366,9 +375,6 @@ void QGL2PaintEngineExPrivate::updateBrushTexture() updateTextureFilter(GL_TEXTURE_2D, GL_MIRRORED_REPEAT_IBM, true); else updateTextureFilter(GL_TEXTURE_2D, GL_CLAMP_TO_EDGE, true); - - glActiveTexture(GL_TEXTURE0 + QT_BRUSH_TEXTURE_UNIT); - glBindTexture(GL_TEXTURE_2D, texId); } else if (style == Qt::TexturePattern) { const QPixmap& texPixmap = currentBrush->texture(); @@ -1049,14 +1055,18 @@ void QGL2PaintEngineEx::drawPixmap(const QRectF& dest, const QPixmap & pixmap, c QGLContext *ctx = d->ctx; glActiveTexture(GL_TEXTURE0 + QT_IMAGE_TEXTURE_UNIT); - GLuint id = ctx->d_func()->bindTexture(pixmap, GL_TEXTURE_2D, GL_RGBA, true); + QGLTexture *texture = ctx->d_func()->bindTexture(pixmap, GL_TEXTURE_2D, GL_RGBA, true, true); + + GLfloat top = texture->yInverted ? (pixmap.height() - src.top()) : src.top(); + GLfloat bottom = texture->yInverted ? (pixmap.height() - src.bottom()) : src.bottom(); + QGLRect srcRect(src.left(), top, src.right(), bottom); bool isBitmap = pixmap.isQBitmap(); bool isOpaque = !isBitmap && !pixmap.hasAlphaChannel(); d->updateTextureFilter(GL_TEXTURE_2D, GL_REPEAT, - state()->renderHints & QPainter::SmoothPixmapTransform, id); - d->drawTexture(dest, src, pixmap.size(), isOpaque, isBitmap); + state()->renderHints & QPainter::SmoothPixmapTransform, texture->id); + d->drawTexture(dest, srcRect, pixmap.size(), isOpaque, isBitmap); } void QGL2PaintEngineEx::drawImage(const QRectF& dest, const QImage& image, const QRectF& src, @@ -1068,7 +1078,8 @@ void QGL2PaintEngineEx::drawImage(const QRectF& dest, const QImage& image, const QGLContext *ctx = d->ctx; glActiveTexture(GL_TEXTURE0 + QT_IMAGE_TEXTURE_UNIT); - GLuint id = ctx->d_func()->bindTexture(image, GL_TEXTURE_2D, GL_RGBA, true); + QGLTexture *texture = ctx->d_func()->bindTexture(image, GL_TEXTURE_2D, GL_RGBA, true); + GLuint id = texture->id; d->updateTextureFilter(GL_TEXTURE_2D, GL_REPEAT, state()->renderHints & QPainter::SmoothPixmapTransform, id); @@ -1206,11 +1217,8 @@ bool QGL2PaintEngineEx::begin(QPaintDevice *pdev) qt_resolve_version_2_0_functions(d->ctx); #endif - if (d->shaderManager) { - d->shaderManager->setDirty(); - } else { - d->shaderManager = new QGLEngineShaderManager(d->ctx); - } + d->shaderManager = QGLEngineShaderManager::managerForContext(d->ctx); + d->shaderManager->setDirty(); glViewport(0, 0, d->width, d->height); @@ -1285,6 +1293,14 @@ bool QGL2PaintEngineEx::end() glUseProgram(0); d->transferMode(BrushDrawingMode); d->drawable.swapBuffers(); +#if defined(Q_WS_X11) + // On some (probably all) drivers, deleting an X pixmap which has been bound to a texture + // before calling glFinish/swapBuffers renders garbage. Presumably this is because X deletes + // the pixmap behind the driver's back before it's had a chance to use it. To fix this, we + // reference all QPixmaps which have been bound to stop them being deleted and only deref + // them here, after swapBuffers, where they can be safely deleted. + ctx->d_func()->boundPixmaps.clear(); +#endif d->drawable.doneCurrent(); d->ctx->d_ptr->active_engine = 0; diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index 0169ea2..edda6b6 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -87,7 +87,6 @@ #include <private/qglpixelbuffer_p.h> #include <private/qwindowsurface_gl_p.h> #include "qcolormap.h" -#include "qcache.h" #include "qfile.h" #include "qlibrary.h" @@ -1395,39 +1394,99 @@ int qt_next_power_of_two(int v) return v; } -class QGLTexture { -public: - QGLTexture(const QGLContext *ctx, GLuint tx_id, GLenum tx_target, bool _clean = false) - : context(ctx), id(tx_id), target(tx_target), clean(_clean) {} - ~QGLTexture() { - if (clean) { - QGLContext *current = const_cast<QGLContext *>(QGLContext::currentContext()); - QGLContext *ctx = const_cast<QGLContext *>(context); - bool switch_context = current && current != ctx && !qgl_share_reg()->checkSharing(current, ctx); - if (switch_context) - ctx->makeCurrent(); - glDeleteTextures(1, &id); - if (switch_context) - current->makeCurrent(); - } - } - - const QGLContext *context; - GLuint id; - GLenum target; - bool clean; -}; - -typedef QCache<qint64, QGLTexture> QGLTextureCache; -static int qt_tex_cache_limit = 64*1024; // cache ~64 MB worth of textures - this is not accurate though -static QGLTextureCache *qt_tex_cache = 0; - typedef void (*_qt_pixmap_cleanup_hook_64)(qint64); typedef void (*_qt_image_cleanup_hook_64)(qint64); extern Q_GUI_EXPORT _qt_pixmap_cleanup_hook_64 qt_pixmap_cleanup_hook_64; extern Q_GUI_EXPORT _qt_image_cleanup_hook_64 qt_image_cleanup_hook_64; +static QGLTextureCache *qt_gl_texture_cache = 0; + +QGLTextureCache::QGLTextureCache() + : m_cache(64*1024) // cache ~64 MB worth of textures - this is not accurate though +{ + Q_ASSERT(qt_gl_texture_cache == 0); + qt_gl_texture_cache = this; + qt_pixmap_cleanup_hook_64 = cleanupHook; + qt_image_cleanup_hook_64 = cleanupHook; +} + +QGLTextureCache::~QGLTextureCache() +{ + qt_gl_texture_cache = 0; + qt_pixmap_cleanup_hook_64 = 0; + qt_image_cleanup_hook_64 = 0; +} + +void QGLTextureCache::insert(QGLContext* ctx, qint64 key, QGLTexture* texture, int cost) +{ + if (m_cache.totalCost() + cost > m_cache.maxCost()) { + // the cache is full - make an attempt to remove something + const QList<qint64> keys = m_cache.keys(); + int i = 0; + while (i < m_cache.count() + && (m_cache.totalCost() + cost > m_cache.maxCost())) { + QGLTexture *tex = m_cache.object(keys.at(i)); + if (tex->context == ctx) + m_cache.remove(keys.at(i)); + ++i; + } + } + m_cache.insert(key, texture, cost); +} + +bool QGLTextureCache::remove(QGLContext* ctx, GLuint textureId) +{ + QList<qint64> keys = m_cache.keys(); + for (int i = 0; i < keys.size(); ++i) { + QGLTexture *tex = m_cache.object(keys.at(i)); + if (tex->id == textureId && tex->context == ctx) { + tex->clean = true; // forces a glDeleteTextures() call + m_cache.remove(keys.at(i)); + return true; + } + } + return false; +} + +void QGLTextureCache::removeContextTextures(QGLContext* ctx) +{ + QList<qint64> keys = m_cache.keys(); + for (int i = 0; i < keys.size(); ++i) { + const qint64 &key = keys.at(i); + if (m_cache.object(key)->context == ctx) + m_cache.remove(key); + } +} + +QGLTextureCache* QGLTextureCache::instance() +{ + if (!qt_gl_texture_cache) + qt_gl_texture_cache = new QGLTextureCache; + + return qt_gl_texture_cache; +} + +/* + a hook that removes textures from the cache when a pixmap/image + is deref'ed +*/ +void QGLTextureCache::cleanupHook(qint64 cacheKey) +{ + // ### remove when the GL texture cache becomes thread-safe + if (qApp->thread() != QThread::currentThread()) + return; + QGLTexture *texture = instance()->getTexture(cacheKey); + if (texture && texture->clean) + instance()->remove(cacheKey); +} + +void QGLTextureCache::deleteIfEmpty() +{ + if (instance()->size() == 0) + delete instance(); +} + // DDS format structure struct DDSFormat { quint32 dwSize; @@ -1556,21 +1615,8 @@ QGLContext::~QGLContext() { Q_D(QGLContext); // remove any textures cached in this context - if (qt_tex_cache) { - QList<qint64> keys = qt_tex_cache->keys(); - for (int i = 0; i < keys.size(); ++i) { - const qint64 &key = keys.at(i); - if (qt_tex_cache->object(key)->context == this) - qt_tex_cache->remove(key); - } - // ### thread safety - if (qt_tex_cache->size() == 0) { - qt_pixmap_cleanup_hook_64 = 0; - qt_image_cleanup_hook_64 = 0; - delete qt_tex_cache; - qt_tex_cache = 0; - } - } + QGLTextureCache::instance()->removeContextTextures(this); + QGLTextureCache::deleteIfEmpty(); // ### thread safety QGLSignalProxy::instance()->emitAboutToDestroyContext(this); reset(); @@ -1701,21 +1747,6 @@ GLuint QGLContext::bindTexture(const QString &fileName) return tx_id; } -/* - a hook that removes textures from the cache when a pixmap/image - is deref'ed -*/ -static void qt_gl_clean_cache(qint64 cacheKey) -{ - // ### remove when the GL texture cache becomes thread-safe - if (qApp->thread() != QThread::currentThread()) - return; - if (qt_tex_cache) { - QGLTexture *texture = qt_tex_cache->object(cacheKey); - if (texture && texture->clean) - qt_tex_cache->remove(cacheKey); - } -} static void convertToGLFormatHelper(QImage &dst, const QImage &img, GLenum texture_format) { @@ -1835,7 +1866,28 @@ QImage QGLContextPrivate::convertToGLFormat(const QImage &image, bool force_prem return result; } -GLuint QGLContextPrivate::bindTexture(const QImage &image, GLenum target, GLint format, +/*! \internal */ +QGLTexture *QGLContextPrivate::bindTexture(const QImage &image, GLenum target, GLint format, bool clean) +{ + const qint64 key = image.cacheKey(); + QGLTexture *texture = textureCacheLookup(key, target); + if (texture) { + glBindTexture(target, texture->id); + return texture; + } + + if (!texture) + texture = bindTexture(image, target, format, key, clean); + // NOTE: bindTexture(const QImage&, GLenum, GLint, const qint64, bool) should never return null + Q_ASSERT(texture); + + if (texture->id > 0) + const_cast<QImage &>(image).data_ptr()->is_cached = true; + + return texture; +} + +QGLTexture* QGLContextPrivate::bindTexture(const QImage &image, GLenum target, GLint format, const qint64 key, bool clean) { Q_Q(QGLContext); @@ -1853,11 +1905,6 @@ GLuint QGLContextPrivate::bindTexture(const QImage &image, GLenum target, GLint // the GL_BGRA format is only present in GL version >= 1.2 GLenum texture_format = (QGLFormat::openGLVersionFlags() & QGLFormat::OpenGL_Version_1_2) ? GL_BGRA : GL_RGBA; - if (!qt_tex_cache) { - qt_tex_cache = new QGLTextureCache(qt_tex_cache_limit); - qt_pixmap_cleanup_hook_64 = qt_gl_clean_cache; - qt_image_cleanup_hook_64 = qt_gl_clean_cache; - } // Scale the pixmap if needed. GL textures needs to have the // dimensions 2^n+2(border) x 2^m+2(border), unless we're using GL @@ -1930,53 +1977,26 @@ GLuint QGLContextPrivate::bindTexture(const QImage &image, GLenum target, GLint // this assumes the size of a texture is always smaller than the max cache size int cost = img.width()*img.height()*4/1024; - if (qt_tex_cache->totalCost() + cost > qt_tex_cache->maxCost()) { - // the cache is full - make an attempt to remove something - const QList<qint64> keys = qt_tex_cache->keys(); - int i = 0; - while (i < qt_tex_cache->count() - && (qt_tex_cache->totalCost() + cost > qt_tex_cache->maxCost())) { - QGLTexture *tex = qt_tex_cache->object(keys.at(i)); - if (tex->context == q) - qt_tex_cache->remove(keys.at(i)); - ++i; - } - } - qt_tex_cache->insert(key, new QGLTexture(q, tx_id, target, clean), cost); - return tx_id; + QGLTexture *texture = new QGLTexture(q, tx_id, target, clean, false); + QGLTextureCache::instance()->insert(q, key, texture, cost); + return texture; } -bool QGLContextPrivate::textureCacheLookup(const qint64 key, GLenum target, GLuint *id) +QGLTexture *QGLContextPrivate::textureCacheLookup(const qint64 key, GLenum target) { Q_Q(QGLContext); - if (qt_tex_cache) { - QGLTexture *texture = qt_tex_cache->object(key); - if (texture && texture->target == target - && (texture->context == q || qgl_share_reg()->checkSharing(q, texture->context))) - { - *id = texture->id; - return true; - } + QGLTexture *texture = QGLTextureCache::instance()->getTexture(key); + if (texture && texture->target == target + && (texture->context == q || qgl_share_reg()->checkSharing(q, texture->context))) + { + return texture; } - return false; + return 0; } -/*! \internal */ -GLuint QGLContextPrivate::bindTexture(const QImage &image, GLenum target, GLint format, bool clean) -{ - const qint64 key = image.cacheKey(); - GLuint id; - if (textureCacheLookup(key, target, &id)) { - glBindTexture(target, id); - return id; - } - GLuint cached = bindTexture(image, target, format, key, clean); - const_cast<QImage &>(image).data_ptr()->is_cached = (cached > 0); - return cached; -} /*! \internal */ -GLuint QGLContextPrivate::bindTexture(const QPixmap &pixmap, GLenum target, GLint format, bool clean) +QGLTexture *QGLContextPrivate::bindTexture(const QPixmap &pixmap, GLenum target, GLint format, bool clean, bool canInvert) { Q_Q(QGLContext); QPixmapData *pd = pixmap.pixmapData(); @@ -1984,20 +2004,41 @@ GLuint QGLContextPrivate::bindTexture(const QPixmap &pixmap, GLenum target, GLin if (target == GL_TEXTURE_2D && pd->classId() == QPixmapData::OpenGLClass) { const QGLPixmapData *data = static_cast<const QGLPixmapData *>(pd); - if (data->isValidContext(q)) - return data->bind(); + if (data->isValidContext(q)) { + data->bind(); + return data->texture(); + } } #endif const qint64 key = pixmap.cacheKey(); - GLuint id; - if (textureCacheLookup(key, target, &id)) { - glBindTexture(target, id); - return id; + QGLTexture *texture = textureCacheLookup(key, target); + if (texture) { + glBindTexture(target, texture->id); + return texture; } - GLuint cached = bindTexture(pixmap.toImage(), target, format, key, clean); - const_cast<QPixmap &>(pixmap).data_ptr()->is_cached = (cached > 0); - return cached; + +#if defined(Q_WS_X11) + // Try to use texture_from_pixmap + if (pd->classId() == QPixmapData::X11Class) { + QPixmap *thatPixmap = const_cast<QPixmap*>(&pixmap); + texture = bindTextureFromNativePixmap(thatPixmap, key, canInvert); + if (texture) { + texture->clean = clean; + boundPixmaps.insert(thatPixmap->data_ptr(), QPixmap(pixmap)); + } + } +#endif + + if (!texture) + texture = bindTexture(pixmap.toImage(), target, format, key, clean); + // NOTE: bindTexture(const QImage&, GLenum, GLint, const qint64, bool) should never return null + Q_ASSERT(texture); + + if (texture->id > 0) + const_cast<QPixmap &>(pixmap).data_ptr()->is_cached = true; + + return texture; } /*! \internal */ @@ -2063,7 +2104,8 @@ int QGLContextPrivate::maxTextureSize() GLuint QGLContext::bindTexture(const QImage &image, GLenum target, GLint format) { Q_D(QGLContext); - return d->bindTexture(image, target, format, false); + QGLTexture *texture = d->bindTexture(image, target, format, false); + return texture->id; } #ifdef Q_MAC_COMPAT_GL_FUNCTIONS @@ -2071,7 +2113,8 @@ GLuint QGLContext::bindTexture(const QImage &image, GLenum target, GLint format) GLuint QGLContext::bindTexture(const QImage &image, QMacCompatGLenum target, QMacCompatGLint format) { Q_D(QGLContext); - return d->bindTexture(image, GLenum(target), GLint(format), false); + QGLTexture *texture = d->bindTexture(image, GLenum(target), GLint(format), false); + return texture->id; } #endif @@ -2082,7 +2125,8 @@ GLuint QGLContext::bindTexture(const QImage &image, QMacCompatGLenum target, QMa GLuint QGLContext::bindTexture(const QPixmap &pixmap, GLenum target, GLint format) { Q_D(QGLContext); - return d->bindTexture(pixmap, target, format, false); + QGLTexture *texture = d->bindTexture(pixmap, target, format, false, false); + return texture->id; } #ifdef Q_MAC_COMPAT_GL_FUNCTIONS @@ -2090,7 +2134,8 @@ GLuint QGLContext::bindTexture(const QPixmap &pixmap, GLenum target, GLint forma GLuint QGLContext::bindTexture(const QPixmap &pixmap, QMacCompatGLenum target, QMacCompatGLint format) { Q_D(QGLContext); - return d->bindTexture(pixmap, GLenum(target), GLint(format), false); + QGLTexture *texture = d->bindTexture(pixmap, GLenum(target), GLint(format), false, false); + return texture->id; } #endif @@ -2103,17 +2148,8 @@ GLuint QGLContext::bindTexture(const QPixmap &pixmap, QMacCompatGLenum target, Q */ void QGLContext::deleteTexture(GLuint id) { - if (qt_tex_cache) { - QList<qint64> keys = qt_tex_cache->keys(); - for (int i = 0; i < keys.size(); ++i) { - QGLTexture *tex = qt_tex_cache->object(keys.at(i)); - if (tex->id == id && tex->context == this) { - tex->clean = true; // forces a glDeleteTextures() call - qt_tex_cache->remove(keys.at(i)); - return; - } - } - } + if (QGLTextureCache::instance()->remove(this, id)) + return; // check the DDS cache if the texture wasn't found in the pixmap/image // cache @@ -2307,9 +2343,7 @@ void QGLContext::drawTexture(const QPointF &point, QMacCompatGLuint textureId, Q */ void QGLContext::setTextureCacheLimit(int size) { - qt_tex_cache_limit = size; - if (qt_tex_cache) - qt_tex_cache->setMaxCost(qt_tex_cache_limit); + QGLTextureCache::instance()->setMaxCost(size); } /*! @@ -2319,7 +2353,7 @@ void QGLContext::setTextureCacheLimit(int size) */ int QGLContext::textureCacheLimit() { - return qt_tex_cache_limit; + return QGLTextureCache::instance()->maxCost(); } @@ -3363,8 +3397,13 @@ bool QGLWidget::event(QEvent *e) #elif defined(Q_WS_WIN) if (e->type() == QEvent::ParentChange) { QGLContext *newContext = new QGLContext(d->glcx->requestedFormat(), this); - qgl_share_reg()->replaceShare(d->glcx, newContext); + QList<const QGLContext *> shares = qgl_share_reg()->shares(d->glcx); setContext(newContext); + for (int i = 0; i < shares.size(); ++i) { + if (newContext != shares.at(i)) + qgl_share_reg()->addShare(newContext, shares.at(i)); + } + // the overlay needs to be recreated as well delete d->olcx; if (isValid() && context()->format().hasOverlay()) { @@ -4334,6 +4373,9 @@ void QGLExtensions::init_extensions() if (extensions.contains(QLatin1String("EXT_framebuffer_blit"))) glExtensions |= FramebufferBlit; + if (extensions.contains(QLatin1String("GL_ARB_texture_non_power_of_two"))) + glExtensions |= NPOTTextures; + QGLContext cx(QGLFormat::defaultFormat()); if (glExtensions & TextureCompression) { qt_glCompressedTexImage2DARB = (pfn_glCompressedTexImage2DARB) cx.getProcAddress(QLatin1String("glCompressedTexImage2DARB")); @@ -4541,32 +4583,34 @@ QGLFormat QGLDrawable::format() const GLuint QGLDrawable::bindTexture(const QImage &image, GLenum target, GLint format) { + QGLTexture *texture; if (widget) - return widget->d_func()->glcx->d_func()->bindTexture(image, target, format, true); + texture = widget->d_func()->glcx->d_func()->bindTexture(image, target, format, true); else if (buffer) - return buffer->d_func()->qctx->d_func()->bindTexture(image, target, format, true); + texture = buffer->d_func()->qctx->d_func()->bindTexture(image, target, format, true); else if (fbo && QGLContext::currentContext()) - return const_cast<QGLContext *>(QGLContext::currentContext())->d_func()->bindTexture(image, target, format, true); + texture = const_cast<QGLContext *>(QGLContext::currentContext())->d_func()->bindTexture(image, target, format, true); #if defined(Q_WS_QWS) || (!defined(QT_OPENGL_ES_1) && !defined(QT_OPENGL_ES_1_CL)) else if (wsurf) - return wsurf->context()->d_func()->bindTexture(image, target, format, true); + texture = wsurf->context()->d_func()->bindTexture(image, target, format, true); #endif - return 0; + return texture->id; } GLuint QGLDrawable::bindTexture(const QPixmap &pixmap, GLenum target, GLint format) { + QGLTexture *texture; if (widget) - return widget->d_func()->glcx->d_func()->bindTexture(pixmap, target, format, true); + texture = widget->d_func()->glcx->d_func()->bindTexture(pixmap, target, format, true, true); else if (buffer) - return buffer->d_func()->qctx->d_func()->bindTexture(pixmap, target, format, true); + texture = buffer->d_func()->qctx->d_func()->bindTexture(pixmap, target, format, true, true); else if (fbo && QGLContext::currentContext()) - return const_cast<QGLContext *>(QGLContext::currentContext())->d_func()->bindTexture(pixmap, target, format, true); + texture = const_cast<QGLContext *>(QGLContext::currentContext())->d_func()->bindTexture(pixmap, target, format, true, true); #if defined(Q_WS_QWS) || (!defined(QT_OPENGL_ES_1) && !defined(QT_OPENGL_ES_1_CL)) else if (wsurf) - return wsurf->context()->d_func()->bindTexture(pixmap, target, format, true); + texture = wsurf->context()->d_func()->bindTexture(pixmap, target, format, true, true); #endif - return 0; + return texture->id; } QColor QGLDrawable::backgroundColor() const @@ -4612,4 +4656,156 @@ bool QGLDrawable::autoFillBackground() const return false; } + +bool QGLShareRegister::checkSharing(const QGLContext *context1, const QGLContext *context2) { + bool sharing = (context1 && context2 && context1->d_ptr->groupResources == context2->d_ptr->groupResources); + return sharing; +} + +void QGLShareRegister::addShare(const QGLContext *context, const QGLContext *share) { + Q_ASSERT(context && share); + if (context->d_ptr->groupResources == share->d_ptr->groupResources) + return; + + // Make sure 'context' is not already shared with another group of contexts. + Q_ASSERT(reg.find(context->d_ptr->groupResources) == reg.end()); + Q_ASSERT(context->d_ptr->groupResources->refs == 1); + + // Free 'context' group resources and make it use the same resources as 'share'. + delete context->d_ptr->groupResources; + context->d_ptr->groupResources = share->d_ptr->groupResources; + context->d_ptr->groupResources->refs.ref(); + + // Maintain a list of all the contexts in each group of sharing contexts. + SharingHash::iterator it = reg.find(share->d_ptr->groupResources); + if (it == reg.end()) + it = reg.insert(share->d_ptr->groupResources, ContextList() << share); + it.value() << context; +} + +QList<const QGLContext *> QGLShareRegister::shares(const QGLContext *context) { + SharingHash::const_iterator it = reg.find(context->d_ptr->groupResources); + if (it == reg.end()) + return ContextList(); + return it.value(); +} + +void QGLShareRegister::removeShare(const QGLContext *context) { + SharingHash::iterator it = reg.find(context->d_ptr->groupResources); + if (it == reg.end()) + return; + + int count = it.value().removeAll(context); + Q_ASSERT(count == 1); + + Q_ASSERT(it.value().size() != 0); + if (it.value().size() == 1) + reg.erase(it); +} + +QGLContextResource::QGLContextResource(FreeFunc f, QObject *parent) + : QObject(parent), free(f) +{ + connect(QGLSignalProxy::instance(), SIGNAL(aboutToDestroyContext(const QGLContext *)), this, SLOT(aboutToDestroyContext(const QGLContext *))); +} + +QGLContextResource::~QGLContextResource() +{ + while (!m_resources.empty()) + remove(m_resources.begin().key()); +} + +void QGLContextResource::insert(const QGLContext *key, void *value) +{ + QList<const QGLContext *> shares = qgl_share_reg()->shares(key); + if (shares.size() == 0) + shares.append(key); + void *oldValue = 0; + for (int i = 0; i < shares.size(); ++i) { + ResourceHash::iterator it = m_resources.find(shares.at(i)); + if (it != m_resources.end()) { + Q_ASSERT(oldValue == 0 || oldValue == it.value()); + oldValue = it.value(); + it.value() = value; + } else { + m_resources.insert(shares.at(i), value); + } + } + if (oldValue != 0 && oldValue != value) { + QGLContext *oldContext = const_cast<QGLContext *>(QGLContext::currentContext()); + if (oldContext != key) + const_cast<QGLContext *>(key)->makeCurrent(); + free(oldValue); + if (oldContext && oldContext != key) + oldContext->makeCurrent(); + } +} + +void *QGLContextResource::value(const QGLContext *key) +{ + ResourceHash::const_iterator it = m_resources.find(key); + // Check if there is a value associated with 'key'. + if (it != m_resources.end()) + return it.value(); + // Check if there is a value associated with sharing contexts. + QList<const QGLContext *> shares = qgl_share_reg()->shares(key); + for (int i = 0; i < shares.size() && it == m_resources.end(); ++i) + it = m_resources.find(shares.at(i)); + if (it == m_resources.end()) + return 0; // Didn't find anything. + + // Found something! Share this info with all the buddies. + for (int i = 0; i < shares.size(); ++i) + m_resources.insert(shares.at(i), it.value()); + return it.value(); +} + +void QGLContextResource::remove(const QGLContext *key) +{ + QList<const QGLContext *> shares = qgl_share_reg()->shares(key); + if (shares.size() == 0) + shares.append(key); + void *oldValue = 0; + for (int i = 0; i < shares.size(); ++i) { + ResourceHash::iterator it = m_resources.find(shares.at(i)); + if (it != m_resources.end()) { + Q_ASSERT(oldValue == 0 || oldValue == it.value()); + oldValue = it.value(); + m_resources.erase(it); + } + } + if (oldValue != 0) { + QGLContext *oldContext = const_cast<QGLContext *>(QGLContext::currentContext()); + if (oldContext != key) + const_cast<QGLContext *>(key)->makeCurrent(); + free(oldValue); + if (oldContext && oldContext != key) + oldContext->makeCurrent(); + } +} + +void QGLContextResource::aboutToDestroyContext(const QGLContext *key) +{ + ResourceHash::iterator it = m_resources.find(key); + if (it == m_resources.end()) + return; + + QList<const QGLContext *> shares = qgl_share_reg()->shares(key); + if (shares.size() > 1) { + Q_ASSERT(key->isSharing()); + // At least one of the shared contexts must stay in the cache. + // Otherwise, the value pointer is lost. + for (int i = 0; i < 2/*shares.size()*/; ++i) + m_resources.insert(shares.at(i), it.value()); + } else { + QGLContext *oldContext = const_cast<QGLContext *>(QGLContext::currentContext()); + if (oldContext != key) + const_cast<QGLContext *>(key)->makeCurrent(); + free(it.value()); + if (oldContext && oldContext != key) + oldContext->makeCurrent(); + } + m_resources.erase(it); +} + QT_END_NAMESPACE diff --git a/src/opengl/qgl.h b/src/opengl/qgl.h index 86555da..31b9543 100644 --- a/src/opengl/qgl.h +++ b/src/opengl/qgl.h @@ -364,6 +364,7 @@ private: friend class QGLPixmapData; friend class QGLPixmapFilterBase; friend class QGLTextureGlyphCache; + friend class QGLShareRegister; friend QGLFormat::OpenGLVersionFlags QGLFormat::openGLVersionFlags(); #ifdef Q_WS_MAC public: diff --git a/src/opengl/qgl_p.h b/src/opengl/qgl_p.h index ac19d64..85dae0d 100644 --- a/src/opengl/qgl_p.h +++ b/src/opengl/qgl_p.h @@ -60,10 +60,7 @@ #include "QtCore/qthreadstorage.h" #include "QtCore/qhash.h" #include "private/qwidget_p.h" - -#if !defined(QT_OPENGL_ES_1) && !defined(QT_OPENGL_ES_1_CL) -#include "private/qpixmapdata_gl_p.h" -#endif +#include "qcache.h" #ifndef QT_OPENGL_ES_1_CL #define q_vertexType float @@ -196,17 +193,26 @@ public: #endif }; +struct QGLContextGroupResources +{ + QGLContextGroupResources() : refs(1) { } + QGLExtensionFuncs extensionFuncs; + QAtomicInt refs; +}; + +class QGLTexture; + class QGLContextPrivate { Q_DECLARE_PUBLIC(QGLContext) public: - explicit QGLContextPrivate(QGLContext *context) : internal_context(false), q_ptr(context) {} - ~QGLContextPrivate() {} - GLuint bindTexture(const QImage &image, GLenum target, GLint format, const qint64 key, + explicit QGLContextPrivate(QGLContext *context) : internal_context(false), q_ptr(context) {groupResources = new QGLContextGroupResources;} + ~QGLContextPrivate() {if (!groupResources->refs.deref()) delete groupResources;} + QGLTexture *bindTexture(const QImage &image, GLenum target, GLint format, bool clean); + QGLTexture *bindTexture(const QImage &image, GLenum target, GLint format, const qint64 key, bool clean = false); - GLuint bindTexture(const QPixmap &pixmap, GLenum target, GLint format, bool clean); - GLuint bindTexture(const QImage &image, GLenum target, GLint format, bool clean); - bool textureCacheLookup(const qint64 key, GLenum target, GLuint *id); + QGLTexture *bindTexture(const QPixmap &pixmap, GLenum target, GLint format, bool clean, bool canInvert = false); + QGLTexture *textureCacheLookup(const qint64 key, GLenum target); void init(QPaintDevice *dev, const QGLFormat &format); QImage convertToGLFormat(const QImage &image, bool force_premul, GLenum texture_format); int maxTextureSize(); @@ -234,6 +240,8 @@ public: void* pbuf; quint32 gpm; int screen; + QHash<QPixmapData*, QPixmap> boundPixmaps; + QGLTexture *bindTextureFromNativePixmap(QPixmap *pm, const qint64 key, bool internal); #endif #if defined(Q_WS_MAC) bool update; @@ -257,14 +265,14 @@ public: QGLContext *q_ptr; QGLFormat::OpenGLVersionFlags version_flags; - QGLExtensionFuncs extensionFuncs; + QGLContextGroupResources *groupResources; GLint max_texture_size; GLuint current_fbo; QPaintEngine *active_engine; #ifdef Q_WS_WIN - static inline QGLExtensionFuncs& qt_get_extension_funcs(const QGLContext *ctx) { return ctx->d_ptr->extensionFuncs; } + static inline QGLExtensionFuncs& qt_get_extension_funcs(const QGLContext *ctx) { return ctx->d_ptr->groupResources->extensionFuncs; } #endif #if defined(Q_WS_X11) || defined(Q_WS_MAC) || defined(Q_WS_QWS) @@ -293,6 +301,7 @@ class QGLPixelBuffer; class QGLFramebufferObject; class QWSGLWindowSurface; class QGLWindowSurface; +class QGLPixmapData; class QGLDrawable { public: QGLDrawable() : widget(0), buffer(0), fbo(0) @@ -353,7 +362,8 @@ public: PackedDepthStencil = 0x00000200, NVFloatBuffer = 0x00000400, PixelBufferObject = 0x00000800, - FramebufferBlit = 0x00001000 + FramebufferBlit = 0x00001000, + NPOTTextures = 0x00002000 }; Q_DECLARE_FLAGS(Extensions, Extension) @@ -371,65 +381,89 @@ struct QGLThreadContext { }; extern QThreadStorage<QGLThreadContext *> qgl_context_storage; -typedef QMultiHash<const QGLContext *, const QGLContext *> QGLSharingHash; class QGLShareRegister { public: QGLShareRegister() {} ~QGLShareRegister() { reg.clear(); } - bool checkSharing(const QGLContext *context1, const QGLContext *context2, const QGLContext * skip=0) { - if (context1 == context2) - return true; - QList<const QGLContext *> shares = reg.values(context1); - for (int k=0; k<shares.size(); ++k) { - const QGLContext *ctx = shares.at(k); - if (ctx == skip) // avoid an indirect circular loop (infinite recursion) - continue; - if (ctx == context2) - return true; - if (checkSharing(ctx, context2, context1)) - return true; - } - return false; - } + bool checkSharing(const QGLContext *context1, const QGLContext *context2); + void addShare(const QGLContext *context, const QGLContext *share); + QList<const QGLContext *> shares(const QGLContext *context); + void removeShare(const QGLContext *context); +private: + // Use a context's 'groupResources' pointer to uniquely identify a group. + typedef QList<const QGLContext *> ContextList; + typedef QHash<const QGLContextGroupResources *, ContextList> SharingHash; + SharingHash reg; +}; - void addShare(const QGLContext *context, const QGLContext *share) { - reg.insert(context, share); // context sharing works both ways - reg.insert(share, context); - } +extern Q_OPENGL_EXPORT QGLShareRegister* qgl_share_reg(); - void removeShare(const QGLContext *context) { - QGLSharingHash::iterator it = reg.begin(); - while (it != reg.end()) { - if (it.key() == context || it.value() == context) - it = reg.erase(it); - else - ++it; +class QGLTexture { +public: + QGLTexture(QGLContext *ctx = 0, GLuint tx_id = 0, GLenum tx_target = GL_TEXTURE_2D, + bool _clean = false, bool _yInverted = false) + : context(ctx), id(tx_id), target(tx_target), clean(_clean), yInverted(_yInverted) +#if defined(Q_WS_X11) + , boundPixmap(0) +#endif + {} + + ~QGLTexture() { + if (clean) { + QGLContext *current = const_cast<QGLContext *>(QGLContext::currentContext()); + QGLContext *ctx = const_cast<QGLContext *>(context); + Q_ASSERT(ctx); + bool switch_context = current != ctx && !qgl_share_reg()->checkSharing(current, ctx); + if (switch_context) + ctx->makeCurrent(); +#if defined(Q_WS_X11) + // Although glXReleaseTexImage is a glX call, it must be called while there + // is a current context - the context the pixmap was bound to a texture in. + // Otherwise the release doesn't do anything and you get BadDrawable errors + // when you come to delete the context. + deleteBoundPixmap(); +#endif + glDeleteTextures(1, &id); + if (switch_context && current) + current->makeCurrent(); } - } + } - void replaceShare(const QGLContext *oldContext, const QGLContext *newContext) { - QGLSharingHash::iterator it = reg.begin(); - while (it != reg.end()) { - if (it.key() == oldContext) - reg.insert(newContext, it.value()); - else if (it.value() == oldContext) - reg.insert(it.key(), newContext); - ++it; - } - removeShare(oldContext); - } + QGLContext *context; + GLuint id; + GLenum target; + bool clean; + bool yInverted; // NOTE: Y-Inverted textures are for internal use only! +#if defined(Q_WS_X11) + Qt::HANDLE boundPixmap; + void deleteBoundPixmap(); // in qgl_x11.cpp/qgl_x11egl.cpp +#endif +}; - QList<const QGLContext *> shares(const QGLContext *context) { - return reg.values(context); - } +class QGLTextureCache { +public: + QGLTextureCache(); + ~QGLTextureCache(); + + void insert(QGLContext *ctx, qint64 key, QGLTexture *texture, int cost); + void remove(quint64 key) { m_cache.remove(key); } + bool remove(QGLContext *ctx, GLuint textureId); + void removeContextTextures(QGLContext *ctx); + int size() { return m_cache.size(); } + void setMaxCost(int newMax) { m_cache.setMaxCost(newMax); } + int maxCost() {return m_cache.maxCost(); } + QGLTexture* getTexture(quint64 key) { return m_cache.object(key); } + + static QGLTextureCache *instance(); + static void deleteIfEmpty(); + static void cleanupHook(qint64 cacheKey); private: - QGLSharingHash reg; + QCache<qint64, QGLTexture> m_cache; }; -extern Q_OPENGL_EXPORT QGLShareRegister* qgl_share_reg(); #ifdef Q_WS_QWS extern QPaintEngine* qt_qgl_paint_engine(); @@ -464,6 +498,29 @@ inline GLenum qt_gl_preferredTextureTarget() #endif } +// One resource per group of shared contexts. +class QGLContextResource : public QObject +{ + Q_OBJECT +public: + typedef void (*FreeFunc)(void *); + QGLContextResource(FreeFunc f, QObject *parent = 0); + ~QGLContextResource(); + // Set resource 'value' for 'key' and all its shared contexts. + void insert(const QGLContext *key, void *value); + // Return resource for 'key' or a shared context. + void *value(const QGLContext *key); + // Free resource for 'key' and all its shared contexts. + void remove(const QGLContext *key); +private slots: + // Remove entry 'key' from cache and delete resource if there are no shared contexts. + void aboutToDestroyContext(const QGLContext *key); +private: + typedef QHash<const QGLContext *, void *> ResourceHash; + ResourceHash m_resources; + FreeFunc free; +}; + QT_END_NAMESPACE #endif // QGL_P_H diff --git a/src/opengl/qgl_win.cpp b/src/opengl/qgl_win.cpp index 400b3bc..232d47b 100644 --- a/src/opengl/qgl_win.cpp +++ b/src/opengl/qgl_win.cpp @@ -1413,7 +1413,7 @@ void QGLWidget::setContext(QGLContext *context, } if (!d->glcx->isValid()) { - bool wasSharing = shareContext || oldcx && oldcx->isSharing(); + bool wasSharing = shareContext || (oldcx && oldcx->isSharing()); d->glcx->create(shareContext ? shareContext : oldcx); // the above is a trick to keep disp lists etc when a // QGLWidget has been reparented, so remove the sharing diff --git a/src/opengl/qgl_x11.cpp b/src/opengl/qgl_x11.cpp index 631625b..d8af4d5 100644 --- a/src/opengl/qgl_x11.cpp +++ b/src/opengl/qgl_x11.cpp @@ -52,6 +52,7 @@ #include "qdebug.h" #include <private/qfontengine_ft_p.h> #include <private/qt_x11_p.h> +#include <private/qpixmap_x11_p.h> #ifdef Q_OS_HPUX // for GLXPBuffer #include <private/qglpixelbuffer_p.h> @@ -1516,4 +1517,124 @@ void QGLExtensions::init() } } + +typedef void (*qt_glXBindTexImageEXT)(Display*, GLXDrawable, int, const int*); +typedef void (*qt_glXReleaseTexImageEXT)(Display*, GLXDrawable, int); +static qt_glXBindTexImageEXT glXBindTexImageEXT = 0; +static qt_glXReleaseTexImageEXT glXReleaseTexImageEXT = 0; +static bool qt_resolved_texture_from_pixmap = false; + +QGLTexture *QGLContextPrivate::bindTextureFromNativePixmap(QPixmap *pm, const qint64 key, bool canInvert) +{ + Q_Q(QGLContext); + + if (pm->data_ptr()->classId() != QPixmapData::X11Class) + return 0; + QX11PixmapData *pixmapData = static_cast<QX11PixmapData*>(pm->data_ptr()); + const QX11Info *x11Info = qt_x11Info(pm); + + + // Check to see if we have NPOT texture support + // TODO: Use GLX_TEXTURE_RECTANGLE_EXT texture target on systems without npot textures + if ( !(QGLExtensions::glExtensions & QGLExtensions::NPOTTextures) && + !(QGLFormat::openGLVersionFlags() & QGLFormat::OpenGL_Version_2_0)) + return 0; + + if (!qt_resolved_texture_from_pixmap) { + qt_resolved_texture_from_pixmap = true; + + QString glxExt = QLatin1String(glXGetClientString(QX11Info::display(), GLX_EXTENSIONS)); + if (glxExt.contains(QLatin1String("GLX_EXT_texture_from_pixmap"))) { +#if defined(Q_OS_LINUX) || defined(Q_OS_BSD4) + void *handle = dlopen(NULL, RTLD_LAZY); + if (handle) { + glXBindTexImageEXT = (qt_glXBindTexImageEXT) dlsym(handle, "glXBindTexImageEXT"); + glXReleaseTexImageEXT = (qt_glXReleaseTexImageEXT) dlsym(handle, "glXReleaseTexImageEXT"); + dlclose(handle); + } + if (!glXBindTexImageEXT) +#endif + { + extern const QString qt_gl_library_name(); + QLibrary lib(qt_gl_library_name()); + glXBindTexImageEXT = (qt_glXBindTexImageEXT) lib.resolve("glXBindTexImageEXT"); + glXReleaseTexImageEXT = (qt_glXReleaseTexImageEXT) lib.resolve("glXReleaseTexImageEXT"); + } + } + } + + if (!glXBindTexImageEXT) + return 0; + +#if !defined(GLX_VERSION_1_3) || defined(Q_OS_HPUX) + return 0; +#else + GLXFBConfig *configList = 0; + GLXFBConfig glxPixmapConfig; + int configCount = 0; + bool hasAlpha = pixmapData->hasAlphaChannel(); + + int configAttribs[] = { + hasAlpha ? GLX_BIND_TO_TEXTURE_RGBA_EXT : GLX_BIND_TO_TEXTURE_RGB_EXT, True, + GLX_DRAWABLE_TYPE, GLX_PIXMAP_BIT, + GLX_BIND_TO_TEXTURE_TARGETS_EXT, GLX_TEXTURE_2D_BIT_EXT, + // QGLContext::bindTexture() can't return an inverted texture, but QPainter::drawPixmap() can: + GLX_Y_INVERTED_EXT, canInvert ? GLX_DONT_CARE : False, + XNone +// GLX_BIND_TO_MIPMAP_TEXTURE_EXT, False, +// GLX_BIND_TO_TEXTURE_TARGETS_EXT, GLX_TEXTURE_1D_BIT_EXT or GLX_TEXTURE_2D_BIT_EXT or GLX_TEXTURE_RECTANGLE_BIT_EXT + }; + configList = glXChooseFBConfig(x11Info->display(), x11Info->screen(), configAttribs, &configCount); + if (!configList) + return 0; + glxPixmapConfig = configList[0]; + XFree(configList); + + GLXPixmap glxPixmap; + int pixmapAttribs[] = { + GLX_TEXTURE_FORMAT_EXT, hasAlpha ? GLX_TEXTURE_FORMAT_RGBA_EXT : GLX_TEXTURE_FORMAT_RGB_EXT, + GLX_TEXTURE_TARGET_EXT, GLX_TEXTURE_2D_EXT, + GLX_MIPMAP_TEXTURE_EXT, False, + XNone +// GLX_TEXTURE_FORMAT_EXT, GLX_TEXTURE_FORMAT_RGBA_EXT or GLX_TEXTURE_FORMAT_RGB_EXT or GLX_TEXTURE_FORMAT_NONE_EXT, +// GLX_TEXTURE_TARGET_EXT, GLX_TEXTURE_2D_EXT or GLX_TEXTURE_RECTANGLE_EXT, +// GLX_MIPMAP_TEXTURE_EXT, True or False, + }; + + // Wrap the X Pixmap into a GLXPixmap: + glxPixmap = glXCreatePixmap(x11Info->display(), glxPixmapConfig, pixmapData->handle(), pixmapAttribs); + + if (!glxPixmap) + return 0; + + int yInverted; + glXGetFBConfigAttrib(x11Info->display(), glxPixmapConfig, GLX_Y_INVERTED_EXT, &yInverted); + + GLuint textureId; + glGenTextures(1, &textureId); + glBindTexture(GL_TEXTURE_2D, textureId); + glXBindTexImageEXT(x11Info->display(), glxPixmap, GLX_FRONT_LEFT_EXT, 0); + + glBindTexture(GL_TEXTURE_2D, textureId); + + QGLTexture *texture = new QGLTexture(q, textureId, GL_TEXTURE_2D, canInvert, yInverted); + texture->boundPixmap = glxPixmap; + + // We assume the cost of bound pixmaps is zero + QGLTextureCache::instance()->insert(q, key, texture, 0); + + return texture; +#endif //!defined(GLX_VERSION_1_3) || defined(Q_OS_HPUX) +} + +void QGLTexture::deleteBoundPixmap() +{ + if (boundPixmap) { + glXReleaseTexImageEXT(QX11Info::display(), boundPixmap, GLX_FRONT_LEFT_EXT); + glXDestroyPixmap(QX11Info::display(), boundPixmap); + boundPixmap = 0; + } +} + + QT_END_NAMESPACE diff --git a/src/opengl/qgl_x11egl.cpp b/src/opengl/qgl_x11egl.cpp index 9db3a30..11131ea 100644 --- a/src/opengl/qgl_x11egl.cpp +++ b/src/opengl/qgl_x11egl.cpp @@ -469,4 +469,15 @@ void QGLWidgetPrivate::recreateEglSurface(bool force) } } +GLuint QGLContextPrivate::bindTextureFromNativePixmap(const QPixmap& pm, const qint64 key, bool canInvert) +{ + // TODO + return 0; +} + +void QGLTexture::deleteBoundPixmap() +{ + //TODO +} + QT_END_NAMESPACE diff --git a/src/opengl/qglextensions_p.h b/src/opengl/qglextensions_p.h index 3bb42c8..4f15197 100644 --- a/src/opengl/qglextensions_p.h +++ b/src/opengl/qglextensions_p.h @@ -535,7 +535,7 @@ struct QGLExtensionFuncs #endif #ifndef GL_MAX_SAMPLES_EXT -#define GL_MAX_SAMPLES_EXT 0x8D5 +#define GL_MAX_SAMPLES_EXT 0x8D57 #endif #ifndef GL_DRAW_FRAMEBUFFER_EXT diff --git a/src/opengl/qglframebufferobject.cpp b/src/opengl/qglframebufferobject.cpp index eacf5bb..3685661 100644 --- a/src/opengl/qglframebufferobject.cpp +++ b/src/opengl/qglframebufferobject.cpp @@ -109,8 +109,6 @@ public: */ /*! - \since 4.6 - Creates a QGLFramebufferObjectFormat object with properties specifying the format of an OpenGL framebuffer object. @@ -146,8 +144,6 @@ QGLFramebufferObjectFormat::QGLFramebufferObjectFormat(int samples, } /*! - \since 4.6 - Constructs a copy of \a other. */ @@ -158,8 +154,6 @@ QGLFramebufferObjectFormat::QGLFramebufferObjectFormat(const QGLFramebufferObjec } /*! - \since 4.6 - Assigns \a other to this object. */ @@ -170,8 +164,6 @@ QGLFramebufferObjectFormat &QGLFramebufferObjectFormat::operator=(const QGLFrame } /*! - \since 4.6 - Destroys the QGLFramebufferObjectFormat. */ QGLFramebufferObjectFormat::~QGLFramebufferObjectFormat() @@ -180,8 +172,6 @@ QGLFramebufferObjectFormat::~QGLFramebufferObjectFormat() } /*! - \since 4.6 - Sets the number of samples per pixel for a multisample framebuffer object to \a samples. A sample count of 0 represents a regular non-multisample framebuffer object. @@ -194,8 +184,6 @@ void QGLFramebufferObjectFormat::setSamples(int samples) } /*! - \since 4.6 - Returns the number of samples per pixel if a framebuffer object is a multisample framebuffer object. Otherwise, returns 0. @@ -207,8 +195,6 @@ int QGLFramebufferObjectFormat::samples() const } /*! - \since 4.6 - Sets the attachments a framebuffer object should have to \a attachment. \sa attachment() @@ -219,8 +205,6 @@ void QGLFramebufferObjectFormat::setAttachment(QGLFramebufferObject::Attachment } /*! - \since 4.6 - Returns the status of the depth and stencil buffers attached to a framebuffer object. @@ -232,8 +216,6 @@ QGLFramebufferObject::Attachment QGLFramebufferObjectFormat::attachment() const } /*! - \since 4.6 - Sets the texture target of the texture attached to a framebuffer object to \a target. Ignored for multisample framebuffer objects. @@ -245,8 +227,6 @@ void QGLFramebufferObjectFormat::setTextureTarget(GLenum target) } /*! - \since 4.6 - Returns the texture target of the texture attached to a framebuffer object. Ignored for multisample framebuffer objects. @@ -258,8 +238,6 @@ GLenum QGLFramebufferObjectFormat::textureTarget() const } /*! - \since 4.6 - Sets the internal format of a framebuffer object's texture or multisample framebuffer object's color buffer to \a internalFormat. @@ -271,8 +249,6 @@ void QGLFramebufferObjectFormat::setInternalFormat(GLenum internalFormat) } /*! - \since 4.6 - Returns the internal format of a framebuffer object's texture or multisample framebuffer object's color buffer. @@ -1056,8 +1032,7 @@ GLuint QGLFramebufferObject::handle() const } /*! \fn int QGLFramebufferObject::devType() const - - \reimp + \internal */ diff --git a/src/opengl/qglpixelbuffer.cpp b/src/opengl/qglpixelbuffer.cpp index 38fad4e..440694d 100644 --- a/src/opengl/qglpixelbuffer.cpp +++ b/src/opengl/qglpixelbuffer.cpp @@ -591,7 +591,7 @@ QGLFormat QGLPixelBuffer::format() const } /*! \fn int QGLPixelBuffer::devType() const - \reimp + \internal */ QT_END_NAMESPACE diff --git a/src/opengl/qglpixmapfilter.cpp b/src/opengl/qglpixmapfilter.cpp index 7514743..5a06763 100644 --- a/src/opengl/qglpixmapfilter.cpp +++ b/src/opengl/qglpixmapfilter.cpp @@ -56,7 +56,7 @@ QT_BEGIN_NAMESPACE void QGLPixmapFilterBase::bindTexture(const QPixmap &src) const { - const_cast<QGLContext *>(QGLContext::currentContext())->d_func()->bindTexture(src, GL_TEXTURE_2D, GL_RGBA, true); + const_cast<QGLContext *>(QGLContext::currentContext())->d_func()->bindTexture(src, GL_TEXTURE_2D, GL_RGBA, true, false); } void QGLPixmapFilterBase::drawImpl(QPainter *painter, const QPointF &pos, const QPixmap &src, const QRectF& source) const diff --git a/src/opengl/qpaintengine_opengl.cpp b/src/opengl/qpaintengine_opengl.cpp index eda8d83..685d0f5 100644 --- a/src/opengl/qpaintengine_opengl.cpp +++ b/src/opengl/qpaintengine_opengl.cpp @@ -3963,7 +3963,7 @@ void QOpenGLPaintEnginePrivate::strokePath(const QPainterPath &path, bool use_ca QPen pen = cpen; if (txscale != 1) - pen.setWidthF(pen.width() * txscale); + pen.setWidthF(pen.widthF() * txscale); if (use_cache) fillPath(qt_opengl_stroke_cache()->getStrokedPath(temp.map(path), pen)); else diff --git a/src/opengl/qpixmapdata_gl.cpp b/src/opengl/qpixmapdata_gl.cpp index f0c7e20..e3ee2b2 100644 --- a/src/opengl/qpixmapdata_gl.cpp +++ b/src/opengl/qpixmapdata_gl.cpp @@ -97,7 +97,6 @@ static int qt_gl_pixmap_serial = 0; QGLPixmapData::QGLPixmapData(PixelType type) : QPixmapData(type, OpenGLClass) , m_renderFbo(0) - , m_textureId(0) , m_engine(0) , m_ctx(0) , m_dirty(false) @@ -113,9 +112,9 @@ QGLPixmapData::~QGLPixmapData() if (!shareWidget) return; - if (m_textureId) { + if (m_texture.id) { QGLShareContextScope ctx(shareWidget->context()); - glDeleteTextures(1, &m_textureId); + glDeleteTextures(1, &m_texture.id); } } @@ -148,10 +147,10 @@ void QGLPixmapData::resize(int width, int height) is_null = (w <= 0 || h <= 0); d = pixelType() == QPixmapData::PixmapType ? 32 : 1; - if (m_textureId) { + if (m_texture.id) { QGLShareContextScope ctx(qt_gl_share_widget()->context()); - glDeleteTextures(1, &m_textureId); - m_textureId = 0; + glDeleteTextures(1, &m_texture.id); + m_texture.id = 0; } m_source = QImage(); @@ -172,9 +171,9 @@ void QGLPixmapData::ensureCreated() const const GLenum format = qt_gl_preferredTextureFormat(); const GLenum target = GL_TEXTURE_2D; - if (!m_textureId) { - glGenTextures(1, &m_textureId); - glBindTexture(target, m_textureId); + if (!m_texture.id) { + glGenTextures(1, &m_texture.id); + glBindTexture(target, m_texture.id); GLenum format = m_hasAlpha ? GL_RGBA : GL_RGB; glTexImage2D(target, 0, format, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); @@ -185,13 +184,15 @@ void QGLPixmapData::ensureCreated() const if (!m_source.isNull()) { const QImage tx = ctx->d_func()->convertToGLFormat(m_source, true, format); - glBindTexture(target, m_textureId); + glBindTexture(target, m_texture.id); glTexSubImage2D(target, 0, 0, 0, w, h, format, GL_UNSIGNED_BYTE, tx.bits()); if (useFramebufferObjects()) m_source = QImage(); } + + m_texture.clean = false; } QGLFramebufferObject *QGLPixmapData::fbo() const @@ -223,10 +224,10 @@ void QGLPixmapData::fromImage(const QImage &image, is_null = (w <= 0 || h <= 0); d = pixelType() == QPixmapData::PixmapType ? 32 : 1; - if (m_textureId) { + if (m_texture.id) { QGLShareContextScope ctx(qt_gl_share_widget()->context()); - glDeleteTextures(1, &m_textureId); - m_textureId = 0; + glDeleteTextures(1, &m_texture.id); + m_texture.id = 0; } } @@ -256,9 +257,9 @@ void QGLPixmapData::fill(const QColor &color) bool hasAlpha = color.alpha() != 255; if (hasAlpha && !m_hasAlpha) { - if (m_textureId) { - glDeleteTextures(1, &m_textureId); - m_textureId = 0; + if (m_texture.id) { + glDeleteTextures(1, &m_texture.id); + m_texture.id = 0; m_dirty = true; } m_hasAlpha = color.alpha() != 255; @@ -303,6 +304,8 @@ QImage QGLPixmapData::fillImage(const QColor &color) const return img; } +extern QImage qt_gl_read_texture(const QSize &size, bool alpha_format, bool include_alpha); + QImage QGLPixmapData::toImage() const { if (!isValid()) @@ -319,8 +322,7 @@ QImage QGLPixmapData::toImage() const } QGLShareContextScope ctx(qt_gl_share_widget()->context()); - extern QImage qt_gl_read_texture(const QSize &size, bool alpha_format, bool include_alpha); - glBindTexture(GL_TEXTURE_2D, m_textureId); + glBindTexture(GL_TEXTURE_2D, m_texture.id); return qt_gl_read_texture(QSize(w, h), true, true); } @@ -350,7 +352,7 @@ void QGLPixmapData::copyBackFromRenderFbo(bool keepCurrentFboBound) const glBindFramebuffer(GL_FRAMEBUFFER_EXT, ctx->d_ptr->fbo); glFramebufferTexture2D(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, - GL_TEXTURE_2D, m_textureId, 0); + GL_TEXTURE_2D, m_texture.id, 0); const int x0 = 0; const int x1 = w; @@ -488,7 +490,7 @@ GLuint QGLPixmapData::bind(bool copyBack) const ensureCreated(); } - GLuint id = m_textureId; + GLuint id = m_texture.id; glBindTexture(GL_TEXTURE_2D, id); return id; } @@ -496,7 +498,12 @@ GLuint QGLPixmapData::bind(bool copyBack) const GLuint QGLPixmapData::textureId() const { ensureCreated(); - return m_textureId; + return m_texture.id; +} + +QGLTexture* QGLPixmapData::texture() const +{ + return &m_texture; } extern int qt_defaultDpiX(); diff --git a/src/opengl/qpixmapdata_gl_p.h b/src/opengl/qpixmapdata_gl_p.h index a6aa22d..671f9a7 100644 --- a/src/opengl/qpixmapdata_gl_p.h +++ b/src/opengl/qpixmapdata_gl_p.h @@ -53,6 +53,7 @@ // We mean it. // +#include "qgl_p.h" #include "qgl.h" #include "private/qpixmapdata_p.h" @@ -80,10 +81,11 @@ public: void fill(const QColor &color); bool hasAlphaChannel() const; QImage toImage() const; - QPaintEngine* paintEngine() const; + QPaintEngine *paintEngine() const; GLuint bind(bool copyBack = true) const; GLuint textureId() const; + QGLTexture *texture() const; bool isValidContext(const QGLContext *ctx) const; @@ -116,10 +118,10 @@ private: QImage fillImage(const QColor &color) const; mutable QGLFramebufferObject *m_renderFbo; - mutable GLuint m_textureId; mutable QPaintEngine *m_engine; mutable QGLContext *m_ctx; mutable QImage m_source; + mutable QGLTexture m_texture; // the texture is not in sync with the source image mutable bool m_dirty; diff --git a/src/plugins/accessible/compat/q3complexwidgets.cpp b/src/plugins/accessible/compat/q3complexwidgets.cpp index 696bc99..b911d5e 100644 --- a/src/plugins/accessible/compat/q3complexwidgets.cpp +++ b/src/plugins/accessible/compat/q3complexwidgets.cpp @@ -274,7 +274,7 @@ QString Q3AccessibleTitleBar::text(Text t, int child) const return Q3TitleBar::tr("Contains commands to manipulate the window"); case 3: if (window && window->isMinimized()) - return Q3TitleBar::tr("Puts a minimized back to normal"); + return Q3TitleBar::tr("Puts a minimized window back to normal"); return Q3TitleBar::tr("Moves the window out of the way"); case 4: if (window && window->isMaximized()) diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbkeyboard.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbkeyboard.cpp index ed59db8..b5376b1 100644 --- a/src/plugins/gfxdrivers/directfb/qdirectfbkeyboard.cpp +++ b/src/plugins/gfxdrivers/directfb/qdirectfbkeyboard.cpp @@ -78,7 +78,7 @@ private: DFBEvent event; int bytesRead; -private slots: +private Q_SLOTS: void readKeyboardData(); }; diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbmouse.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbmouse.cpp index 15fb6f4..142993d 100644 --- a/src/plugins/gfxdrivers/directfb/qdirectfbmouse.cpp +++ b/src/plugins/gfxdrivers/directfb/qdirectfbmouse.cpp @@ -71,7 +71,7 @@ private: DFBEvent event; uint bytesRead; -private slots: +private Q_SLOTS: void readMouseData(); }; @@ -101,7 +101,7 @@ QDirectFBMouseHandlerPrivate::QDirectFBMouseHandlerPrivate(QDirectFBMouseHandler #endif DFBInputDeviceCapabilities caps; - caps = DFBInputDeviceCapabilities(DICAPS_BUTTONS | DICAPS_AXES); + caps = DICAPS_BUTTONS | DICAPS_AXES; result = fb->CreateInputEventBuffer(fb, caps, DFB_TRUE, &eventBuffer); if (result != DFB_OK) { DirectFBError("QDirectFBMouseHandler: " diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbpaintdevice.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbpaintdevice.cpp index 905fec3..86e92f7 100644 --- a/src/plugins/gfxdrivers/directfb/qdirectfbpaintdevice.cpp +++ b/src/plugins/gfxdrivers/directfb/qdirectfbpaintdevice.cpp @@ -56,20 +56,17 @@ IDirectFBSurface *QDirectFBPaintDevice::directFBSurface() const } -void QDirectFBPaintDevice::lockDirectFB(uint flags) +void QDirectFBPaintDevice::lockDirectFB(DFBSurfaceLockFlags flags) { if (!(lock & flags)) { if (lock) unlockDirectFB(); - if ((mem = QDirectFBScreen::lockSurface(dfbSurface, flags, &bpl))) { - const QSize s = size(); - lockedImage = new QImage(mem, s.width(), s.height(), bpl, - QDirectFBScreen::getImageFormat(dfbSurface)); - lock = flags; - Q_ASSERT(mem); - } else { - lock = 0; - } + mem = QDirectFBScreen::lockSurface(dfbSurface, flags, &bpl); + Q_ASSERT(mem); + const QSize s = size(); + lockedImage = new QImage(mem, s.width(), s.height(), bpl, + QDirectFBScreen::getImageFormat(dfbSurface)); + lock = flags; } } @@ -83,17 +80,12 @@ void QDirectFBPaintDevice::unlockDirectFB() delete lockedImage; lockedImage = 0; mem = 0; - lock = 0; + lock = DFBSurfaceLockFlags(0); } void *QDirectFBPaintDevice::memory() const { - if (lock != (DSLF_READ|DSLF_WRITE)) { - QDirectFBPaintDevice *that = const_cast<QDirectFBPaintDevice*>(this); - that->lockDirectFB(DSLF_READ|DSLF_WRITE); - Q_ASSERT(that->lockedImage); - } return mem; } diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbpaintdevice.h b/src/plugins/gfxdrivers/directfb/qdirectfbpaintdevice.h index 32c49bb..248a15b 100644 --- a/src/plugins/gfxdrivers/directfb/qdirectfbpaintdevice.h +++ b/src/plugins/gfxdrivers/directfb/qdirectfbpaintdevice.h @@ -51,14 +51,14 @@ QT_BEGIN_HEADER QT_MODULE(Gui) // Inherited by both window surface and pixmap -class QDirectFBPaintDevice : public QCustomRasterPaintDevice + class QDirectFBPaintDevice : public QCustomRasterPaintDevice { public: ~QDirectFBPaintDevice(); IDirectFBSurface *directFBSurface() const; - void lockDirectFB(uint flags); + void lockDirectFB(DFBSurfaceLockFlags lock); void unlockDirectFB(); // Reimplemented from QCustomRasterPaintDevice: @@ -67,16 +67,12 @@ public: int bytesPerLine() const; QSize size() const; int metric(QPaintDevice::PaintDeviceMetric metric) const; - uint lockFlags() const { return lock; } + DFBSurfaceLockFlags lockFlags() const { return lock; } protected: // Shouldn't create QDirectFBPaintDevice by itself but only sub-class it: QDirectFBPaintDevice(QDirectFBScreen *scr = QDirectFBScreen::instance()) - : QCustomRasterPaintDevice(0), - dfbSurface(0), - lockedImage(0), - screen(scr), - lock(0), - mem(0) + : QCustomRasterPaintDevice(0), dfbSurface(0), lockedImage(0), screen(scr), + lock(DFBSurfaceLockFlags(0)), mem(0) {} inline int dotsPerMeterX() const @@ -92,11 +88,11 @@ protected: QImage *lockedImage; QDirectFBScreen *screen; int bpl; - uint lock; + DFBSurfaceLockFlags lock; uchar *mem; private: Q_DISABLE_COPY(QDirectFBPaintDevice) -}; + }; QT_END_HEADER diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp index 4928b67..94f1aeb 100644 --- a/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp +++ b/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp @@ -54,173 +54,22 @@ #include <private/qpixmapdata_p.h> #include <private/qpixmap_raster_p.h> -#if defined QT_DIRECTFB_WARN_ON_RASTERFALLBACKS || defined QT_DIRECTFB_DISABLE_RASTERFALLBACKS -#define VOID_ARG() static_cast<bool>(false) -enum PaintOperation { - DRAW_RECTS = 0x0001, - DRAW_LINES = 0x0002, - DRAW_IMAGE = 0x0004, - DRAW_PIXMAP = 0x0008, - DRAW_TILED_PIXMAP = 0x0010, - STROKE_PATH = 0x0020, - DRAW_PATH = 0x0040, - DRAW_POINTS = 0x0080, - DRAW_ELLIPSE = 0x0100, - DRAW_POLYGON = 0x0200, - DRAW_TEXT = 0x0400, - FILL_PATH = 0x0800, - FILL_RECT = 0x1000, - DRAW_COLORSPANS = 0x2000, - ALL = 0xffff -}; -#endif - -#ifdef QT_DIRECTFB_WARN_ON_RASTERFALLBACKS -template <typename T> inline const T *ptr(const T &t) { return &t; } -template <> inline const bool* ptr<bool>(const bool &) { return 0; } -template <typename device, typename T1, typename T2, typename T3> -static void rasterFallbackWarn(const char *msg, const char *func, const device *dev, - int scale, bool matrixRotShear, bool simplePen, - bool dfbHandledClip, bool unsupportedCompositionMode, - const char *nameOne, const T1 &one, - const char *nameTwo, const T2 &two, - const char *nameThree, const T3 &three) -{ - QString out; - QDebug dbg(&out); - dbg << msg << (QByteArray(func) + "()") << "painting on"; - if (dev->devType() == QInternal::Widget) { - dbg << static_cast<const QWidget*>(dev); - } else { - dbg << dev << "of type" << dev->devType(); - } - - dbg << "scale" << scale - << "matrixRotShear" << matrixRotShear - << "simplePen" << simplePen - << "dfbHandledClip" << dfbHandledClip - << "unsupportedCompositionMode" << unsupportedCompositionMode; - - const T1 *t1 = ptr(one); - const T2 *t2 = ptr(two); - const T3 *t3 = ptr(three); - - if (t1) { - dbg << nameOne << *t1; - if (t2) { - dbg << nameTwo << *t2; - if (t3) { - dbg << nameThree << *t3; - } - } - } - qWarning("%s", qPrintable(out)); -} -#endif - -#if defined QT_DIRECTFB_WARN_ON_RASTERFALLBACKS && defined QT_DIRECTFB_DISABLE_RASTERFALLBACKS -#define RASTERFALLBACK(op, one, two, three) \ - if (op & (QT_DIRECTFB_WARN_ON_RASTERFALLBACKS)) \ - rasterFallbackWarn("Disabled raster engine operation", \ - __FUNCTION__, state()->painter->device(), \ - d_func()->scale, d_func()->matrixRotShear, \ - d_func()->simplePen, d_func()->dfbCanHandleClip(), \ - d_func()->unsupportedCompositionMode, \ - #one, one, #two, two, #three, three); \ - if (op & (QT_DIRECTFB_DISABLE_RASTERFALLBACKS)) \ - return; -#elif defined QT_DIRECTFB_DISABLE_RASTERFALLBACKS -#define RASTERFALLBACK(op, one, two, three) \ - if (op & (QT_DIRECTFB_DISABLE_RASTERFALLBACKS)) \ - return; -#elif defined QT_DIRECTFB_WARN_ON_RASTERFALLBACKS -#define RASTERFALLBACK(op, one, two, three) \ - if (op & (QT_DIRECTFB_WARN_ON_RASTERFALLBACKS)) \ - rasterFallbackWarn("Falling back to raster engine for", \ - __FUNCTION__, state()->painter->device(), \ - d_func()->scale, d_func()->matrixRotShear, \ - d_func()->simplePen, d_func()->dfbCanHandleClip(), \ - d_func()->unsupportedCompositionMode, \ - #one, one, #two, two, #three, three); -#else -#define RASTERFALLBACK(op, one, two, three) -#endif - -static inline uint ALPHA_MUL(uint x, uint a) -{ - uint t = x * a; - t = ((t + (t >> 8) + 0x80) >> 8) & 0xff; - return t; -} - -class SurfaceCache -{ -public: - SurfaceCache() : surface(0), buffer(0), bufsize(0) {} - ~SurfaceCache() { clear(); } - - - IDirectFBSurface *getSurface(const uint *buf, int size) - { - if (buffer == buf && bufsize == size) - return surface; - - clear(); - - const DFBSurfaceDescription description = QDirectFBScreen::getSurfaceDescription(buf, size); - surface = QDirectFBScreen::instance()->createDFBSurface(description, QDirectFBScreen::TrackSurface); - if (!surface) - qWarning("QDirectFBPaintEngine: SurfaceCache: Unable to create surface"); - - buffer = const_cast<uint*>(buf); - bufsize = size; - - return surface; - } - - void clear() - { - if (surface && QDirectFBScreen::instance()) - QDirectFBScreen::instance()->releaseDFBSurface(surface); - surface = 0; - buffer = 0; - bufsize = 0; - } -private: - IDirectFBSurface *surface; - uint *buffer; - int bufsize; -}; - - -#ifdef QT_DIRECTFB_IMAGECACHE -#include <private/qimage_p.h> -struct CachedImage -{ - IDirectFBSurface *surface; - ~CachedImage() - { - if (surface && QDirectFBScreen::instance()) { - QDirectFBScreen::instance()->releaseDFBSurface(surface); - } - } -}; -static QCache<qint64, CachedImage> imageCache(4*1024*1024); // 4 MB -#endif - +class SurfaceCache; class QDirectFBPaintEnginePrivate : public QRasterPaintEnginePrivate { public: - enum Scale { NoScale, Scaled, NegativeScale }; - + enum TransformationTypeFlags { + NegativeScale = 0x100, + RectsUnsupported = (QTransform::TxRotate|QTransform::TxShear|QTransform::TxProject), + BlitUnsupported = (NegativeScale|RectsUnsupported) + }; QDirectFBPaintEnginePrivate(QDirectFBPaintEngine *p); ~QDirectFBPaintEnginePrivate(); - void setTransform(const QTransform &m); - void setPen(const QPen &pen); + inline void setTransform(const QTransform &transforma); + inline void setPen(const QPen &pen); inline void setCompositionMode(QPainter::CompositionMode mode); - inline void setOpacity(quint8 value); - void setRenderHints(QPainter::RenderHints hints); + inline void setRenderHints(QPainter::RenderHints hints); inline void setDFBColor(const QColor &color); @@ -232,20 +81,11 @@ public: inline bool dfbCanHandleClip() const; inline bool isSimpleBrush(const QBrush &brush) const; - void drawLines(const QLine *lines, int count); - void drawLines(const QLineF *lines, int count); - - void fillRegion(const QRegion &r); - void fillRects(const QRect *rects, int count); - void drawRects(const QRect *rects, int count); - void fillRects(const QRectF *rects, int count); - void drawRects(const QRectF *rects, int count); - void drawTiledPixmap(const QRectF &dest, const QPixmap &pixmap, const QPointF &pos); void blit(const QRectF &dest, IDirectFBSurface *surface, const QRectF &src); inline void updateClip(); - void systemStateChanged(); + virtual void systemStateChanged(); static IDirectFBSurface *getSurface(const QImage &img, bool *release); @@ -257,22 +97,14 @@ public: private: IDirectFBSurface *surface; - QPen pen; - bool antialiased; - bool simplePen; - bool matrixRotShear; - Scale scale; + uint transformationType; // this is QTransform::type() + NegativeScale if qMin(transform.m11(), transform.m22()) < 0 SurfaceCache *surfaceCache; - QTransform transform; - int lastLockedHeight; IDirectFB *fb; - int fbWidth; - int fbHeight; quint8 opacity; @@ -280,7 +112,6 @@ private: bool dfbHandledClip; bool ignoreSystemClip; QDirectFBPaintDevice *dfbDevice; - void *lockedMemory; bool unsupportedCompositionMode; QDirectFBPaintEngine *q; @@ -288,6 +119,90 @@ private: friend class QDirectFBPaintEngine; }; +class SurfaceCache +{ +public: + SurfaceCache() : surface(0), buffer(0), bufsize(0) {} + ~SurfaceCache() { clear(); } + IDirectFBSurface *getSurface(const uint *buf, int size); + void clear(); +private: + IDirectFBSurface *surface; + uint *buffer; + int bufsize; +}; + + +#ifdef QT_DIRECTFB_IMAGECACHE +#include <private/qimage_p.h> +struct CachedImage +{ + IDirectFBSurface *surface; + ~CachedImage() + { + if (surface && QDirectFBScreen::instance()) { + QDirectFBScreen::instance()->releaseDFBSurface(surface); + } + } +}; +static QCache<qint64, CachedImage> imageCache(4*1024*1024); // 4 MB +#endif + +#if defined QT_DIRECTFB_WARN_ON_RASTERFALLBACKS || defined QT_DIRECTFB_DISABLE_RASTERFALLBACKS +#define VOID_ARG() static_cast<bool>(false) +enum PaintOperation { + DRAW_RECTS = 0x0001, DRAW_LINES = 0x0002, DRAW_IMAGE = 0x0004, + DRAW_PIXMAP = 0x0008, DRAW_TILED_PIXMAP = 0x0010, STROKE_PATH = 0x0020, + DRAW_PATH = 0x0040, DRAW_POINTS = 0x0080, DRAW_ELLIPSE = 0x0100, + DRAW_POLYGON = 0x0200, DRAW_TEXT = 0x0400, FILL_PATH = 0x0800, + FILL_RECT = 0x1000, DRAW_COLORSPANS = 0x2000, ALL = 0xffff +}; +#endif + +#ifdef QT_DIRECTFB_WARN_ON_RASTERFALLBACKS +template <typename device, typename T1, typename T2, typename T3> +static void rasterFallbackWarn(const char *msg, const char *, const device *, uint, bool, bool, bool, + const char *, const T1 &, const char *, const T2 &, const char *, const T3 &); +#endif + +#if defined QT_DIRECTFB_WARN_ON_RASTERFALLBACKS && defined QT_DIRECTFB_DISABLE_RASTERFALLBACKS +#define RASTERFALLBACK(op, one, two, three) \ + if (op & (QT_DIRECTFB_WARN_ON_RASTERFALLBACKS)) \ + rasterFallbackWarn("Disabled raster engine operation", \ + __FUNCTION__, state()->painter->device(), \ + d_func()->transformationType, \ + d_func()->simplePen, \ + d_func()->dfbCanHandleClip(), \ + d_func()->unsupportedCompositionMode, \ + #one, one, #two, two, #three, three); \ + if (op & (QT_DIRECTFB_DISABLE_RASTERFALLBACKS)) \ + return; +#elif defined QT_DIRECTFB_DISABLE_RASTERFALLBACKS +#define RASTERFALLBACK(op, one, two, three) \ + if (op & (QT_DIRECTFB_DISABLE_RASTERFALLBACKS)) \ + return; +#elif defined QT_DIRECTFB_WARN_ON_RASTERFALLBACKS +#define RASTERFALLBACK(op, one, two, three) \ + if (op & (QT_DIRECTFB_WARN_ON_RASTERFALLBACKS)) \ + rasterFallbackWarn("Falling back to raster engine for", \ + __FUNCTION__, state()->painter->device(), \ + d_func()->transformationType, \ + d_func()->simplePen, \ + d_func()->dfbCanHandleClip(), \ + d_func()->unsupportedCompositionMode, \ + #one, one, #two, two, #three, three); +#else +#define RASTERFALLBACK(op, one, two, three) +#endif + + +template <class T> +static inline void drawLines(const T *lines, int n, const QTransform &transform, IDirectFBSurface *surface); +template <class T> +static inline void fillRects(const T *rects, int n, const QTransform &transform, IDirectFBSurface *surface); +template <class T> +static inline void drawRects(const T *rects, int n, const QTransform &transform, IDirectFBSurface *surface); + QDirectFBPaintEngine::QDirectFBPaintEngine(QPaintDevice *device) : QRasterPaintEngine(*(new QDirectFBPaintEnginePrivate(this)), device) { @@ -300,7 +215,6 @@ QDirectFBPaintEngine::~QDirectFBPaintEngine() bool QDirectFBPaintEngine::begin(QPaintDevice *device) { Q_D(QDirectFBPaintEngine); - d->lastLockedHeight = -1; if (device->devType() == QInternal::CustomRaster) { d->dfbDevice = static_cast<QDirectFBPaintDevice*>(device); } else if (device->devType() == QInternal::Pixmap) { @@ -317,23 +231,10 @@ bool QDirectFBPaintEngine::begin(QPaintDevice *device) qFatal("QDirectFBPaintEngine used on an invalid device: 0x%x", device->devType()); } - d->lockedMemory = 0; - - d->surface->GetSize(d->surface, &d->fbWidth, &d->fbHeight); - - d->setTransform(QTransform()); - d->antialiased = false; - d->setOpacity(255); - d->setCompositionMode(state()->compositionMode()); - d->dirtyClip = true; - d->setPen(state()->pen); - - const bool status = QRasterPaintEngine::begin(device); - // XXX: QRasterPaintEngine::begin() resets the capabilities - gccaps |= PorterDuff; + d->prepare(d->dfbDevice); - return status; + return QRasterPaintEngine::begin(device); } bool QDirectFBPaintEngine::end() @@ -368,7 +269,7 @@ void QDirectFBPaintEngine::penChanged() void QDirectFBPaintEngine::opacityChanged() { Q_D(QDirectFBPaintEngine); - d->setOpacity(quint8(state()->opacity * 255)); + d->opacity = quint8(state()->opacity * 255); QRasterPaintEngine::opacityChanged(); } @@ -389,32 +290,26 @@ void QDirectFBPaintEngine::renderHintsChanged() void QDirectFBPaintEngine::transformChanged() { Q_D(QDirectFBPaintEngine); - const QDirectFBPaintEnginePrivate::Scale old = d->scale; - d->setTransform(state()->transform()); - if (d->scale != old) { - d->setPen(state()->pen); - } + d->setTransform(state()->matrix); QRasterPaintEngine::transformChanged(); } -void QDirectFBPaintEngine::setState(QPainterState *s) +void QDirectFBPaintEngine::setState(QPainterState *state) { Q_D(QDirectFBPaintEngine); - QRasterPaintEngine::setState(s); + QRasterPaintEngine::setState(state); d->dirtyClip = true; - d->setPen(state()->pen); - d->setOpacity(quint8(state()->opacity * 255)); - d->setCompositionMode(state()->compositionMode()); - d->setTransform(state()->transform()); + d->setPen(state->pen); + d->opacity = quint8(state->opacity * 255); + d->setCompositionMode(state->compositionMode()); + d->setTransform(state->transform()); + d->setRenderHints(state->renderHints); } void QDirectFBPaintEngine::clip(const QVectorPath &path, Qt::ClipOperation op) { Q_D(QDirectFBPaintEngine); d->dirtyClip = true; - const QPoint bottom = d->transform.map(QPoint(0, int(path.controlPointRect().bottom()))); - if (bottom.y() > d->lastLockedHeight) - d->lock(); QRasterPaintEngine::clip(path, op); } @@ -422,12 +317,6 @@ void QDirectFBPaintEngine::clip(const QRect &rect, Qt::ClipOperation op) { Q_D(QDirectFBPaintEngine); d->dirtyClip = true; - if (d->clip() && !d->clip()->hasRectClip && d->clip()->enabled) { - const QPoint bottom = d->transform.map(QPoint(0, rect.bottom())); - if (bottom.y() > d->lastLockedHeight) - d->lock(); - } - QRasterPaintEngine::clip(rect, op); } @@ -436,8 +325,11 @@ void QDirectFBPaintEngine::drawRects(const QRect *rects, int rectCount) Q_D(QDirectFBPaintEngine); d->updateClip(); const QBrush &brush = state()->brush; - if (d->unsupportedCompositionMode || !d->dfbCanHandleClip() || d->matrixRotShear - || !d->simplePen || !d->isSimpleBrush(brush)) { + if (d->unsupportedCompositionMode + || (d->transformationType & QDirectFBPaintEnginePrivate::RectsUnsupported) + || !d->simplePen + || !d->dfbCanHandleClip() + || !d->isSimpleBrush(brush)) { RASTERFALLBACK(DRAW_RECTS, rectCount, VOID_ARG(), VOID_ARG()); d->lock(); QRasterPaintEngine::drawRects(rects, rectCount); @@ -448,11 +340,12 @@ void QDirectFBPaintEngine::drawRects(const QRect *rects, int rectCount) if (brush != Qt::NoBrush) { d->setDFBColor(brush.color()); - d->fillRects(rects, rectCount); + ::fillRects<QRect>(rects, rectCount, state()->matrix, d->surface); } - if (d->pen != Qt::NoPen) { - d->setDFBColor(d->pen.color()); - d->drawRects(rects, rectCount); + const QPen &pen = state()->pen; + if (pen != Qt::NoPen) { + d->setDFBColor(pen.color()); + ::drawRects<QRect>(rects, rectCount, state()->matrix, d->surface); } } @@ -461,8 +354,11 @@ void QDirectFBPaintEngine::drawRects(const QRectF *rects, int rectCount) Q_D(QDirectFBPaintEngine); d->updateClip(); const QBrush &brush = state()->brush; - if (d->unsupportedCompositionMode || !d->dfbCanHandleClip() || d->matrixRotShear - || !d->simplePen || !d->isSimpleBrush(brush)) { + if (d->unsupportedCompositionMode + || (d->transformationType & QDirectFBPaintEnginePrivate::RectsUnsupported) + || !d->simplePen + || !d->dfbCanHandleClip() + || !d->isSimpleBrush(brush)) { RASTERFALLBACK(DRAW_RECTS, rectCount, VOID_ARG(), VOID_ARG()); d->lock(); QRasterPaintEngine::drawRects(rects, rectCount); @@ -473,11 +369,12 @@ void QDirectFBPaintEngine::drawRects(const QRectF *rects, int rectCount) if (brush != Qt::NoBrush) { d->setDFBColor(brush.color()); - d->fillRects(rects, rectCount); + ::fillRects<QRectF>(rects, rectCount, state()->matrix, d->surface); } - if (d->pen != Qt::NoPen) { - d->setDFBColor(d->pen.color()); - d->drawRects(rects, rectCount); + const QPen &pen = state()->pen; + if (pen != Qt::NoPen) { + d->setDFBColor(pen.color()); + ::drawRects<QRectF>(rects, rectCount, state()->matrix, d->surface); } } @@ -492,10 +389,11 @@ void QDirectFBPaintEngine::drawLines(const QLine *lines, int lineCount) return; } - if (d->pen != Qt::NoPen) { + const QPen &pen = state()->pen; + if (pen != Qt::NoPen) { d->unlock(); - d->setDFBColor(d->pen.color()); - d->drawLines(lines, lineCount); + d->setDFBColor(pen.color()); + ::drawLines<QLine>(lines, lineCount, state()->matrix, d->surface); } } @@ -510,10 +408,11 @@ void QDirectFBPaintEngine::drawLines(const QLineF *lines, int lineCount) return; } - if (d->pen != Qt::NoPen) { + const QPen &pen = state()->pen; + if (pen != Qt::NoPen) { d->unlock(); - d->setDFBColor(d->pen.color()); - d->drawLines(lines, lineCount); + d->setDFBColor(pen.color()); + ::drawLines<QLineF>(lines, lineCount, state()->matrix, d->surface); } } @@ -544,8 +443,7 @@ void QDirectFBPaintEngine::drawImage(const QRectF &r, const QImage &image, d->updateClip(); #if !defined QT_NO_DIRECTFB_PREALLOCATED || defined QT_DIRECTFB_IMAGECACHE if (d->unsupportedCompositionMode - || d->matrixRotShear - || d->scale == QDirectFBPaintEnginePrivate::NegativeScale + || (d->transformationType & QDirectFBPaintEnginePrivate::BlitUnsupported) || !d->dfbCanHandleClip(r) #ifndef QT_DIRECTFB_IMAGECACHE || QDirectFBScreen::getSurfacePixelFormat(image.format()) == DSPF_UNKNOWN @@ -590,8 +488,9 @@ void QDirectFBPaintEngine::drawPixmap(const QRectF &r, const QPixmap &pixmap, RASTERFALLBACK(DRAW_PIXMAP, r, pixmap.size(), sr); d->lock(); QRasterPaintEngine::drawPixmap(r, pixmap, sr); - } else if (d->unsupportedCompositionMode || !d->dfbCanHandleClip(r) || d->matrixRotShear - || d->scale == QDirectFBPaintEnginePrivate::NegativeScale) { + } else if (d->unsupportedCompositionMode + || (d->transformationType & QDirectFBPaintEnginePrivate::BlitUnsupported) + || !d->dfbCanHandleClip(r)) { RASTERFALLBACK(DRAW_PIXMAP, r, pixmap.size(), sr); const QImage *img = static_cast<QDirectFBPixmapData*>(pixmap.pixmapData())->buffer(DSLF_READ); d->lock(); @@ -623,8 +522,9 @@ void QDirectFBPaintEngine::drawTiledPixmap(const QRectF &r, RASTERFALLBACK(DRAW_TILED_PIXMAP, r, pixmap.size(), offset); d->lock(); QRasterPaintEngine::drawTiledPixmap(r, pixmap, offset); - } else if (d->unsupportedCompositionMode || !d->dfbCanHandleClip(r) || d->matrixRotShear - || d->scale == QDirectFBPaintEnginePrivate::NegativeScale) { + } else if (d->unsupportedCompositionMode + || (d->transformationType & QDirectFBPaintEnginePrivate::BlitUnsupported) + || !d->dfbCanHandleClip(r)) { RASTERFALLBACK(DRAW_TILED_PIXMAP, r, pixmap.size(), offset); const QImage *img = static_cast<QDirectFBPixmapData*>(pixmap.pixmapData())->buffer(DSLF_READ); d->lock(); @@ -719,7 +619,9 @@ void QDirectFBPaintEngine::fillRect(const QRectF &rect, const QBrush &brush) { Q_D(QDirectFBPaintEngine); d->updateClip(); - if (!d->unsupportedCompositionMode && d->dfbCanHandleClip(rect) && !d->matrixRotShear) { + if (!d->unsupportedCompositionMode + && !(d->transformationType & (QDirectFBPaintEnginePrivate::RectsUnsupported)) + && d->dfbCanHandleClip(rect)) { switch (brush.style()) { case Qt::SolidPattern: { const QColor color = brush.color(); @@ -727,12 +629,12 @@ void QDirectFBPaintEngine::fillRect(const QRectF &rect, const QBrush &brush) return; d->unlock(); d->setDFBColor(color); - const QRect r = d->transform.mapRect(rect).toRect(); + const QRect r = state()->matrix.mapRect(rect).toRect(); d->surface->FillRectangle(d->surface, r.x(), r.y(), r.width(), r.height()); return; } case Qt::TexturePattern: { - if (d->scale == QDirectFBPaintEnginePrivate::NegativeScale) + if (d->transformationType & QDirectFBPaintEnginePrivate::NegativeScale) break; const QPixmap texture = brush.texture(); @@ -757,51 +659,21 @@ void QDirectFBPaintEngine::fillRect(const QRectF &rect, const QColor &color) return; Q_D(QDirectFBPaintEngine); d->updateClip(); - if (d->unsupportedCompositionMode || !d->dfbCanHandleClip() || d->matrixRotShear) { + if (d->unsupportedCompositionMode + || (d->transformationType & QDirectFBPaintEnginePrivate::RectsUnsupported) + || !d->dfbCanHandleClip()) { RASTERFALLBACK(FILL_RECT, rect, color, VOID_ARG()); d->lock(); QRasterPaintEngine::fillRect(rect, color); } else { d->unlock(); d->setDFBColor(color); - const QRect r = d->transform.mapRect(rect).toRect(); + const QRect r = state()->matrix.mapRect(rect).toRect(); d->surface->FillRectangle(d->surface, r.x(), r.y(), r.width(), r.height()); } } -void QDirectFBPaintEngine::drawColorSpans(const QSpan *spans, int count, - uint color) -{ - Q_D(QDirectFBPaintEngine); - color = INV_PREMUL(color); - - QVarLengthArray<DFBRegion> lines(count); - int j = 0; - for (int i = 0; i < count; ++i) { - if (spans[i].coverage == 255) { - lines[j].x1 = spans[i].x; - lines[j].y1 = spans[i].y; - lines[j].x2 = spans[i].x + spans[i].len - 1; - lines[j].y2 = spans[i].y; - ++j; - } else { - DFBSpan span = { spans[i].x, spans[i].len }; - uint c = BYTE_MUL(color, spans[i].coverage); - // ### how does this play with setDFBColor - d->surface->SetColor(d->surface, - qRed(c), qGreen(c), qBlue(c), qAlpha(c)); - d->surface->FillSpans(d->surface, spans[i].y, &span, 1); - } - } - if (j > 0) { - d->surface->SetColor(d->surface, - qRed(color), qGreen(color), qBlue(color), - qAlpha(color)); - d->surface->DrawLines(d->surface, lines.data(), j); - } -} - void QDirectFBPaintEngine::drawBufferSpan(const uint *buffer, int bufsize, int x, int y, int length, uint const_alpha) @@ -835,9 +707,8 @@ void QDirectFBPaintEngine::initImageCache(int size) QDirectFBPaintEnginePrivate::QDirectFBPaintEnginePrivate(QDirectFBPaintEngine *p) : surface(0), antialiased(false), simplePen(false), - matrixRotShear(false), scale(NoScale), lastLockedHeight(-1), - fbWidth(-1), fbHeight(-1), opacity(255), dirtyClip(true), - dfbHandledClip(false), dfbDevice(0), lockedMemory(0), + transformationType(0), opacity(255), dirtyClip(true), + dfbHandledClip(false), dfbDevice(0), unsupportedCompositionMode(false), q(p) { fb = QDirectFBScreen::instance()->dfb(); @@ -878,12 +749,9 @@ void QDirectFBPaintEnginePrivate::lock() // lock so we need to call the base implementation of prepare so // it updates its rasterBuffer to point to the new buffer address. Q_ASSERT(dfbDevice); - if (dfbDevice->lockFlags() != (DSLF_WRITE|DSLF_READ) - || dfbDevice->height() != lastLockedHeight - || dfbDevice->memory() != lockedMemory) { + if (dfbDevice->lockFlags() != (DSLF_WRITE|DSLF_READ)) { + dfbDevice->lockDirectFB(DSLF_READ|DSLF_WRITE); prepare(dfbDevice); - lastLockedHeight = dfbDevice->height(); - lockedMemory = dfbDevice->memory(); } } @@ -891,32 +759,26 @@ void QDirectFBPaintEnginePrivate::unlock() { Q_ASSERT(dfbDevice); dfbDevice->unlockDirectFB(); - lockedMemory = 0; } -void QDirectFBPaintEnginePrivate::setTransform(const QTransform &m) +void QDirectFBPaintEnginePrivate::setTransform(const QTransform &transform) { - transform = m; - matrixRotShear = (transform.m12() != 0 || transform.m21() != 0); + transformationType = transform.type(); if (qMin(transform.m11(), transform.m22()) < 0) { - scale = NegativeScale; - } else if (transform.m11() != 1 || transform.m22() != 1) { - scale = Scaled; - } else { - scale = NoScale; + transformationType |= QDirectFBPaintEnginePrivate::NegativeScale; } + setPen(q->state()->pen); } -void QDirectFBPaintEnginePrivate::setPen(const QPen &p) +void QDirectFBPaintEnginePrivate::setPen(const QPen &pen) { - pen = p; if (pen.style() == Qt::NoPen) { simplePen = true; } else if (pen.style() == Qt::SolidLine && !antialiased && pen.brush().style() == Qt::SolidPattern && pen.widthF() <= 1.0 - && (scale == NoScale || pen.isCosmetic())) { + && (transformationType < QTransform::TxScale || pen.isCosmetic())) { simplePen = true; } else { simplePen = false; @@ -928,12 +790,6 @@ void QDirectFBPaintEnginePrivate::setCompositionMode(QPainter::CompositionMode m unsupportedCompositionMode = (mode != QPainter::CompositionMode_SourceOver); } - -void QDirectFBPaintEnginePrivate::setOpacity(quint8 op) -{ - opacity = op; -} - void QDirectFBPaintEnginePrivate::setRenderHints(QPainter::RenderHints hints) { const bool old = antialiased; @@ -953,6 +809,13 @@ void QDirectFBPaintEnginePrivate::prepareForBlit(bool alpha) surface->SetBlittingFlags(surface, DFBSurfaceBlittingFlags(blittingFlags)); } +static inline uint ALPHA_MUL(uint x, uint a) +{ + uint t = x * a; + t = ((t + (t >> 8) + 0x80) >> 8) & 0xff; + return t; +} + void QDirectFBPaintEnginePrivate::setDFBColor(const QColor &color) { Q_ASSERT(surface); @@ -963,67 +826,6 @@ void QDirectFBPaintEnginePrivate::setDFBColor(const QColor &color) surface->SetDrawingFlags(surface, alpha == 255 ? DSDRAW_NOFX : DSDRAW_BLEND); } -void QDirectFBPaintEnginePrivate::drawLines(const QLine *lines, int n) -{ - for (int i = 0; i < n; ++i) { - const QLine l = transform.map(lines[i]); - surface->DrawLine(surface, l.x1(), l.y1(), l.x2(), l.y2()); - } -} - -void QDirectFBPaintEnginePrivate::drawLines(const QLineF *lines, int n) -{ - for (int i = 0; i < n; ++i) { - const QLine l = transform.map(lines[i]).toLine(); - surface->DrawLine(surface, l.x1(), l.y1(), l.x2(), l.y2()); - } -} - -void QDirectFBPaintEnginePrivate::fillRegion(const QRegion ®ion) -{ - Q_ASSERT(isSimpleBrush(q->state()->brush)); - setDFBColor(q->state()->brush.color()); - const QVector<QRect> rects = region.rects(); - const int n = rects.size(); - fillRects(rects.constData(), n); -} - -void QDirectFBPaintEnginePrivate::fillRects(const QRect *rects, int n) -{ - for (int i = 0; i < n; ++i) { - const QRect r = transform.mapRect(rects[i]); - surface->FillRectangle(surface, r.x(), r.y(), - r.width(), r.height()); - } -} - -void QDirectFBPaintEnginePrivate::fillRects(const QRectF *rects, int n) -{ - for (int i = 0; i < n; ++i) { - const QRect r = transform.mapRect(rects[i]).toRect(); - surface->FillRectangle(surface, r.x(), r.y(), - r.width(), r.height()); - } -} - -void QDirectFBPaintEnginePrivate::drawRects(const QRect *rects, int n) -{ - for (int i = 0; i < n; ++i) { - const QRect r = transform.mapRect(rects[i]); - surface->DrawRectangle(surface, r.x(), r.y(), - r.width() + 1, r.height() + 1); - } -} - -void QDirectFBPaintEnginePrivate::drawRects(const QRectF *rects, int n) -{ - for (int i = 0; i < n; ++i) { - const QRect r = transform.mapRect(rects[i]).toRect(); - surface->DrawRectangle(surface, r.x(), r.y(), - r.width() + 1, r.height() + 1); - } -} - IDirectFBSurface *QDirectFBPaintEnginePrivate::getSurface(const QImage &img, bool *release) { #ifndef QT_DIRECTFB_IMAGECACHE @@ -1062,7 +864,7 @@ IDirectFBSurface *QDirectFBPaintEnginePrivate::getSurface(const QImage &img, boo void QDirectFBPaintEnginePrivate::blit(const QRectF &dest, IDirectFBSurface *s, const QRectF &src) { const QRect sr = src.toRect(); - const QRect dr = transform.mapRect(dest).toRect(); + const QRect dr = q->state()->matrix.mapRect(dest).toRect(); if (dr.isEmpty()) return; const DFBRectangle sRect = { sr.x(), sr.y(), sr.width(), sr.height() }; @@ -1091,6 +893,8 @@ static inline qreal fixCoord(qreal rect_pos, qreal pixmapSize, qreal offset) void QDirectFBPaintEnginePrivate::drawTiledPixmap(const QRectF &dest, const QPixmap &pixmap, const QPointF &off) { Q_ASSERT(!dirtyClip); + Q_ASSERT(!(transformationType & BlitUnsupported)); + const QTransform &transform = q->state()->matrix; const QRect destinationRect = transform.mapRect(dest).toRect().normalized(); QRect newClip = destinationRect; if (!currentClip.isEmpty()) @@ -1124,9 +928,9 @@ void QDirectFBPaintEnginePrivate::drawTiledPixmap(const QRectF &dest, const QPix const QSizeF mappedSize(pixmapSize.width() * transform.m11(), pixmapSize.height() * transform.m22()); qreal y = ::fixCoord(destinationRect.y(), mappedSize.height(), offset.y()); const qreal startX = ::fixCoord(destinationRect.x(), mappedSize.width(), offset.x()); - while (y < destinationRect.bottom()) { + while (y <= destinationRect.bottom()) { qreal x = startX; - while (x < destinationRect.right()) { + while (x <= destinationRect.right()) { const DFBRectangle destination = { qRound(x), qRound(y), mappedSize.width(), mappedSize.height() }; surface->StretchBlit(surface, sourceSurface, 0, &destination); x += mappedSize.width(); @@ -1148,10 +952,10 @@ void QDirectFBPaintEnginePrivate::drawTiledPixmap(const QRectF &dest, const QPix QVarLengthArray<DFBPoint, 16> points(maxCount); int i = 0; - while (y < destinationRect.bottom()) { + while (y <= destinationRect.bottom()) { Q_ASSERT(i < maxCount); qreal x = startX; - while (x < destinationRect.right()) { + while (x <= destinationRect.right()) { points[i].x = qRound(x); points[i].y = qRound(y); sourceRects[i].x = 0; @@ -1215,4 +1019,126 @@ void QDirectFBPaintEnginePrivate::systemStateChanged() QRasterPaintEnginePrivate::systemStateChanged(); } +IDirectFBSurface *SurfaceCache::getSurface(const uint *buf, int size) +{ + if (buffer == buf && bufsize == size) + return surface; + + clear(); + + const DFBSurfaceDescription description = QDirectFBScreen::getSurfaceDescription(buf, size); + surface = QDirectFBScreen::instance()->createDFBSurface(description, QDirectFBScreen::TrackSurface); + if (!surface) + qWarning("QDirectFBPaintEngine: SurfaceCache: Unable to create surface"); + + buffer = const_cast<uint*>(buf); + bufsize = size; + + return surface; +} + +void SurfaceCache::clear() +{ + if (surface && QDirectFBScreen::instance()) + QDirectFBScreen::instance()->releaseDFBSurface(surface); + surface = 0; + buffer = 0; + bufsize = 0; +} + + +static inline QRect mapRect(const QTransform &transform, const QRect &rect) { return transform.mapRect(rect); } +static inline QRect mapRect(const QTransform &transform, const QRectF &rect) { return transform.mapRect(rect).toRect(); } +static inline QLine map(const QTransform &transform, const QLine &line) { return transform.map(line); } +static inline QLine map(const QTransform &transform, const QLineF &line) { return transform.map(line).toLine(); } +template <class T> +static inline void drawLines(const T *lines, int n, const QTransform &transform, IDirectFBSurface *surface) +{ + if (n == 1) { + const QLine l = ::map(transform, lines[0]); + surface->DrawLine(surface, l.x1(), l.y1(), l.x2(), l.y2()); + } else { + QVarLengthArray<DFBRegion, 32> lineArray(n); + for (int i=0; i<n; ++i) { + const QLine l = ::map(transform, lines[i]); + lineArray[i].x1 = l.x1(); + lineArray[i].y1 = l.y1(); + lineArray[i].x2 = l.x2(); + lineArray[i].y2 = l.y2(); + } + surface->DrawLines(surface, lineArray.constData(), n); + } +} + +template <class T> +static inline void fillRects(const T *rects, int n, const QTransform &transform, IDirectFBSurface *surface) +{ + if (n == 1) { + const QRect r = ::mapRect(transform, rects[0]); + surface->FillRectangle(surface, r.x(), r.y(), r.width(), r.height()); + } else { + QVarLengthArray<DFBRectangle, 32> rectArray(n); + for (int i=0; i<n; ++i) { + const QRect r = ::mapRect(transform, rects[i]); + rectArray[i].x = r.x(); + rectArray[i].y = r.y(); + rectArray[i].w = r.width(); + rectArray[i].h = r.height(); + } + surface->FillRectangles(surface, rectArray.constData(), n); + } +} + +template <class T> +static inline void drawRects(const T *rects, int n, const QTransform &transform, IDirectFBSurface *surface) +{ + for (int i=0; i<n; ++i) { + const QRect r = ::mapRect(transform, rects[i]); + surface->DrawRectangle(surface, r.x(), r.y(), r.width(), r.height()); + } +} + +#ifdef QT_DIRECTFB_WARN_ON_RASTERFALLBACKS +template <typename T> inline const T *ptr(const T &t) { return &t; } +template <> inline const bool* ptr<bool>(const bool &) { return 0; } +template <typename device, typename T1, typename T2, typename T3> +static void rasterFallbackWarn(const char *msg, const char *func, const device *dev, + uint transformationType, bool simplePen, + bool dfbHandledClip, bool unsupportedCompositionMode, + const char *nameOne, const T1 &one, + const char *nameTwo, const T2 &two, + const char *nameThree, const T3 &three) +{ + QString out; + QDebug dbg(&out); + dbg << msg << (QByteArray(func) + "()") << "painting on"; + if (dev->devType() == QInternal::Widget) { + dbg << static_cast<const QWidget*>(dev); + } else { + dbg << dev << "of type" << dev->devType(); + } + + dbg << QString("transformationType 0x%1").arg(transformationType, 3, 16, QLatin1Char('0')) + << "simplePen" << simplePen + << "dfbHandledClip" << dfbHandledClip + << "unsupportedCompositionMode" << unsupportedCompositionMode; + + const T1 *t1 = ptr(one); + const T2 *t2 = ptr(two); + const T3 *t3 = ptr(three); + + if (t1) { + dbg << nameOne << *t1; + if (t2) { + dbg << nameTwo << *t2; + if (t3) { + dbg << nameThree << *t3; + } + } + } + qWarning("%s", qPrintable(out)); +} +#endif + + #endif // QT_NO_DIRECTFB diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.h b/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.h index 8c5877b..6148b14 100644 --- a/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.h +++ b/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.h @@ -56,43 +56,40 @@ class QDirectFBPaintEngine : public QRasterPaintEngine Q_DECLARE_PRIVATE(QDirectFBPaintEngine) public: QDirectFBPaintEngine(QPaintDevice *device); - ~QDirectFBPaintEngine(); + virtual ~QDirectFBPaintEngine(); - bool begin(QPaintDevice *device); - bool end(); + virtual bool begin(QPaintDevice *device); + virtual bool end(); - void drawRects(const QRect *rects, int rectCount); - void drawRects(const QRectF *rects, int rectCount); + virtual void drawRects(const QRect *rects, int rectCount); + virtual void drawRects(const QRectF *rects, int rectCount); - void fillRect(const QRectF &r, const QBrush &brush); - void fillRect(const QRectF &r, const QColor &color); + virtual void fillRect(const QRectF &r, const QBrush &brush); + virtual void fillRect(const QRectF &r, const QColor &color); - void drawLines(const QLine *line, int lineCount); - void drawLines(const QLineF *line, int lineCount); + virtual void drawLines(const QLine *line, int lineCount); + virtual void drawLines(const QLineF *line, int lineCount); - void drawImage(const QPointF &p, const QImage &img); - void drawImage(const QRectF &r, const QImage &pm, const QRectF &sr, - Qt::ImageConversionFlags falgs = Qt::AutoColor); + virtual void drawImage(const QPointF &p, const QImage &img); + virtual void drawImage(const QRectF &r, const QImage &pm, const QRectF &sr, + Qt::ImageConversionFlags falgs = Qt::AutoColor); - void drawPixmap(const QPointF &p, const QPixmap &pm); - void drawPixmap(const QRectF &r, const QPixmap &pixmap, const QRectF &sr); - void drawTiledPixmap(const QRectF &r, const QPixmap &pm, const QPointF &sr); + virtual void drawPixmap(const QPointF &p, const QPixmap &pm); + virtual void drawPixmap(const QRectF &r, const QPixmap &pixmap, const QRectF &sr); + virtual void drawTiledPixmap(const QRectF &r, const QPixmap &pm, const QPointF &sr); - void drawColorSpans(const QSpan *spans, int count, uint color); - void drawBufferSpan(const uint *buffer, int bufsize, - int x, int y, int length, uint const_alpha); + virtual void drawBufferSpan(const uint *buffer, int bufsize, + int x, int y, int length, uint const_alpha); - - // The following methods simply lock the surface & call the base implementation - void stroke(const QVectorPath &path, const QPen &pen); - void drawPath(const QPainterPath &path); - void drawPoints(const QPointF *points, int pointCount); - void drawPoints(const QPoint *points, int pointCount); - void drawEllipse(const QRectF &rect); - void drawPolygon(const QPointF *points, int pointCount, PolygonDrawMode mode); - void drawPolygon(const QPoint *points, int pointCount, PolygonDrawMode mode); - void drawTextItem(const QPointF &p, const QTextItem &textItem); - void fill(const QVectorPath &path, const QBrush &brush); + virtual void stroke(const QVectorPath &path, const QPen &pen); + virtual void drawPath(const QPainterPath &path); + virtual void drawPoints(const QPointF *points, int pointCount); + virtual void drawPoints(const QPoint *points, int pointCount); + virtual void drawEllipse(const QRectF &rect); + virtual void drawPolygon(const QPointF *points, int pointCount, PolygonDrawMode mode); + virtual void drawPolygon(const QPoint *points, int pointCount, PolygonDrawMode mode); + virtual void drawTextItem(const QPointF &p, const QTextItem &textItem); + virtual void fill(const QVectorPath &path, const QBrush &brush); virtual void clipEnabledChanged(); virtual void penChanged(); diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp index c9d5d7c..52e85ba 100644 --- a/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp +++ b/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp @@ -345,6 +345,10 @@ QImage QDirectFBPixmapData::toImage() const if (!dfbSurface) return QImage(); +#if 0 + // In later versions of DirectFB one can set a flag to tell + // DirectFB not to move the surface to videomemory. When that + // happens we can use this (hopefully faster) codepath #ifndef QT_NO_DIRECTFB_PREALLOCATED QImage ret(w, h, QDirectFBScreen::getImageFormat(dfbSurface)); if (IDirectFBSurface *imgSurface = screen->createDFBSurface(ret, QDirectFBScreen::DontTrackSurface)) { @@ -362,6 +366,7 @@ QImage QDirectFBPixmapData::toImage() const return ret; } #endif +#endif QDirectFBPixmapData *that = const_cast<QDirectFBPixmapData*>(this); const QImage *img = that->buffer(); @@ -385,7 +390,7 @@ QImage *QDirectFBPixmapData::buffer() return lockedImage; } -QImage * QDirectFBPixmapData::buffer(uint lockFlags) +QImage * QDirectFBPixmapData::buffer(DFBSurfaceLockFlags lockFlags) { lockDirectFB(lockFlags); return lockedImage; diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.h b/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.h index e81aef4..0204061 100644 --- a/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.h +++ b/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.h @@ -71,7 +71,7 @@ public: virtual QImage *buffer(); virtual int metric(QPaintDevice::PaintDeviceMetric m) const {return QDirectFBPaintDevice::metric(m);} - QImage *buffer(uint lockFlags); + QImage *buffer(DFBSurfaceLockFlags lockFlags); // Pure virtual in QPixmapData, so re-implement here and delegate to QDirectFBPaintDevice inline QImage::Format pixelFormat() const { return format; } diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp index 76064ad..0928643 100644 --- a/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp +++ b/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp @@ -208,7 +208,7 @@ IDirectFBSurface *QDirectFBScreen::createDFBSurface(const QSize &size, { DFBSurfaceDescription desc; memset(&desc, 0, sizeof(DFBSurfaceDescription)); - desc.flags = DFBSurfaceDescriptionFlags(DSDESC_WIDTH|DSDESC_HEIGHT); + desc.flags |= DSDESC_WIDTH|DSDESC_HEIGHT; if (!QDirectFBScreen::initSurfaceDescriptionPixelFormat(&desc, format)) return 0; desc.width = size.width(); @@ -226,13 +226,15 @@ IDirectFBSurface *QDirectFBScreen::createDFBSurface(DFBSurfaceDescription desc, return 0; } - if (d_ptr->directFBFlags & VideoOnly && !(desc.flags & DSDESC_PREALLOCATED)) { + if (d_ptr->directFBFlags & VideoOnly + && !(desc.flags & DSDESC_PREALLOCATED) + && (!(desc.flags & DSDESC_CAPS) || !(desc.caps & DSCAPS_SYSTEMONLY))) { // Add the video only capability. This means the surface will be created in video ram if (!(desc.flags & DSDESC_CAPS)) { desc.caps = DSCAPS_VIDEOONLY; - desc.flags = DFBSurfaceDescriptionFlags(desc.flags | DSDESC_CAPS); + desc.flags |= DSDESC_CAPS; } else { - desc.caps = DFBSurfaceCapabilities(desc.caps | DSCAPS_VIDEOONLY); + desc.caps |= DSCAPS_VIDEOONLY; } result = d_ptr->dfb->CreateSurface(d_ptr->dfb, &desc, &newSurface); if (result != DFB_OK @@ -247,11 +249,11 @@ IDirectFBSurface *QDirectFBScreen::createDFBSurface(DFBSurfaceDescription desc, desc.preallocated[0].data, desc.preallocated[0].pitch, DirectFBErrorString(result)); } - desc.caps = DFBSurfaceCapabilities(desc.caps & ~DSCAPS_VIDEOONLY); + desc.caps &= ~DSCAPS_VIDEOONLY; } if (d_ptr->directFBFlags & SystemOnly) - desc.caps = DFBSurfaceCapabilities(desc.caps | DSCAPS_SYSTEMONLY); + desc.caps |= DSCAPS_SYSTEMONLY; if (!newSurface) result = d_ptr->dfb->CreateSurface(d_ptr->dfb, &desc, &newSurface); @@ -459,20 +461,16 @@ DFBSurfaceDescription QDirectFBScreen::getSurfaceDescription(const QImage &image const DFBSurfacePixelFormat format = getSurfacePixelFormat(image.format()); if (format == DSPF_UNKNOWN || image.isNull()) { - description.flags = DFBSurfaceDescriptionFlags(0); + description.flags = DSDESC_NONE; return description; } - description.flags = DFBSurfaceDescriptionFlags(DSDESC_WIDTH - | DSDESC_HEIGHT -#ifndef QT_NO_DIRECTFB_PREALLOCATED - | DSDESC_PREALLOCATED -#endif - | DSDESC_PIXELFORMAT); + description.flags = DSDESC_WIDTH|DSDESC_HEIGHT|DSDESC_PIXELFORMAT; QDirectFBScreen::initSurfaceDescriptionPixelFormat(&description, image.format()); description.width = image.width(); description.height = image.height(); #ifndef QT_NO_DIRECTFB_PREALLOCATED + description.flags |= DSDESC_PREALLOCATED; description.preallocated[0].data = (void*)(image.bits()); description.preallocated[0].pitch = image.bytesPerLine(); description.preallocated[1].data = 0; @@ -491,11 +489,7 @@ DFBSurfaceDescription QDirectFBScreen::getSurfaceDescription(const uint *buffer, DFBSurfaceDescription description; memset(&description, 0, sizeof(DFBSurfaceDescription)); - description.flags = DFBSurfaceDescriptionFlags(DSDESC_CAPS - | DSDESC_WIDTH - | DSDESC_HEIGHT - | DSDESC_PIXELFORMAT - | DSDESC_PREALLOCATED); + description.flags = DSDESC_CAPS|DSDESC_WIDTH|DSDESC_HEIGHT|DSDESC_PIXELFORMAT|DSDESC_PREALLOCATED; description.caps = DSCAPS_PREMULTIPLIED; description.width = length; description.height = 1; @@ -504,8 +498,7 @@ DFBSurfaceDescription QDirectFBScreen::getSurfaceDescription(const uint *buffer, description.preallocated[0].pitch = length * sizeof(uint); description.preallocated[1].data = 0; description.preallocated[1].pitch = 0; - - return description; +return description; } #ifndef QT_NO_DIRECTFB_PALETTE @@ -727,19 +720,19 @@ void QDirectFBScreenPrivate::setFlipFlags(const QStringList &args) flipFlags = DSFLIP_NONE; foreach(const QString &flip, flips) { if (flip == QLatin1String("wait")) - flipFlags = DFBSurfaceFlipFlags(flipFlags | DSFLIP_WAIT); + flipFlags |= DSFLIP_WAIT; else if (flip == QLatin1String("blit")) - flipFlags = DFBSurfaceFlipFlags(flipFlags | DSFLIP_BLIT); + flipFlags |= DSFLIP_BLIT; else if (flip == QLatin1String("onsync")) - flipFlags = DFBSurfaceFlipFlags(flipFlags | DSFLIP_ONSYNC); + flipFlags |= DSFLIP_ONSYNC; else if (flip == QLatin1String("pipeline")) - flipFlags = DFBSurfaceFlipFlags(flipFlags | DSFLIP_PIPELINE); + flipFlags |= DSFLIP_PIPELINE; else qWarning("QDirectFBScreen: Unknown flip argument: %s", qPrintable(flip)); } } else { - flipFlags = DFBSurfaceFlipFlags(DSFLIP_BLIT); + flipFlags = DSFLIP_BLIT; } } @@ -751,7 +744,12 @@ QPixmapData *QDirectFBScreenPrivate::createPixmapData(QPixmapData::PixelType typ return new QDirectFBPixmapData(type); } -#ifndef QT_NO_DEBUG +#ifdef QT_NO_DEBUG +struct FlagDescription; +static const FlagDescription *accelerationDescriptions = 0; +static const FlagDescription *blitDescriptions = 0; +static const FlagDescription *drawDescriptions = 0; +#else struct FlagDescription { const char *name; uint flag; @@ -928,13 +926,13 @@ bool QDirectFBScreen::connect(const QString &displaySpec) DFBSurfaceDescription description; memset(&description, 0, sizeof(DFBSurfaceDescription)); - description.flags = DFBSurfaceDescriptionFlags(DSDESC_CAPS); + description.flags = DSDESC_CAPS; if (::setIntOption(displayArgs, QLatin1String("width"), &description.width)) - description.flags = DFBSurfaceDescriptionFlags(description.flags | DSDESC_WIDTH); + description.flags |= DSDESC_WIDTH; if (::setIntOption(displayArgs, QLatin1String("height"), &description.height)) - description.flags = DFBSurfaceDescriptionFlags(description.flags | DSDESC_HEIGHT); + description.flags |= DSDESC_HEIGHT; - uint caps = DSCAPS_PRIMARY|DSCAPS_DOUBLE; + description.caps = DSCAPS_PRIMARY|DSCAPS_DOUBLE; struct { const char *name; const DFBSurfaceCapabilities cap; @@ -948,14 +946,13 @@ bool QDirectFBScreen::connect(const QString &displaySpec) }; for (int i=0; capabilities[i].name; ++i) { if (displayArgs.contains(QString::fromLatin1(capabilities[i].name), Qt::CaseInsensitive)) - caps |= capabilities[i].cap; + description.caps |= capabilities[i].cap; } if (displayArgs.contains(QLatin1String("forcepremultiplied"), Qt::CaseInsensitive)) { - caps |= DSCAPS_PREMULTIPLIED; + description.caps |= DSCAPS_PREMULTIPLIED; } - description.caps = DFBSurfaceCapabilities(caps); // We don't track the primary surface as it's released in disconnect d_ptr->dfbSurface = createDFBSurface(description, DontTrackSurface); if (!d_ptr->dfbSurface) { @@ -1213,10 +1210,10 @@ void QDirectFBScreen::compose(const QRegion ®ion) DFBSurfaceBlittingFlags flags = DSBLIT_NOFX; if (!win->isOpaque()) { - flags = DFBSurfaceBlittingFlags(flags | DSBLIT_BLEND_ALPHACHANNEL); + flags |= DSBLIT_BLEND_ALPHACHANNEL; const uint opacity = win->opacity(); if (opacity < 255) { - flags = DFBSurfaceBlittingFlags(flags | DSBLIT_BLEND_COLORALPHA); + flags |= DSBLIT_BLEND_COLORALPHA; d_ptr->dfbSurface->SetColor(d_ptr->dfbSurface, 0xff, 0xff, 0xff, opacity); } } @@ -1356,14 +1353,14 @@ bool QDirectFBScreen::initSurfaceDescriptionPixelFormat(DFBSurfaceDescription *d const DFBSurfacePixelFormat pixelformat = QDirectFBScreen::getSurfacePixelFormat(format); if (pixelformat == DSPF_UNKNOWN) return false; - description->flags = DFBSurfaceDescriptionFlags(description->flags | DSDESC_PIXELFORMAT); + description->flags |= DSDESC_PIXELFORMAT; description->pixelformat = pixelformat; if (QDirectFBScreen::isPremultiplied(format)) { if (!(description->flags & DSDESC_CAPS)) { description->caps = DSCAPS_PREMULTIPLIED; - description->flags = DFBSurfaceDescriptionFlags(description->flags | DSDESC_CAPS); + description->flags |= DSDESC_CAPS; } else { - description->caps = DFBSurfaceCapabilities(description->caps | DSCAPS_PREMULTIPLIED); + description->caps |= DSCAPS_PREMULTIPLIED; } } return true; diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbscreen.h b/src/plugins/gfxdrivers/directfb/qdirectfbscreen.h index 4239156..69b09e9 100644 --- a/src/plugins/gfxdrivers/directfb/qdirectfbscreen.h +++ b/src/plugins/gfxdrivers/directfb/qdirectfbscreen.h @@ -44,6 +44,7 @@ #include <QtGui/qscreen_qws.h> #include <directfb.h> +#include <directfb_version.h> QT_BEGIN_HEADER @@ -51,8 +52,24 @@ QT_MODULE(Gui) #define Q_DIRECTFB_VERSION ((DIRECTFB_MAJOR_VERSION << 16) | (DIRECTFB_MINOR_VERION << 8) | DIRECTFB_MICRO_VERSION) -class QDirectFBScreenPrivate; +#include <QDebug> +#define DIRECTFB_DECLARE_OPERATORS_FOR_FLAGS(F) \ + static inline F operator~(F f) { return F(~int(f)); } \ + static inline F operator&(F left, F right) { return F(int(left) & int(right)); } \ + static inline F operator|(F left, F right) { return F(int(left) | int(right)); } \ + static inline F &operator|=(F &left, F right) { left = (left | right); return left; } \ + static inline F &operator&=(F &left, F right) { left = (left & right); return left; } + +DIRECTFB_DECLARE_OPERATORS_FOR_FLAGS(DFBInputDeviceCapabilities); +DIRECTFB_DECLARE_OPERATORS_FOR_FLAGS(DFBWindowDescriptionFlags); +DIRECTFB_DECLARE_OPERATORS_FOR_FLAGS(DFBSurfaceDescriptionFlags); +DIRECTFB_DECLARE_OPERATORS_FOR_FLAGS(DFBSurfaceCapabilities); +DIRECTFB_DECLARE_OPERATORS_FOR_FLAGS(DFBSurfaceLockFlags); +DIRECTFB_DECLARE_OPERATORS_FOR_FLAGS(DFBSurfaceBlittingFlags); +DIRECTFB_DECLARE_OPERATORS_FOR_FLAGS(DFBSurfaceDrawingFlags); +DIRECTFB_DECLARE_OPERATORS_FOR_FLAGS(DFBSurfaceFlipFlags); +class QDirectFBScreenPrivate; class Q_GUI_EXPORT QDirectFBScreen : public QScreen { public: diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp index 86ee62c..7dcf398 100644 --- a/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp +++ b/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp @@ -106,18 +106,16 @@ void QDirectFBWindowSurface::createWindow() qFatal("QDirectFBWindowSurface: Unable to get primary display layer!"); DFBWindowDescription description; - description.caps = DFBWindowCapabilities(DWCAPS_NODECORATION); - description.flags = DFBWindowDescriptionFlags(DWDESC_CAPS - |DWDESC_SURFACE_CAPS - |DWDESC_PIXELFORMAT); + description.caps = DWCAPS_NODECORATION; + description.flags = DWDESC_CAPS|DWDESC_SURFACE_CAPS|DWDESC_PIXELFORMAT; description.surface_caps = DSCAPS_NONE; if (screen->directFBFlags() & QDirectFBScreen::VideoOnly) - description.surface_caps = DFBSurfaceCapabilities(description.surface_caps|DSCAPS_VIDEOONLY); + description.surface_caps |= DSCAPS_VIDEOONLY; const QImage::Format format = screen->pixelFormat(); description.pixelformat = QDirectFBScreen::getSurfacePixelFormat(format); if (QDirectFBScreen::isPremultiplied(format)) - description.surface_caps = DFBSurfaceCapabilities(DSCAPS_PREMULTIPLIED|description.caps); + description.surface_caps = DSCAPS_PREMULTIPLIED; DFBResult result = layer->CreateWindow(layer, &description, &dfbWindow); if (result != DFB_OK) @@ -370,7 +368,7 @@ void QDirectFBWindowSurface::flush(QWidget *widget, const QRegion ®ion, } else { if (!boundingRectFlip && region.numRects() > 1) { const QVector<QRect> rects = region.rects(); - const DFBSurfaceFlipFlags nonWaitFlags = DFBSurfaceFlipFlags(flipFlags & ~DSFLIP_WAIT); + const DFBSurfaceFlipFlags nonWaitFlags = flipFlags & ~DSFLIP_WAIT; for (int i=0; i<rects.size(); ++i) { const QRect &r = rects.at(i); const DFBRegion dfbReg = { r.x() + offset.x(), r.y() + offset.y(), diff --git a/src/plugins/graphicssystems/openvg/openvg.pro b/src/plugins/graphicssystems/openvg/openvg.pro index 0abbfbd..d36570c 100644 --- a/src/plugins/graphicssystems/openvg/openvg.pro +++ b/src/plugins/graphicssystems/openvg/openvg.pro @@ -10,11 +10,3 @@ HEADERS = qgraphicssystem_vg_p.h target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems INSTALLS += target - -!isEmpty(QMAKE_INCDIR_OPENVG): INCLUDEPATH += $$QMAKE_INCDIR_OPENVG -!isEmpty(QMAKE_LIBDIR_OPENVG): LIBS += -L$$QMAKE_LIBDIR_OPENVG -!isEmpty(QMAKE_LIBS_OPENVG): LIBS += $$QMAKE_LIBS_OPENVG - -!isEmpty(QMAKE_INCDIR_EGL): INCLUDEPATH += $$QMAKE_INCDIR_EGL -!isEmpty(QMAKE_LIBDIR_EGL): LIBS += -L$$QMAKE_LIBDIR_EGL -!isEmpty(QMAKE_LIBS_EGL): LIBS += $$QMAKE_LIBS_EGL diff --git a/src/plugins/graphicssystems/shivavg/shivavg.pro b/src/plugins/graphicssystems/shivavg/shivavg.pro index 68345af..b8ea12a 100644 --- a/src/plugins/graphicssystems/shivavg/shivavg.pro +++ b/src/plugins/graphicssystems/shivavg/shivavg.pro @@ -10,7 +10,3 @@ HEADERS = shivavggraphicssystem.h shivavgwindowsurface.h target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems INSTALLS += target - -!isEmpty(QMAKE_INCDIR_OPENVG): INCLUDEPATH += $$QMAKE_INCDIR_OPENVG -!isEmpty(QMAKE_LIBDIR_OPENVG): LIBS += -L$$QMAKE_LIBDIR_OPENVG -!isEmpty(QMAKE_LIBS_OPENVG): LIBS += $$QMAKE_LIBS_OPENVG diff --git a/src/plugins/imageformats/ico/qicohandler.cpp b/src/plugins/imageformats/ico/qicohandler.cpp index 43e35c0..c9e04a4 100644 --- a/src/plugins/imageformats/ico/qicohandler.cpp +++ b/src/plugins/imageformats/ico/qicohandler.cpp @@ -522,6 +522,18 @@ QImage ICOReader::iconAt(int index) ICONDIRENTRY iconEntry; if (readIconEntry(index, &iconEntry)) { + static const uchar pngMagicData[] = { 137, 80, 78, 71, 13, 10, 26, 10 }; + + iod->seek(iconEntry.dwImageOffset); + + const QByteArray pngMagic = QByteArray::fromRawData((char*)pngMagicData, sizeof(pngMagicData)); + const bool isPngImage = (iod->read(pngMagic.size()) == pngMagic); + + if (isPngImage) { + iod->seek(iconEntry.dwImageOffset); + return QImage::fromData(iod->read(iconEntry.dwBytesInRes), "png"); + } + BMP_INFOHDR header; if (readBMPHeader(iconEntry.dwImageOffset, &header)) { icoAttrib.nbits = header.biBitCount ? header.biBitCount : iconEntry.wBitCount; diff --git a/src/qt3support/canvas/q3canvas.cpp b/src/qt3support/canvas/q3canvas.cpp index 034aff5..948935c 100644 --- a/src/qt3support/canvas/q3canvas.cpp +++ b/src/qt3support/canvas/q3canvas.cpp @@ -4828,7 +4828,7 @@ void Q3CanvasText::draw(QPainter& painter) } /*! - \reimp + \internal */ void Q3CanvasText::changeChunks() { diff --git a/src/qt3support/dialogs/q3tabdialog.cpp b/src/qt3support/dialogs/q3tabdialog.cpp index 50dbd48..a65affc 100644 --- a/src/qt3support/dialogs/q3tabdialog.cpp +++ b/src/qt3support/dialogs/q3tabdialog.cpp @@ -1038,7 +1038,7 @@ QString Q3TabDialog::tabLabel(QWidget * w) } -/*! \reimp +/*! \internal */ void Q3TabDialog::styleChange(QStyle& s) { diff --git a/src/qt3support/itemviews/q3table.cpp b/src/qt3support/itemviews/q3table.cpp index 11c70b4..6c3e90c 100644 --- a/src/qt3support/itemviews/q3table.cpp +++ b/src/qt3support/itemviews/q3table.cpp @@ -6411,7 +6411,7 @@ void Q3Table::startDrag() #endif -/*! \reimp */ +/*! \internal */ void Q3Table::windowActivationChange(bool oldActive) { if (oldActive && autoScrollTimer) diff --git a/src/qt3support/network/q3http.cpp b/src/qt3support/network/q3http.cpp index 59adc27..dba4e88 100644 --- a/src/qt3support/network/q3http.cpp +++ b/src/qt3support/network/q3http.cpp @@ -785,7 +785,7 @@ int Q3HttpResponseHeader::minorVersion() const return minVer; } -/*! \reimp +/*! \internal */ bool Q3HttpResponseHeader::parseLine( const QString& line, int number ) { @@ -952,7 +952,7 @@ int Q3HttpRequestHeader::minorVersion() const return minVer; } -/*! \reimp +/*! \internal */ bool Q3HttpRequestHeader::parseLine( const QString& line, int number ) { diff --git a/src/qt3support/widgets/q3datetimeedit.cpp b/src/qt3support/widgets/q3datetimeedit.cpp index 9c2f289..71a8ffd 100644 --- a/src/qt3support/widgets/q3datetimeedit.cpp +++ b/src/qt3support/widgets/q3datetimeedit.cpp @@ -1244,7 +1244,7 @@ Q3DateEdit::Order Q3DateEdit::order() const } -/*! \reimp +/*! \internal */ void Q3DateEdit::stepUp() @@ -1276,7 +1276,7 @@ void Q3DateEdit::stepUp() -/*! \reimp +/*! \internal */ @@ -1440,7 +1440,7 @@ bool Q3DateEdit::outOfRange(int y, int m, int d) const return false; /* assume ok */ } -/*! \reimp +/*! \internal */ @@ -1534,7 +1534,7 @@ void Q3DateEdit::addNumber(int sec, int num) } -/*! \reimp +/*! \internal */ @@ -1681,7 +1681,7 @@ void Q3DateEdit::removeFirstNumber(int sec) d->ed->repaint(d->ed->rect()); } -/*! \reimp +/*! \internal */ @@ -2059,7 +2059,7 @@ void Q3TimeEdit::timerEvent(QTimerEvent *) } -/*! \reimp +/*! \internal */ @@ -2105,7 +2105,7 @@ void Q3TimeEdit::stepUp() } -/*! \reimp +/*! \internal */ @@ -2173,7 +2173,7 @@ QString Q3TimeEdit::sectionFormattedText(int sec) } -/*! \reimp +/*! \internal */ @@ -2308,7 +2308,7 @@ bool Q3TimeEdit::outOfRange(int h, int m, int s) const return true; } -/*! \reimp +/*! \internal */ @@ -2477,7 +2477,7 @@ void Q3TimeEdit::removeFirstNumber(int sec) d->ed->repaint(d->ed->rect()); } -/*! \reimp +/*! \internal */ void Q3TimeEdit::removeLastNumber(int sec) diff --git a/src/qt3support/widgets/q3scrollview.cpp b/src/qt3support/widgets/q3scrollview.cpp index cea385a..95e2117 100644 --- a/src/qt3support/widgets/q3scrollview.cpp +++ b/src/qt3support/widgets/q3scrollview.cpp @@ -669,7 +669,7 @@ bool Q3ScrollView::isVerticalSliderPressed() } /*! - \reimp + \internal */ void Q3ScrollView::styleChange(QStyle& old) { @@ -679,7 +679,7 @@ void Q3ScrollView::styleChange(QStyle& old) } /*! - \reimp + \internal */ void Q3ScrollView::fontChange(const QFont &old) { diff --git a/src/script/qscriptvalue.cpp b/src/script/qscriptvalue.cpp index 97ce61a..48e1318 100644 --- a/src/script/qscriptvalue.cpp +++ b/src/script/qscriptvalue.cpp @@ -574,9 +574,11 @@ void QScriptValue::setPrototype(const QScriptValue &prototype) } /*! - Returns the scope object of this QScriptValue. This function is only - relevant for function objects. The scope determines how variables are - resolved when the function is invoked. + \since 4.6 + + Returns the scope object of this QScriptValue. This function is only + relevant for function objects. The scope determines how variables are + resolved when the function is invoked. */ QScriptValue QScriptValue::scope() const { @@ -588,9 +590,11 @@ QScriptValue QScriptValue::scope() const } /*! - Sets the \a scope object of this QScriptValue. This function is only - relevant for function objects. Changing the scope is useful when creating - closures; see \l{Nested Functions and the Scope Chain}. + \since 4.6 + + Sets the \a scope object of this QScriptValue. This function is only + relevant for function objects. Changing the scope is useful when creating + closures; see \l{Nested Functions and the Scope Chain}. */ void QScriptValue::setScope(const QScriptValue &scope) { diff --git a/src/scripttools/debugging/qscriptdebuggerscriptedconsolecommand.cpp b/src/scripttools/debugging/qscriptdebuggerscriptedconsolecommand.cpp index 1324c01..92fa36c 100644 --- a/src/scripttools/debugging/qscriptdebuggerscriptedconsolecommand.cpp +++ b/src/scripttools/debugging/qscriptdebuggerscriptedconsolecommand.cpp @@ -460,7 +460,7 @@ void QScriptDebuggerScriptedConsoleCommandJob::handleResponse( } /*! - \reimp + \internal */ QString QScriptDebuggerScriptedConsoleCommand::name() const { @@ -469,7 +469,7 @@ QString QScriptDebuggerScriptedConsoleCommand::name() const } /*! - \reimp + \internal */ QString QScriptDebuggerScriptedConsoleCommand::group() const { @@ -478,7 +478,7 @@ QString QScriptDebuggerScriptedConsoleCommand::group() const } /*! - \reimp + \internal */ QString QScriptDebuggerScriptedConsoleCommand::shortDescription() const { @@ -487,7 +487,7 @@ QString QScriptDebuggerScriptedConsoleCommand::shortDescription() const } /*! - \reimp + \internal */ QString QScriptDebuggerScriptedConsoleCommand::longDescription() const { @@ -496,7 +496,7 @@ QString QScriptDebuggerScriptedConsoleCommand::longDescription() const } /*! - \reimp + \internal */ QStringList QScriptDebuggerScriptedConsoleCommand::aliases() const { @@ -505,7 +505,7 @@ QStringList QScriptDebuggerScriptedConsoleCommand::aliases() const } /*! - \reimp + \internal */ QStringList QScriptDebuggerScriptedConsoleCommand::seeAlso() const { @@ -514,7 +514,7 @@ QStringList QScriptDebuggerScriptedConsoleCommand::seeAlso() const } /*! - \reimp + \internal */ QStringList QScriptDebuggerScriptedConsoleCommand::argumentTypes() const { @@ -523,7 +523,7 @@ QStringList QScriptDebuggerScriptedConsoleCommand::argumentTypes() const } /*! - \reimp + \internal */ QStringList QScriptDebuggerScriptedConsoleCommand::subCommands() const { @@ -532,7 +532,7 @@ QStringList QScriptDebuggerScriptedConsoleCommand::subCommands() const } /*! - \reimp + \internal */ QScriptDebuggerConsoleCommandJob *QScriptDebuggerScriptedConsoleCommand::createJob( const QStringList &arguments, diff --git a/src/scripttools/debugging/qscriptenginedebuggerfrontend.cpp b/src/scripttools/debugging/qscriptenginedebuggerfrontend.cpp index c5e21ef..5b58c52 100644 --- a/src/scripttools/debugging/qscriptenginedebuggerfrontend.cpp +++ b/src/scripttools/debugging/qscriptenginedebuggerfrontend.cpp @@ -323,7 +323,7 @@ QScriptDebuggerBackend *QScriptEngineDebuggerFrontend::backend() const } /*! - \reimp + \internal */ void QScriptEngineDebuggerFrontend::processCommand(int id, const QScriptDebuggerCommand &command) { diff --git a/src/sql/drivers/db2/qsql_db2.cpp b/src/sql/drivers/db2/qsql_db2.cpp index e4f564a..474c53d 100644 --- a/src/sql/drivers/db2/qsql_db2.cpp +++ b/src/sql/drivers/db2/qsql_db2.cpp @@ -59,6 +59,8 @@ #define SQL_BIGUINT_TYPE quint64 #endif +#define UNICODE + #include <sqlcli1.h> #include <string.h> diff --git a/src/sql/drivers/odbc/qsql_odbc.cpp b/src/sql/drivers/odbc/qsql_odbc.cpp index fa9031a..2df0073 100644 --- a/src/sql/drivers/odbc/qsql_odbc.cpp +++ b/src/sql/drivers/odbc/qsql_odbc.cpp @@ -1783,7 +1783,7 @@ bool QODBCDriver::open(const QString & db, if (!d->checkDriver()) { setLastError(qMakeError(tr("Unable to connect - Driver doesn't support all " - "needed functionality"), QSqlError::ConnectionError, d)); + "functionality required"), QSqlError::ConnectionError, d)); setOpenError(true); return false; } diff --git a/src/sql/drivers/sqlite2/qsql_sqlite2.cpp b/src/sql/drivers/sqlite2/qsql_sqlite2.cpp index 1989c45..d30e82c 100644 --- a/src/sql/drivers/sqlite2/qsql_sqlite2.cpp +++ b/src/sql/drivers/sqlite2/qsql_sqlite2.cpp @@ -388,7 +388,7 @@ bool QSQLite2Driver::open(const QString & db, const QString &, const QString &, char* err = 0; d->access = sqlite_open(QFile::encodeName(db), 0, &err); if (err) { - setLastError(QSqlError(tr("Error to open database"), QString::fromAscii(err), + setLastError(QSqlError(tr("Error opening database"), QString::fromAscii(err), QSqlError::ConnectionError)); sqlite_freemem(err); err = 0; @@ -463,7 +463,7 @@ bool QSQLite2Driver::rollbackTransaction() if (res == SQLITE_OK) return true; - setLastError(QSqlError(tr("Unable to rollback Transaction"), + setLastError(QSqlError(tr("Unable to rollback transaction"), QString::fromAscii(err), QSqlError::TransactionError, res)); sqlite_freemem(err); return false; diff --git a/src/sql/kernel/qsqldatabase.cpp b/src/sql/kernel/qsqldatabase.cpp index 5aef39e..4950303 100644 --- a/src/sql/kernel/qsqldatabase.cpp +++ b/src/sql/kernel/qsqldatabase.cpp @@ -1481,18 +1481,21 @@ QString QSqlDatabase::connectionName() const } /*! - Sets the default numerical precision policy used by queries created - on this database connection to \a precisionPolicy. + \since 4.6 - Note: Drivers that don't support fetching numerical values with low - precision will ignore the precision policy. You can use - QSqlDriver::hasFeature() to find out whether a driver supports this - feature. + Sets the default numerical precision policy used by queries created + on this database connection to \a precisionPolicy. - Note: Setting the default precision policy to \a precisionPolicy - doesn't affect any currently active queries. + Note: Drivers that don't support fetching numerical values with low + precision will ignore the precision policy. You can use + QSqlDriver::hasFeature() to find out whether a driver supports this + feature. - \sa QSql::NumericalPrecisionPolicy, numericalPrecisionPolicy(), QSqlQuery::setNumericalPrecisionPolicy(), QSqlQuery::numericalPrecisionPolicy() + Note: Setting the default precision policy to \a precisionPolicy + doesn't affect any currently active queries. + + \sa QSql::NumericalPrecisionPolicy, numericalPrecisionPolicy(), + QSqlQuery::setNumericalPrecisionPolicy(), QSqlQuery::numericalPrecisionPolicy() */ void QSqlDatabase::setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy) { @@ -1502,9 +1505,12 @@ void QSqlDatabase::setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy pr } /*! - Returns the current default precision policy for the database connection. + \since 4.6 + + Returns the current default precision policy for the database connection. - \sa QSql::NumericalPrecisionPolicy, setNumericalPrecisionPolicy(), QSqlQuery::numericalPrecisionPolicy(), QSqlQuery::setNumericalPrecisionPolicy() + \sa QSql::NumericalPrecisionPolicy, setNumericalPrecisionPolicy(), + QSqlQuery::numericalPrecisionPolicy(), QSqlQuery::setNumericalPrecisionPolicy() */ QSql::NumericalPrecisionPolicy QSqlDatabase::numericalPrecisionPolicy() const { diff --git a/src/sql/kernel/qsqldriver.cpp b/src/sql/kernel/qsqldriver.cpp index 77e389f..ca0da66 100644 --- a/src/sql/kernel/qsqldriver.cpp +++ b/src/sql/kernel/qsqldriver.cpp @@ -865,6 +865,8 @@ QStringList QSqlDriver::subscribedToNotificationsImplementation() const } /*! + \since 4.6 + This slot returns whether \a identifier is escaped according to the database rules. \a identifier can either be a table name or field name, dependent on \a type. @@ -876,7 +878,6 @@ QStringList QSqlDriver::subscribedToNotificationsImplementation() const slot in your own QSqlDriver if your database engine uses a different delimiter character. - \since 4.5 \sa isIdentifierEscaped() */ bool QSqlDriver::isIdentifierEscapedImplementation(const QString &identifier, IdentifierType type) const @@ -888,6 +889,8 @@ bool QSqlDriver::isIdentifierEscapedImplementation(const QString &identifier, Id } /*! + \since 4.6 + This slot returns \a identifier with the leading and trailing delimiters removed, \a identifier can either be a tablename or field name, dependent on \a type. If \a identifier does not have leading and trailing delimiter characters, \a @@ -898,7 +901,6 @@ bool QSqlDriver::isIdentifierEscapedImplementation(const QString &identifier, Id dynamically detect and call \e this slot. It generally unnecessary to reimplement this slot. - \since 4.5 \sa stripDelimiters() */ QString QSqlDriver::stripDelimitersImplementation(const QString &identifier, IdentifierType type) const @@ -914,13 +916,16 @@ QString QSqlDriver::stripDelimitersImplementation(const QString &identifier, Ide } /*! - Sets the default numerical precision policy used by queries created - by this driver to \a precisionPolicy. + \since 4.6 + + Sets the default numerical precision policy used by queries created + by this driver to \a precisionPolicy. - Note: Setting the default precision policy to \a precisionPolicy - doesn't affect any currently active queries. + Note: Setting the default precision policy to \a precisionPolicy + doesn't affect any currently active queries. - \sa QSql::NumericalPrecisionPolicy, numericalPrecisionPolicy(), QSqlQuery::setNumericalPrecisionPolicy(), QSqlQuery::numericalPrecisionPolicy() + \sa QSql::NumericalPrecisionPolicy, numericalPrecisionPolicy(), + QSqlQuery::setNumericalPrecisionPolicy(), QSqlQuery::numericalPrecisionPolicy() */ void QSqlDriver::setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy) { @@ -928,9 +933,12 @@ void QSqlDriver::setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy prec } /*! - Returns the current default precision policy for the database connection. + \since 4.6 + + Returns the current default precision policy for the database connection. - \sa QSql::NumericalPrecisionPolicy, setNumericalPrecisionPolicy(), QSqlQuery::numericalPrecisionPolicy(), QSqlQuery::setNumericalPrecisionPolicy() + \sa QSql::NumericalPrecisionPolicy, setNumericalPrecisionPolicy(), + QSqlQuery::numericalPrecisionPolicy(), QSqlQuery::setNumericalPrecisionPolicy() */ QSql::NumericalPrecisionPolicy QSqlDriver::numericalPrecisionPolicy() const { diff --git a/src/svg/qsvghandler.cpp b/src/svg/qsvghandler.cpp index 5f9d1dd..5857e1c 100644 --- a/src/svg/qsvghandler.cpp +++ b/src/svg/qsvghandler.cpp @@ -644,26 +644,19 @@ static void parseBrush(QSvgNode *node, QString opacity = attributes.value(QLatin1String("fill-opacity")).toString(); QString myId = someId(attributes); - QSvgFillStyle *inherited = - static_cast<QSvgFillStyle*>(node->parent()->styleProperty( - QSvgStyleProperty::FILL)); - QSvgFillStyle *prop = new QSvgFillStyle(QColor(Qt::black)); + QSvgFillStyle *prop = new QSvgFillStyle(0); //fill-rule attribute handling - Qt::FillRule f = Qt::WindingFill; if (!fillRule.isEmpty() && fillRule != QLatin1String("inherit")) { if (fillRule == QLatin1String("evenodd")) - f = Qt::OddEvenFill; - } else if (inherited) { - f = inherited->fillRule(); + prop->setFillRule(Qt::OddEvenFill); + else if (fillRule == QLatin1String("nonzero")) + prop->setFillRule(Qt::WindingFill); } //fill-opacity atttribute handling - qreal fillOpacity = 1.0; if (!opacity.isEmpty() && opacity != QLatin1String("inherit")) { - fillOpacity = qMin(qreal(1.0), qMax(qreal(0.0), toDouble(opacity))); - } else if (inherited) { - fillOpacity = inherited->fillOpacity(); + prop->setFillOpacity(qMin(qreal(1.0), qMax(qreal(0.0), toDouble(opacity)))); } //fill attribute handling @@ -685,15 +678,7 @@ static void parseBrush(QSvgNode *node, } else { prop->setBrush(QBrush(Qt::NoBrush)); } - } else if (inherited) { - if (inherited->style()) { - prop->setFillStyle(inherited->style()); - } else { - prop->setBrush(inherited->qbrush()); - } } - prop->setFillOpacity(fillOpacity); - prop->setFillRule(f); node->appendStyleProperty(prop,myId); } diff --git a/src/svg/qsvgstyle.cpp b/src/svg/qsvgstyle.cpp index 4c8247b..c3c0a68 100644 --- a/src/svg/qsvgstyle.cpp +++ b/src/svg/qsvgstyle.cpp @@ -81,12 +81,25 @@ void QSvgQualityStyle::revert(QPainter *, QSvgExtraStates &) } QSvgFillStyle::QSvgFillStyle(const QBrush &brush) - : m_fill(brush), m_style(0), m_fillRuleSet(false), m_fillOpacitySet(false), m_fillRule(Qt::WindingFill), m_fillOpacity(1.0), m_gradientResolved (true) + : m_fill(brush) + , m_style(0) + , m_fillRuleSet(false) + , m_fillRule(Qt::WindingFill) + , m_fillOpacitySet(false) + , m_fillOpacity(1.0) + , m_gradientResolved(true) + , m_fillSet(true) { } QSvgFillStyle::QSvgFillStyle(QSvgStyleProperty *style) - : m_style(style), m_fillRuleSet(false), m_fillOpacitySet(false), m_fillRule(Qt::WindingFill), m_fillOpacity(1.0), m_gradientResolved (true) + : m_style(style) + , m_fillRuleSet(false) + , m_fillRule(Qt::WindingFill) + , m_fillOpacitySet(false) + , m_fillOpacity(1.0) + , m_gradientResolved(true) + , m_fillSet(style != 0) { } @@ -105,11 +118,14 @@ void QSvgFillStyle::setFillOpacity(qreal opacity) void QSvgFillStyle::setFillStyle(QSvgStyleProperty* style) { m_style = style; + m_fillSet = true; } void QSvgFillStyle::setBrush(QBrush brush) { m_fill = brush; + m_style = 0; + m_fillSet = true; } static void recursivelySetFill(QSvgNode *node, Qt::FillRule f) @@ -136,20 +152,26 @@ void QSvgFillStyle::apply(QPainter *p, const QRectF &rect, QSvgNode *node, QSvgE recursivelySetFill(node, m_fillRule); m_fillRuleSet = false;//set it only on the first run } - p->setBrush(m_fill); + if (m_fillSet) { + if (m_style) + m_style->apply(p, rect, node, states); + else + p->setBrush(m_fill); + } if (m_fillOpacitySet) states.fillOpacity = m_fillOpacity; - if (m_style) - m_style->apply(p, rect, node, states); } void QSvgFillStyle::revert(QPainter *p, QSvgExtraStates &states) { - if (m_style) - m_style->revert(p, states); - p->setBrush(m_oldFill); if (m_fillOpacitySet) states.fillOpacity = m_oldOpacity; + if (m_fillSet) { + if (m_style) + m_style->revert(p, states); + else + p->setBrush(m_oldFill); + } } QSvgViewportFillStyle::QSvgViewportFillStyle(const QBrush &brush) diff --git a/src/svg/qsvgstyle_p.h b/src/svg/qsvgstyle_p.h index ac5e109..70ecf5b 100644 --- a/src/svg/qsvgstyle_p.h +++ b/src/svg/qsvgstyle_p.h @@ -281,6 +281,7 @@ private: qreal m_oldOpacity; QString m_gradientId; bool m_gradientResolved; + bool m_fillSet; }; class QSvgViewportFillStyle : public QSvgStyleProperty diff --git a/src/testlib/qtestcase.cpp b/src/testlib/qtestcase.cpp index 435ecf4..1d0bbcf 100644 --- a/src/testlib/qtestcase.cpp +++ b/src/testlib/qtestcase.cpp @@ -72,6 +72,8 @@ #include <windows.h> // for Sleep #endif #ifdef Q_OS_UNIX +#include <errno.h> +#include <signal.h> #include <time.h> #endif @@ -401,7 +403,8 @@ QT_BEGIN_NAMESPACE \overload - Simulates clicking of \a key with an optional \a modifier on a \a widget. If \a delay is larger than 0, the test will wait for \a delay milliseconds. + Simulates clicking of \a key with an optional \a modifier on a \a widget. + If \a delay is larger than 0, the test will wait for \a delay milliseconds. Example: \snippet doc/src/snippets/code/src_qtestlib_qtestcase.cpp 13 @@ -414,7 +417,8 @@ QT_BEGIN_NAMESPACE /*! \fn void QTest::keyClick(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay=-1) - Simulates clicking of \a key with an optional \a modifier on a \a widget. If \a delay is larger than 0, the test will wait for \a delay milliseconds. + Simulates clicking of \a key with an optional \a modifier on a \a widget. + If \a delay is larger than 0, the test will wait for \a delay milliseconds. Examples: \snippet doc/src/snippets/code/src_qtestlib_qtestcase.cpp 14 @@ -429,20 +433,25 @@ QT_BEGIN_NAMESPACE /*! \fn void QTest::keyEvent(KeyAction action, QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay=-1) - Sends a Qt key event to \a widget with the given \a key and an associated \a action. Optionally, a keyboard \a modifier can be specified, as well as a \a delay (in milliseconds) of the test before sending the event. + Sends a Qt key event to \a widget with the given \a key and an associated \a action. + Optionally, a keyboard \a modifier can be specified, as well as a \a delay + (in milliseconds) of the test before sending the event. */ /*! \fn void QTest::keyEvent(KeyAction action, QWidget *widget, char ascii, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay=-1) \overload - Sends a Qt key event to \a widget with the given key \a ascii and an associated \a action. Optionally, a keyboard \a modifier can be specified, as well as a \a delay (in milliseconds) of the test before sending the event. + Sends a Qt key event to \a widget with the given key \a ascii and an associated \a action. + Optionally, a keyboard \a modifier can be specified, as well as a \a delay + (in milliseconds) of the test before sending the event. */ /*! \fn void QTest::keyPress(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay=-1) - Simulates pressing a \a key with an optional \a modifier on a \a widget. If \a delay is larger than 0, the test will wait for \a delay milliseconds. + Simulates pressing a \a key with an optional \a modifier on a \a widget. If \a delay + is larger than 0, the test will wait for \a delay milliseconds. \bold {Note:} At some point you should release the key using \l keyRelease(). @@ -453,7 +462,8 @@ QT_BEGIN_NAMESPACE \overload - Simulates pressing a \a key with an optional \a modifier on a \a widget. If \a delay is larger than 0, the test will wait for \a delay milliseconds. + Simulates pressing a \a key with an optional \a modifier on a \a widget. + If \a delay is larger than 0, the test will wait for \a delay milliseconds. \bold {Note:} At some point you should release the key using \l keyRelease(). @@ -462,7 +472,8 @@ QT_BEGIN_NAMESPACE /*! \fn void QTest::keyRelease(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier = Qt::NoModifier, int delay=-1) - Simulates releasing a \a key with an optional \a modifier on a \a widget. If \a delay is larger than 0, the test will wait for \a delay milliseconds. + Simulates releasing a \a key with an optional \a modifier on a \a widget. + If \a delay is larger than 0, the test will wait for \a delay milliseconds. \sa QTest::keyPress(), QTest::keyClick() */ @@ -471,7 +482,8 @@ QT_BEGIN_NAMESPACE \overload - Simulates releasing a \a key with an optional \a modifier on a \a widget. If \a delay is larger than 0, the test will wait for \a delay milliseconds. + Simulates releasing a \a key with an optional \a modifier on a \a widget. + If \a delay is larger than 0, the test will wait for \a delay milliseconds. \sa QTest::keyClick() */ @@ -687,6 +699,84 @@ QT_BEGIN_NAMESPACE \sa QTest::qSleep() */ +/*! + \class QTest::QTouchEventSequence + \inmodule QtTest + \since 4.6 + + \brief The QTouchEventSequence class is used to simulate a sequence of touch events. + + To simulate a sequence of touch events on a specific device for a widget, call + QTest::touchEvent to create a QTouchEventSequence instance. Add touch events to + the sequence by calling press(), move(), release() and stationary(), and let the + instance run out of scope to commit the sequence to the event system. +*/ + +/*! + \fn QTest::QTouchEventSequence::~QTouchEventSequence() + + Commits this sequence of touch events and frees allocated resources. +*/ + +/*! + \fn QTouchEventSequence &QTest::QTouchEventSequence::press(int touchId, const QPoint &pt, QWidget *widget) + + Adds a press event for touchpoint \a touchId at position \a pt to this sequence and returns + a reference to this QTouchEventSequence. + + The position \a pt is interpreted as relative to \a widget. If \a widget is the null pointer, then + \a pt is interpreted as relative to the widget provided when instantiating this QTouchEventSequence. + + Simulates that the user pressed the touch screen or pad with the finger identified by \a touchId. +*/ + +/*! + \fn QTouchEventSequence &QTest::QTouchEventSequence::move(int touchId, const QPoint &pt, QWidget *widget) + + Adds a move event for touchpoint \a touchId at position \a pt to this sequence and returns + a reference to this QTouchEventSequence. + + The position \a pt is interpreted as relative to \a widget. If \a widget is the null pointer, then + \a pt is interpreted as relative to the widget provided when instantiating this QTouchEventSequence. + + Simulates that the user moved the finger identified by \a touchId. +*/ + +/*! + \fn QTouchEventSequence &QTest::QTouchEventSequence::release(int touchId, const QPoint &pt, QWidget *widget) + + Adds a release event for touchpoint \a touchId at position \a pt to this sequence and returns + a reference to this QTouchEventSequence. + + The position \a pt is interpreted as relative to \a widget. If \a widget is the null pointer, then + \a pt is interpreted as relative to the widget provided when instantiating this QTouchEventSequence. + + Simulates that the user lifted the finger identified by \a touchId. +*/ + +/*! + \fn QTouchEventSequence &QTest::QTouchEventSequence::stationary(int touchId) + + Adds a stationary event for touchpoint \a touchId to this sequence and returns + a reference to this QTouchEventSequence. + + Simulates that the user did not move the finger identified by \a touchId. +*/ + +/*! + \fn QTouchEventSequence QTest::touchEvent(QWidget *widget, QTouchEvent::DeviceType deviceType) + + Creates and returns a QTouchEventSequence for the device \a deviceType to + simulate events for \a widget. + + When adding touch events to the sequence, \a widget will also be used to translate + the position provided to screen coordinates, unless another widget is provided in the + respective calls to press(), move() etc. + + The touch events are committed to the event system when the destructor of the + QTouchEventSequence is called (ie when the object returned runs out of scope). +*/ + namespace QTest { static QObject *currentTestObject = 0; @@ -847,7 +937,7 @@ static void qParseArgs(int argc, char *argv[]) " -iterations n : Sets the number of accumulation iterations.\n" " -median n : Sets the number of median iterations.\n" " -vb : Print out verbose benchmarking information.\n" -#if !defined(QT_NO_PROCESS) || !defined(QT_NO_SETTINGS) +#if !defined(QT_NO_PROCESS) && !defined(QT_NO_SETTINGS) " -chart : Create chart based on the benchmark result.\n" #endif "\n" @@ -963,7 +1053,7 @@ static void qParseArgs(int argc, char *argv[]) } else if (strcmp(argv[i], "-vb") == 0) { QBenchmarkGlobalData::current->verboseOutput = true; -#if !defined(QT_NO_PROCESS) || !defined(QT_NO_SETTINGS) +#if !defined(QT_NO_PROCESS) && !defined(QT_NO_SETTINGS) } else if (strcmp(argv[i], "-chart") == 0) { QBenchmarkGlobalData::current->createChart = true; QTestLog::setLogMode(QTestLog::XML); @@ -1330,6 +1420,80 @@ static void qInvokeTestMethods(QObject *testObject) QTestLog::stopLogging(); } +#ifdef Q_OS_UNIX +class FatalSignalHandler +{ +public: + FatalSignalHandler(); + ~FatalSignalHandler(); + +private: + static void signal(int); + sigset_t handledSignals; +}; + +void FatalSignalHandler::signal(int signum) +{ + qFatal("Received signal %d", signum); +} + +FatalSignalHandler::FatalSignalHandler() +{ + sigemptyset(&handledSignals); + + const int fatalSignals[] = { + SIGHUP, SIGINT, SIGQUIT, SIGILL, SIGFPE, SIGSEGV, SIGPIPE, SIGTERM, 0 }; + + struct sigaction act; + memset(&act, 0, sizeof(act)); + act.sa_handler = FatalSignalHandler::signal; + + // Remove the handler after it is invoked. + act.sa_flags = SA_RESETHAND; + + // Block all fatal signals in our signal handler so we don't try to close + // the testlog twice. + sigemptyset(&act.sa_mask); + for (int i = 0; fatalSignals[i]; ++i) + sigaddset(&act.sa_mask, fatalSignals[i]); + + struct sigaction oldact; + + for (int i = 0; fatalSignals[i]; ++i) { + sigaction(fatalSignals[i], &act, &oldact); + // Don't overwrite any non-default handlers + if (oldact.sa_flags & SA_SIGINFO || oldact.sa_handler != SIG_DFL) { + sigaction(fatalSignals[i], &oldact, 0); + } else { + sigaddset(&handledSignals, fatalSignals[i]); + } + } +} + + +FatalSignalHandler::~FatalSignalHandler() +{ + // Unregister any of our remaining signal handlers + struct sigaction act; + memset(&act, 0, sizeof(act)); + act.sa_handler = SIG_DFL; + + struct sigaction oldact; + + for (int i = 1; i < 32; ++i) { + if (!sigismember(&handledSignals, i)) + continue; + sigaction(i, &act, &oldact); + + // If someone overwrote it in the mean time, put it back + if (oldact.sa_handler != FatalSignalHandler::signal) + sigaction(i, &oldact, 0); + } +} + +#endif + + } // namespace /*! @@ -1424,14 +1588,14 @@ int QTest::qExec(QObject *testObject, int argc, char **argv) QBenchmarkValgrindUtils::cleanup(); - } else { + } else +#endif + { +#ifdef Q_OS_UNIX + FatalSignalHandler handler; #endif - qInvokeTestMethods(testObject); - -#ifdef QTESTLIB_USE_VALGRIND } -#endif #ifndef QT_NO_EXCEPTIONS } catch (...) { @@ -1463,7 +1627,7 @@ int QTest::qExec(QObject *testObject, int argc, char **argv) #endif -#if !defined(QT_NO_PROCESS) || !defined(QT_NO_SETTINGS) +#if !defined(QT_NO_PROCESS) && !defined(QT_NO_SETTINGS) if (QBenchmarkGlobalData::current->createChart) { QString chartLocation = QLibraryInfo::location(QLibraryInfo::BinariesPath); #ifdef Q_OS_WIN @@ -1927,8 +2091,4 @@ bool QTest::compare_string_helper(const char *t1, const char *t2, const char *ac \internal */ -/*! \fn int QTest::qt_snprintf(char *str, int size, const char *format, ...) - \internal -*/ - QT_END_NAMESPACE diff --git a/src/testlib/qtestfilelogger.cpp b/src/testlib/qtestfilelogger.cpp index 0c146b4..a717058 100644 --- a/src/testlib/qtestfilelogger.cpp +++ b/src/testlib/qtestfilelogger.cpp @@ -72,15 +72,24 @@ void QTestFileLogger::init() QTest::qt_snprintf(filename, sizeof(filename), "%s.log", QTestResult::currentTestObjectName()); - #if defined(_MSC_VER) && _MSC_VER >= 1400 && !defined(Q_OS_WINCE) - if (::fopen_s(&QTest::stream, filename, "wt")) { - #else - QTest::stream = ::fopen(filename, "wt"); - if (!QTest::stream) { - #endif - printf("Unable to open file for simple logging: %s", filename); - ::exit(1); + // Keep filenames simple + for (int i = 0; i < sizeof(filename) && filename[i]; ++i) { + char& c = filename[i]; + if (!(c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c >= '0' && c <= '9' || c == '-' + || c == '.')) { + c = '_'; } + } + +#if defined(_MSC_VER) && _MSC_VER >= 1400 && !defined(Q_OS_WINCE) + if (::fopen_s(&QTest::stream, filename, "wt")) { +#else + QTest::stream = ::fopen(filename, "wt"); + if (!QTest::stream) { +#endif + printf("Unable to open file for simple logging: %s", filename); + ::exit(1); + } } void QTestFileLogger::flush(const char *msg) diff --git a/src/tools/bootstrap/bootstrap.pri b/src/tools/bootstrap/bootstrap.pri index 1cf103b..b4f9b2f 100644 --- a/src/tools/bootstrap/bootstrap.pri +++ b/src/tools/bootstrap/bootstrap.pri @@ -28,26 +28,26 @@ win32:DEFINES += QT_NODLL INCLUDEPATH += $$QT_BUILD_TREE/include \ $$QT_BUILD_TREE/include/QtCore \ $$QT_BUILD_TREE/include/QtXml \ - ../../xml + $$QT_SOURCE_TREE/src/xml DEPENDPATH += $$INCLUDEPATH \ - ../../corelib/global \ - ../../corelib/kernel \ - ../../corelib/tools \ - ../../corelib/io \ - ../../corelib/codecs \ - ../../xml + $$QT_SOURCE_TREE/src/corelib/global \ + $$QT_SOURCE_TREE/src/corelib/kernel \ + $$QT_SOURCE_TREE/src/corelib/tools \ + $$QT_SOURCE_TREE/src/corelib/io \ + $$QT_SOURCE_TREE/src/corelib/codecs \ + $$QT_SOURCE_TREE/src/xml hpux-acc*|hpuxi-acc* { LIBS += ../bootstrap/libbootstrap.a } else { contains(CONFIG, debug_and_release_target) { CONFIG(debug, debug|release) { - LIBS+=-L../bootstrap/debug + LIBS+=-L$$QT_BUILD_TREE/src/tools/bootstrap/debug } else { - LIBS+=-L../bootstrap/release + LIBS+=-L$$QT_BUILD_TREE/src/tools/bootstrap/release } } else { - LIBS += -L../bootstrap + LIBS += -L$$QT_BUILD_TREE/src/tools/bootstrap } LIBS += -lbootstrap } diff --git a/src/tools/moc/moc.cpp b/src/tools/moc/moc.cpp index d2f40ee..38674fb 100644 --- a/src/tools/moc/moc.cpp +++ b/src/tools/moc/moc.cpp @@ -337,11 +337,10 @@ bool Moc::testFunctionAttribute(Token tok, FunctionDef *def) bool Moc::parseFunction(FunctionDef *def, bool inMacro) { def->isVirtual = false; - while (test(INLINE) || test(STATIC) || test(VIRTUAL) - || testFunctionAttribute(def)) { - if (lookup() == VIRTUAL) - def->isVirtual = true; - } + //skip modifiers and attributes + while (test(INLINE) || test(STATIC) || + (test(VIRTUAL) && (def->isVirtual = true)) //mark as virtual + || testFunctionAttribute(def)) {} bool templateFunction = (lookup() == TEMPLATE); def->type = parseType(); if (def->type.name.isEmpty()) { @@ -429,11 +428,10 @@ bool Moc::parseFunction(FunctionDef *def, bool inMacro) bool Moc::parseMaybeFunction(const ClassDef *cdef, FunctionDef *def) { def->isVirtual = false; - while (test(EXPLICIT) || test(INLINE) || test(STATIC) || test(VIRTUAL) - || testFunctionAttribute(def)) { - if (lookup() == VIRTUAL) - def->isVirtual = true; - } + //skip modifiers and attributes + while (test(INLINE) || test(STATIC) || + (test(VIRTUAL) && (def->isVirtual = true)) //mark as virtual + || testFunctionAttribute(def)) {} bool tilde = test(TILDE); def->type = parseType(); if (def->type.name.isEmpty()) @@ -865,7 +863,7 @@ void Moc::parseSignals(ClassDef *def) funcDef.access = FunctionDef::Protected; parseFunction(&funcDef); if (funcDef.isVirtual) - error("Signals cannot be declared virtual"); + warning("Signals cannot be declared virtual"); if (funcDef.inlineCode) error("Not a signal declaration"); def->signalList += funcDef; diff --git a/src/xmlpatterns/Doxyfile b/src/xmlpatterns/Doxyfile index 60a6c77..83f7062 100644 --- a/src/xmlpatterns/Doxyfile +++ b/src/xmlpatterns/Doxyfile @@ -1157,7 +1157,7 @@ DOT_PATH = # contain dot files that are included in the documentation (see the # \dotfile command). -DOTFILE_DIRS = +DOTFILE_DIRS = schema/doc/ # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, which results in a white background. diff --git a/src/xmlpatterns/acceltree/qacceltree.cpp b/src/xmlpatterns/acceltree/qacceltree.cpp index 6111af2..83ea949 100644 --- a/src/xmlpatterns/acceltree/qacceltree.cpp +++ b/src/xmlpatterns/acceltree/qacceltree.cpp @@ -42,6 +42,7 @@ #include <QStack> #include "qabstractxmlreceiver.h" +#include "qabstractxmlnodemodel_p.h" #include "qacceliterators_p.h" #include "qacceltree_p.h" #include "qatomicstring_p.h" @@ -55,6 +56,37 @@ QT_BEGIN_NAMESPACE using namespace QPatternist; +namespace QPatternist { + + class AccelTreePrivate : public QAbstractXmlNodeModelPrivate + { + public: + AccelTreePrivate(AccelTree *accelTree) + : m_accelTree(accelTree) + { + } + + virtual QSourceLocation sourceLocation(const QXmlNodeModelIndex &index) const + { + return m_accelTree->sourceLocation(index); + } + + private: + AccelTree *m_accelTree; + }; +} + +AccelTree::AccelTree(const QUrl &docURI, const QUrl &bURI) + : QAbstractXmlNodeModel(new AccelTreePrivate(this)) + , m_documentURI(docURI) + , m_baseURI(bURI) +{ + /* Pre-allocate at least a little bit. */ + // TODO. Do it according to what an average 4 KB doc contains. + basicData.reserve(100); + data.reserve(30); +} + void AccelTree::printStats(const NamePool::Ptr &np) const { Q_ASSERT(np); @@ -674,6 +706,17 @@ void AccelTree::copyNodeTo(const QXmlNodeModelIndex &node, } +QSourceLocation AccelTree::sourceLocation(const QXmlNodeModelIndex &index) const +{ + const PreNumber key = toPreNumber(index); + if (sourcePositions.contains(key)) { + const QPair<qint64, qint64> position = sourcePositions.value(key); + return QSourceLocation(m_documentURI, position.first, position.second); + } else { + return QSourceLocation(); + } +} + void AccelTree::copyChildren(const QXmlNodeModelIndex &node, QAbstractXmlReceiver *const receiver, const NodeCopySettings &settings) const diff --git a/src/xmlpatterns/acceltree/qacceltree_p.h b/src/xmlpatterns/acceltree/qacceltree_p.h index 38de08c..0c68fab 100644 --- a/src/xmlpatterns/acceltree/qacceltree_p.h +++ b/src/xmlpatterns/acceltree/qacceltree_p.h @@ -91,6 +91,7 @@ namespace QPatternist */ class AccelTree : public QAbstractXmlNodeModel { + friend class AccelTreePrivate; public: using QAbstractXmlNodeModel::createIndex; @@ -99,15 +100,7 @@ namespace QPatternist typedef PreNumber PostNumber; typedef qint8 Depth; - inline AccelTree(const QUrl &docURI, - const QUrl &bURI) : m_documentURI(docURI), - m_baseURI(bURI) - { - /* Pre-allocate at least a little bit. */ - // TODO. Do it according to what an average 4 KB doc contains. - basicData.reserve(100); - data.reserve(30); - } + AccelTree(const QUrl &docURI, const QUrl &bURI); /** * @short Houses data for a node, and that all node kinds have. @@ -280,6 +273,7 @@ namespace QPatternist QHash<PreNumber, QString> data; QVector<BasicNodeData> basicData; + QHash<PreNumber, QPair<qint64, qint64> > sourcePositions; inline QUrl documentUri() const { @@ -381,6 +375,11 @@ namespace QPatternist private: /** + * Returns the source location for the object with the given @p index. + */ + QSourceLocation sourceLocation(const QXmlNodeModelIndex &index) const; + + /** * Copies the children of @p node to @p receiver. */ inline void copyChildren(const QXmlNodeModelIndex &node, diff --git a/src/xmlpatterns/acceltree/qacceltreebuilder.cpp b/src/xmlpatterns/acceltree/qacceltreebuilder.cpp index 63372ac..e58cc92 100644 --- a/src/xmlpatterns/acceltree/qacceltreebuilder.cpp +++ b/src/xmlpatterns/acceltree/qacceltreebuilder.cpp @@ -49,15 +49,17 @@ template <bool FromDocument> AccelTreeBuilder<FromDocument>::AccelTreeBuilder(const QUrl &docURI, const QUrl &baseURI, const NamePool::Ptr &np, - ReportContext *const context) : m_preNumber(-1) - , m_isPreviousAtomic(false) - , m_hasCharacters(false) - , m_isCharactersCompressed(false) - , m_namePool(np) - , m_document(new AccelTree(docURI, baseURI)) - , m_skippedDocumentNodes(0) - , m_documentURI(docURI) - , m_context(context) + ReportContext *const context, + Features features) : m_preNumber(-1) + , m_isPreviousAtomic(false) + , m_hasCharacters(false) + , m_isCharactersCompressed(false) + , m_namePool(np) + , m_document(new AccelTree(docURI, baseURI)) + , m_skippedDocumentNodes(0) + , m_documentURI(docURI) + , m_context(context) + , m_features(features) { Q_ASSERT(m_namePool); @@ -126,9 +128,18 @@ void AccelTreeBuilder<FromDocument>::item(const Item &it) template <bool FromDocument> void AccelTreeBuilder<FromDocument>::startElement(const QXmlName &name) { + startElement(name, 1, 1); +} + +template <bool FromDocument> +void AccelTreeBuilder<FromDocument>::startElement(const QXmlName &name, qint64 line, qint64 column) +{ startStructure(); - m_document->basicData.append(AccelTree::BasicNodeData(currentDepth(), currentParent(), QXmlNodeModelIndex::Element, -1, name)); + AccelTree::BasicNodeData data(currentDepth(), currentParent(), QXmlNodeModelIndex::Element, -1, name); + m_document->basicData.append(data); + if (m_features & SourceLocationsFeature) + m_document->sourcePositions.insert(m_document->maximumPreNumber(), qMakePair(line, column)); ++m_preNumber; m_ancestors.push(m_preNumber); diff --git a/src/xmlpatterns/acceltree/qacceltreebuilder_p.h b/src/xmlpatterns/acceltree/qacceltreebuilder_p.h index 6eb3102..5f6a287 100644 --- a/src/xmlpatterns/acceltree/qacceltreebuilder_p.h +++ b/src/xmlpatterns/acceltree/qacceltreebuilder_p.h @@ -90,15 +90,27 @@ namespace QPatternist typedef QExplicitlySharedDataPointer<AccelTreeBuilder> Ptr; /** + * Describes the memory relevant features the builder shall support. + */ + enum Feature + { + NoneFeature, ///< No special features are enabled. + SourceLocationsFeature = 1 ///< The accel tree builder will store source locations for each start element. + }; + Q_DECLARE_FLAGS(Features, Feature) + + /** * @param context may be @c null. */ AccelTreeBuilder(const QUrl &docURI, const QUrl &baseURI, const NamePool::Ptr &np, - ReportContext *const context); + ReportContext *const context, + Features features = NoneFeature); virtual void startDocument(); virtual void endDocument(); virtual void startElement(const QXmlName &name); + void startElement(const QXmlName &name, qint64 line, qint64 column); virtual void endElement(); virtual void attribute(const QXmlName &name, const QStringRef &value); virtual void characters(const QStringRef &ch); @@ -175,8 +187,13 @@ namespace QPatternist * a member. */ ReportContext *const m_context; + + Features m_features; }; + Q_DECLARE_OPERATORS_FOR_FLAGS(AccelTreeBuilder<true>::Features) + Q_DECLARE_OPERATORS_FOR_FLAGS(AccelTreeBuilder<false>::Features) + #include "qacceltreebuilder.cpp" } diff --git a/src/xmlpatterns/acceltree/qacceltreeresourceloader.cpp b/src/xmlpatterns/acceltree/qacceltreeresourceloader.cpp index d4297fd..8019551 100644 --- a/src/xmlpatterns/acceltree/qacceltreeresourceloader.cpp +++ b/src/xmlpatterns/acceltree/qacceltreeresourceloader.cpp @@ -46,7 +46,6 @@ #include <QtNetwork/QNetworkRequest> -#include "qacceltreebuilder_p.h" #include "qatomicstring_p.h" #include "qautoptr_p.h" #include "qcommonsequencetypes_p.h" @@ -57,14 +56,12 @@ QT_BEGIN_NAMESPACE using namespace QPatternist; -static inline uint qHash(const QUrl &uri) -{ - return qHash(uri.toString()); -} - AccelTreeResourceLoader::AccelTreeResourceLoader(const NamePool::Ptr &np, - const NetworkAccessDelegator::Ptr &manager) : m_namePool(np) - , m_networkAccessDelegator(manager) + const NetworkAccessDelegator::Ptr &manager, + AccelTreeBuilder<true>::Features features) + : m_namePool(np) + , m_networkAccessDelegator(manager) + , m_features(features) { Q_ASSERT(m_namePool); Q_ASSERT(m_networkAccessDelegator); @@ -74,7 +71,7 @@ bool AccelTreeResourceLoader::retrieveDocument(const QUrl &uri, const ReportContext::Ptr &context) { Q_ASSERT(uri.isValid()); - AccelTreeBuilder<true> builder(uri, uri, m_namePool, context.data()); + AccelTreeBuilder<true> builder(uri, uri, m_namePool, context.data(), m_features); const AutoPtr<QNetworkReply> reply(load(uri, m_networkAccessDelegator, context)); @@ -88,18 +85,35 @@ bool AccelTreeResourceLoader::retrieveDocument(const QUrl &uri, return success; } +bool AccelTreeResourceLoader::retrieveDocument(QIODevice *source, const QUrl &documentUri, const ReportContext::Ptr &context) +{ + Q_ASSERT(source); + Q_ASSERT(source->isReadable()); + Q_ASSERT(documentUri.isValid()); + + AccelTreeBuilder<true> builder(documentUri, documentUri, m_namePool, context.data(), m_features); + + bool success = false; + success = streamToReceiver(source, &builder, m_namePool, context, documentUri); + + m_loadedDocuments.insert(documentUri, builder.builtDocument()); + + return success; +} + QNetworkReply *AccelTreeResourceLoader::load(const QUrl &uri, const NetworkAccessDelegator::Ptr &networkDelegator, - const ReportContext::Ptr &context) + const ReportContext::Ptr &context, ErrorHandling errorHandling) { return load(uri, networkDelegator->managerFor(uri), - context); + context, errorHandling); } QNetworkReply *AccelTreeResourceLoader::load(const QUrl &uri, QNetworkAccessManager *const networkManager, - const ReportContext::Ptr &context) + const ReportContext::Ptr &context, ErrorHandling errorHandling) + { Q_ASSERT(networkManager); Q_ASSERT(uri.isValid()); @@ -120,7 +134,7 @@ QNetworkReply *AccelTreeResourceLoader::load(const QUrl &uri, const QSourceLocation location(uri); - if(context) + if(context && (errorHandling == FailOnError)) context->error(errorMessage, ReportContext::FODC0002, location); return 0; @@ -130,7 +144,7 @@ QNetworkReply *AccelTreeResourceLoader::load(const QUrl &uri, } bool AccelTreeResourceLoader::streamToReceiver(QIODevice *const dev, - QAbstractXmlReceiver *const receiver, + AccelTreeBuilder<true> *const receiver, const NamePool::Ptr &np, const ReportContext::Ptr &context, const QUrl &uri) @@ -154,7 +168,7 @@ bool AccelTreeResourceLoader::streamToReceiver(QIODevice *const dev, { /* Send the name. */ receiver->startElement(np->allocateQName(reader.namespaceUri().toString(), reader.name().toString(), - reader.prefix().toString())); + reader.prefix().toString()), reader.lineNumber(), reader.columnNumber()); /* Send namespace declarations. */ const QXmlStreamNamespaceDeclarations &nss = reader.namespaceDeclarations(); @@ -263,6 +277,22 @@ Item AccelTreeResourceLoader::openDocument(const QUrl &uri, } } +Item AccelTreeResourceLoader::openDocument(QIODevice *source, const QUrl &documentUri, + const ReportContext::Ptr &context) +{ + const AccelTree::Ptr doc(m_loadedDocuments.value(documentUri)); + + if(doc) + return doc->root(QXmlNodeModelIndex()); /* Pass in dummy object. We know AccelTree doesn't use it. */ + else + { + if(retrieveDocument(source, documentUri, context)) + return m_loadedDocuments.value(documentUri)->root(QXmlNodeModelIndex()); /* Pass in dummy object. We know AccelTree doesn't use it. */ + else + return Item(); + } +} + SequenceType::Ptr AccelTreeResourceLoader::announceDocument(const QUrl &uri, const Usage) { // TODO deal with the usage thingy diff --git a/src/xmlpatterns/acceltree/qacceltreeresourceloader_p.h b/src/xmlpatterns/acceltree/qacceltreeresourceloader_p.h index a650dfa..f24a88e 100644 --- a/src/xmlpatterns/acceltree/qacceltreeresourceloader_p.h +++ b/src/xmlpatterns/acceltree/qacceltreeresourceloader_p.h @@ -52,12 +52,12 @@ #ifndef Patternist_AccelTreeResourceLoader_H #define Patternist_AccelTreeResourceLoader_H -#include <QtCore/QHash> #include <QtCore/QEventLoop> #include <QtNetwork/QNetworkReply> #include "qabstractxmlreceiver.h" #include "qacceltree_p.h" +#include "qacceltreebuilder_p.h" #include "qdeviceresourceloader_p.h" #include "qnamepool_p.h" #include "qnetworkaccessdelegator_p.h" @@ -115,13 +115,25 @@ namespace QPatternist { public: /** + * Describes the behaviour of the resource loader in case of an + * error. + */ + enum ErrorHandling + { + FailOnError, ///< The resource loader will report the error via the report context. + ContinueOnError ///< The resource loader will report no error and return an empty QNetworkReply. + }; + + /** * AccelTreeResourceLoader does not own @p context. */ AccelTreeResourceLoader(const NamePool::Ptr &np, - const NetworkAccessDelegator::Ptr &networkDelegator); + const NetworkAccessDelegator::Ptr &networkDelegator, AccelTreeBuilder<true>::Features = AccelTreeBuilder<true>::NoneFeature); virtual Item openDocument(const QUrl &uri, const ReportContext::Ptr &context); + virtual Item openDocument(QIODevice *source, const QUrl &documentUri, + const ReportContext::Ptr &context); virtual SequenceType::Ptr announceDocument(const QUrl &uri, const Usage usageHint); virtual bool isDocumentAvailable(const QUrl &uri); @@ -133,7 +145,6 @@ namespace QPatternist const ReportContext::Ptr &context, const SourceLocationReflection *const where); - /** * @short Helper function that do NetworkAccessDelegator::get(), but * does it blocked. @@ -149,14 +160,14 @@ namespace QPatternist */ static QNetworkReply *load(const QUrl &uri, QNetworkAccessManager *const networkManager, - const ReportContext::Ptr &context); + const ReportContext::Ptr &context, ErrorHandling handling = FailOnError); /** * @overload */ static QNetworkReply *load(const QUrl &uri, const NetworkAccessDelegator::Ptr &networkDelegator, - const ReportContext::Ptr &context); + const ReportContext::Ptr &context, ErrorHandling handling = FailOnError); /** * @short Returns the URIs this AccelTreeResourceLoader has loaded @@ -165,14 +176,17 @@ namespace QPatternist virtual QSet<QUrl> deviceURIs() const; virtual void clear(const QUrl &uri); + private: static bool streamToReceiver(QIODevice *const dev, - QAbstractXmlReceiver *const receiver, + AccelTreeBuilder<true> *const receiver, const NamePool::Ptr &np, const ReportContext::Ptr &context, const QUrl &uri); bool retrieveDocument(const QUrl &uri, const ReportContext::Ptr &context); + bool retrieveDocument(QIODevice *source, const QUrl &documentUri, + const ReportContext::Ptr &context); /** * If @p context is @c null, no error reporting should be done. */ @@ -185,6 +199,7 @@ namespace QPatternist const NamePool::Ptr m_namePool; const NetworkAccessDelegator::Ptr m_networkAccessDelegator; QHash<QPair<QUrl, QString>, QString> m_unparsedTexts; + AccelTreeBuilder<true>::Features m_features; }; } diff --git a/src/xmlpatterns/api/api.pri b/src/xmlpatterns/api/api.pri index a0298f2..9fcc2f5 100644 --- a/src/xmlpatterns/api/api.pri +++ b/src/xmlpatterns/api/api.pri @@ -3,11 +3,13 @@ HEADERS += $$PWD/qabstractxmlforwarditerator_p.h \ $$PWD/qabstracturiresolver.h \ $$PWD/qabstractxmlnodemodel.h \ $$PWD/qabstractxmlnodemodel_p.h \ + $$PWD/qabstractxmlpullprovider_p.h \ $$PWD/qabstractxmlreceiver.h \ $$PWD/qabstractxmlreceiver_p.h \ $$PWD/qdeviceresourceloader_p.h \ $$PWD/qiodevicedelegate_p.h \ $$PWD/qnetworkaccessdelegator_p.h \ + $$PWD/qpullbridge_p.h \ $$PWD/qresourcedelegator_p.h \ $$PWD/qsimplexmlnodemodel.h \ $$PWD/qsourcelocation.h \ @@ -20,6 +22,10 @@ HEADERS += $$PWD/qabstractxmlforwarditerator_p.h \ $$PWD/qxmlquery_p.h \ $$PWD/qxmlresultitems.h \ $$PWD/qxmlresultitems_p.h \ + $$PWD/qxmlschema.h \ + $$PWD/qxmlschema_p.h \ + $$PWD/qxmlschemavalidator.h \ + $$PWD/qxmlschemavalidator_p.h \ $$PWD/qxmlserializer.h \ $$PWD/qxmlserializer_p.h \ $$PWD/../../../tools/xmlpatterns/qcoloringmessagehandler_p.h \ @@ -29,9 +35,11 @@ SOURCES += $$PWD/qvariableloader.cpp \ $$PWD/qabstractmessagehandler.cpp \ $$PWD/qabstracturiresolver.cpp \ $$PWD/qabstractxmlnodemodel.cpp \ + $$PWD/qabstractxmlpullprovider.cpp \ $$PWD/qabstractxmlreceiver.cpp \ $$PWD/qiodevicedelegate.cpp \ $$PWD/qnetworkaccessdelegator.cpp \ + $$PWD/qpullbridge.cpp \ $$PWD/qresourcedelegator.cpp \ $$PWD/qsimplexmlnodemodel.cpp \ $$PWD/qsourcelocation.cpp \ @@ -41,6 +49,9 @@ SOURCES += $$PWD/qvariableloader.cpp \ $$PWD/qxmlnamepool.cpp \ $$PWD/qxmlquery.cpp \ $$PWD/qxmlresultitems.cpp \ + $$PWD/qxmlschema.cpp \ + $$PWD/qxmlschema_p.cpp \ + $$PWD/qxmlschemavalidator.cpp \ $$PWD/qxmlserializer.cpp \ $$PWD/../../../tools/xmlpatterns/qcoloringmessagehandler.cpp \ $$PWD/../../../tools/xmlpatterns/qcoloroutput.cpp diff --git a/src/xmlpatterns/api/qabstractxmlforwarditerator_p.h b/src/xmlpatterns/api/qabstractxmlforwarditerator_p.h index d3188d3..b4eefeb 100644 --- a/src/xmlpatterns/api/qabstractxmlforwarditerator_p.h +++ b/src/xmlpatterns/api/qabstractxmlforwarditerator_p.h @@ -55,7 +55,7 @@ #include <QtCore/QList> #include <QtCore/QVector> #include <QtCore/QSharedData> - +#include <QtCore/QString> QT_BEGIN_HEADER @@ -74,6 +74,19 @@ inline bool qIsForwardIteratorEnd(const T &unit) return !unit; } +/** + * @short Helper class for StringSplitter + * + * Needed by the QAbstractXmlForwardIterator sub-class. + * + * @relates StringSplitter + */ +template<> +inline bool qIsForwardIteratorEnd(const QString &unit) +{ + return unit.isNull(); +} + template<typename T> class QAbstractXmlForwardIterator; class QAbstractXmlForwardIteratorPrivate; diff --git a/src/xmlpatterns/api/qabstractxmlnodemodel.cpp b/src/xmlpatterns/api/qabstractxmlnodemodel.cpp index fde2c17..06f03e6 100644 --- a/src/xmlpatterns/api/qabstractxmlnodemodel.cpp +++ b/src/xmlpatterns/api/qabstractxmlnodemodel.cpp @@ -1666,4 +1666,20 @@ void QAbstractXmlNodeModel::copyNodeTo(const QXmlNodeModelIndex &node, "This function is not expected to be called."); } +/*! + Returns the source location for the object with the given \a index + or a default constructed QSourceLocation in case no location + information is available. + + \since 4.6 +*/ +QSourceLocation QAbstractXmlNodeModel::sourceLocation(const QXmlNodeModelIndex &index) const +{ + // TODO: make this method virtual in Qt5 to allow source location support in custom models + if (d_ptr) + return d_ptr->sourceLocation(index); + else + return QSourceLocation(); +} + QT_END_NAMESPACE diff --git a/src/xmlpatterns/api/qabstractxmlnodemodel.h b/src/xmlpatterns/api/qabstractxmlnodemodel.h index 9629f27..3d44547 100644 --- a/src/xmlpatterns/api/qabstractxmlnodemodel.h +++ b/src/xmlpatterns/api/qabstractxmlnodemodel.h @@ -56,6 +56,7 @@ QT_MODULE(XmlPatterns) class QAbstractXmlNodeModel; class QAbstractXmlNodeModelPrivate; class QAbstractXmlReceiver; +class QSourceLocation; class QUrl; class QXmlName; class QXmlNodeModelIndex; @@ -69,6 +70,7 @@ namespace QPatternist class DynamicContext; class Item; class ItemType; + class XsdValidatedXmlNodeModel; template<typename TResult, typename TSource, typename TMapper, typename Context> class ItemMappingIterator; template<typename TResult, typename TSource, typename TMapper> class SequenceMappingIterator; typedef QExplicitlySharedDataPointer<ItemType> ItemTypePtr; @@ -315,6 +317,8 @@ public: QAbstractXmlReceiver *const receiver, const NodeCopySettings &) const; + QSourceLocation sourceLocation(const QXmlNodeModelIndex &index) const; + protected: virtual QXmlNodeModelIndex nextFromSimpleAxis(SimpleAxis axis, const QXmlNodeModelIndex &origin) const = 0; @@ -343,6 +347,7 @@ protected: private: friend class QPatternist::ItemMappingIterator<QXmlNodeModelIndex, QXmlNodeModelIndex, const QAbstractXmlNodeModel *, QExplicitlySharedDataPointer<QPatternist::DynamicContext> >; friend class QPatternist::SequenceMappingIterator<QXmlNodeModelIndex, QXmlNodeModelIndex, const QAbstractXmlNodeModel *>; + friend class QPatternist::XsdValidatedXmlNodeModel; inline QExplicitlySharedDataPointer<QAbstractXmlForwardIterator<QXmlNodeModelIndex> > mapToSequence(const QXmlNodeModelIndex &ni, const QExplicitlySharedDataPointer<QPatternist::DynamicContext> &) const; diff --git a/src/xmlpatterns/api/qabstractxmlnodemodel_p.h b/src/xmlpatterns/api/qabstractxmlnodemodel_p.h index 5d9e0eb..9061616 100644 --- a/src/xmlpatterns/api/qabstractxmlnodemodel_p.h +++ b/src/xmlpatterns/api/qabstractxmlnodemodel_p.h @@ -52,6 +52,9 @@ #ifndef QABSTRACTXMLNODEMODEL_P_H #define QABSTRACTXMLNODEMODEL_P_H +#include "qabstractxmlnodemodel.h" +#include "qsourcelocation.h" + QT_BEGIN_HEADER QT_BEGIN_NAMESPACE @@ -62,6 +65,13 @@ public: virtual ~QAbstractXmlNodeModelPrivate() { } + + virtual QSourceLocation sourceLocation(const QXmlNodeModelIndex &index) const + { + Q_UNUSED(index); + + return QSourceLocation(); + } }; QT_END_NAMESPACE diff --git a/src/xmlpatterns/api/qabstractxmlpullprovider.cpp b/src/xmlpatterns/api/qabstractxmlpullprovider.cpp new file mode 100644 index 0000000..f006988 --- /dev/null +++ b/src/xmlpatterns/api/qabstractxmlpullprovider.cpp @@ -0,0 +1,177 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QHash> + +#include "qxmlname.h" +#include "qnamepool_p.h" +#include "qabstractxmlpullprovider_p.h" + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +// TODO have example where query selects, and the events for the result are indented + +/*! + \internal + \class AbstractXmlPullProvider + \brief The AbstractXmlPullProvider class provides a pull-based stream interface for the XPath Data Model. + \reentrant + \ingroup xml-tools + + AbstractXmlPullProvider allows a stream of items from the XPath Data Model -- essentially XML -- + to be iterated over. The subclass of AbstractXmlPullProvider provides the events, and the + user calling next() and so on, consumes them. AbstractXmlPullProvider can be considered + a forward-only, non-reversible iterator. + + Note that the content the events describes, are not necessarily a well-formed XML document, but + rather an instance of the XPath Data model, to be specific. For instance, maybe a pull provider + returns two atomic values, followed by an element tree, and at the end two document nodes. + + If you are subclassing AbstractXmlPullProvider, be careful to correctly implement + the behaviors, as described for the individual members and events. + + \sa AbstractXmlPullProvider::Event + */ + +/*! + \enum AbstractXmlPullProvider::Event + \value StartOfInput The value AbstractXmlPullProvider::current() returns before the first call to next(). + \value AtomicValue an atomic value such as an \c xs:integer, \c xs:hexBinary, or \c xs:dateTime. Atomic values + can only be top level items. + \value StartDocument Signals the start of a document node. Note that a AbstractXmlPullProvider can provide + a sequence of document nodes. + \value EndDocument Signals the end of a document node. StartDocument and EndDocument are always balanced + and always top-level events. For instance, StartDocument can never appear after any StartElement + events that hasn't been balanced by the corresponding amount of EndElement events. + \value StartElement Signals an element start tag. + \value EndElement Signals the end of an element. StartElement and EndElement events are always balanced. + \value Text Signals a text node. Adjacent text nodes cannot occur. + \value ProcessingInstruction A processing instruction. Its name is returned from name(), and its value in stringValue(). + \value Comment a comment node. Its value can be retrieved with stingValue(). + \value Attribute Signals an attribute node. Attribute events can only appear after Namespace events, or + if no such are sent, after the StartElement. In addition they must appear sequentially, + and each name must be unique. The ordering of attribute events is undefined and insignificant. + \value Namespace Signals a namespace binding. They occur very infrequently and are not needed for attributes + and elements. Namespace events can only appear after the StartElement event. The + ordering of namespace events is undefined and insignificant. + \value EndOfInput When next() is called after the last event, EndOfInput is returned. + + \sa AbstractXmlPullProvider::current() + */ + +/*! + Constucts a AbstractXmlPullProvider instance. + */ +AbstractXmlPullProvider::AbstractXmlPullProvider() +{ +} + +/*! + Destructs this AbstractXmlPullProvider. + */ +AbstractXmlPullProvider::~AbstractXmlPullProvider() +{ +} + +/*! + \fn Event AbstractXmlPullProvider::next() = 0; + Advances this AbstractXmlPullProvider, and returns the new event. + + \sa current() + */ + +/*! + \fn Event AbstractXmlPullProvider::current() const = 0; + Returns the event that next() returned the last time it was called. It doesn't + alter this AbstractXmlPullProvider. + + current() may not modify this AbstractXmlPullProvider's state. Subsequent calls to current() + must return the same value. + + \sa AbstractXmlPullProvider::Event + */ + +/*! + \fn QName AbstractXmlPullProvider::name() const = 0; + If the current event is StartElement, + EndElement, ProcessingInstruction, Attribute, or Namespace, the node's name is returned. + + If the current event is ProcessingInstruction, + the processing instruction target is in in the local name. + + If the current event is Namespace, the name's namespace URI is the namespace, and + the local name is the prefix the name is binding to. + + In all other cases, an invalid QName is returned. + */ + +/*! + \fn QVariant AbstractXmlPullProvider::atomicValue() const = 0; + + If current() event is AtomicValue, the atomic value is returned as a QVariant. + In all other cases, this function returns a null QVariant. + */ + +/*! + \fn QString AbstractXmlPullProvider::stringValue() const = 0; + + If current() is Text, the text node's value is returned. + + If the current() event is Comment, its value is returned. The subclasser guarantees + it does not contain the string "-->". + + If the current() event is ProcessingInstruction, its data is returned. The subclasser + guarantees the data does not contain the string "?>". + + In other cases, it returns a default constructed string. + */ + +/*! + \fn QHash<QXmlName, QString> AbstractXmlPullProvider::attributes() = 0; + + If the current() is Element, the attributes of the element are returned, + an empty list of attributes otherwise. + */ + +QT_END_NAMESPACE + diff --git a/src/xmlpatterns/api/qabstractxmlpullprovider_p.h b/src/xmlpatterns/api/qabstractxmlpullprovider_p.h new file mode 100644 index 0000000..59dce72 --- /dev/null +++ b/src/xmlpatterns/api/qabstractxmlpullprovider_p.h @@ -0,0 +1,113 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef QABSTRACTXMLPULLPROVIDER_H +#define QABSTRACTXMLPULLPROVIDER_H + +#include <QtCore/QtGlobal> + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +class QXmlItem; +class QXmlName; +class QString; +class QVariant; +template<typename Key, typename Value> class QHash; + +namespace QPatternist +{ + class AbstractXmlPullProviderPrivate; + + class AbstractXmlPullProvider + { + public: + AbstractXmlPullProvider(); + virtual ~AbstractXmlPullProvider(); + + enum Event + { + StartOfInput = 1, + AtomicValue = 1 << 1, + StartDocument = 1 << 2, + EndDocument = 1 << 3, + StartElement = 1 << 4, + EndElement = 1 << 5, + Text = 1 << 6, + ProcessingInstruction = 1 << 7, + Comment = 1 << 8, + Attribute = 1 << 9, + Namespace = 1 << 10, + EndOfInput = 1 << 11 + }; + + virtual Event next() = 0; + virtual Event current() const = 0; + virtual QXmlName name() const = 0; + virtual QVariant atomicValue() const = 0; + virtual QString stringValue() const = 0; + + virtual QHash<QXmlName, QString> attributes() = 0; + virtual QHash<QXmlName, QXmlItem> attributeItems() = 0; + + /* *** The functions below are internal. */ + private: + Q_DISABLE_COPY(AbstractXmlPullProvider) + AbstractXmlPullProviderPrivate *d; + }; +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/api/qpullbridge.cpp b/src/xmlpatterns/api/qpullbridge.cpp new file mode 100644 index 0000000..75df519 --- /dev/null +++ b/src/xmlpatterns/api/qpullbridge.cpp @@ -0,0 +1,232 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QVariant> + +#include "qabstractxmlnodemodel_p.h" +#include "qitemmappingiterator_p.h" +#include "qitem_p.h" +#include "qxmlname.h" +#include "qxmlquery_p.h" + +#include "qpullbridge_p.h" + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +/*! + \brief Bridges a QPatternist::SequenceIterator to QAbstractXmlPullProvider. + \class QPatternist::PullBridge + \internal + \reentrant + \ingroup xml-tools + + The approach of this class is rather straight forward since QPatternist::SequenceIterator + and QAbstractXmlPullProvider are conceptually similar. While QPatternist::SequenceIterator only + delivers top level items(since it's not an event stream, it's a list of items), PullBridge + needs to recursively iterate the children of nodes too, which is achieved through the + stack m_iterators. + */ + +AbstractXmlPullProvider::Event PullBridge::next() +{ + m_index = m_iterators.top().second->next(); + + if(!m_index.isNull()) + { + Item item(m_index); + + if(item && item.isAtomicValue()) + m_current = AtomicValue; + else + { + Q_ASSERT(item.isNode()); + + switch(m_index.kind()) + { + case QXmlNodeModelIndex::Attribute: + { + m_current = Attribute; + break; + } + case QXmlNodeModelIndex::Comment: + { + m_current = Comment; + break; + } + case QXmlNodeModelIndex::Element: + { + m_iterators.push(qMakePair(StartElement, m_index.iterate(QXmlNodeModelIndex::AxisChild))); + m_current = StartElement; + break; + } + case QXmlNodeModelIndex::Document: + { + m_iterators.push(qMakePair(StartDocument, m_index.iterate(QXmlNodeModelIndex::AxisChild))); + m_current = StartDocument; + break; + } + case QXmlNodeModelIndex::Namespace: + { + m_current = Namespace; + break; + } + case QXmlNodeModelIndex::ProcessingInstruction: + { + m_current = ProcessingInstruction; + break; + } + case QXmlNodeModelIndex::Text: + { + m_current = Text; + break; + } + } + } + } + else + { + if(m_iterators.isEmpty()) + m_current = EndOfInput; + else + { + switch(m_iterators.top().first) + { + case StartOfInput: + { + m_current = EndOfInput; + break; + } + case StartElement: + { + m_current = EndElement; + m_iterators.pop(); + break; + } + case StartDocument: + { + m_current = EndDocument; + m_iterators.pop(); + break; + } + default: + { + Q_ASSERT_X(false, Q_FUNC_INFO, + "Invalid value."); + m_current = EndOfInput; + } + } + } + + } + + return m_current; +} + +AbstractXmlPullProvider::Event PullBridge::current() const +{ + return m_current; +} + +QXmlNodeModelIndex PullBridge::index() const +{ + return m_index; +} + +QSourceLocation PullBridge::sourceLocation() const +{ + return m_index.model()->sourceLocation(m_index); +} + +QXmlName PullBridge::name() const +{ + return m_index.name(); +} + +QVariant PullBridge::atomicValue() const +{ + return QVariant(); +} + +QString PullBridge::stringValue() const +{ + return QString(); +} + +QHash<QXmlName, QString> PullBridge::attributes() +{ + Q_ASSERT(m_current == StartElement); + + QHash<QXmlName, QString> attributes; + + QXmlNodeModelIndex::Iterator::Ptr it = m_index.iterate(QXmlNodeModelIndex::AxisAttribute); + QXmlNodeModelIndex index = it->next(); + while (!index.isNull()) { + const Item attribute(index); + attributes.insert(index.name(), index.stringValue()); + + index = it->next(); + } + + return attributes; +} + +QHash<QXmlName, QXmlItem> PullBridge::attributeItems() +{ + Q_ASSERT(m_current == StartElement); + + QHash<QXmlName, QXmlItem> attributes; + + QXmlNodeModelIndex::Iterator::Ptr it = m_index.iterate(QXmlNodeModelIndex::AxisAttribute); + QXmlNodeModelIndex index = it->next(); + while (!index.isNull()) { + const Item attribute(index); + attributes.insert(index.name(), QXmlItem(index)); + + index = it->next(); + } + + return attributes; +} + +QT_END_NAMESPACE + diff --git a/src/xmlpatterns/api/qpullbridge_p.h b/src/xmlpatterns/api/qpullbridge_p.h new file mode 100644 index 0000000..23b9542 --- /dev/null +++ b/src/xmlpatterns/api/qpullbridge_p.h @@ -0,0 +1,103 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef PATTERNIST_PULLBRIDGE_P_H +#define PATTERNIST_PULLBRIDGE_P_H + +#include <QtCore/QPair> +#include <QtCore/QStack> + +#include "qabstractxmlforwarditerator_p.h" +#include "qabstractxmlpullprovider_p.h" +#include "qitem_p.h" + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +namespace QPatternist +{ + class PullBridge : public AbstractXmlPullProvider + { + public: + inline PullBridge(const QXmlNodeModelIndex::Iterator::Ptr &it) : m_current(StartOfInput) + { + Q_ASSERT(it); + m_iterators.push(qMakePair(StartOfInput, it)); + } + + virtual Event next(); + virtual Event current() const; + virtual QXmlName name() const; + /** + * Returns always an empty QVariant. + */ + virtual QVariant atomicValue() const; + virtual QString stringValue() const; + virtual QHash<QXmlName, QString> attributes(); + virtual QHash<QXmlName, QXmlItem> attributeItems(); + + QXmlNodeModelIndex index() const; + QSourceLocation sourceLocation() const; + + private: + typedef QStack<QPair<Event, QXmlNodeModelIndex::Iterator::Ptr> > IteratorStack; + IteratorStack m_iterators; + QXmlNodeModelIndex m_index; + Event m_current; + }; +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/api/qresourcedelegator.cpp b/src/xmlpatterns/api/qresourcedelegator.cpp index 5a5bcf4..ad93848 100644 --- a/src/xmlpatterns/api/qresourcedelegator.cpp +++ b/src/xmlpatterns/api/qresourcedelegator.cpp @@ -45,14 +45,6 @@ QT_BEGIN_NAMESPACE using namespace QPatternist; -/** - * Duplicated in qacceltreeresourceloader.cpp. - */ -static inline uint qHash(const QUrl &uri) -{ - return qHash(uri.toString()); -} - bool ResourceDelegator::isUnparsedTextAvailable(const QUrl &uri, const QString &encoding) { diff --git a/src/xmlpatterns/api/qxmlnamepool.cpp b/src/xmlpatterns/api/qxmlnamepool.cpp index 5b03975..66eb788 100644 --- a/src/xmlpatterns/api/qxmlnamepool.cpp +++ b/src/xmlpatterns/api/qxmlnamepool.cpp @@ -96,6 +96,10 @@ QXmlNamePool::~QXmlNamePool() { } +QXmlNamePool::QXmlNamePool(QPatternist::NamePool *namePool) : d(QExplicitlySharedDataPointer<QPatternist::NamePool>(namePool)) +{ +} + /*! Assigns the \a other name pool to this one. */ diff --git a/src/xmlpatterns/api/qxmlnamepool.h b/src/xmlpatterns/api/qxmlnamepool.h index 68cf627..6c1fe4f 100644 --- a/src/xmlpatterns/api/qxmlnamepool.h +++ b/src/xmlpatterns/api/qxmlnamepool.h @@ -54,6 +54,8 @@ QT_MODULE(XmlPatterns) namespace QPatternist { class NamePool; + class XsdSchemaParser; + class XsdValidatingInstanceReader; } namespace QPatternistSDK @@ -73,10 +75,15 @@ public: QXmlNamePool &operator=(const QXmlNamePool &other); private: + QXmlNamePool(QPatternist::NamePool *namePool); friend class QXmlQueryPrivate; friend class QXmlQuery; + friend class QXmlSchemaPrivate; + friend class QXmlSchemaValidatorPrivate; friend class QXmlSerializerPrivate; friend class QXmlName; + friend class QPatternist::XsdSchemaParser; + friend class QPatternist::XsdValidatingInstanceReader; friend class QPatternistSDK::Global; QExplicitlySharedDataPointer<QPatternist::NamePool> d; }; diff --git a/src/xmlpatterns/api/qxmlquery.cpp b/src/xmlpatterns/api/qxmlquery.cpp index 3d023a0..79ae7a9 100644 --- a/src/xmlpatterns/api/qxmlquery.cpp +++ b/src/xmlpatterns/api/qxmlquery.cpp @@ -231,6 +231,18 @@ QT_BEGIN_NAMESPACE \value XQuery10 XQuery 1.0. \value XSLT20 XSLT 2.0 + \omitvalue XmlSchema11IdentityConstraintSelector The selector, the restricted + XPath pattern found in W3C XML Schema 1.1 for uniqueness + contraints. Apart from restricting the syntax, the type check stage + for the expression assumes a sequence of nodes to be the focus. + \omitvalue XmlSchema11IdentityConstraintField The field, the restricted + XPath pattern found in W3C XML Schema 1.1 for uniqueness + contraints. Apart from restricting the syntax, the type check stage + for the expression assumes a sequence of nodes to be the focus. + \omitvalue XPath20 Signifies XPath 2.0. Has no effect in the public API, it's + used internally. As With XmlSchema11IdentityConstraintSelector and + XmlSchema11IdentityConstraintField, the type check stage + for the expression assumes a sequence of nodes to be the focus. \sa setQuery() */ @@ -415,7 +427,7 @@ void QXmlQuery::setQuery(QIODevice *sourceCode, const QUrl &documentURI) return; } - d->queryURI = QXmlQueryPrivate::normalizeQueryURI(documentURI); + d->queryURI = QPatternist::XPathHelper::normalizeQueryURI(documentURI); d->expression(sourceCode); } @@ -463,12 +475,12 @@ void QXmlQuery::setQuery(const QUrl &queryURI, const QUrl &baseURI) { Q_ASSERT_X(queryURI.isValid(), Q_FUNC_INFO, "The passed URI must be valid."); - const QUrl canonicalURI(QXmlQueryPrivate::normalizeQueryURI(queryURI)); + const QUrl canonicalURI(QPatternist::XPathHelper::normalizeQueryURI(queryURI)); Q_ASSERT(canonicalURI.isValid()); Q_ASSERT(!canonicalURI.isRelative()); Q_ASSERT(baseURI.isValid() || baseURI.isEmpty()); - d->queryURI = QXmlQueryPrivate::normalizeQueryURI(baseURI.isEmpty() ? queryURI : baseURI); + d->queryURI = QPatternist::XPathHelper::normalizeQueryURI(baseURI.isEmpty() ? queryURI : baseURI); QPatternist::AutoPtr<QIODevice> result; diff --git a/src/xmlpatterns/api/qxmlquery.h b/src/xmlpatterns/api/qxmlquery.h index 4ddfc76..b4ac121 100644 --- a/src/xmlpatterns/api/qxmlquery.h +++ b/src/xmlpatterns/api/qxmlquery.h @@ -71,6 +71,8 @@ namespace QPatternistSDK namespace QPatternist { + class XsdSchemaParser; + class XsdValidatingInstanceReader; class VariableLoader; }; @@ -79,8 +81,11 @@ class Q_XMLPATTERNS_EXPORT QXmlQuery public: enum QueryLanguage { - XQuery10 = 1, - XSLT20 = 2 + XQuery10 = 1, + XSLT20 = 2, + XmlSchema11IdentityConstraintSelector = 1024, + XmlSchema11IdentityConstraintField = 2048, + XPath20 = 4096 }; QXmlQuery(); @@ -136,6 +141,8 @@ private: friend class QXmlName; friend class QXmlSerializer; friend class QPatternistSDK::TestCase; + friend class QPatternist::XsdSchemaParser; + friend class QPatternist::XsdValidatingInstanceReader; friend class QPatternist::VariableLoader; template<typename TInputType> friend bool setFocusHelper(QXmlQuery *const queryInstance, const TInputType &focusValue); diff --git a/src/xmlpatterns/api/qxmlquery_p.h b/src/xmlpatterns/api/qxmlquery_p.h index 05222be..cb2bbad 100644 --- a/src/xmlpatterns/api/qxmlquery_p.h +++ b/src/xmlpatterns/api/qxmlquery_p.h @@ -142,13 +142,10 @@ public: if(!m_functionFactory) { - if(queryLanguage == QXmlQuery::XQuery10) - m_functionFactory = QPatternist::FunctionFactoryCollection::xpath20Factory(namePool.d); - else - { - Q_ASSERT(queryLanguage == QXmlQuery::XSLT20); + if(queryLanguage == QXmlQuery::XSLT20) m_functionFactory = QPatternist::FunctionFactoryCollection::xslt20Factory(namePool.d); - } + else + m_functionFactory = QPatternist::FunctionFactoryCollection::xpath20Factory(namePool.d); } const QPatternist::GenericStaticContext::Ptr genericStaticContext(new QPatternist::GenericStaticContext(namePool.d, @@ -164,6 +161,14 @@ public: if(!contextItem.isNull()) m_staticContext = QPatternist::StaticContext::Ptr(new QPatternist::StaticFocusContext(QPatternist::AtomicValue::qtToXDMType(contextItem), m_staticContext)); + else if( queryLanguage == QXmlQuery::XmlSchema11IdentityConstraintField + || queryLanguage == QXmlQuery::XmlSchema11IdentityConstraintSelector + || queryLanguage == QXmlQuery::XPath20) + m_staticContext = QPatternist::StaticContext::Ptr(new QPatternist::StaticFocusContext(QPatternist::BuiltinTypes::node, m_staticContext)); + + for (int i = 0; i < m_additionalNamespaceBindings.count(); ++i) { + m_staticContext->namespaceBindings()->addBinding(m_additionalNamespaceBindings.at(i)); + } return m_staticContext; } @@ -207,19 +212,6 @@ public: return m_resourceLoader; } - - static inline QUrl normalizeQueryURI(const QUrl &uri) - { - Q_ASSERT_X(uri.isEmpty() || uri.isValid(), Q_FUNC_INFO, - "The URI passed to QXmlQuery::setQuery() must be valid or empty."); - if(uri.isEmpty()) - return QUrl::fromLocalFile(QCoreApplication::applicationFilePath()); - else if(uri.isRelative()) - return QUrl::fromLocalFile(QCoreApplication::applicationFilePath()).resolved(uri); - else - return uri; - } - void setRequiredType(const QPatternist::SequenceType::Ptr &seqType) { Q_ASSERT(seqType); @@ -278,6 +270,11 @@ public: return m_expr; } + inline void addAdditionalNamespaceBinding(const QXmlName &binding) + { + m_additionalNamespaceBindings.append(binding); + } + QXmlNamePool namePool; QPointer<QAbstractMessageHandler> messageHandler; /** @@ -321,6 +318,8 @@ public: QPatternist::SequenceType::Ptr m_requiredType; QPatternist::FunctionFactory::Ptr m_functionFactory; QPatternist::NetworkAccessDelegator::Ptr m_networkAccessDelegator; + + QList<QXmlName> m_additionalNamespaceBindings; }; QT_END_NAMESPACE diff --git a/src/xmlpatterns/api/qxmlschema.cpp b/src/xmlpatterns/api/qxmlschema.cpp new file mode 100644 index 0000000..e64b388 --- /dev/null +++ b/src/xmlpatterns/api/qxmlschema.cpp @@ -0,0 +1,299 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxmlschema.h" +#include "qxmlschema_p.h" + +#include <QtCore/QIODevice> +#include <QtCore/QUrl> + +QT_BEGIN_NAMESPACE + +/*! + \class QXmlSchema + + \brief The QXmlSchema class provides loading and validation of a W3C XML Schema. + + \reentrant + \since 4.6 + \ingroup xml-tools + + The QXmlSchema class loads, compiles and validates W3C XML Schema files + that can be used further for validation of XML instance documents via + \l{QXmlSchemaValidator}. + + The following example shows how to load a XML Schema file from the network + and test whether it is a valid schema document: + + \snippet doc/src/snippets/qxmlschema/main.cpp 0 + + \sa QXmlSchemaValidator, {xmlpatterns/schema}{XML Schema Validation Example} +*/ + +/*! + Constructs an invalid, empty schema that cannot be used until + load() is called. + */ +QXmlSchema::QXmlSchema() + : d(new QXmlSchemaPrivate(QXmlNamePool())) +{ +} + +/*! + Constructs a QXmlSchema that is a copy of \a other. The new + instance will share resources with the existing schema + to the extent possible. + */ +QXmlSchema::QXmlSchema(const QXmlSchema &other) + : d(other.d) +{ +} + +/*! + Destroys this QXmlSchema. + */ +QXmlSchema::~QXmlSchema() +{ +} + +/*! + Sets this QXmlSchema to a schema loaded from the \a source + URI. + + If the schema \l {isValid()} {is invalid}, \c{false} is returned + and the behavior is undefined. + + Example: + + \snippet doc/src/snippets/qxmlschema/main.cpp 0 + + \sa isValid() + */ +bool QXmlSchema::load(const QUrl &source) +{ + d->load(source, QString()); + return d->isValid(); +} + +/*! + Sets this QXmlSchema to a schema read from the \a source + device. The device must have been opened with at least + QIODevice::ReadOnly. + + \a documentUri represents the schema obtained from the \a source + device. It is the base URI of the schema, that is used + internally to resolve relative URIs that appear in the schema, and + for message reporting. + + If \a source is \c null or not readable, or if \a documentUri is not + a valid URI, behavior is undefined. + + If the schema \l {isValid()} {is invalid}, \c{false} is returned + and the behavior is undefined. + + Example: + + \snippet doc/src/snippets/qxmlschema/main.cpp 1 + + \sa isValid() + */ +bool QXmlSchema::load(QIODevice *source, const QUrl &documentUri) +{ + d->load(source, documentUri, QString()); + return d->isValid(); +} + +/*! + Sets this QXmlSchema to a schema read from the \a data + + \a documentUri represents the schema obtained from the \a data. + It is the base URI of the schema, that is used internally to + resolve relative URIs that appear in the schema, and + for message reporting. + + If \a documentUri is not a valid URI, behavior is undefined. + \sa isValid() + + If the schema \l {isValid()} {is invalid}, \c{false} is returned + and the behavior is undefined. + + Example: + + \snippet doc/src/snippets/qxmlschema/main.cpp 2 + + \sa isValid() + */ +bool QXmlSchema::load(const QByteArray &data, const QUrl &documentUri) +{ + d->load(data, documentUri, QString()); + return d->isValid(); +} + +/*! + Returns true if this schema is valid. Examples of invalid schemas + are ones that contain syntax errors or that do not conform the + W3C XML Schema specification. + */ +bool QXmlSchema::isValid() const +{ + return d->isValid(); +} + +/*! + Returns the name pool used by this QXmlSchema for constructing \l + {QXmlName} {names}. There is no setter for the name pool, because + mixing name pools causes errors due to name confusion. + */ +QXmlNamePool QXmlSchema::namePool() const +{ + return d->namePool(); +} + +/*! + Returns the document URI of the schema or an empty URI if no + schema has been set. + */ +QUrl QXmlSchema::documentUri() const +{ + return d->documentUri(); +} + +/*! + Changes the \l {QAbstractMessageHandler}{message handler} for this + QXmlSchema to \a handler. The schema sends all compile and + validation messages to this message handler. QXmlSchema does not take + ownership of \a handler. + + Normally, the default message handler is sufficient. It writes + compile and validation messages to \e stderr. The default message + handler includes color codes if \e stderr can render colors. + + When QXmlSchema calls QAbstractMessageHandler::message(), + the arguments are as follows: + + \table + \header + \o message() argument + \o Semantics + \row + \o QtMsgType type + \o Only QtWarningMsg and QtFatalMsg are used. The former + identifies a warning, while the latter identifies an error. + \row + \o const QString & description + \o An XHTML document which is the actual message. It is translated + into the current language. + \row + \o const QUrl &identifier + \o Identifies the error with a URI, where the fragment is + the error code, and the rest of the URI is the error namespace. + \row + \o const QSourceLocation & sourceLocation + \o Identifies where the error occurred. + \endtable + + */ +void QXmlSchema::setMessageHandler(QAbstractMessageHandler *handler) +{ + d->setMessageHandler(handler); +} + +/*! + Returns the message handler that handles compile and validation + messages for this QXmlSchema. + */ +QAbstractMessageHandler *QXmlSchema::messageHandler() const +{ + return d->messageHandler(); +} + +/*! + Sets the URI resolver to \a resolver. QXmlSchema does not take + ownership of \a resolver. + + \sa uriResolver() + */ +void QXmlSchema::setUriResolver(const QAbstractUriResolver *resolver) +{ + d->setUriResolver(resolver); +} + +/*! + Returns the schema's URI resolver. If no URI resolver has been set, + QtXmlPatterns will use the URIs in schemas as they are. + + The URI resolver provides a level of abstraction, or \e{polymorphic + URIs}. A resolver can rewrite \e{logical} URIs to physical ones, or + it can translate obsolete or invalid URIs to valid ones. + + When QtXmlPatterns calls QAbstractUriResolver::resolve() the + absolute URI is the URI mandated by the schema specification, and the + relative URI is the URI specified by the user. + + \sa setUriResolver() + */ +const QAbstractUriResolver *QXmlSchema::uriResolver() const +{ + return d->uriResolver(); +} + +/*! + Sets the network manager to \a manager. + QXmlSchema does not take ownership of \a manager. + + \sa networkAccessManager() + */ +void QXmlSchema::setNetworkAccessManager(QNetworkAccessManager *manager) +{ + d->setNetworkAccessManager(manager); +} + +/*! + Returns the network manager, or 0 if it has not been set. + + \sa setNetworkAccessManager() + */ +QNetworkAccessManager *QXmlSchema::networkAccessManager() const +{ + return d->networkAccessManager(); +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/api/qxmlschema.h b/src/xmlpatterns/api/qxmlschema.h new file mode 100644 index 0000000..b6ac010 --- /dev/null +++ b/src/xmlpatterns/api/qxmlschema.h @@ -0,0 +1,97 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QXMLSCHEMA_H +#define QXMLSCHEMA_H + +#include <QtCore/QSharedDataPointer> +#include <QtCore/QUrl> +#include <QtXmlPatterns/QXmlNamePool> + +QT_BEGIN_HEADER +QT_BEGIN_NAMESPACE + +QT_MODULE(XmlPatterns) + +class QAbstractMessageHandler; +class QAbstractUriResolver; +class QIODevice; +class QNetworkAccessManager; +class QUrl; +class QXmlNamePool; +class QXmlSchemaPrivate; + +class Q_XMLPATTERNS_EXPORT QXmlSchema +{ + friend class QXmlSchemaValidatorPrivate; + + public: + QXmlSchema(); + QXmlSchema(const QXmlSchema &other); + ~QXmlSchema(); + + bool load(const QUrl &source); + bool load(QIODevice *source, const QUrl &documentUri = QUrl()); + bool load(const QByteArray &data, const QUrl &documentUri = QUrl()); + + bool isValid() const; + + QXmlNamePool namePool() const; + QUrl documentUri() const; + + void setMessageHandler(QAbstractMessageHandler *handler); + QAbstractMessageHandler *messageHandler() const; + + void setUriResolver(const QAbstractUriResolver *resolver); + const QAbstractUriResolver *uriResolver() const; + + void setNetworkAccessManager(QNetworkAccessManager *networkmanager); + QNetworkAccessManager *networkAccessManager() const; + + private: + QSharedDataPointer<QXmlSchemaPrivate> d; +}; + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/api/qxmlschema_p.cpp b/src/xmlpatterns/api/qxmlschema_p.cpp new file mode 100644 index 0000000..2dad359 --- /dev/null +++ b/src/xmlpatterns/api/qxmlschema_p.cpp @@ -0,0 +1,203 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qacceltreeresourceloader_p.h" +#include "qxmlschema.h" +#include "qxmlschema_p.h" + +#include <QtCore/QBuffer> +#include <QtCore/QIODevice> +#include <QtCore/QUrl> + +QT_BEGIN_NAMESPACE + +QXmlSchemaPrivate::QXmlSchemaPrivate(const QXmlNamePool &namePool) + : m_namePool(namePool) + , m_userMessageHandler(0) + , m_uriResolver(0) + , m_userNetworkAccessManager(0) + , m_schemaContext(new QPatternist::XsdSchemaContext(m_namePool.d)) + , m_schemaParserContext(new QPatternist::XsdSchemaParserContext(m_namePool.d, m_schemaContext)) + , m_schemaIsValid(false) +{ + m_networkAccessManager = new QPatternist::ReferenceCountedValue<QNetworkAccessManager>(new QNetworkAccessManager()); + m_messageHandler = new QPatternist::ReferenceCountedValue<QAbstractMessageHandler>(new QPatternist::ColoringMessageHandler()); +} + +QXmlSchemaPrivate::QXmlSchemaPrivate(const QPatternist::XsdSchemaContext::Ptr &schemaContext) + : m_namePool(QXmlNamePool(schemaContext->namePool().data())) + , m_userMessageHandler(0) + , m_uriResolver(0) + , m_userNetworkAccessManager(0) + , m_schemaContext(schemaContext) + , m_schemaParserContext(new QPatternist::XsdSchemaParserContext(m_namePool.d, m_schemaContext)) + , m_schemaIsValid(false) +{ + m_networkAccessManager = new QPatternist::ReferenceCountedValue<QNetworkAccessManager>(new QNetworkAccessManager()); + m_messageHandler = new QPatternist::ReferenceCountedValue<QAbstractMessageHandler>(new QPatternist::ColoringMessageHandler()); +} + +QXmlSchemaPrivate::QXmlSchemaPrivate(const QXmlSchemaPrivate &other) + : QSharedData(other) +{ + m_namePool = other.m_namePool; + m_userMessageHandler = other.m_userMessageHandler; + m_uriResolver = other.m_uriResolver; + m_userNetworkAccessManager = other.m_userNetworkAccessManager; + m_messageHandler = other.m_messageHandler; + m_networkAccessManager = other.m_networkAccessManager; + + m_schemaContext = other.m_schemaContext; + m_schemaParserContext = other.m_schemaParserContext; + m_schemaIsValid = other.m_schemaIsValid; + m_documentUri = other.m_documentUri; +} + +void QXmlSchemaPrivate::load(const QUrl &source, const QString &targetNamespace) +{ + m_documentUri = QPatternist::XPathHelper::normalizeQueryURI(source); + + m_schemaContext->setMessageHandler(messageHandler()); + m_schemaContext->setUriResolver(uriResolver()); + m_schemaContext->setNetworkAccessManager(networkAccessManager()); + + const QPatternist::AutoPtr<QNetworkReply> reply(QPatternist::AccelTreeResourceLoader::load(source, m_schemaContext->networkAccessManager(), + m_schemaContext, QPatternist::AccelTreeResourceLoader::ContinueOnError)); + if (reply) + load(reply.data(), source, targetNamespace); +} + +void QXmlSchemaPrivate::load(const QByteArray &data, const QUrl &documentUri, const QString &targetNamespace) +{ + QByteArray localData(data); + + QBuffer buffer(&localData); + buffer.open(QIODevice::ReadOnly); + + load(&buffer, documentUri, targetNamespace); +} + +void QXmlSchemaPrivate::load(QIODevice *source, const QUrl &documentUri, const QString &targetNamespace) +{ + m_schemaParserContext = QPatternist::XsdSchemaParserContext::Ptr(new QPatternist::XsdSchemaParserContext(m_namePool.d, m_schemaContext)); + m_schemaIsValid = false; + + if (!source) { + qWarning("A null QIODevice pointer cannot be passed."); + return; + } + + if (!source->isReadable()) { + qWarning("The device must be readable."); + return; + } + + m_documentUri = QPatternist::XPathHelper::normalizeQueryURI(documentUri); + m_schemaContext->setMessageHandler(messageHandler()); + m_schemaContext->setUriResolver(uriResolver()); + m_schemaContext->setNetworkAccessManager(networkAccessManager()); + + QPatternist::XsdSchemaParser parser(m_schemaContext, m_schemaParserContext, source); + parser.setDocumentURI(documentUri); + parser.setTargetNamespace(targetNamespace); + + try { + parser.parse(); + m_schemaParserContext->resolver()->resolve(); + + m_schemaIsValid = true; + } catch (QPatternist::Exception exception) { + m_schemaIsValid = false; + } +} + +bool QXmlSchemaPrivate::isValid() const +{ + return m_schemaIsValid; +} + +QXmlNamePool QXmlSchemaPrivate::namePool() const +{ + return m_namePool; +} + +QUrl QXmlSchemaPrivate::documentUri() const +{ + return m_documentUri; +} + +void QXmlSchemaPrivate::setMessageHandler(QAbstractMessageHandler *handler) +{ + m_userMessageHandler = handler; +} + +QAbstractMessageHandler *QXmlSchemaPrivate::messageHandler() const +{ + if (m_userMessageHandler) + return m_userMessageHandler; + + return m_messageHandler.data()->value; +} + +void QXmlSchemaPrivate::setUriResolver(const QAbstractUriResolver *resolver) +{ + m_uriResolver = resolver; +} + +const QAbstractUriResolver *QXmlSchemaPrivate::uriResolver() const +{ + return m_uriResolver; +} + +void QXmlSchemaPrivate::setNetworkAccessManager(QNetworkAccessManager *networkmanager) +{ + m_userNetworkAccessManager = networkmanager; +} + +QNetworkAccessManager *QXmlSchemaPrivate::networkAccessManager() const +{ + if (m_userNetworkAccessManager) + return m_userNetworkAccessManager; + + return m_networkAccessManager.data()->value; +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/api/qxmlschema_p.h b/src/xmlpatterns/api/qxmlschema_p.h new file mode 100644 index 0000000..be2ebb8 --- /dev/null +++ b/src/xmlpatterns/api/qxmlschema_p.h @@ -0,0 +1,109 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef QXMLSCHEMA_P_H +#define QXMLSCHEMA_P_H + +#include "qabstractmessagehandler.h" +#include "qabstracturiresolver.h" +#include "qautoptr_p.h" +#include "qcoloringmessagehandler_p.h" +#include "qreferencecountedvalue_p.h" + +#include "qxsdschemacontext_p.h" +#include "qxsdschemaparser_p.h" +#include "qxsdschemaparsercontext_p.h" + +#include <QtCore/QSharedData> +#include <QtNetwork/QNetworkAccessManager> + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +class QXmlSchemaPrivate : public QSharedData +{ + public: + QXmlSchemaPrivate(const QXmlNamePool &namePool); + QXmlSchemaPrivate(const QPatternist::XsdSchemaContext::Ptr &schemaContext); + QXmlSchemaPrivate(const QXmlSchemaPrivate &other); + + void load(const QUrl &source, const QString &targetNamespace); + void load(QIODevice *source, const QUrl &documentUri, const QString &targetNamespace); + void load(const QByteArray &data, const QUrl &documentUri, const QString &targetNamespace); + bool isValid() const; + QXmlNamePool namePool() const; + QUrl documentUri() const; + void setMessageHandler(QAbstractMessageHandler *handler); + QAbstractMessageHandler *messageHandler() const; + void setUriResolver(const QAbstractUriResolver *resolver); + const QAbstractUriResolver *uriResolver() const; + void setNetworkAccessManager(QNetworkAccessManager *networkmanager); + QNetworkAccessManager *networkAccessManager() const; + + QXmlNamePool m_namePool; + QAbstractMessageHandler* m_userMessageHandler; + const QAbstractUriResolver* m_uriResolver; + QNetworkAccessManager* m_userNetworkAccessManager; + QPatternist::ReferenceCountedValue<QAbstractMessageHandler>::Ptr m_messageHandler; + QPatternist::ReferenceCountedValue<QNetworkAccessManager>::Ptr m_networkAccessManager; + + QPatternist::XsdSchemaContext::Ptr m_schemaContext; + QPatternist::XsdSchemaParserContext::Ptr m_schemaParserContext; + bool m_schemaIsValid; + QUrl m_documentUri; +}; + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/api/qxmlschemavalidator.cpp b/src/xmlpatterns/api/qxmlschemavalidator.cpp new file mode 100644 index 0000000..a864d40 --- /dev/null +++ b/src/xmlpatterns/api/qxmlschemavalidator.cpp @@ -0,0 +1,344 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxmlschemavalidator.h" +#include "qxmlschemavalidator_p.h" + +#include "qacceltreeresourceloader_p.h" +#include "qxmlschema.h" +#include "qxmlschema_p.h" +#include "qxsdvalidatinginstancereader_p.h" + +#include <QtCore/QBuffer> +#include <QtCore/QIODevice> +#include <QtCore/QUrl> + +QT_BEGIN_NAMESPACE + +/*! + \class QXmlSchemaValidator + + \brief The QXmlSchemaValidator class validates XML instance documents against a W3C XML Schema. + + \reentrant + \since 4.6 + \ingroup xml-tools + + The QXmlSchemaValidator class loads, parses an XML instance document and validates it + against a W3C XML Schema that has been compiled with \l{QXmlSchema}. + + The following example shows how to load a XML Schema from a local + file, check whether it is a valid schema document and use it for validation + of an XML instance document: + + \snippet doc/src/snippets/qxmlschemavalidator/main.cpp 3 + + \sa QXmlSchema, {xmlpatterns/schema}{XML Schema Validation Example} +*/ + +/*! + Constructs a schema validator. + The schema used for validation must be referenced in the XML instance document + via the \c xsi:schemaLocation or \c xsi:noNamespaceSchemaLocation attribute. + */ +QXmlSchemaValidator::QXmlSchemaValidator() + : d(new QXmlSchemaValidatorPrivate(QXmlSchema())) +{ +} + +/*! + Constructs a schema validator that will use \a schema for validation. + If an empty \l {QXmlSchema} schema is passed to the validator, the schema used + for validation must be referenced in the XML instance document + via the \c xsi:schemaLocation or \c xsi:noNamespaceSchemaLocation attribute. + */ +QXmlSchemaValidator::QXmlSchemaValidator(const QXmlSchema &schema) + : d(new QXmlSchemaValidatorPrivate(schema)) +{ +} + +/*! + Destroys this QXmlSchemaValidator. + */ +QXmlSchemaValidator::~QXmlSchemaValidator() +{ + delete d; +} + +/*! + Sets the \a schema that shall be used for further validation. + If the schema is empty, the schema used for validation must be referenced + in the XML instance document via the \c xsi:schemaLocation or + \c xsi:noNamespaceSchemaLocation attribute. + */ +void QXmlSchemaValidator::setSchema(const QXmlSchema &schema) +{ + d->setSchema(schema); +} + +/*! + Validates the XML instance document read from \a data with the + given \a documentUri against the schema. + + Returns \c true if the XML instance document is valid according to the + schema, \c false otherwise. + + Example: + + \snippet doc/src/snippets/qxmlschemavalidator/main.cpp 2 + */ +bool QXmlSchemaValidator::validate(const QByteArray &data, const QUrl &documentUri) const +{ + QByteArray localData(data); + + QBuffer buffer(&localData); + buffer.open(QIODevice::ReadOnly); + + return validate(&buffer, documentUri); +} + +/*! + Validates the XML instance document read from \a source against the schema. + + Returns \c true if the XML instance document is valid according to the + schema, \c false otherwise. + + Example: + + \snippet doc/src/snippets/qxmlschemavalidator/main.cpp 0 + */ +bool QXmlSchemaValidator::validate(const QUrl &source) const +{ + d->m_context->setMessageHandler(messageHandler()); + d->m_context->setUriResolver(uriResolver()); + d->m_context->setNetworkAccessManager(networkAccessManager()); + + const QPatternist::AutoPtr<QNetworkReply> reply(QPatternist::AccelTreeResourceLoader::load(source, d->m_context->networkAccessManager(), + d->m_context, QPatternist::AccelTreeResourceLoader::ContinueOnError)); + if (reply) + return validate(reply.data(), source); + else + return false; +} + +/*! + Validates the XML instance document read from \a source with the + given \a documentUri against the schema. + + Returns \c true if the XML instance document is valid according to the + schema, \c false otherwise. + + Example: + + \snippet doc/src/snippets/qxmlschemavalidator/main.cpp 1 + */ +bool QXmlSchemaValidator::validate(QIODevice *source, const QUrl &documentUri) const +{ + if (!source) { + qWarning("A null QIODevice pointer cannot be passed."); + return false; + } + + if (!source->isReadable()) { + qWarning("The device must be readable."); + return false; + } + + const QUrl normalizedUri = QPatternist::XPathHelper::normalizeQueryURI(documentUri); + + d->m_context->setMessageHandler(messageHandler()); + d->m_context->setUriResolver(uriResolver()); + d->m_context->setNetworkAccessManager(networkAccessManager()); + + QPatternist::NetworkAccessDelegator::Ptr delegator(new QPatternist::NetworkAccessDelegator(d->m_context->networkAccessManager(), + d->m_context->networkAccessManager())); + + QPatternist::AccelTreeResourceLoader loader(d->m_context->namePool(), delegator, QPatternist::AccelTreeBuilder<true>::SourceLocationsFeature); + + QPatternist::Item item; + try { + item = loader.openDocument(source, normalizedUri, d->m_context); + } catch (QPatternist::Exception exception) { + return false; + } + + QXmlNodeModelIndex index = item.asNode(); + const QAbstractXmlNodeModel *model = item.asNode().model(); + + QPatternist::XsdValidatedXmlNodeModel *validatedModel = new QPatternist::XsdValidatedXmlNodeModel(model); + + QPatternist::XsdValidatingInstanceReader reader(validatedModel, normalizedUri, d->m_context); + if (d->m_schema) + reader.addSchema(d->m_schema, d->m_schemaDocumentUri); + try { + reader.read(); + } catch (QPatternist::Exception exception) { + return false; + } + + return true; +} + +/*! + Returns the name pool used by this QXmlSchemaValidator for constructing \l + {QXmlName} {names}. There is no setter for the name pool, because + mixing name pools causes errors due to name confusion. + */ +QXmlNamePool QXmlSchemaValidator::namePool() const +{ + return d->m_namePool; +} + +/*! + Returns the schema that is used for validation. + */ +QXmlSchema QXmlSchemaValidator::schema() const +{ + return d->m_originalSchema; +} + +/*! + Changes the \l {QAbstractMessageHandler}{message handler} for this + QXmlSchemaValidator to \a handler. The schema validator sends all parsing and + validation messages to this message handler. QXmlSchemaValidator does not take + ownership of \a handler. + + Normally, the default message handler is sufficient. It writes + compile and validation messages to \e stderr. The default message + handler includes color codes if \e stderr can render colors. + + When QXmlSchemaValidator calls QAbstractMessageHandler::message(), + the arguments are as follows: + + \table + \header + \o message() argument + \o Semantics + \row + \o QtMsgType type + \o Only QtWarningMsg and QtFatalMsg are used. The former + identifies a warning, while the latter identifies an error. + \row + \o const QString & description + \o An XHTML document which is the actual message. It is translated + into the current language. + \row + \o const QUrl &identifier + \o Identifies the error with a URI, where the fragment is + the error code, and the rest of the URI is the error namespace. + \row + \o const QSourceLocation & sourceLocation + \o Identifies where the error occurred. + \endtable + + */ +void QXmlSchemaValidator::setMessageHandler(QAbstractMessageHandler *handler) +{ + d->m_userMessageHandler = handler; +} + +/*! + Returns the message handler that handles parsing and validation + messages for this QXmlSchemaValidator. + */ +QAbstractMessageHandler *QXmlSchemaValidator::messageHandler() const +{ + if (d->m_userMessageHandler) + return d->m_userMessageHandler; + + return d->m_messageHandler.data()->value; +} + +/*! + Sets the URI resolver to \a resolver. QXmlSchemaValidator does not take + ownership of \a resolver. + + \sa uriResolver() + */ +void QXmlSchemaValidator::setUriResolver(const QAbstractUriResolver *resolver) +{ + d->m_uriResolver = resolver; +} + +/*! + Returns the schema's URI resolver. If no URI resolver has been set, + QtXmlPatterns will use the URIs in instance documents as they are. + + The URI resolver provides a level of abstraction, or \e{polymorphic + URIs}. A resolver can rewrite \e{logical} URIs to physical ones, or + it can translate obsolete or invalid URIs to valid ones. + + When QtXmlPatterns calls QAbstractUriResolver::resolve() the + absolute URI is the URI mandated by the schema specification, and the + relative URI is the URI specified by the user. + + \sa setUriResolver() + */ +const QAbstractUriResolver *QXmlSchemaValidator::uriResolver() const +{ + return d->m_uriResolver; +} + +/*! + Sets the network manager to \a manager. + QXmlSchemaValidator does not take ownership of \a manager. + + \sa networkAccessManager() + */ +void QXmlSchemaValidator::setNetworkAccessManager(QNetworkAccessManager *manager) +{ + d->m_userNetworkAccessManager = manager; +} + +/*! + Returns the network manager, or 0 if it has not been set. + + \sa setNetworkAccessManager() + */ +QNetworkAccessManager *QXmlSchemaValidator::networkAccessManager() const +{ + if (d->m_userNetworkAccessManager) + return d->m_userNetworkAccessManager; + + return d->m_networkAccessManager.data()->value; +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/api/qxmlschemavalidator.h b/src/xmlpatterns/api/qxmlschemavalidator.h new file mode 100644 index 0000000..f32ac07 --- /dev/null +++ b/src/xmlpatterns/api/qxmlschemavalidator.h @@ -0,0 +1,97 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QXMLSCHEMAVALIDATOR_H +#define QXMLSCHEMAVALIDATOR_H + +#include <QtCore/QUrl> +#include <QtXmlPatterns/QXmlNamePool> + +QT_BEGIN_HEADER +QT_BEGIN_NAMESPACE + +QT_MODULE(XmlPatterns) + +class QAbstractMessageHandler; +class QAbstractUriResolver; +class QIODevice; +class QNetworkAccessManager; +class QUrl; +class QXmlNamePool; +class QXmlSchema; +class QXmlSchemaValidatorPrivate; + +class Q_XMLPATTERNS_EXPORT QXmlSchemaValidator +{ + public: + QXmlSchemaValidator(); + QXmlSchemaValidator(const QXmlSchema &schema); + ~QXmlSchemaValidator(); + + void setSchema(const QXmlSchema &schema); + + bool validate(const QUrl &source) const; + bool validate(QIODevice *source, const QUrl &documentUri = QUrl()) const; + bool validate(const QByteArray &data, const QUrl &documentUri = QUrl()) const; + + QXmlNamePool namePool() const; + QXmlSchema schema() const; + + void setMessageHandler(QAbstractMessageHandler *handler); + QAbstractMessageHandler *messageHandler() const; + + void setUriResolver(const QAbstractUriResolver *resolver); + const QAbstractUriResolver *uriResolver() const; + + void setNetworkAccessManager(QNetworkAccessManager *networkmanager); + QNetworkAccessManager *networkAccessManager() const; + + private: + QXmlSchemaValidatorPrivate* const d; + + Q_DISABLE_COPY(QXmlSchemaValidator) +}; + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/api/qxmlschemavalidator_p.h b/src/xmlpatterns/api/qxmlschemavalidator_p.h new file mode 100644 index 0000000..40dbefc --- /dev/null +++ b/src/xmlpatterns/api/qxmlschemavalidator_p.h @@ -0,0 +1,131 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef QXMLSCHEMAVALIDATOR_P_H +#define QXMLSCHEMAVALIDATOR_P_H + +#include "qabstractmessagehandler.h" +#include "qabstracturiresolver.h" +#include "qautoptr_p.h" +#include "qcoloringmessagehandler_p.h" +#include "qxmlschema.h" +#include "qxmlschema_p.h" + +#include "qxsdschemacontext_p.h" +#include "qxsdschema_p.h" + +#include <QtNetwork/QNetworkAccessManager> + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +class QXmlSchemaValidatorPrivate +{ +public: + QXmlSchemaValidatorPrivate(const QXmlSchema &schema) + : m_namePool(schema.namePool()) + , m_userMessageHandler(0) + , m_uriResolver(0) + , m_userNetworkAccessManager(0) + { + setSchema(schema); + + const QXmlSchemaPrivate *p = schema.d; + + // initialize the environment properties with the ones from the schema + + if (p->m_userNetworkAccessManager) // schema has user defined network access manager + m_userNetworkAccessManager = p->m_userNetworkAccessManager; + else + m_networkAccessManager = p->m_networkAccessManager; + + if (p->m_userMessageHandler) // schema has user defined message handler + m_userMessageHandler = p->m_userMessageHandler; + else + m_messageHandler = p->m_messageHandler; + + m_uriResolver = p->m_uriResolver; + } + + void setSchema(const QXmlSchema &schema) + { + // use same name pool as the schema + m_namePool = schema.namePool(); + m_schema = schema.d->m_schemaParserContext->schema(); + m_schemaDocumentUri = schema.documentUri(); + + // create a new schema context + m_context = QPatternist::XsdSchemaContext::Ptr(new QPatternist::XsdSchemaContext(m_namePool.d)); + m_context->m_schemaTypeFactory = schema.d->m_schemaContext->m_schemaTypeFactory; + m_context->m_builtinTypesFacetList = schema.d->m_schemaContext->m_builtinTypesFacetList; + + m_originalSchema = schema; + } + + QXmlNamePool m_namePool; + QAbstractMessageHandler* m_userMessageHandler; + const QAbstractUriResolver* m_uriResolver; + QNetworkAccessManager* m_userNetworkAccessManager; + QPatternist::ReferenceCountedValue<QAbstractMessageHandler>::Ptr m_messageHandler; + QPatternist::ReferenceCountedValue<QNetworkAccessManager>::Ptr m_networkAccessManager; + + QXmlSchema m_originalSchema; + QPatternist::XsdSchemaContext::Ptr m_context; + QPatternist::XsdSchema::Ptr m_schema; + QUrl m_schemaDocumentUri; +}; + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/common.pri b/src/xmlpatterns/common.pri index 2573a26..27253d8 100644 --- a/src/xmlpatterns/common.pri +++ b/src/xmlpatterns/common.pri @@ -10,6 +10,7 @@ INCLUDEPATH += $$PWD/acceltree \ $$PWD/iterators \ $$PWD/janitors \ $$PWD/parser \ + $$PWD/schema \ $$PWD/type \ $$PWD/utils diff --git a/src/xmlpatterns/data/data.pri b/src/xmlpatterns/data/data.pri index 99591d4..ccfed42 100644 --- a/src/xmlpatterns/data/data.pri +++ b/src/xmlpatterns/data/data.pri @@ -1,8 +1,8 @@ HEADERS += $$PWD/qabstractdatetime_p.h \ $$PWD/qabstractduration_p.h \ $$PWD/qabstractfloatcasters_p.h \ - $$PWD/qabstractfloat_p.h \ $$PWD/qabstractfloatmathematician_p.h \ + $$PWD/qabstractfloat_p.h \ $$PWD/qanyuri_p.h \ $$PWD/qatomiccaster_p.h \ $$PWD/qatomiccasters_p.h \ @@ -14,8 +14,8 @@ HEADERS += $$PWD/qabstractdatetime_p.h \ $$PWD/qbase64binary_p.h \ $$PWD/qboolean_p.h \ $$PWD/qcommonvalues_p.h \ + $$PWD/qcomparisonfactory_p.h \ $$PWD/qdate_p.h \ - $$PWD/qschemadatetime_p.h \ $$PWD/qdaytimeduration_p.h \ $$PWD/qdecimal_p.h \ $$PWD/qderivedinteger_p.h \ @@ -24,19 +24,21 @@ HEADERS += $$PWD/qabstractdatetime_p.h \ $$PWD/qgday_p.h \ $$PWD/qgmonthday_p.h \ $$PWD/qgmonth_p.h \ - $$PWD/qgyear_p.h \ $$PWD/qgyearmonth_p.h \ + $$PWD/qgyear_p.h \ $$PWD/qhexbinary_p.h \ $$PWD/qinteger_p.h \ $$PWD/qitem_p.h \ $$PWD/qnodebuilder_p.h \ - $$PWD/qschemanumeric_p.h \ $$PWD/qqnamevalue_p.h \ $$PWD/qresourceloader_p.h \ - $$PWD/qsorttuple.cpp \ + $$PWD/qschemadatetime_p.h \ + $$PWD/qschemanumeric_p.h \ $$PWD/qschematime_p.h \ + $$PWD/qsorttuple.cpp \ $$PWD/quntypedatomic_p.h \ $$PWD/qvalidationerror_p.h \ + $$PWD/qvaluefactory_p.h \ $$PWD/qyearmonthduration_p.h SOURCES += $$PWD/qabstractdatetime.cpp \ @@ -53,8 +55,8 @@ SOURCES += $$PWD/qabstractdatetime.cpp \ $$PWD/qbase64binary.cpp \ $$PWD/qboolean.cpp \ $$PWD/qcommonvalues.cpp \ + $$PWD/qcomparisonfactory.cpp \ $$PWD/qdate.cpp \ - $$PWD/qschemadatetime.cpp \ $$PWD/qdaytimeduration.cpp \ $$PWD/qdecimal.cpp \ $$PWD/qduration.cpp \ @@ -68,11 +70,13 @@ SOURCES += $$PWD/qabstractdatetime.cpp \ $$PWD/qitem.cpp \ $$PWD/qnodebuilder.cpp \ $$PWD/qnodemodel.cpp \ - $$PWD/qschemanumeric.cpp \ $$PWD/qqnamevalue.cpp \ $$PWD/qresourceloader.cpp \ - $$PWD/qsorttuple.cpp \ + $$PWD/qschemadatetime.cpp \ + $$PWD/qschemanumeric.cpp \ $$PWD/qschematime.cpp \ + $$PWD/qsorttuple.cpp \ $$PWD/quntypedatomic.cpp \ $$PWD/qvalidationerror.cpp \ + $$PWD/qvaluefactory.cpp \ $$PWD/qyearmonthduration.cpp diff --git a/src/xmlpatterns/data/qboolean.cpp b/src/xmlpatterns/data/qboolean.cpp index 07562fd..bb4ece1 100644 --- a/src/xmlpatterns/data/qboolean.cpp +++ b/src/xmlpatterns/data/qboolean.cpp @@ -76,7 +76,7 @@ bool Boolean::evaluateEBV(const Item &first, { Q_ASSERT(context); context->error(QtXmlPatterns::tr("Effective Boolean Value cannot be calculated for a sequence " - "containing two or more atomic values."), + "containing two or more atomic values."), ReportContext::FORG0006, QSourceLocation()); return false; diff --git a/src/xmlpatterns/data/qcomparisonfactory.cpp b/src/xmlpatterns/data/qcomparisonfactory.cpp new file mode 100644 index 0000000..c22d9e7 --- /dev/null +++ b/src/xmlpatterns/data/qcomparisonfactory.cpp @@ -0,0 +1,154 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qatomiccomparators_p.h" +#include "qatomicstring_p.h" +#include "qcomparisonplatform_p.h" +#include "qvaluefactory_p.h" + +#include "qcomparisonfactory_p.h" + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +/** + * @short Helper class for ComparisonFactory::fromLexical() which exposes + * CastingPlatform appropriately. + * + * @relates ComparisonFactory + */ +class PerformComparison : public ComparisonPlatform<PerformComparison, true> + , public SourceLocationReflection +{ +public: + PerformComparison(const SourceLocationReflection *const sourceLocationReflection, + const AtomicComparator::Operator op) : m_sourceReflection(sourceLocationReflection) + , m_operator(op) + { + Q_ASSERT(m_sourceReflection); + } + + bool operator()(const AtomicValue::Ptr &operand1, + const AtomicValue::Ptr &operand2, + const SchemaType::Ptr &type, + const ReportContext::Ptr &context) + { + const ItemType::Ptr asItemType((AtomicType::Ptr(type))); + + /* One area where the Query Transform world differs from the Schema + * world is that @c xs:duration is not considedered comparable, because + * it's according to Schema is partially comparable. This means + * ComparisonPlatform::fetchComparator() flags it as impossible, and + * hence we need to override that. + * + * SchemaType::wxsTypeMatches() will return true for sub-types of @c + * xs:duration as well, but that's ok since AbstractDurationComparator + * works for them too. */ + if(BuiltinTypes::xsDuration->wxsTypeMatches(type)) + prepareComparison(AtomicComparator::Ptr(new AbstractDurationComparator())); + else if (BuiltinTypes::xsGYear->wxsTypeMatches(type) || + BuiltinTypes::xsGYearMonth->wxsTypeMatches(type) || + BuiltinTypes::xsGMonth->wxsTypeMatches(type) || + BuiltinTypes::xsGMonthDay->wxsTypeMatches(type) || + BuiltinTypes::xsGDay->wxsTypeMatches(type)) + prepareComparison(AtomicComparator::Ptr(new AbstractDateTimeComparator())); + else + prepareComparison(fetchComparator(asItemType, asItemType, context)); + + return flexibleCompare(operand1, operand2, context); + } + + const SourceLocationReflection *actualReflection() const + { + return m_sourceReflection; + } + + AtomicComparator::Operator operatorID() const + { + return m_operator; + } + +private: + const SourceLocationReflection *const m_sourceReflection; + const AtomicComparator::Operator m_operator; +}; + +bool ComparisonFactory::compare(const AtomicValue::Ptr &operand1, + const AtomicComparator::Operator op, + const AtomicValue::Ptr &operand2, + const SchemaType::Ptr &type, + const ReportContext::Ptr &context, + const SourceLocationReflection *const sourceLocationReflection) +{ + Q_ASSERT(operand1); + Q_ASSERT(operand2); + Q_ASSERT(context); + Q_ASSERT(sourceLocationReflection); + Q_ASSERT(type); + Q_ASSERT_X(type->category() == SchemaType::SimpleTypeAtomic, Q_FUNC_INFO, + "We can only compare atomic values."); + + return PerformComparison(sourceLocationReflection, op)(operand1, operand2, type, context); +} + +bool ComparisonFactory::constructAndCompare(const DerivedString<TypeString>::Ptr &operand1, + const AtomicComparator::Operator op, + const DerivedString<TypeString>::Ptr &operand2, + const SchemaType::Ptr &type, + const ReportContext::Ptr &context, + const SourceLocationReflection *const sourceLocationReflection) +{ + Q_ASSERT(operand1); + Q_ASSERT(operand2); + Q_ASSERT(context); + Q_ASSERT(sourceLocationReflection); + Q_ASSERT(type); + Q_ASSERT_X(type->category() == SchemaType::SimpleTypeAtomic, Q_FUNC_INFO, + "We can only compare atomic values."); + + const AtomicValue::Ptr value1 = ValueFactory::fromLexical(operand1->stringValue(), type, context, sourceLocationReflection); + const AtomicValue::Ptr value2 = ValueFactory::fromLexical(operand2->stringValue(), type, context, sourceLocationReflection); + + return compare(value1, op, value2, type, context, sourceLocationReflection); +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/data/qcomparisonfactory_p.h b/src/xmlpatterns/data/qcomparisonfactory_p.h new file mode 100644 index 0000000..1234548 --- /dev/null +++ b/src/xmlpatterns/data/qcomparisonfactory_p.h @@ -0,0 +1,121 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_ComparisonFactory_H +#define Patternist_ComparisonFactory_H + +#include "qatomiccomparator_p.h" +#include "qderivedstring_p.h" +#include "qitem_p.h" +#include "qreportcontext_p.h" +#include "qschematype_p.h" + +QT_BEGIN_HEADER +QT_BEGIN_NAMESPACE + +namespace QPatternist +{ + /** + * @short Provides compare(), which is a high-level helper function for + * comparing atomic values. + * + * This class wraps the helper class ComparisonPlatform with a more specific, + * high-level API. + * + * @see ComparisonPlatform + * @author Frans Englich <fenglich@trolltech.com> + * @ingroup Patternist_schema + */ + class ComparisonFactory + { + public: + /** + * @short Returns the result of evaluating operator @p op applied to the atomic + * values @p operand1 and @p operand2. + * + * The caller guarantees that both values are of type @p type. + * + * ComparisonFactory does not take ownership of @p sourceLocationReflection. + */ + static bool compare(const AtomicValue::Ptr &operand1, + const AtomicComparator::Operator op, + const AtomicValue::Ptr &operand2, + const SchemaType::Ptr &type, + const ReportContext::Ptr &context, + const SourceLocationReflection *const sourceLocationReflection); + + /** + * @short Returns the result of evaluating operator @p op applied to the atomic + * values @p operand1 and @p operand2. + * + * In opposite to compare() it converts the operands from string type + * to @p type and compares these constructed types. + * + * The caller guarantees that both values are of type @p type. + * + * ComparisonFactory does not take ownership of @p sourceLocationReflection. + */ + static bool constructAndCompare(const DerivedString<TypeString>::Ptr &operand1, + const AtomicComparator::Operator op, + const DerivedString<TypeString>::Ptr &operand2, + const SchemaType::Ptr &type, + const ReportContext::Ptr &context, + const SourceLocationReflection *const sourceLocationReflection); + + private: + Q_DISABLE_COPY(ComparisonFactory) + }; +} + +QT_END_NAMESPACE +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/data/qitem_p.h b/src/xmlpatterns/data/qitem_p.h index 1f50072..60c8510 100644 --- a/src/xmlpatterns/data/qitem_p.h +++ b/src/xmlpatterns/data/qitem_p.h @@ -128,6 +128,11 @@ namespace QPatternist typedef QExplicitlySharedDataPointer<AtomicValue> Ptr; /** + * A list if smart pointers wrapping AtomicValue instances. + */ + typedef QList<AtomicValue::Ptr> List; + + /** * Determines whether this atomic value has an error. This is used * for implementing casting. * diff --git a/src/xmlpatterns/data/qvaluefactory.cpp b/src/xmlpatterns/data/qvaluefactory.cpp new file mode 100644 index 0000000..63307c2 --- /dev/null +++ b/src/xmlpatterns/data/qvaluefactory.cpp @@ -0,0 +1,106 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qatomiccaster_p.h" +#include "qatomicstring_p.h" +#include "qcastingplatform_p.h" +#include "qvaluefactory_p.h" + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +/** + * @short Helper class for ValueFactory::fromLexical() which exposes + * CastingPlatform appropriately. + * + * @relates ValueFactory + */ +class PerformValueConstruction : public CastingPlatform<PerformValueConstruction, false> + , public SourceLocationReflection +{ +public: + PerformValueConstruction(const SourceLocationReflection *const sourceLocationReflection, + const SchemaType::Ptr &toType) : m_sourceReflection(sourceLocationReflection) + , m_targetType(AtomicType::Ptr(toType)) + { + Q_ASSERT(m_sourceReflection); + } + + AtomicValue::Ptr operator()(const AtomicValue::Ptr &lexicalValue, + const SchemaType::Ptr &type, + const ReportContext::Ptr &context) + { + prepareCasting(context, BuiltinTypes::xsString); + return AtomicValue::Ptr(const_cast<AtomicValue *>(cast(lexicalValue, context).asAtomicValue())); + } + + const SourceLocationReflection *actualReflection() const + { + return m_sourceReflection; + } + + ItemType::Ptr targetType() const + { + return m_targetType; + } + +private: + const SourceLocationReflection *const m_sourceReflection; + const ItemType::Ptr m_targetType; +}; + +AtomicValue::Ptr ValueFactory::fromLexical(const QString &lexicalValue, + const SchemaType::Ptr &type, + const ReportContext::Ptr &context, + const SourceLocationReflection *const sourceLocationReflection) +{ + Q_ASSERT(context); + Q_ASSERT(type); + Q_ASSERT_X(type->category() == SchemaType::SimpleTypeAtomic, Q_FUNC_INFO, + "We can only construct for atomic values."); + + return PerformValueConstruction(sourceLocationReflection, type)(AtomicString::fromValue(lexicalValue), + type, + context); +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/data/qvaluefactory_p.h b/src/xmlpatterns/data/qvaluefactory_p.h new file mode 100644 index 0000000..acc5733 --- /dev/null +++ b/src/xmlpatterns/data/qvaluefactory_p.h @@ -0,0 +1,98 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_ValueFactory_H +#define Patternist_ValueFactory_H + +#include "qitem_p.h" +#include "qreportcontext_p.h" +#include "qschematype_p.h" + +QT_BEGIN_HEADER +QT_BEGIN_NAMESPACE + +namespace QPatternist +{ + /** + * @short Provides fromLexical(), which allows instantiation of atomic + * values from arbitrary types. + * + * This class wraps the helper class CastingPlatform with a more specific, + * high-level API. + * + * @see CastingPlatform + * @author Frans Englich <fenglich@trolltech.com> + * @ingroup Patternist_schema + */ + class ValueFactory + { + public: + /** + * @short Returns an AtomicValue of type @p type from the lexical space + * @p lexicalValue, and raise an error through @p context if that's + * impossible. + * + * ValueFactory does not take ownership of @p sourceLocationReflection. + */ + static AtomicValue::Ptr fromLexical(const QString &lexicalValue, + const SchemaType::Ptr &type, + const ReportContext::Ptr &context, + const SourceLocationReflection *const sourceLocationReflection); + + private: + Q_DISABLE_COPY(ValueFactory) + }; +} + +QT_END_NAMESPACE +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/environment/createReportContext.xsl b/src/xmlpatterns/environment/createReportContext.xsl index 7ca96bf..5b754d2 100644 --- a/src/xmlpatterns/environment/createReportContext.xsl +++ b/src/xmlpatterns/environment/createReportContext.xsl @@ -242,6 +242,11 @@ namespace QPatternist */]]></xsl:text> enum ErrorCode { + /** + * XML Schema error code. + */ + XSDError, + <!-- The order of the calls is significant. The templates takes into account to avoid the last comma(extractXSLT20 does this). --> <xsl:call-template name="extractXQuery10"/> diff --git a/src/xmlpatterns/environment/qreportcontext.cpp b/src/xmlpatterns/environment/qreportcontext.cpp index 34ef6ce..64afcdb 100644 --- a/src/xmlpatterns/environment/qreportcontext.cpp +++ b/src/xmlpatterns/environment/qreportcontext.cpp @@ -448,6 +448,7 @@ QString ReportContext::codeToString(const ReportContext::ErrorCode code) case XTTE1545: result = "XTTE1545"; break; case XTTE1550: result = "XTTE1550"; break; case XTTE1555: result = "XTTE1555"; break; + case XSDError: result = "XSDError"; break; } Q_ASSERT_X(result, Q_FUNC_INFO, "Unknown enum value."); diff --git a/src/xmlpatterns/environment/qreportcontext_p.h b/src/xmlpatterns/environment/qreportcontext_p.h index ee78972..dbdf824 100644 --- a/src/xmlpatterns/environment/qreportcontext_p.h +++ b/src/xmlpatterns/environment/qreportcontext_p.h @@ -151,6 +151,10 @@ namespace QPatternist */ enum ErrorCode { + /** + * XML Schema error code. + */ + XSDError, /** * It is a static error if analysis of an expression relies on some diff --git a/src/xmlpatterns/expr/qcastingplatform.cpp b/src/xmlpatterns/expr/qcastingplatform.cpp index bc902f9..933d188 100644 --- a/src/xmlpatterns/expr/qcastingplatform.cpp +++ b/src/xmlpatterns/expr/qcastingplatform.cpp @@ -83,7 +83,7 @@ Item CastingPlatform<TSubClass, issueError>::cast(const Item &sourceValue, else { bool castImpossible = false; - const AtomicCaster::Ptr caster(locateCaster(sourceValue.type(), context, castImpossible)); + const AtomicCaster::Ptr caster(locateCaster(sourceValue.type(), context, castImpossible, static_cast<const TSubClass *>(this), targetType())); if(!issueError && castImpossible) { @@ -112,7 +112,7 @@ bool CastingPlatform<TSubClass, issueError>::prepareCasting(const ReportContext: or numeric at compile time. We'll do lookup at runtime instead. */ bool castImpossible = false; - m_caster = locateCaster(sourceType, context, castImpossible); + m_caster = locateCaster(sourceType, context, castImpossible, static_cast<const TSubClass *>(this), targetType()); return !castImpossible; } @@ -120,20 +120,22 @@ bool CastingPlatform<TSubClass, issueError>::prepareCasting(const ReportContext: template <typename TSubClass, const bool issueError> AtomicCaster::Ptr CastingPlatform<TSubClass, issueError>::locateCaster(const ItemType::Ptr &sourceType, const ReportContext::Ptr &context, - bool &castImpossible) const + bool &castImpossible, + const SourceLocationReflection *const location, + const ItemType::Ptr &targetType) { Q_ASSERT(sourceType); - Q_ASSERT(targetType()); + Q_ASSERT(targetType); const AtomicCasterLocator::Ptr locator(static_cast<AtomicType *>( - targetType().data())->casterLocator()); + targetType.data())->casterLocator()); if(!locator) { if(issueError) { context->error(QtXmlPatterns::tr("No casting is possible with %1 as the target type.") - .arg(formatType(context->namePool(), targetType())), - ReportContext::XPTY0004, static_cast<const TSubClass *>(this)); + .arg(formatType(context->namePool(), targetType)), + ReportContext::XPTY0004, location); } else castImpossible = true; @@ -141,15 +143,15 @@ AtomicCaster::Ptr CastingPlatform<TSubClass, issueError>::locateCaster(const Ite return AtomicCaster::Ptr(); } - const AtomicCaster::Ptr caster(static_cast<const AtomicType *>(sourceType.data())->accept(locator, static_cast<const TSubClass *>(this))); + const AtomicCaster::Ptr caster(static_cast<const AtomicType *>(sourceType.data())->accept(locator, location)); if(!caster) { if(issueError) { context->error(QtXmlPatterns::tr("It is not possible to cast from %1 to %2.") .arg(formatType(context->namePool(), sourceType)) - .arg(formatType(context->namePool(), targetType())), - ReportContext::XPTY0004, static_cast<const TSubClass *>(this)); + .arg(formatType(context->namePool(), targetType)), + ReportContext::XPTY0004, location); } else castImpossible = true; diff --git a/src/xmlpatterns/expr/qcastingplatform_p.h b/src/xmlpatterns/expr/qcastingplatform_p.h index 3aded3d..91f4a8c 100644 --- a/src/xmlpatterns/expr/qcastingplatform_p.h +++ b/src/xmlpatterns/expr/qcastingplatform_p.h @@ -52,16 +52,17 @@ #ifndef Patternist_CastingPlatform_H #define Patternist_CastingPlatform_H +#include "qatomiccasterlocator_p.h" #include "qatomiccaster_p.h" -#include "qqnamevalue_p.h" #include "qatomicstring_p.h" -#include "qvalidationerror_p.h" -#include "qatomiccasterlocator_p.h" #include "qatomictype_p.h" #include "qbuiltintypes_p.h" #include "qcommonsequencetypes_p.h" -#include "qschematypefactory_p.h" #include "qpatternistlocale_p.h" +#include "qqnamevalue_p.h" +#include "qschematypefactory_p.h" +#include "qstaticcontext_p.h" +#include "qvalidationerror_p.h" QT_BEGIN_HEADER @@ -101,6 +102,7 @@ namespace QPatternist * function targetType() must be implemented such that CastingPlatform knows * what type it shall cast to. * + * @see ValueFactory * @author Frans Englich <fenglich@trolltech.com> * @ingroup Patternist_expressions */ @@ -167,9 +169,16 @@ namespace QPatternist * * @p castImpossible is not initialized. Initialize it to @c false. */ - AtomicCaster::Ptr locateCaster(const ItemType::Ptr &sourceType, - const ReportContext::Ptr &context, - bool &castImpossible) const; + static AtomicCaster::Ptr locateCaster(const ItemType::Ptr &sourceType, + const ReportContext::Ptr &context, + bool &castImpossible, + const SourceLocationReflection *const location, + const ItemType::Ptr &targetType); + private: + inline Item castWithCaster(const Item &sourceValue, + const AtomicCaster::Ptr &caster, + const DynamicContext::Ptr &context) const; + inline ItemType::Ptr targetType() const { diff --git a/src/xmlpatterns/expr/qexpressionfactory.cpp b/src/xmlpatterns/expr/qexpressionfactory.cpp index e243037..0ddf3b1 100644 --- a/src/xmlpatterns/expr/qexpressionfactory.cpp +++ b/src/xmlpatterns/expr/qexpressionfactory.cpp @@ -81,9 +81,13 @@ Expression::Ptr ExpressionFactory::createExpression(const QString &expr, const QUrl &queryURI, const QXmlName &initialTemplateName) { - if(lang == QXmlQuery::XQuery10) + if(lang == QXmlQuery::XSLT20) { - return createExpression(Tokenizer::Ptr(new XQueryTokenizer(expr, queryURI)), + QByteArray query(expr.toUtf8()); + QBuffer buffer(&query); + buffer.open(QIODevice::ReadOnly); + + return createExpression(&buffer, context, lang, requiredType, @@ -92,12 +96,7 @@ Expression::Ptr ExpressionFactory::createExpression(const QString &expr, } else { - Q_ASSERT(lang == QXmlQuery::XSLT20); - QByteArray query(expr.toUtf8()); - QBuffer buffer(&query); - buffer.open(QIODevice::ReadOnly); - - return createExpression(&buffer, + return createExpression(Tokenizer::Ptr(new XQueryTokenizer(expr, queryURI)), context, lang, requiredType, @@ -118,16 +117,10 @@ Expression::Ptr ExpressionFactory::createExpression(QIODevice *const device, Tokenizer::Ptr tokenizer; - if(lang == QXmlQuery::XQuery10) - { - - tokenizer = Tokenizer::Ptr(new XQueryTokenizer(QString::fromUtf8(device->readAll()), queryURI)); - } - else - { - Q_ASSERT(lang == QXmlQuery::XSLT20); + if(lang == QXmlQuery::XSLT20) tokenizer = Tokenizer::Ptr(new XSLTTokenizer(device, queryURI, context, context->namePool())); - } + else + tokenizer = Tokenizer::Ptr(new XQueryTokenizer(QString::fromUtf8(device->readAll()), queryURI)); return createExpression(tokenizer, context, lang, requiredType, queryURI, initialTemplateName); } diff --git a/src/xmlpatterns/functions/qpatternplatform.cpp b/src/xmlpatterns/functions/qpatternplatform.cpp index 74414f4..5339f28 100644 --- a/src/xmlpatterns/functions/qpatternplatform.cpp +++ b/src/xmlpatterns/functions/qpatternplatform.cpp @@ -168,8 +168,15 @@ void PatternPlatform::applyFlags(const Flags flags, QRegExp &patternP) // TODO Apply the other flags, like 'x'. } +QRegExp PatternPlatform::parsePattern(const QString &pattern, + const ReportContext::Ptr &context) const +{ + return parsePattern(pattern, context, this); +} + QRegExp PatternPlatform::parsePattern(const QString &patternP, - const DynamicContext::Ptr &context) const + const ReportContext::Ptr &context, + const SourceLocationReflection *const location) { if(patternP == QLatin1String("(.)\\3") || patternP == QLatin1String("\\3") || @@ -177,7 +184,7 @@ QRegExp PatternPlatform::parsePattern(const QString &patternP, { context->error(QLatin1String("We don't want to hang infinitely on K2-MatchesFunc-9, " "10 and 11. See Trolltech task 148505."), - ReportContext::FOER0000, this); + ReportContext::FOER0000, location); return QRegExp(); } @@ -189,14 +196,8 @@ QRegExp PatternPlatform::parsePattern(const QString &patternP, * QChar::category(). */ rewrittenPattern.replace(QLatin1String("[\\i-[:]]"), QLatin1String("[a-zA-Z_]")); rewrittenPattern.replace(QLatin1String("[\\c-[:]]"), QLatin1String("[a-zA-Z0-9_\\-\\.]")); - rewrittenPattern.replace(QLatin1String("\\i"), QLatin1String("[a-zA-Z:_]")); - rewrittenPattern.replace(QLatin1String("\\c"), QLatin1String("[a-zA-Z0-9:_\\-\\.]")); - rewrittenPattern.replace(QLatin1String("\\p{L}"), QLatin1String("[a-zA-Z]")); - rewrittenPattern.replace(QLatin1String("\\p{Lu}"), QLatin1String("[A-Z]")); - rewrittenPattern.replace(QLatin1String("\\p{Ll}"), QLatin1String("[a-z]")); - rewrittenPattern.replace(QLatin1String("\\p{Nd}"), QLatin1String("[0-9]")); - QRegExp retval(rewrittenPattern); + QRegExp retval(rewrittenPattern, Qt::CaseSensitive, QRegExp::W3CXmlSchema11); if(retval.isValid()) return retval; @@ -204,7 +205,7 @@ QRegExp PatternPlatform::parsePattern(const QString &patternP, { context->error(QtXmlPatterns::tr("%1 is an invalid regular expression pattern: %2") .arg(formatExpression(patternP), retval.errorString()), - ReportContext::FORX0002, this); + ReportContext::FORX0002, location); return QRegExp(); } } diff --git a/src/xmlpatterns/functions/qpatternplatform_p.h b/src/xmlpatterns/functions/qpatternplatform_p.h index 3f4b18e..76f5332 100644 --- a/src/xmlpatterns/functions/qpatternplatform_p.h +++ b/src/xmlpatterns/functions/qpatternplatform_p.h @@ -122,6 +122,14 @@ namespace QPatternist */ inline int captureCount() const; + /** + * @short Parses pattern + */ + static QRegExp parsePattern(const QString &pattern, + const ReportContext::Ptr &context, + const SourceLocationReflection *const location); + + protected: /** * @short This constructor is protected, because this class is supposed to be sub-classed. @@ -146,14 +154,18 @@ namespace QPatternist }; typedef QFlags<PreCompiledPart> PreCompiledParts; + /** + * @short Calls the public parsePattern() function and passes in @c + * this as the location. + */ + inline QRegExp parsePattern(const QString &pattern, + const ReportContext::Ptr &context) const; + Q_DISABLE_COPY(PatternPlatform) Flags parseFlags(const QString &flags, const DynamicContext::Ptr &context) const; - QRegExp parsePattern(const QString &pattern, - const DynamicContext::Ptr &context) const; - static void applyFlags(const Flags flags, QRegExp &pattern); /** diff --git a/src/xmlpatterns/functions/qsequencegeneratingfns.cpp b/src/xmlpatterns/functions/qsequencegeneratingfns.cpp index 81724f8..e3f30c5 100644 --- a/src/xmlpatterns/functions/qsequencegeneratingfns.cpp +++ b/src/xmlpatterns/functions/qsequencegeneratingfns.cpp @@ -69,19 +69,6 @@ Item IdFN::mapToItem(const QString &id, } /** - * @short Helper class for StringSplitter - * - * Needed by the QAbstractXmlForwardIterator sub-class. - * - * @relates StringSplitter - */ -template<> -bool qIsForwardIteratorEnd(const QString &unit) -{ - return unit.isNull(); -} - -/** * @short Helper class for IdFN. * * StringSplitter takes an Iterator which delivers strings of this kind: diff --git a/src/xmlpatterns/parser/qquerytransformparser.cpp b/src/xmlpatterns/parser/qquerytransformparser.cpp index cc6c82e..d80c09f 100644 --- a/src/xmlpatterns/parser/qquerytransformparser.cpp +++ b/src/xmlpatterns/parser/qquerytransformparser.cpp @@ -300,11 +300,18 @@ static inline QSourceLocation fromYYLTYPE(const YYLTYPE &sourceLocator, } /** + * @internal + * @relates QXmlQuery + */ +typedef QFlags<QXmlQuery::QueryLanguage> QueryLanguages; + +/** * @short Flags invalid expressions and declarations in the currently * parsed language. * - * Since this grammar is used for several languages: XQuery 1.0, XSL-T 2.0 and - * XPath 2.0 inside XSL-T, it is the union of all the constructs in these + * Since this grammar is used for several languages: XQuery 1.0, XSL-T 2.0, and + * XPath 2.0 inside XSL-T, and field and selector patterns in W3C XML Schema's + * identity constraints, it is the union of all the constructs in these * languages. However, when dealing with each language individually, we * regularly need to disallow some expressions, such as direct element * constructors when parsing XSL-T, or the typeswitch when parsing XPath. @@ -315,19 +322,46 @@ static inline QSourceLocation fromYYLTYPE(const YYLTYPE &sourceLocator, * instance the @c let clause, should not be flagged as an error, because it's * used for internal purposes. * - * Hence, this function is called from each expression and declaration which is - * unavailable in XPath. + * Hence, this function is called from each expression and declaration with @p + * allowedLanguages stating what languages it is allowed in. * * If @p isInternal is @c true, no error is raised. Otherwise, if the current - * language is not XQuery, an error is raised. + * language is not in @p allowedLanguages, an error is raised. */ -static void disallowedConstruct(const ParserContext *const parseInfo, - const YYLTYPE &sourceLocator, - const bool isInternal = false) +static void allowedIn(const QueryLanguages allowedLanguages, + const ParserContext *const parseInfo, + const YYLTYPE &sourceLocator, + const bool isInternal = false) { - if(!isInternal && parseInfo->languageAccent != QXmlQuery::XQuery10) + /* We treat XPath 2.0 as a subset of XSL-T 2.0, so if XPath 2.0 is allowed + * and XSL-T is the language, it's ok. */ + if(!isInternal && + (!allowedLanguages.testFlag(parseInfo->languageAccent) && !(allowedLanguages.testFlag(QXmlQuery::XPath20) && parseInfo->languageAccent == QXmlQuery::XSLT20))) { - parseInfo->staticContext->error(QtXmlPatterns::tr("A construct was encountered which only is allowed in XQuery."), + + QString langName; + + switch(parseInfo->languageAccent) + { + case QXmlQuery::XPath20: + langName = QLatin1String("XPath 2.0"); + break; + case QXmlQuery::XSLT20: + langName = QLatin1String("XSL-T 2.0"); + break; + case QXmlQuery::XQuery10: + langName = QLatin1String("XQuery 1.0"); + break; + case QXmlQuery::XmlSchema11IdentityConstraintSelector: + langName = QtXmlPatterns::tr("W3C XML Schema identity constraint selector"); + break; + case QXmlQuery::XmlSchema11IdentityConstraintField: + langName = QtXmlPatterns::tr("W3C XML Schema identity constraint field"); + break; + } + + parseInfo->staticContext->error(QtXmlPatterns::tr("A construct was encountered " + "which is disallowed in the current language(%1).").arg(langName), ReportContext::XPST0003, fromYYLTYPE(sourceLocator, parseInfo)); @@ -1366,7 +1400,7 @@ typedef struct YYLTYPE /* Copy the second part of user declarations. */ /* Line 221 of yacc.c. */ -#line 1289 "qquerytransformparser.cpp" +#line 1323 "qquerytransformparser.cpp" #ifdef short # undef short @@ -1850,54 +1884,54 @@ static const yytype_int16 yyrhs[] = /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 1341, 1341, 1342, 1344, 1345, 1376, 1377, 1393, 1491, - 1493, 1499, 1501, 1508, 1514, 1520, 1527, 1530, 1534, 1538, - 1558, 1572, 1576, 1570, 1639, 1643, 1660, 1663, 1665, 1670, - 1671, 1675, 1676, 1680, 1684, 1688, 1690, 1691, 1693, 1695, - 1741, 1755, 1760, 1765, 1766, 1768, 1783, 1798, 1808, 1823, - 1827, 1832, 1846, 1850, 1855, 1869, 1874, 1879, 1884, 1889, - 1905, 1928, 1936, 1937, 1938, 1940, 1957, 1958, 1960, 1961, - 1963, 1964, 1966, 2021, 2025, 2031, 2034, 2039, 2053, 2057, - 2063, 2062, 2171, 2174, 2180, 2201, 2207, 2211, 2213, 2218, - 2228, 2229, 2234, 2235, 2244, 2314, 2325, 2326, 2330, 2335, - 2404, 2405, 2409, 2414, 2458, 2459, 2464, 2471, 2477, 2478, - 2479, 2480, 2481, 2482, 2488, 2493, 2499, 2502, 2507, 2513, - 2519, 2523, 2548, 2549, 2553, 2557, 2551, 2598, 2601, 2596, - 2617, 2618, 2619, 2622, 2626, 2634, 2633, 2647, 2646, 2655, - 2656, 2657, 2659, 2667, 2678, 2681, 2683, 2688, 2695, 2702, - 2708, 2728, 2733, 2739, 2742, 2744, 2745, 2752, 2758, 2762, - 2767, 2768, 2771, 2775, 2770, 2784, 2788, 2783, 2796, 2799, - 2803, 2798, 2812, 2816, 2811, 2824, 2826, 2854, 2853, 2865, - 2873, 2864, 2884, 2885, 2888, 2892, 2897, 2902, 2901, 2917, - 2922, 2923, 2928, 2929, 2934, 2935, 2936, 2937, 2939, 2940, - 2945, 2946, 2951, 2952, 2954, 2955, 2960, 2961, 2962, 2963, - 2965, 2966, 2971, 2972, 2977, 2978, 2980, 2984, 2989, 2990, - 2996, 2997, 3002, 3003, 3008, 3009, 3014, 3015, 3020, 3024, - 3029, 3030, 3031, 3033, 3038, 3039, 3040, 3041, 3042, 3043, - 3045, 3050, 3051, 3052, 3053, 3054, 3055, 3057, 3062, 3063, - 3064, 3066, 3080, 3081, 3082, 3084, 3100, 3104, 3109, 3110, - 3112, 3117, 3118, 3120, 3126, 3130, 3136, 3139, 3140, 3144, - 3153, 3158, 3162, 3163, 3168, 3167, 3182, 3189, 3188, 3203, - 3211, 3211, 3220, 3222, 3225, 3230, 3232, 3236, 3302, 3305, - 3311, 3314, 3323, 3327, 3331, 3336, 3337, 3342, 3343, 3346, - 3345, 3375, 3377, 3378, 3380, 3394, 3395, 3396, 3397, 3398, - 3399, 3400, 3401, 3402, 3403, 3404, 3405, 3408, 3407, 3417, - 3428, 3433, 3435, 3440, 3441, 3443, 3447, 3449, 3453, 3462, - 3468, 3469, 3474, 3475, 3476, 3477, 3478, 3479, 3480, 3481, - 3491, 3492, 3497, 3501, 3506, 3511, 3516, 3521, 3525, 3530, - 3535, 3540, 3569, 3573, 3580, 3582, 3586, 3588, 3589, 3590, - 3624, 3633, 3622, 3874, 3878, 3898, 3901, 3907, 3912, 3917, - 3923, 3926, 3936, 3943, 3947, 3953, 3967, 3973, 3990, 3995, - 4008, 4009, 4010, 4011, 4012, 4013, 4014, 4016, 4024, 4023, - 4063, 4066, 4071, 4086, 4091, 4098, 4110, 4114, 4110, 4120, - 4122, 4126, 4128, 4143, 4147, 4156, 4161, 4165, 4171, 4174, - 4179, 4184, 4189, 4190, 4191, 4192, 4194, 4195, 4196, 4197, - 4202, 4238, 4239, 4240, 4241, 4242, 4243, 4244, 4246, 4251, - 4256, 4262, 4263, 4265, 4270, 4275, 4280, 4285, 4301, 4302, - 4304, 4309, 4314, 4318, 4330, 4343, 4353, 4358, 4363, 4368, - 4382, 4396, 4397, 4399, 4409, 4411, 4416, 4423, 4430, 4432, - 4434, 4435, 4437, 4441, 4446, 4447, 4449, 4455, 4457, 4459, - 4460, 4462, 4474 + 0, 1375, 1375, 1376, 1378, 1379, 1410, 1411, 1427, 1525, + 1527, 1533, 1535, 1542, 1548, 1554, 1561, 1564, 1568, 1572, + 1592, 1606, 1610, 1604, 1673, 1677, 1694, 1697, 1699, 1704, + 1705, 1709, 1710, 1714, 1718, 1722, 1724, 1725, 1727, 1729, + 1775, 1789, 1794, 1799, 1800, 1802, 1817, 1832, 1842, 1857, + 1861, 1866, 1880, 1884, 1889, 1903, 1908, 1913, 1918, 1923, + 1939, 1962, 1970, 1971, 1972, 1974, 1991, 1992, 1994, 1995, + 1997, 1998, 2000, 2055, 2059, 2065, 2068, 2073, 2087, 2091, + 2097, 2096, 2205, 2208, 2214, 2235, 2241, 2245, 2247, 2252, + 2262, 2263, 2268, 2269, 2278, 2348, 2359, 2360, 2364, 2369, + 2438, 2439, 2443, 2448, 2492, 2493, 2498, 2505, 2511, 2512, + 2513, 2514, 2515, 2516, 2522, 2527, 2533, 2536, 2541, 2547, + 2553, 2557, 2582, 2583, 2587, 2591, 2585, 2632, 2635, 2630, + 2651, 2652, 2653, 2656, 2660, 2668, 2667, 2681, 2680, 2689, + 2690, 2691, 2693, 2701, 2712, 2715, 2717, 2722, 2729, 2736, + 2742, 2762, 2767, 2773, 2776, 2778, 2779, 2786, 2792, 2796, + 2801, 2802, 2805, 2809, 2804, 2819, 2823, 2818, 2831, 2834, + 2838, 2833, 2848, 2852, 2847, 2860, 2862, 2890, 2889, 2901, + 2909, 2900, 2920, 2921, 2924, 2928, 2933, 2938, 2937, 2953, + 2959, 2960, 2966, 2967, 2973, 2974, 2975, 2976, 2978, 2979, + 2985, 2986, 2992, 2993, 2995, 2996, 3002, 3003, 3004, 3005, + 3007, 3008, 3018, 3019, 3025, 3026, 3028, 3032, 3037, 3038, + 3045, 3046, 3052, 3053, 3059, 3060, 3066, 3067, 3073, 3077, + 3082, 3083, 3084, 3086, 3092, 3093, 3094, 3095, 3096, 3097, + 3099, 3104, 3105, 3106, 3107, 3108, 3109, 3111, 3116, 3117, + 3118, 3120, 3134, 3135, 3136, 3138, 3155, 3159, 3164, 3165, + 3167, 3172, 3173, 3175, 3181, 3185, 3191, 3194, 3195, 3199, + 3208, 3213, 3217, 3218, 3223, 3222, 3237, 3245, 3244, 3260, + 3268, 3268, 3277, 3279, 3282, 3287, 3289, 3293, 3359, 3362, + 3368, 3371, 3380, 3384, 3388, 3393, 3394, 3399, 3400, 3403, + 3402, 3432, 3434, 3435, 3437, 3481, 3482, 3483, 3484, 3485, + 3486, 3487, 3488, 3489, 3490, 3491, 3492, 3495, 3494, 3505, + 3516, 3521, 3523, 3528, 3529, 3534, 3538, 3540, 3544, 3553, + 3560, 3561, 3567, 3568, 3569, 3570, 3571, 3572, 3573, 3574, + 3584, 3585, 3590, 3595, 3601, 3607, 3612, 3617, 3622, 3628, + 3633, 3638, 3668, 3672, 3679, 3681, 3685, 3690, 3691, 3692, + 3726, 3735, 3724, 3976, 3980, 4000, 4003, 4009, 4014, 4019, + 4025, 4028, 4038, 4045, 4049, 4055, 4069, 4075, 4092, 4097, + 4110, 4111, 4112, 4113, 4114, 4115, 4116, 4118, 4126, 4125, + 4165, 4168, 4173, 4188, 4193, 4200, 4212, 4216, 4212, 4222, + 4224, 4228, 4230, 4245, 4249, 4258, 4263, 4267, 4273, 4276, + 4281, 4286, 4291, 4292, 4293, 4294, 4296, 4297, 4298, 4299, + 4304, 4340, 4341, 4342, 4343, 4344, 4345, 4346, 4348, 4353, + 4358, 4364, 4365, 4367, 4372, 4377, 4382, 4387, 4403, 4404, + 4406, 4411, 4416, 4420, 4432, 4445, 4455, 4460, 4465, 4470, + 4484, 4498, 4499, 4501, 4511, 4513, 4518, 4525, 4532, 4534, + 4536, 4537, 4539, 4543, 4548, 4549, 4551, 4557, 4559, 4561, + 4565, 4570, 4582 }; #endif @@ -3726,7 +3760,7 @@ yyreduce: { case 5: /* Line 1269 of yacc.c. */ -#line 1346 "querytransformparser.ypp" +#line 1380 "querytransformparser.ypp" { /* Suppress more compiler warnings about unused defines. */ @@ -3760,7 +3794,7 @@ yyreduce: case 7: /* Line 1269 of yacc.c. */ -#line 1378 "querytransformparser.ypp" +#line 1412 "querytransformparser.ypp" { const QRegExp encNameRegExp(QLatin1String("[A-Za-z][A-Za-z0-9._\\-]*")); @@ -3779,7 +3813,7 @@ yyreduce: case 8: /* Line 1269 of yacc.c. */ -#line 1394 "querytransformparser.ypp" +#line 1428 "querytransformparser.ypp" { /* In XSL-T, we can have dangling variable references, so resolve them * before we proceed with other steps, such as checking circularity. */ @@ -3880,7 +3914,7 @@ yyreduce: case 10: /* Line 1269 of yacc.c. */ -#line 1494 "querytransformparser.ypp" +#line 1528 "querytransformparser.ypp" { // TODO add to namespace context parseInfo->moduleNamespace = parseInfo->staticContext->namePool()->allocateNamespace((yyvsp[(3) - (6)].sval)); @@ -3889,9 +3923,9 @@ yyreduce: case 12: /* Line 1269 of yacc.c. */ -#line 1502 "querytransformparser.ypp" +#line 1536 "querytransformparser.ypp" { - disallowedConstruct(parseInfo, (yyloc)); + allowedIn(QXmlQuery::XQuery10, parseInfo, (yyloc)); if(parseInfo->hasSecondPrologPart) parseInfo->staticContext->error(QtXmlPatterns::tr("A default namespace declaration must occur before function, " "variable, and option declarations."), ReportContext::XPST0003, fromYYLTYPE((yyloc), parseInfo)); @@ -3900,7 +3934,7 @@ yyreduce: case 13: /* Line 1269 of yacc.c. */ -#line 1509 "querytransformparser.ypp" +#line 1543 "querytransformparser.ypp" { if(parseInfo->hasSecondPrologPart) parseInfo->staticContext->error(QtXmlPatterns::tr("A default namespace declaration must occur before function, " @@ -3910,7 +3944,7 @@ yyreduce: case 14: /* Line 1269 of yacc.c. */ -#line 1515 "querytransformparser.ypp" +#line 1549 "querytransformparser.ypp" { if(parseInfo->hasSecondPrologPart) parseInfo->staticContext->error(QtXmlPatterns::tr("Namespace declarations must occur before function, " @@ -3920,9 +3954,9 @@ yyreduce: case 15: /* Line 1269 of yacc.c. */ -#line 1521 "querytransformparser.ypp" +#line 1555 "querytransformparser.ypp" { - disallowedConstruct(parseInfo, (yyloc)); + allowedIn(QXmlQuery::XQuery10, parseInfo, (yyloc)); if(parseInfo->hasSecondPrologPart) parseInfo->staticContext->error(QtXmlPatterns::tr("Module imports must occur before function, " "variable, and option declarations."), ReportContext::XPST0003, fromYYLTYPE((yyloc), parseInfo)); @@ -3931,7 +3965,7 @@ yyreduce: case 17: /* Line 1269 of yacc.c. */ -#line 1531 "querytransformparser.ypp" +#line 1565 "querytransformparser.ypp" { parseInfo->hasSecondPrologPart = true; } @@ -3939,7 +3973,7 @@ yyreduce: case 18: /* Line 1269 of yacc.c. */ -#line 1535 "querytransformparser.ypp" +#line 1569 "querytransformparser.ypp" { parseInfo->hasSecondPrologPart = true; } @@ -3947,16 +3981,16 @@ yyreduce: case 19: /* Line 1269 of yacc.c. */ -#line 1539 "querytransformparser.ypp" +#line 1573 "querytransformparser.ypp" { - disallowedConstruct(parseInfo, (yyloc)); + allowedIn(QXmlQuery::XQuery10, parseInfo, (yyloc)); parseInfo->hasSecondPrologPart = true; } break; case 20: /* Line 1269 of yacc.c. */ -#line 1562 "querytransformparser.ypp" +#line 1596 "querytransformparser.ypp" { Template::Ptr temp(create(new Template(parseInfo->currentImportPrecedence, (yyvsp[(5) - (7)].sequenceType)), (yyloc), parseInfo)); @@ -3969,7 +4003,7 @@ yyreduce: case 21: /* Line 1269 of yacc.c. */ -#line 1572 "querytransformparser.ypp" +#line 1606 "querytransformparser.ypp" { parseInfo->isParsingPattern = true; } @@ -3977,7 +4011,7 @@ yyreduce: case 22: /* Line 1269 of yacc.c. */ -#line 1576 "querytransformparser.ypp" +#line 1610 "querytransformparser.ypp" { parseInfo->isParsingPattern = false; } @@ -3985,7 +4019,7 @@ yyreduce: case 23: /* Line 1269 of yacc.c. */ -#line 1585 "querytransformparser.ypp" +#line 1619 "querytransformparser.ypp" { /* In this grammar branch, we're guaranteed to be a template rule, but * may also be a named template. */ @@ -4042,7 +4076,7 @@ yyreduce: case 24: /* Line 1269 of yacc.c. */ -#line 1639 "querytransformparser.ypp" +#line 1673 "querytransformparser.ypp" { (yyval.enums.Double) = std::numeric_limits<xsDouble>::quiet_NaN(); } @@ -4050,7 +4084,7 @@ yyreduce: case 25: /* Line 1269 of yacc.c. */ -#line 1644 "querytransformparser.ypp" +#line 1678 "querytransformparser.ypp" { const AtomicValue::Ptr val(Decimal::fromLexical((yyvsp[(2) - (2)].sval))); if(val->hasError()) @@ -4069,7 +4103,7 @@ yyreduce: case 26: /* Line 1269 of yacc.c. */ -#line 1660 "querytransformparser.ypp" +#line 1694 "querytransformparser.ypp" { (yyval.qName) = QXmlName(); } @@ -4077,7 +4111,7 @@ yyreduce: case 28: /* Line 1269 of yacc.c. */ -#line 1666 "querytransformparser.ypp" +#line 1700 "querytransformparser.ypp" { (yyval.qName) = (yyvsp[(2) - (2)].qName); } @@ -4085,42 +4119,42 @@ yyreduce: case 30: /* Line 1269 of yacc.c. */ -#line 1672 "querytransformparser.ypp" +#line 1706 "querytransformparser.ypp" { - disallowedConstruct(parseInfo, (yyloc)); + allowedIn(QXmlQuery::XQuery10, parseInfo, (yyloc)); } break; case 32: /* Line 1269 of yacc.c. */ -#line 1677 "querytransformparser.ypp" +#line 1711 "querytransformparser.ypp" { - disallowedConstruct(parseInfo, (yyloc)); + allowedIn(QXmlQuery::XQuery10, parseInfo, (yyloc)); } break; case 33: /* Line 1269 of yacc.c. */ -#line 1681 "querytransformparser.ypp" +#line 1715 "querytransformparser.ypp" { - disallowedConstruct(parseInfo, (yyloc)); + allowedIn(QXmlQuery::XQuery10, parseInfo, (yyloc)); } break; case 34: /* Line 1269 of yacc.c. */ -#line 1685 "querytransformparser.ypp" +#line 1719 "querytransformparser.ypp" { - disallowedConstruct(parseInfo, (yyloc)); + allowedIn(QXmlQuery::XQuery10, parseInfo, (yyloc)); } break; case 39: /* Line 1269 of yacc.c. */ -#line 1696 "querytransformparser.ypp" +#line 1730 "querytransformparser.ypp" { if(!(yyvsp[(6) - (7)].enums.Bool)) - disallowedConstruct(parseInfo, (yyloc)); + allowedIn(QXmlQuery::XQuery10, parseInfo, (yyloc)); if((yyvsp[(3) - (7)].sval) == QLatin1String("xmlns")) { @@ -4166,7 +4200,7 @@ yyreduce: case 40: /* Line 1269 of yacc.c. */ -#line 1742 "querytransformparser.ypp" +#line 1776 "querytransformparser.ypp" { if(parseInfo->hasDeclaration(ParserContext::BoundarySpaceDecl)) { @@ -4183,7 +4217,7 @@ yyreduce: case 41: /* Line 1269 of yacc.c. */ -#line 1756 "querytransformparser.ypp" +#line 1790 "querytransformparser.ypp" { (yyval.enums.boundarySpacePolicy) = StaticContext::BSPStrip; } @@ -4191,7 +4225,7 @@ yyreduce: case 42: /* Line 1269 of yacc.c. */ -#line 1761 "querytransformparser.ypp" +#line 1795 "querytransformparser.ypp" { (yyval.enums.boundarySpacePolicy) = StaticContext::BSPPreserve; } @@ -4199,7 +4233,7 @@ yyreduce: case 45: /* Line 1269 of yacc.c. */ -#line 1770 "querytransformparser.ypp" +#line 1804 "querytransformparser.ypp" { if(parseInfo->hasDeclaration(ParserContext::DeclareDefaultElementNamespace)) { @@ -4216,7 +4250,7 @@ yyreduce: case 46: /* Line 1269 of yacc.c. */ -#line 1785 "querytransformparser.ypp" +#line 1819 "querytransformparser.ypp" { if(parseInfo->hasDeclaration(ParserContext::DeclareDefaultFunctionNamespace)) { @@ -4233,7 +4267,7 @@ yyreduce: case 47: /* Line 1269 of yacc.c. */ -#line 1799 "querytransformparser.ypp" +#line 1833 "querytransformparser.ypp" { if((yyvsp[(3) - (5)].qName).prefix() == StandardPrefixes::empty) { @@ -4246,9 +4280,9 @@ yyreduce: case 48: /* Line 1269 of yacc.c. */ -#line 1809 "querytransformparser.ypp" +#line 1843 "querytransformparser.ypp" { - disallowedConstruct(parseInfo, (yyloc)); + allowedIn(QXmlQuery::XQuery10, parseInfo, (yyloc)); if(parseInfo->hasDeclaration(ParserContext::OrderingModeDecl)) { parseInfo->staticContext->error(prologMessage("declare ordering"), @@ -4264,7 +4298,7 @@ yyreduce: case 49: /* Line 1269 of yacc.c. */ -#line 1824 "querytransformparser.ypp" +#line 1858 "querytransformparser.ypp" { (yyval.enums.orderingMode) = StaticContext::Ordered; } @@ -4272,7 +4306,7 @@ yyreduce: case 50: /* Line 1269 of yacc.c. */ -#line 1828 "querytransformparser.ypp" +#line 1862 "querytransformparser.ypp" { (yyval.enums.orderingMode) = StaticContext::Unordered; } @@ -4280,7 +4314,7 @@ yyreduce: case 51: /* Line 1269 of yacc.c. */ -#line 1833 "querytransformparser.ypp" +#line 1867 "querytransformparser.ypp" { if(parseInfo->hasDeclaration(ParserContext::EmptyOrderDecl)) { @@ -4297,7 +4331,7 @@ yyreduce: case 52: /* Line 1269 of yacc.c. */ -#line 1847 "querytransformparser.ypp" +#line 1881 "querytransformparser.ypp" { (yyval.enums.orderingEmptySequence) = StaticContext::Least; } @@ -4305,7 +4339,7 @@ yyreduce: case 53: /* Line 1269 of yacc.c. */ -#line 1851 "querytransformparser.ypp" +#line 1885 "querytransformparser.ypp" { (yyval.enums.orderingEmptySequence) = StaticContext::Greatest; } @@ -4313,7 +4347,7 @@ yyreduce: case 54: /* Line 1269 of yacc.c. */ -#line 1857 "querytransformparser.ypp" +#line 1891 "querytransformparser.ypp" { if(parseInfo->hasDeclaration(ParserContext::CopyNamespacesDecl)) { @@ -4329,7 +4363,7 @@ yyreduce: case 55: /* Line 1269 of yacc.c. */ -#line 1870 "querytransformparser.ypp" +#line 1904 "querytransformparser.ypp" { parseInfo->preserveNamespacesMode = true; } @@ -4337,7 +4371,7 @@ yyreduce: case 56: /* Line 1269 of yacc.c. */ -#line 1875 "querytransformparser.ypp" +#line 1909 "querytransformparser.ypp" { parseInfo->preserveNamespacesMode = false; } @@ -4345,7 +4379,7 @@ yyreduce: case 57: /* Line 1269 of yacc.c. */ -#line 1880 "querytransformparser.ypp" +#line 1914 "querytransformparser.ypp" { parseInfo->inheritNamespacesMode = true; } @@ -4353,7 +4387,7 @@ yyreduce: case 58: /* Line 1269 of yacc.c. */ -#line 1885 "querytransformparser.ypp" +#line 1919 "querytransformparser.ypp" { parseInfo->inheritNamespacesMode = false; } @@ -4361,7 +4395,7 @@ yyreduce: case 59: /* Line 1269 of yacc.c. */ -#line 1890 "querytransformparser.ypp" +#line 1924 "querytransformparser.ypp" { if(parseInfo->hasDeclaration(ParserContext::DefaultCollationDecl)) { @@ -4380,9 +4414,9 @@ yyreduce: case 60: /* Line 1269 of yacc.c. */ -#line 1906 "querytransformparser.ypp" +#line 1940 "querytransformparser.ypp" { - disallowedConstruct(parseInfo, (yyloc), (yyvsp[(3) - (5)].enums.Bool)); + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XSLT20), parseInfo, (yyloc), (yyvsp[(3) - (5)].enums.Bool)); if(parseInfo->hasDeclaration(ParserContext::BaseURIDecl)) { parseInfo->staticContext->error(prologMessage("declare base-uri"), @@ -4406,7 +4440,7 @@ yyreduce: case 61: /* Line 1269 of yacc.c. */ -#line 1929 "querytransformparser.ypp" +#line 1963 "querytransformparser.ypp" { parseInfo->staticContext->error(QtXmlPatterns::tr("The Schema Import feature is not supported, " "and therefore %1 declarations cannot occur.") @@ -4417,7 +4451,7 @@ yyreduce: case 65: /* Line 1269 of yacc.c. */ -#line 1941 "querytransformparser.ypp" +#line 1975 "querytransformparser.ypp" { if((yyvsp[(4) - (6)].sval).isEmpty()) { @@ -4437,9 +4471,9 @@ yyreduce: case 72: /* Line 1269 of yacc.c. */ -#line 1968 "querytransformparser.ypp" +#line 2002 "querytransformparser.ypp" { - disallowedConstruct(parseInfo, (yyloc), (yyvsp[(3) - (9)].enums.Bool)); + allowedIn(QXmlQuery::XQuery10, parseInfo, (yyloc), (yyvsp[(3) - (9)].enums.Bool)); if(variableByName((yyvsp[(5) - (9)].qName), parseInfo)) { parseInfo->staticContext->error(QtXmlPatterns::tr("A variable by name %1 has already " @@ -4494,7 +4528,7 @@ yyreduce: case 73: /* Line 1269 of yacc.c. */ -#line 2022 "querytransformparser.ypp" +#line 2056 "querytransformparser.ypp" { (yyval.expr).reset(); } @@ -4502,7 +4536,7 @@ yyreduce: case 74: /* Line 1269 of yacc.c. */ -#line 2026 "querytransformparser.ypp" +#line 2060 "querytransformparser.ypp" { (yyval.expr) = (yyvsp[(2) - (2)].expr); } @@ -4510,7 +4544,7 @@ yyreduce: case 75: /* Line 1269 of yacc.c. */ -#line 2031 "querytransformparser.ypp" +#line 2065 "querytransformparser.ypp" { (yyval.expr).reset(); } @@ -4518,7 +4552,7 @@ yyreduce: case 76: /* Line 1269 of yacc.c. */ -#line 2035 "querytransformparser.ypp" +#line 2069 "querytransformparser.ypp" { (yyval.expr) = (yyvsp[(2) - (2)].expr); } @@ -4526,7 +4560,7 @@ yyreduce: case 77: /* Line 1269 of yacc.c. */ -#line 2040 "querytransformparser.ypp" +#line 2074 "querytransformparser.ypp" { if(parseInfo->hasDeclaration(ParserContext::ConstructionDecl)) { @@ -4543,7 +4577,7 @@ yyreduce: case 78: /* Line 1269 of yacc.c. */ -#line 2054 "querytransformparser.ypp" +#line 2088 "querytransformparser.ypp" { (yyval.enums.constructionMode) = StaticContext::CMStrip; } @@ -4551,7 +4585,7 @@ yyreduce: case 79: /* Line 1269 of yacc.c. */ -#line 2058 "querytransformparser.ypp" +#line 2092 "querytransformparser.ypp" { (yyval.enums.constructionMode) = StaticContext::CMPreserve; } @@ -4559,7 +4593,7 @@ yyreduce: case 80: /* Line 1269 of yacc.c. */ -#line 2063 "querytransformparser.ypp" +#line 2097 "querytransformparser.ypp" { (yyval.enums.slot) = parseInfo->currentExpressionSlot() - (yyvsp[(6) - (7)].functionArguments).count(); } @@ -4567,10 +4601,10 @@ yyreduce: case 81: /* Line 1269 of yacc.c. */ -#line 2067 "querytransformparser.ypp" +#line 2101 "querytransformparser.ypp" { if(!(yyvsp[(3) - (11)].enums.Bool)) - disallowedConstruct(parseInfo, (yyloc), (yyvsp[(3) - (11)].enums.Bool)); + allowedIn(QXmlQuery::XQuery10, parseInfo, (yyloc), (yyvsp[(3) - (11)].enums.Bool)); /* If FunctionBody is null, it is 'external', otherwise the value is the body. */ const QXmlName::NamespaceCode ns((yyvsp[(4) - (11)].qName).namespaceURI()); @@ -4674,7 +4708,7 @@ yyreduce: case 82: /* Line 1269 of yacc.c. */ -#line 2171 "querytransformparser.ypp" +#line 2205 "querytransformparser.ypp" { (yyval.functionArguments) = FunctionArgument::List(); } @@ -4682,7 +4716,7 @@ yyreduce: case 83: /* Line 1269 of yacc.c. */ -#line 2175 "querytransformparser.ypp" +#line 2209 "querytransformparser.ypp" { FunctionArgument::List l; l.append((yyvsp[(1) - (1)].functionArgument)); @@ -4692,7 +4726,7 @@ yyreduce: case 84: /* Line 1269 of yacc.c. */ -#line 2181 "querytransformparser.ypp" +#line 2215 "querytransformparser.ypp" { FunctionArgument::List::const_iterator it((yyvsp[(1) - (3)].functionArguments).constBegin()); const FunctionArgument::List::const_iterator end((yyvsp[(1) - (3)].functionArguments).constEnd()); @@ -4716,7 +4750,7 @@ yyreduce: case 85: /* Line 1269 of yacc.c. */ -#line 2202 "querytransformparser.ypp" +#line 2236 "querytransformparser.ypp" { pushVariable((yyvsp[(2) - (3)].qName), (yyvsp[(3) - (3)].sequenceType), Expression::Ptr(), VariableDeclaration::FunctionArgument, (yyloc), parseInfo); (yyval.functionArgument) = FunctionArgument::Ptr(new FunctionArgument((yyvsp[(2) - (3)].qName), (yyvsp[(3) - (3)].sequenceType))); @@ -4725,7 +4759,7 @@ yyreduce: case 86: /* Line 1269 of yacc.c. */ -#line 2208 "querytransformparser.ypp" +#line 2242 "querytransformparser.ypp" { (yyval.expr).reset(); } @@ -4733,7 +4767,7 @@ yyreduce: case 88: /* Line 1269 of yacc.c. */ -#line 2214 "querytransformparser.ypp" +#line 2248 "querytransformparser.ypp" { (yyval.expr) = (yyvsp[(2) - (3)].expr); } @@ -4741,7 +4775,7 @@ yyreduce: case 91: /* Line 1269 of yacc.c. */ -#line 2230 "querytransformparser.ypp" +#line 2264 "querytransformparser.ypp" { (yyval.expr) = create(new CombineNodes((yyvsp[(1) - (3)].expr), CombineNodes::Union, (yyvsp[(3) - (3)].expr)), (yyloc), parseInfo); } @@ -4749,7 +4783,7 @@ yyreduce: case 93: /* Line 1269 of yacc.c. */ -#line 2236 "querytransformparser.ypp" +#line 2270 "querytransformparser.ypp" { /* We write this into a node test. The spec says, 5.5.3 The Meaning of a Pattern: * "Similarly, / matches a document node, and only a document node, @@ -4762,7 +4796,7 @@ yyreduce: case 94: /* Line 1269 of yacc.c. */ -#line 2245 "querytransformparser.ypp" +#line 2279 "querytransformparser.ypp" { /* /axis::node-test * => @@ -4836,7 +4870,7 @@ yyreduce: case 95: /* Line 1269 of yacc.c. */ -#line 2315 "querytransformparser.ypp" +#line 2349 "querytransformparser.ypp" { /* //axis::node-test * => @@ -4851,7 +4885,7 @@ yyreduce: case 97: /* Line 1269 of yacc.c. */ -#line 2327 "querytransformparser.ypp" +#line 2361 "querytransformparser.ypp" { createIdPatternPath((yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr), QXmlNodeModelIndex::AxisParent, (yylsp[(2) - (3)]), parseInfo); } @@ -4859,7 +4893,7 @@ yyreduce: case 98: /* Line 1269 of yacc.c. */ -#line 2331 "querytransformparser.ypp" +#line 2365 "querytransformparser.ypp" { createIdPatternPath((yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr), QXmlNodeModelIndex::AxisAncestor, (yylsp[(2) - (3)]), parseInfo); } @@ -4867,7 +4901,7 @@ yyreduce: case 99: /* Line 1269 of yacc.c. */ -#line 2336 "querytransformparser.ypp" +#line 2370 "querytransformparser.ypp" { const Expression::List ands((yyvsp[(1) - (1)].expr)->operands()); const FunctionSignature::Ptr signature((yyvsp[(1) - (1)].expr)->as<FunctionCall>()->signature()); @@ -4939,7 +4973,7 @@ yyreduce: case 101: /* Line 1269 of yacc.c. */ -#line 2406 "querytransformparser.ypp" +#line 2440 "querytransformparser.ypp" { (yyval.expr) = createPatternPath((yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr), QXmlNodeModelIndex::AxisParent, (yylsp[(2) - (3)]), parseInfo); } @@ -4947,7 +4981,7 @@ yyreduce: case 102: /* Line 1269 of yacc.c. */ -#line 2410 "querytransformparser.ypp" +#line 2444 "querytransformparser.ypp" { (yyval.expr) = createPatternPath((yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr), QXmlNodeModelIndex::AxisAncestor, (yylsp[(2) - (3)]), parseInfo); } @@ -4955,7 +4989,7 @@ yyreduce: case 103: /* Line 1269 of yacc.c. */ -#line 2415 "querytransformparser.ypp" +#line 2449 "querytransformparser.ypp" { const Expression::Ptr expr(findAxisStep((yyvsp[(1) - (1)].expr))); @@ -5002,7 +5036,7 @@ yyreduce: case 105: /* Line 1269 of yacc.c. */ -#line 2460 "querytransformparser.ypp" +#line 2494 "querytransformparser.ypp" { (yyval.expr) = create(new ExpressionSequence((yyvsp[(1) - (1)].expressionList)), (yyloc), parseInfo); } @@ -5010,7 +5044,7 @@ yyreduce: case 106: /* Line 1269 of yacc.c. */ -#line 2465 "querytransformparser.ypp" +#line 2499 "querytransformparser.ypp" { Expression::List l; l.append((yyvsp[(1) - (3)].expr)); @@ -5021,7 +5055,7 @@ yyreduce: case 107: /* Line 1269 of yacc.c. */ -#line 2472 "querytransformparser.ypp" +#line 2506 "querytransformparser.ypp" { (yyvsp[(1) - (3)].expressionList).append((yyvsp[(3) - (3)].expr)); (yyval.expressionList) = (yyvsp[(1) - (3)].expressionList); @@ -5030,7 +5064,7 @@ yyreduce: case 113: /* Line 1269 of yacc.c. */ -#line 2483 "querytransformparser.ypp" +#line 2517 "querytransformparser.ypp" { (yyval.expr) = createDirAttributeValue((yyvsp[(3) - (4)].expressionList), parseInfo, (yyloc)); } @@ -5038,7 +5072,7 @@ yyreduce: case 114: /* Line 1269 of yacc.c. */ -#line 2488 "querytransformparser.ypp" +#line 2522 "querytransformparser.ypp" { QVector<QXmlName> result; result.append(QXmlName(StandardNamespaces::InternalXSLT, StandardLocalNames::Default)); @@ -5048,7 +5082,7 @@ yyreduce: case 115: /* Line 1269 of yacc.c. */ -#line 2494 "querytransformparser.ypp" +#line 2528 "querytransformparser.ypp" { (yyval.qNameVector) = (yyvsp[(2) - (2)].qNameVector); } @@ -5056,7 +5090,7 @@ yyreduce: case 116: /* Line 1269 of yacc.c. */ -#line 2499 "querytransformparser.ypp" +#line 2533 "querytransformparser.ypp" { (yyval.qName) = QXmlName(StandardNamespaces::InternalXSLT, StandardLocalNames::Default); } @@ -5064,7 +5098,7 @@ yyreduce: case 117: /* Line 1269 of yacc.c. */ -#line 2503 "querytransformparser.ypp" +#line 2537 "querytransformparser.ypp" { (yyval.qName) = (yyvsp[(2) - (2)].qName); } @@ -5072,7 +5106,7 @@ yyreduce: case 118: /* Line 1269 of yacc.c. */ -#line 2508 "querytransformparser.ypp" +#line 2542 "querytransformparser.ypp" { QVector<QXmlName> result; result.append((yyvsp[(1) - (1)].qName)); @@ -5082,7 +5116,7 @@ yyreduce: case 119: /* Line 1269 of yacc.c. */ -#line 2514 "querytransformparser.ypp" +#line 2548 "querytransformparser.ypp" { (yyvsp[(1) - (3)].qNameVector).append((yyvsp[(3) - (3)].qName)); (yyval.qNameVector) = (yyvsp[(1) - (3)].qNameVector); @@ -5091,7 +5125,7 @@ yyreduce: case 120: /* Line 1269 of yacc.c. */ -#line 2520 "querytransformparser.ypp" +#line 2554 "querytransformparser.ypp" { (yyval.qName) = (yyvsp[(1) - (1)].qName); } @@ -5099,7 +5133,7 @@ yyreduce: case 121: /* Line 1269 of yacc.c. */ -#line 2524 "querytransformparser.ypp" +#line 2558 "querytransformparser.ypp" { if((yyvsp[(1) - (1)].sval) == QLatin1String("#current")) (yyval.qName) = QXmlName(StandardNamespaces::InternalXSLT, StandardLocalNames::current); @@ -5126,7 +5160,7 @@ yyreduce: case 124: /* Line 1269 of yacc.c. */ -#line 2553 "querytransformparser.ypp" +#line 2587 "querytransformparser.ypp" { /* We're pushing the range variable here, not the positional. */ (yyval.expr) = pushVariable((yyvsp[(3) - (7)].qName), quantificationType((yyvsp[(4) - (7)].sequenceType)), (yyvsp[(7) - (7)].expr), VariableDeclaration::RangeVariable, (yyloc), parseInfo); @@ -5135,7 +5169,7 @@ yyreduce: case 125: /* Line 1269 of yacc.c. */ -#line 2557 "querytransformparser.ypp" +#line 2591 "querytransformparser.ypp" { /* It is ok this appears after PositionalVar, because currentRangeSlot() * uses a different "channel" than currentPositionSlot(), so they can't trash @@ -5146,7 +5180,7 @@ yyreduce: case 126: /* Line 1269 of yacc.c. */ -#line 2564 "querytransformparser.ypp" +#line 2598 "querytransformparser.ypp" { Q_ASSERT((yyvsp[(7) - (10)].expr)); Q_ASSERT((yyvsp[(10) - (10)].expr)); @@ -5182,7 +5216,7 @@ yyreduce: case 127: /* Line 1269 of yacc.c. */ -#line 2598 "querytransformparser.ypp" +#line 2632 "querytransformparser.ypp" { pushVariable((yyvsp[(3) - (7)].qName), quantificationType((yyvsp[(4) - (7)].sequenceType)), (yyvsp[(7) - (7)].expr), VariableDeclaration::RangeVariable, (yyloc), parseInfo); } @@ -5190,7 +5224,7 @@ yyreduce: case 128: /* Line 1269 of yacc.c. */ -#line 2601 "querytransformparser.ypp" +#line 2635 "querytransformparser.ypp" { /* It is ok this appears after PositionalVar, because currentRangeSlot() * uses a different "channel" than currentPositionSlot(), so they can't trash @@ -5201,7 +5235,7 @@ yyreduce: case 129: /* Line 1269 of yacc.c. */ -#line 2608 "querytransformparser.ypp" +#line 2642 "querytransformparser.ypp" { (yyval.expr) = create(new ForClause((yyvsp[(9) - (10)].enums.slot), (yyvsp[(7) - (10)].expr), (yyvsp[(10) - (10)].expr), (yyvsp[(5) - (10)].enums.slot)), (yyloc), parseInfo); @@ -5214,7 +5248,7 @@ yyreduce: case 133: /* Line 1269 of yacc.c. */ -#line 2622 "querytransformparser.ypp" +#line 2656 "querytransformparser.ypp" { (yyval.enums.slot) = -1; } @@ -5222,7 +5256,7 @@ yyreduce: case 134: /* Line 1269 of yacc.c. */ -#line 2627 "querytransformparser.ypp" +#line 2661 "querytransformparser.ypp" { pushVariable((yyvsp[(3) - (3)].qName), CommonSequenceTypes::ExactlyOneInteger, Expression::Ptr(), VariableDeclaration::PositionalVariable, (yyloc), parseInfo); @@ -5232,7 +5266,7 @@ yyreduce: case 135: /* Line 1269 of yacc.c. */ -#line 2634 "querytransformparser.ypp" +#line 2668 "querytransformparser.ypp" { (yyval.expr) = pushVariable((yyvsp[(4) - (7)].qName), quantificationType((yyvsp[(5) - (7)].sequenceType)), (yyvsp[(7) - (7)].expr), VariableDeclaration::ExpressionVariable, (yyloc), parseInfo); } @@ -5240,9 +5274,9 @@ yyreduce: case 136: /* Line 1269 of yacc.c. */ -#line 2638 "querytransformparser.ypp" +#line 2672 "querytransformparser.ypp" { - disallowedConstruct(parseInfo, (yyloc), (yyvsp[(2) - (9)].enums.Bool)); + allowedIn(QXmlQuery::XQuery10, parseInfo, (yyloc), (yyvsp[(2) - (9)].enums.Bool)); Q_ASSERT(parseInfo->variables.top()->name == (yyvsp[(4) - (9)].qName)); (yyval.expr) = create(new LetClause((yyvsp[(8) - (9)].expr), (yyvsp[(9) - (9)].expr), parseInfo->variables.top()), (yyloc), parseInfo); @@ -5252,13 +5286,13 @@ yyreduce: case 137: /* Line 1269 of yacc.c. */ -#line 2647 "querytransformparser.ypp" +#line 2681 "querytransformparser.ypp" { (yyval.expr) = pushVariable((yyvsp[(3) - (6)].qName), quantificationType((yyvsp[(4) - (6)].sequenceType)), (yyvsp[(6) - (6)].expr), VariableDeclaration::ExpressionVariable, (yyloc), parseInfo);} break; case 138: /* Line 1269 of yacc.c. */ -#line 2649 "querytransformparser.ypp" +#line 2683 "querytransformparser.ypp" { Q_ASSERT(parseInfo->variables.top()->name == (yyvsp[(3) - (8)].qName)); (yyval.expr) = create(new LetClause((yyvsp[(7) - (8)].expr), (yyvsp[(8) - (8)].expr), parseInfo->variables.top()), (yyloc), parseInfo); @@ -5268,7 +5302,7 @@ yyreduce: case 142: /* Line 1269 of yacc.c. */ -#line 2660 "querytransformparser.ypp" +#line 2694 "querytransformparser.ypp" { if((yyvsp[(1) - (3)].orderSpecs).isEmpty()) (yyval.expr) = (yyvsp[(3) - (3)].expr); @@ -5279,7 +5313,7 @@ yyreduce: case 143: /* Line 1269 of yacc.c. */ -#line 2668 "querytransformparser.ypp" +#line 2702 "querytransformparser.ypp" { if((yyvsp[(3) - (5)].orderSpecs).isEmpty()) (yyval.expr) = create(new IfThenClause((yyvsp[(2) - (5)].expr), (yyvsp[(5) - (5)].expr), create(new EmptySequence, (yyloc), parseInfo)), (yyloc), parseInfo); @@ -5292,7 +5326,7 @@ yyreduce: case 144: /* Line 1269 of yacc.c. */ -#line 2678 "querytransformparser.ypp" +#line 2712 "querytransformparser.ypp" { (yyval.orderSpecs) = OrderSpecTransfer::List(); } @@ -5300,7 +5334,7 @@ yyreduce: case 146: /* Line 1269 of yacc.c. */ -#line 2684 "querytransformparser.ypp" +#line 2718 "querytransformparser.ypp" { (yyval.orderSpecs) = (yyvsp[(2) - (2)].orderSpecs); } @@ -5308,7 +5342,7 @@ yyreduce: case 147: /* Line 1269 of yacc.c. */ -#line 2689 "querytransformparser.ypp" +#line 2723 "querytransformparser.ypp" { OrderSpecTransfer::List list; list += (yyvsp[(1) - (3)].orderSpecs); @@ -5319,7 +5353,7 @@ yyreduce: case 148: /* Line 1269 of yacc.c. */ -#line 2696 "querytransformparser.ypp" +#line 2730 "querytransformparser.ypp" { OrderSpecTransfer::List list; list.append((yyvsp[(1) - (1)].orderSpec)); @@ -5329,7 +5363,7 @@ yyreduce: case 149: /* Line 1269 of yacc.c. */ -#line 2703 "querytransformparser.ypp" +#line 2737 "querytransformparser.ypp" { (yyval.orderSpec) = OrderSpecTransfer((yyvsp[(1) - (4)].expr), OrderBy::OrderSpec((yyvsp[(2) - (4)].enums.sortDirection), (yyvsp[(3) - (4)].enums.orderingEmptySequence))); } @@ -5337,7 +5371,7 @@ yyreduce: case 150: /* Line 1269 of yacc.c. */ -#line 2708 "querytransformparser.ypp" +#line 2742 "querytransformparser.ypp" { /* Where does the specification state the default value is ascending? * @@ -5361,7 +5395,7 @@ yyreduce: case 151: /* Line 1269 of yacc.c. */ -#line 2729 "querytransformparser.ypp" +#line 2763 "querytransformparser.ypp" { (yyval.enums.sortDirection) = OrderBy::OrderSpec::Ascending; } @@ -5369,7 +5403,7 @@ yyreduce: case 152: /* Line 1269 of yacc.c. */ -#line 2734 "querytransformparser.ypp" +#line 2768 "querytransformparser.ypp" { (yyval.enums.sortDirection) = OrderBy::OrderSpec::Descending; } @@ -5377,7 +5411,7 @@ yyreduce: case 153: /* Line 1269 of yacc.c. */ -#line 2739 "querytransformparser.ypp" +#line 2773 "querytransformparser.ypp" { (yyval.enums.orderingEmptySequence) = parseInfo->staticContext->orderingEmptySequence(); } @@ -5385,7 +5419,7 @@ yyreduce: case 156: /* Line 1269 of yacc.c. */ -#line 2746 "querytransformparser.ypp" +#line 2780 "querytransformparser.ypp" { if(parseInfo->isXSLT()) resolveAndCheckCollation<ReportContext::XTDE1035>((yyvsp[(2) - (2)].sval), parseInfo, (yyloc)); @@ -5396,7 +5430,7 @@ yyreduce: case 157: /* Line 1269 of yacc.c. */ -#line 2753 "querytransformparser.ypp" +#line 2787 "querytransformparser.ypp" { /* We do nothing. We don't use collations, and we have this non-terminal * in order to accept expressions. */ @@ -5405,7 +5439,7 @@ yyreduce: case 158: /* Line 1269 of yacc.c. */ -#line 2759 "querytransformparser.ypp" +#line 2793 "querytransformparser.ypp" { parseInfo->orderStability.push(OrderBy::StableOrder); } @@ -5413,7 +5447,7 @@ yyreduce: case 159: /* Line 1269 of yacc.c. */ -#line 2763 "querytransformparser.ypp" +#line 2797 "querytransformparser.ypp" { parseInfo->orderStability.push(OrderBy::UnstableOrder); } @@ -5421,7 +5455,7 @@ yyreduce: case 162: /* Line 1269 of yacc.c. */ -#line 2771 "querytransformparser.ypp" +#line 2805 "querytransformparser.ypp" { pushVariable((yyvsp[(3) - (6)].qName), quantificationType((yyvsp[(4) - (6)].sequenceType)), (yyvsp[(6) - (6)].expr), VariableDeclaration::RangeVariable, (yyloc), parseInfo); @@ -5430,14 +5464,15 @@ yyreduce: case 163: /* Line 1269 of yacc.c. */ -#line 2775 "querytransformparser.ypp" +#line 2809 "querytransformparser.ypp" {(yyval.enums.slot) = parseInfo->staticContext->currentRangeSlot();} break; case 164: /* Line 1269 of yacc.c. */ -#line 2777 "querytransformparser.ypp" +#line 2811 "querytransformparser.ypp" { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, (yyloc)); (yyval.expr) = create(new QuantifiedExpression((yyvsp[(8) - (9)].enums.slot), QuantifiedExpression::Some, (yyvsp[(6) - (9)].expr), (yyvsp[(9) - (9)].expr)), (yyloc), parseInfo); parseInfo->finalizePushedVariable(); @@ -5446,7 +5481,7 @@ yyreduce: case 165: /* Line 1269 of yacc.c. */ -#line 2784 "querytransformparser.ypp" +#line 2819 "querytransformparser.ypp" { (yyval.expr) = pushVariable((yyvsp[(3) - (6)].qName), quantificationType((yyvsp[(4) - (6)].sequenceType)), (yyvsp[(6) - (6)].expr), VariableDeclaration::RangeVariable, (yyloc), parseInfo); @@ -5455,13 +5490,13 @@ yyreduce: case 166: /* Line 1269 of yacc.c. */ -#line 2788 "querytransformparser.ypp" +#line 2823 "querytransformparser.ypp" {(yyval.enums.slot) = parseInfo->staticContext->currentRangeSlot();} break; case 167: /* Line 1269 of yacc.c. */ -#line 2790 "querytransformparser.ypp" +#line 2825 "querytransformparser.ypp" { (yyval.expr) = create(new QuantifiedExpression((yyvsp[(8) - (9)].enums.slot), QuantifiedExpression::Some, (yyvsp[(7) - (9)].expr), (yyvsp[(9) - (9)].expr)), (yyloc), parseInfo); @@ -5471,7 +5506,7 @@ yyreduce: case 169: /* Line 1269 of yacc.c. */ -#line 2799 "querytransformparser.ypp" +#line 2834 "querytransformparser.ypp" { pushVariable((yyvsp[(3) - (6)].qName), quantificationType((yyvsp[(4) - (6)].sequenceType)), (yyvsp[(6) - (6)].expr), VariableDeclaration::RangeVariable, (yyloc), parseInfo); @@ -5480,14 +5515,15 @@ yyreduce: case 170: /* Line 1269 of yacc.c. */ -#line 2803 "querytransformparser.ypp" +#line 2838 "querytransformparser.ypp" {(yyval.enums.slot) = parseInfo->staticContext->currentRangeSlot();} break; case 171: /* Line 1269 of yacc.c. */ -#line 2805 "querytransformparser.ypp" +#line 2840 "querytransformparser.ypp" { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, (yyloc)); (yyval.expr) = create(new QuantifiedExpression((yyvsp[(8) - (9)].enums.slot), QuantifiedExpression::Every, (yyvsp[(6) - (9)].expr), (yyvsp[(9) - (9)].expr)), (yyloc), parseInfo); parseInfo->finalizePushedVariable(); @@ -5496,7 +5532,7 @@ yyreduce: case 172: /* Line 1269 of yacc.c. */ -#line 2812 "querytransformparser.ypp" +#line 2848 "querytransformparser.ypp" { (yyval.expr) = pushVariable((yyvsp[(3) - (6)].qName), quantificationType((yyvsp[(4) - (6)].sequenceType)), (yyvsp[(6) - (6)].expr), VariableDeclaration::RangeVariable, (yyloc), parseInfo); @@ -5505,13 +5541,13 @@ yyreduce: case 173: /* Line 1269 of yacc.c. */ -#line 2816 "querytransformparser.ypp" +#line 2852 "querytransformparser.ypp" {(yyval.enums.slot) = parseInfo->staticContext->currentRangeSlot();} break; case 174: /* Line 1269 of yacc.c. */ -#line 2818 "querytransformparser.ypp" +#line 2854 "querytransformparser.ypp" { (yyval.expr) = create(new QuantifiedExpression((yyvsp[(8) - (9)].enums.slot), QuantifiedExpression::Every, (yyvsp[(7) - (9)].expr), (yyvsp[(9) - (9)].expr)), (yyloc), parseInfo); @@ -5521,7 +5557,7 @@ yyreduce: case 176: /* Line 1269 of yacc.c. */ -#line 2827 "querytransformparser.ypp" +#line 2863 "querytransformparser.ypp" { (yyval.expr) = (yyvsp[(2) - (2)].expr); } @@ -5529,7 +5565,7 @@ yyreduce: case 177: /* Line 1269 of yacc.c. */ -#line 2854 "querytransformparser.ypp" +#line 2890 "querytransformparser.ypp" { parseInfo->typeswitchSource.push((yyvsp[(3) - (4)].expr)); } @@ -5537,9 +5573,9 @@ yyreduce: case 178: /* Line 1269 of yacc.c. */ -#line 2858 "querytransformparser.ypp" +#line 2894 "querytransformparser.ypp" { - disallowedConstruct(parseInfo, (yyloc)); + allowedIn(QXmlQuery::XQuery10, parseInfo, (yyloc)); parseInfo->typeswitchSource.pop(); (yyval.expr) = (yyvsp[(6) - (6)].expr); } @@ -5547,7 +5583,7 @@ yyreduce: case 179: /* Line 1269 of yacc.c. */ -#line 2865 "querytransformparser.ypp" +#line 2901 "querytransformparser.ypp" { if(!(yyvsp[(2) - (3)].qName).isNull()) { @@ -5559,7 +5595,7 @@ yyreduce: case 180: /* Line 1269 of yacc.c. */ -#line 2873 "querytransformparser.ypp" +#line 2909 "querytransformparser.ypp" { /* The variable shouldn't be in-scope for other case branches. */ if(!(yyvsp[(2) - (6)].qName).isNull()) @@ -5569,7 +5605,7 @@ yyreduce: case 181: /* Line 1269 of yacc.c. */ -#line 2879 "querytransformparser.ypp" +#line 2915 "querytransformparser.ypp" { const Expression::Ptr instanceOf(create(new InstanceOf(parseInfo->typeswitchSource.top(), (yyvsp[(3) - (8)].sequenceType)), (yyloc), parseInfo)); (yyval.expr) = create(new IfThenClause(instanceOf, (yyvsp[(6) - (8)].expr), (yyvsp[(8) - (8)].expr)), (yyloc), parseInfo); @@ -5578,7 +5614,7 @@ yyreduce: case 184: /* Line 1269 of yacc.c. */ -#line 2888 "querytransformparser.ypp" +#line 2924 "querytransformparser.ypp" { (yyval.qName) = QXmlName(); } @@ -5586,7 +5622,7 @@ yyreduce: case 185: /* Line 1269 of yacc.c. */ -#line 2893 "querytransformparser.ypp" +#line 2929 "querytransformparser.ypp" { (yyval.qName) = (yyvsp[(2) - (3)].qName); } @@ -5594,7 +5630,7 @@ yyreduce: case 186: /* Line 1269 of yacc.c. */ -#line 2898 "querytransformparser.ypp" +#line 2934 "querytransformparser.ypp" { (yyval.expr) = (yyvsp[(3) - (3)].expr); } @@ -5602,7 +5638,7 @@ yyreduce: case 187: /* Line 1269 of yacc.c. */ -#line 2902 "querytransformparser.ypp" +#line 2938 "querytransformparser.ypp" { if(!(yyvsp[(3) - (3)].qName).isNull()) { @@ -5615,7 +5651,7 @@ yyreduce: case 188: /* Line 1269 of yacc.c. */ -#line 2911 "querytransformparser.ypp" +#line 2947 "querytransformparser.ypp" { if(!(yyvsp[(3) - (6)].qName).isNull()) parseInfo->finalizePushedVariable(); @@ -5625,107 +5661,119 @@ yyreduce: case 189: /* Line 1269 of yacc.c. */ -#line 2918 "querytransformparser.ypp" +#line 2954 "querytransformparser.ypp" { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, (yyloc)); (yyval.expr) = create(new IfThenClause((yyvsp[(3) - (8)].expr), (yyvsp[(6) - (8)].expr), (yyvsp[(8) - (8)].expr)), (yyloc), parseInfo); } break; case 191: /* Line 1269 of yacc.c. */ -#line 2924 "querytransformparser.ypp" +#line 2961 "querytransformparser.ypp" { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, (yyloc)); (yyval.expr) = create(new OrExpression((yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)), (yyloc), parseInfo); } break; case 193: /* Line 1269 of yacc.c. */ -#line 2930 "querytransformparser.ypp" +#line 2968 "querytransformparser.ypp" { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, (yyloc)); (yyval.expr) = create(new AndExpression((yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)), (yyloc), parseInfo); } break; case 199: /* Line 1269 of yacc.c. */ -#line 2941 "querytransformparser.ypp" +#line 2980 "querytransformparser.ypp" { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, (yyloc)); (yyval.expr) = create(new RangeExpression((yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)), (yyloc), parseInfo); } break; case 201: /* Line 1269 of yacc.c. */ -#line 2947 "querytransformparser.ypp" +#line 2987 "querytransformparser.ypp" { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, (yyloc)); (yyval.expr) = create(new ArithmeticExpression((yyvsp[(1) - (3)].expr), (yyvsp[(2) - (3)].enums.mathOperator), (yyvsp[(3) - (3)].expr)), (yyloc), parseInfo); } break; case 202: /* Line 1269 of yacc.c. */ -#line 2951 "querytransformparser.ypp" +#line 2992 "querytransformparser.ypp" {(yyval.enums.mathOperator) = AtomicMathematician::Add;} break; case 203: /* Line 1269 of yacc.c. */ -#line 2952 "querytransformparser.ypp" +#line 2993 "querytransformparser.ypp" {(yyval.enums.mathOperator) = AtomicMathematician::Substract;} break; case 205: /* Line 1269 of yacc.c. */ -#line 2956 "querytransformparser.ypp" +#line 2997 "querytransformparser.ypp" { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, (yyloc)); (yyval.expr) = create(new ArithmeticExpression((yyvsp[(1) - (3)].expr), (yyvsp[(2) - (3)].enums.mathOperator), (yyvsp[(3) - (3)].expr)), (yyloc), parseInfo); } break; case 206: /* Line 1269 of yacc.c. */ -#line 2960 "querytransformparser.ypp" +#line 3002 "querytransformparser.ypp" {(yyval.enums.mathOperator) = AtomicMathematician::Multiply;} break; case 207: /* Line 1269 of yacc.c. */ -#line 2961 "querytransformparser.ypp" +#line 3003 "querytransformparser.ypp" {(yyval.enums.mathOperator) = AtomicMathematician::Div;} break; case 208: /* Line 1269 of yacc.c. */ -#line 2962 "querytransformparser.ypp" +#line 3004 "querytransformparser.ypp" {(yyval.enums.mathOperator) = AtomicMathematician::IDiv;} break; case 209: /* Line 1269 of yacc.c. */ -#line 2963 "querytransformparser.ypp" +#line 3005 "querytransformparser.ypp" {(yyval.enums.mathOperator) = AtomicMathematician::Mod;} break; case 211: /* Line 1269 of yacc.c. */ -#line 2967 "querytransformparser.ypp" +#line 3009 "querytransformparser.ypp" { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 + | QXmlQuery::XPath20 + | QXmlQuery::XmlSchema11IdentityConstraintField + | QXmlQuery::XmlSchema11IdentityConstraintSelector), + parseInfo, (yyloc)); (yyval.expr) = create(new CombineNodes((yyvsp[(1) - (3)].expr), CombineNodes::Union, (yyvsp[(3) - (3)].expr)), (yyloc), parseInfo); } break; case 213: /* Line 1269 of yacc.c. */ -#line 2973 "querytransformparser.ypp" +#line 3020 "querytransformparser.ypp" { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, (yyloc)); (yyval.expr) = create(new CombineNodes((yyvsp[(1) - (3)].expr), (yyvsp[(2) - (3)].enums.combinedNodeOp), (yyvsp[(3) - (3)].expr)), (yyloc), parseInfo); } break; case 216: /* Line 1269 of yacc.c. */ -#line 2981 "querytransformparser.ypp" +#line 3029 "querytransformparser.ypp" { (yyval.enums.combinedNodeOp) = CombineNodes::Intersect; } @@ -5733,7 +5781,7 @@ yyreduce: case 217: /* Line 1269 of yacc.c. */ -#line 2985 "querytransformparser.ypp" +#line 3033 "querytransformparser.ypp" { (yyval.enums.combinedNodeOp) = CombineNodes::Except; } @@ -5741,48 +5789,53 @@ yyreduce: case 219: /* Line 1269 of yacc.c. */ -#line 2991 "querytransformparser.ypp" +#line 3039 "querytransformparser.ypp" { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, (yyloc)); (yyval.expr) = create(new InstanceOf((yyvsp[(1) - (4)].expr), - SequenceType::Ptr((yyvsp[(4) - (4)].sequenceType))), (yyloc), parseInfo); + SequenceType::Ptr((yyvsp[(4) - (4)].sequenceType))), (yyloc), parseInfo); } break; case 221: /* Line 1269 of yacc.c. */ -#line 2998 "querytransformparser.ypp" +#line 3047 "querytransformparser.ypp" { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, (yyloc)); (yyval.expr) = create(new TreatAs((yyvsp[(1) - (4)].expr), (yyvsp[(4) - (4)].sequenceType)), (yyloc), parseInfo); } break; case 223: /* Line 1269 of yacc.c. */ -#line 3004 "querytransformparser.ypp" +#line 3054 "querytransformparser.ypp" { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, (yyloc)); (yyval.expr) = create(new CastableAs((yyvsp[(1) - (4)].expr), (yyvsp[(4) - (4)].sequenceType)), (yyloc), parseInfo); } break; case 225: /* Line 1269 of yacc.c. */ -#line 3010 "querytransformparser.ypp" +#line 3061 "querytransformparser.ypp" { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, (yyloc)); (yyval.expr) = create(new CastAs((yyvsp[(1) - (4)].expr), (yyvsp[(4) - (4)].sequenceType)), (yyloc), parseInfo); } break; case 227: /* Line 1269 of yacc.c. */ -#line 3016 "querytransformparser.ypp" +#line 3068 "querytransformparser.ypp" { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, (yyloc)); (yyval.expr) = create(new UnaryExpression((yyvsp[(1) - (2)].enums.mathOperator), (yyvsp[(2) - (2)].expr), parseInfo->staticContext), (yyloc), parseInfo); } break; case 228: /* Line 1269 of yacc.c. */ -#line 3021 "querytransformparser.ypp" +#line 3074 "querytransformparser.ypp" { (yyval.enums.mathOperator) = AtomicMathematician::Add; } @@ -5790,7 +5843,7 @@ yyreduce: case 229: /* Line 1269 of yacc.c. */ -#line 3025 "querytransformparser.ypp" +#line 3078 "querytransformparser.ypp" { (yyval.enums.mathOperator) = AtomicMathematician::Substract; } @@ -5798,51 +5851,52 @@ yyreduce: case 233: /* Line 1269 of yacc.c. */ -#line 3034 "querytransformparser.ypp" +#line 3087 "querytransformparser.ypp" { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, (yyloc)); (yyval.expr) = create(new GeneralComparison((yyvsp[(1) - (3)].expr), (yyvsp[(2) - (3)].enums.valueOperator), (yyvsp[(3) - (3)].expr), parseInfo->isBackwardsCompat.top()), (yyloc), parseInfo); } break; case 234: /* Line 1269 of yacc.c. */ -#line 3038 "querytransformparser.ypp" +#line 3092 "querytransformparser.ypp" {(yyval.enums.valueOperator) = AtomicComparator::OperatorEqual;} break; case 235: /* Line 1269 of yacc.c. */ -#line 3039 "querytransformparser.ypp" +#line 3093 "querytransformparser.ypp" {(yyval.enums.valueOperator) = AtomicComparator::OperatorNotEqual;} break; case 236: /* Line 1269 of yacc.c. */ -#line 3040 "querytransformparser.ypp" +#line 3094 "querytransformparser.ypp" {(yyval.enums.valueOperator) = AtomicComparator::OperatorGreaterOrEqual;} break; case 237: /* Line 1269 of yacc.c. */ -#line 3041 "querytransformparser.ypp" +#line 3095 "querytransformparser.ypp" {(yyval.enums.valueOperator) = AtomicComparator::OperatorGreaterThan;} break; case 238: /* Line 1269 of yacc.c. */ -#line 3042 "querytransformparser.ypp" +#line 3096 "querytransformparser.ypp" {(yyval.enums.valueOperator) = AtomicComparator::OperatorLessOrEqual;} break; case 239: /* Line 1269 of yacc.c. */ -#line 3043 "querytransformparser.ypp" +#line 3097 "querytransformparser.ypp" {(yyval.enums.valueOperator) = AtomicComparator::OperatorLessThan;} break; case 240: /* Line 1269 of yacc.c. */ -#line 3046 "querytransformparser.ypp" +#line 3100 "querytransformparser.ypp" { (yyval.expr) = create(new ValueComparison((yyvsp[(1) - (3)].expr), (yyvsp[(2) - (3)].enums.valueOperator), (yyvsp[(3) - (3)].expr)), (yyloc), parseInfo); } @@ -5850,43 +5904,43 @@ yyreduce: case 241: /* Line 1269 of yacc.c. */ -#line 3050 "querytransformparser.ypp" +#line 3104 "querytransformparser.ypp" {(yyval.enums.valueOperator) = AtomicComparator::OperatorEqual;} break; case 242: /* Line 1269 of yacc.c. */ -#line 3051 "querytransformparser.ypp" +#line 3105 "querytransformparser.ypp" {(yyval.enums.valueOperator) = AtomicComparator::OperatorNotEqual;} break; case 243: /* Line 1269 of yacc.c. */ -#line 3052 "querytransformparser.ypp" +#line 3106 "querytransformparser.ypp" {(yyval.enums.valueOperator) = AtomicComparator::OperatorGreaterOrEqual;} break; case 244: /* Line 1269 of yacc.c. */ -#line 3053 "querytransformparser.ypp" +#line 3107 "querytransformparser.ypp" {(yyval.enums.valueOperator) = AtomicComparator::OperatorGreaterThan;} break; case 245: /* Line 1269 of yacc.c. */ -#line 3054 "querytransformparser.ypp" +#line 3108 "querytransformparser.ypp" {(yyval.enums.valueOperator) = AtomicComparator::OperatorLessOrEqual;} break; case 246: /* Line 1269 of yacc.c. */ -#line 3055 "querytransformparser.ypp" +#line 3109 "querytransformparser.ypp" {(yyval.enums.valueOperator) = AtomicComparator::OperatorLessThan;} break; case 247: /* Line 1269 of yacc.c. */ -#line 3058 "querytransformparser.ypp" +#line 3112 "querytransformparser.ypp" { (yyval.expr) = create(new NodeComparison((yyvsp[(1) - (3)].expr), (yyvsp[(2) - (3)].enums.nodeOperator), (yyvsp[(3) - (3)].expr)), (yyloc), parseInfo); } @@ -5894,27 +5948,27 @@ yyreduce: case 248: /* Line 1269 of yacc.c. */ -#line 3062 "querytransformparser.ypp" +#line 3116 "querytransformparser.ypp" {(yyval.enums.nodeOperator) = QXmlNodeModelIndex::Is;} break; case 249: /* Line 1269 of yacc.c. */ -#line 3063 "querytransformparser.ypp" +#line 3117 "querytransformparser.ypp" {(yyval.enums.nodeOperator) = QXmlNodeModelIndex::Precedes;} break; case 250: /* Line 1269 of yacc.c. */ -#line 3064 "querytransformparser.ypp" +#line 3118 "querytransformparser.ypp" {(yyval.enums.nodeOperator) = QXmlNodeModelIndex::Follows;} break; case 251: /* Line 1269 of yacc.c. */ -#line 3067 "querytransformparser.ypp" +#line 3121 "querytransformparser.ypp" { - disallowedConstruct(parseInfo, (yyloc)); + allowedIn(QXmlQuery::XQuery10, parseInfo, (yyloc)); parseInfo->staticContext->error(QtXmlPatterns::tr("The Schema Validation Feature is not supported. " "Hence, %1-expressions may not be used.") .arg(formatKeyword("validate")), @@ -5927,26 +5981,27 @@ yyreduce: case 252: /* Line 1269 of yacc.c. */ -#line 3080 "querytransformparser.ypp" +#line 3134 "querytransformparser.ypp" {(yyval.enums.validationMode) = Validate::Strict;} break; case 253: /* Line 1269 of yacc.c. */ -#line 3081 "querytransformparser.ypp" +#line 3135 "querytransformparser.ypp" {(yyval.enums.validationMode) = Validate::Strict;} break; case 254: /* Line 1269 of yacc.c. */ -#line 3082 "querytransformparser.ypp" +#line 3136 "querytransformparser.ypp" {(yyval.enums.validationMode) = Validate::Lax;} break; case 255: /* Line 1269 of yacc.c. */ -#line 3085 "querytransformparser.ypp" +#line 3139 "querytransformparser.ypp" { + allowedIn(QXmlQuery::XQuery10, parseInfo, (yyloc)); /* We don't support any pragmas, so we only do the * necessary validation and use the fallback expression. */ @@ -5964,7 +6019,7 @@ yyreduce: case 256: /* Line 1269 of yacc.c. */ -#line 3101 "querytransformparser.ypp" +#line 3156 "querytransformparser.ypp" { (yyval.expr).reset(); } @@ -5972,7 +6027,7 @@ yyreduce: case 257: /* Line 1269 of yacc.c. */ -#line 3105 "querytransformparser.ypp" +#line 3160 "querytransformparser.ypp" { (yyval.expr) = (yyvsp[(2) - (3)].expr); } @@ -5980,15 +6035,15 @@ yyreduce: case 260: /* Line 1269 of yacc.c. */ -#line 3113 "querytransformparser.ypp" +#line 3168 "querytransformparser.ypp" { - disallowedConstruct(parseInfo, (yyloc)); + allowedIn(QXmlQuery::XQuery10, parseInfo, (yyloc)); } break; case 263: /* Line 1269 of yacc.c. */ -#line 3121 "querytransformparser.ypp" +#line 3176 "querytransformparser.ypp" { /* This is "/step". That is, fn:root(self::node()) treat as document-node()/RelativePathExpr. */ (yyval.expr) = create(new Path(createRootExpression(parseInfo, (yyloc)), (yyvsp[(2) - (2)].expr)), (yyloc), parseInfo); @@ -5997,7 +6052,7 @@ yyreduce: case 264: /* Line 1269 of yacc.c. */ -#line 3127 "querytransformparser.ypp" +#line 3182 "querytransformparser.ypp" { (yyval.expr) = createSlashSlashPath(createRootExpression(parseInfo, (yyloc)), (yyvsp[(2) - (2)].expr), (yyloc), parseInfo); } @@ -6005,7 +6060,7 @@ yyreduce: case 265: /* Line 1269 of yacc.c. */ -#line 3131 "querytransformparser.ypp" +#line 3186 "querytransformparser.ypp" { /* This is "/". That is, fn:root(self::node()) treat as document-node(). */ (yyval.expr) = createRootExpression(parseInfo, (yyloc)); @@ -6014,7 +6069,7 @@ yyreduce: case 268: /* Line 1269 of yacc.c. */ -#line 3141 "querytransformparser.ypp" +#line 3196 "querytransformparser.ypp" { (yyval.expr) = create(new Path((yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr), (yyvsp[(2) - (3)].enums.pathKind)), (yyloc), parseInfo); } @@ -6022,7 +6077,7 @@ yyreduce: case 269: /* Line 1269 of yacc.c. */ -#line 3145 "querytransformparser.ypp" +#line 3200 "querytransformparser.ypp" { const Expression::Ptr orderBy(createReturnOrderBy((yyvsp[(4) - (7)].orderSpecs), (yyvsp[(6) - (7)].expr), parseInfo->orderStability.pop(), (yyloc), parseInfo)); @@ -6035,7 +6090,7 @@ yyreduce: case 270: /* Line 1269 of yacc.c. */ -#line 3154 "querytransformparser.ypp" +#line 3209 "querytransformparser.ypp" { (yyval.expr) = createSlashSlashPath((yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr), (yyloc), parseInfo); } @@ -6043,7 +6098,7 @@ yyreduce: case 271: /* Line 1269 of yacc.c. */ -#line 3159 "querytransformparser.ypp" +#line 3214 "querytransformparser.ypp" { (yyval.expr) = NodeSortExpression::wrapAround((yyvsp[(1) - (1)].expr), parseInfo->staticContext); } @@ -6051,7 +6106,7 @@ yyreduce: case 273: /* Line 1269 of yacc.c. */ -#line 3164 "querytransformparser.ypp" +#line 3219 "querytransformparser.ypp" { (yyval.expr) = create(new CurrentItemStore((yyvsp[(2) - (2)].expr)), (yyloc), parseInfo); } @@ -6059,7 +6114,7 @@ yyreduce: case 274: /* Line 1269 of yacc.c. */ -#line 3168 "querytransformparser.ypp" +#line 3223 "querytransformparser.ypp" { const xsDouble version = (yyvsp[(1) - (1)].sval).toDouble(); @@ -6071,7 +6126,7 @@ yyreduce: case 275: /* Line 1269 of yacc.c. */ -#line 3176 "querytransformparser.ypp" +#line 3231 "querytransformparser.ypp" { if((yyvsp[(2) - (3)].enums.Double) < 2) (yyval.expr) = createCompatStore((yyvsp[(3) - (3)].expr), (yyloc), parseInfo); @@ -6082,8 +6137,9 @@ yyreduce: case 276: /* Line 1269 of yacc.c. */ -#line 3183 "querytransformparser.ypp" +#line 3238 "querytransformparser.ypp" { + allowedIn(QXmlQuery::XSLT20, parseInfo, (yyloc)); Q_ASSERT(!(yyvsp[(2) - (5)].sval).isEmpty()); (yyval.expr) = create(new StaticBaseURIStore((yyvsp[(2) - (5)].sval), (yyvsp[(4) - (5)].expr)), (yyloc), parseInfo); } @@ -6091,8 +6147,9 @@ yyreduce: case 277: /* Line 1269 of yacc.c. */ -#line 3189 "querytransformparser.ypp" +#line 3245 "querytransformparser.ypp" { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XSLT20), parseInfo, (yyloc)); parseInfo->resolvers.push(parseInfo->staticContext->namespaceBindings()); const NamespaceResolver::Ptr resolver(new DelegatingNamespaceResolver(parseInfo->staticContext->namespaceBindings())); resolver->addBinding(QXmlName(parseInfo->staticContext->namePool()->allocateNamespace((yyvsp[(5) - (6)].sval)), @@ -6104,7 +6161,7 @@ yyreduce: case 278: /* Line 1269 of yacc.c. */ -#line 3199 "querytransformparser.ypp" +#line 3256 "querytransformparser.ypp" { parseInfo->staticContext->setNamespaceBindings(parseInfo->resolvers.pop()); (yyval.expr) = (yyvsp[(8) - (9)].expr); @@ -6113,7 +6170,7 @@ yyreduce: case 279: /* Line 1269 of yacc.c. */ -#line 3204 "querytransformparser.ypp" +#line 3261 "querytransformparser.ypp" { (yyval.expr) = create(new CallTemplate((yyvsp[(2) - (5)].qName), parseInfo->templateWithParams), (yyloc), parseInfo); parseInfo->templateWithParametersHandled(); @@ -6123,7 +6180,7 @@ yyreduce: case 280: /* Line 1269 of yacc.c. */ -#line 3211 "querytransformparser.ypp" +#line 3268 "querytransformparser.ypp" { parseInfo->startParsingWithParam(); } @@ -6131,7 +6188,7 @@ yyreduce: case 281: /* Line 1269 of yacc.c. */ -#line 3215 "querytransformparser.ypp" +#line 3272 "querytransformparser.ypp" { parseInfo->endParsingWithParam(); } @@ -6139,42 +6196,42 @@ yyreduce: case 282: /* Line 1269 of yacc.c. */ -#line 3220 "querytransformparser.ypp" +#line 3277 "querytransformparser.ypp" { } break; case 283: /* Line 1269 of yacc.c. */ -#line 3223 "querytransformparser.ypp" +#line 3280 "querytransformparser.ypp" { } break; case 284: /* Line 1269 of yacc.c. */ -#line 3226 "querytransformparser.ypp" +#line 3283 "querytransformparser.ypp" { } break; case 285: /* Line 1269 of yacc.c. */ -#line 3230 "querytransformparser.ypp" +#line 3287 "querytransformparser.ypp" { } break; case 286: /* Line 1269 of yacc.c. */ -#line 3233 "querytransformparser.ypp" +#line 3290 "querytransformparser.ypp" { } break; case 287: /* Line 1269 of yacc.c. */ -#line 3237 "querytransformparser.ypp" +#line 3294 "querytransformparser.ypp" { /* Note, this grammar rule is invoked for @c xsl:param @em and @c * xsl:with-param. */ @@ -6242,7 +6299,7 @@ yyreduce: case 288: /* Line 1269 of yacc.c. */ -#line 3302 "querytransformparser.ypp" +#line 3359 "querytransformparser.ypp" { (yyval.enums.Bool) = false; } @@ -6250,7 +6307,7 @@ yyreduce: case 289: /* Line 1269 of yacc.c. */ -#line 3306 "querytransformparser.ypp" +#line 3363 "querytransformparser.ypp" { (yyval.enums.Bool) = true; } @@ -6258,7 +6315,7 @@ yyreduce: case 290: /* Line 1269 of yacc.c. */ -#line 3311 "querytransformparser.ypp" +#line 3368 "querytransformparser.ypp" { (yyval.expr) = Expression::Ptr(); } @@ -6266,7 +6323,7 @@ yyreduce: case 291: /* Line 1269 of yacc.c. */ -#line 3315 "querytransformparser.ypp" +#line 3372 "querytransformparser.ypp" { (yyval.expr) = (yyvsp[(2) - (2)].expr); } @@ -6274,7 +6331,7 @@ yyreduce: case 292: /* Line 1269 of yacc.c. */ -#line 3324 "querytransformparser.ypp" +#line 3381 "querytransformparser.ypp" { (yyval.enums.pathKind) = Path::RegularPath; } @@ -6282,7 +6339,7 @@ yyreduce: case 293: /* Line 1269 of yacc.c. */ -#line 3328 "querytransformparser.ypp" +#line 3385 "querytransformparser.ypp" { (yyval.enums.pathKind) = Path::XSLTForEach; } @@ -6290,7 +6347,7 @@ yyreduce: case 294: /* Line 1269 of yacc.c. */ -#line 3332 "querytransformparser.ypp" +#line 3389 "querytransformparser.ypp" { (yyval.enums.pathKind) = Path::ForApplyTemplate; } @@ -6298,7 +6355,7 @@ yyreduce: case 296: /* Line 1269 of yacc.c. */ -#line 3338 "querytransformparser.ypp" +#line 3395 "querytransformparser.ypp" { (yyval.expr) = create(GenericPredicate::create((yyvsp[(1) - (4)].expr), (yyvsp[(3) - (4)].expr), parseInfo->staticContext, fromYYLTYPE((yyloc), parseInfo)), (yyloc), parseInfo); } @@ -6306,7 +6363,7 @@ yyreduce: case 299: /* Line 1269 of yacc.c. */ -#line 3346 "querytransformparser.ypp" +#line 3403 "querytransformparser.ypp" { if((yyvsp[(1) - (1)].enums.axis) == QXmlNodeModelIndex::AxisAttribute) parseInfo->nodeTestSource = BuiltinTypes::attribute; @@ -6315,7 +6372,7 @@ yyreduce: case 300: /* Line 1269 of yacc.c. */ -#line 3351 "querytransformparser.ypp" +#line 3408 "querytransformparser.ypp" { if((yyvsp[(3) - (3)].itemType)) { @@ -6344,7 +6401,7 @@ yyreduce: case 304: /* Line 1269 of yacc.c. */ -#line 3381 "querytransformparser.ypp" +#line 3438 "querytransformparser.ypp" { if((yyvsp[(1) - (2)].enums.axis) == QXmlNodeModelIndex::AxisNamespace) { @@ -6356,84 +6413,114 @@ yyreduce: } else (yyval.enums.axis) = (yyvsp[(1) - (2)].enums.axis); + + switch((yyvsp[(1) - (2)].enums.axis)) + { + case QXmlNodeModelIndex::AxisAttribute: + { + allowedIn(QueryLanguages( QXmlQuery::XPath20 + | QXmlQuery::XQuery10 + | QXmlQuery::XmlSchema11IdentityConstraintField + | QXmlQuery::XSLT20), + parseInfo, (yyloc)); + break; + } + case QXmlNodeModelIndex::AxisChild: + { + allowedIn(QueryLanguages( QXmlQuery::XPath20 + | QXmlQuery::XQuery10 + | QXmlQuery::XmlSchema11IdentityConstraintField + | QXmlQuery::XmlSchema11IdentityConstraintSelector + | QXmlQuery::XSLT20), + parseInfo, (yyloc)); + break; + } + default: + { + allowedIn(QueryLanguages( QXmlQuery::XPath20 + | QXmlQuery::XQuery10 + | QXmlQuery::XSLT20), + parseInfo, (yyloc)); + } + } } break; case 305: /* Line 1269 of yacc.c. */ -#line 3394 "querytransformparser.ypp" +#line 3481 "querytransformparser.ypp" {(yyval.enums.axis) = QXmlNodeModelIndex::AxisAncestorOrSelf ;} break; case 306: /* Line 1269 of yacc.c. */ -#line 3395 "querytransformparser.ypp" +#line 3482 "querytransformparser.ypp" {(yyval.enums.axis) = QXmlNodeModelIndex::AxisAncestor ;} break; case 307: /* Line 1269 of yacc.c. */ -#line 3396 "querytransformparser.ypp" +#line 3483 "querytransformparser.ypp" {(yyval.enums.axis) = QXmlNodeModelIndex::AxisAttribute ;} break; case 308: /* Line 1269 of yacc.c. */ -#line 3397 "querytransformparser.ypp" +#line 3484 "querytransformparser.ypp" {(yyval.enums.axis) = QXmlNodeModelIndex::AxisChild ;} break; case 309: /* Line 1269 of yacc.c. */ -#line 3398 "querytransformparser.ypp" +#line 3485 "querytransformparser.ypp" {(yyval.enums.axis) = QXmlNodeModelIndex::AxisDescendantOrSelf;} break; case 310: /* Line 1269 of yacc.c. */ -#line 3399 "querytransformparser.ypp" +#line 3486 "querytransformparser.ypp" {(yyval.enums.axis) = QXmlNodeModelIndex::AxisDescendant ;} break; case 311: /* Line 1269 of yacc.c. */ -#line 3400 "querytransformparser.ypp" +#line 3487 "querytransformparser.ypp" {(yyval.enums.axis) = QXmlNodeModelIndex::AxisFollowing ;} break; case 312: /* Line 1269 of yacc.c. */ -#line 3401 "querytransformparser.ypp" +#line 3488 "querytransformparser.ypp" {(yyval.enums.axis) = QXmlNodeModelIndex::AxisPreceding ;} break; case 313: /* Line 1269 of yacc.c. */ -#line 3402 "querytransformparser.ypp" +#line 3489 "querytransformparser.ypp" {(yyval.enums.axis) = QXmlNodeModelIndex::AxisFollowingSibling;} break; case 314: /* Line 1269 of yacc.c. */ -#line 3403 "querytransformparser.ypp" +#line 3490 "querytransformparser.ypp" {(yyval.enums.axis) = QXmlNodeModelIndex::AxisPrecedingSibling;} break; case 315: /* Line 1269 of yacc.c. */ -#line 3404 "querytransformparser.ypp" +#line 3491 "querytransformparser.ypp" {(yyval.enums.axis) = QXmlNodeModelIndex::AxisParent ;} break; case 316: /* Line 1269 of yacc.c. */ -#line 3405 "querytransformparser.ypp" +#line 3492 "querytransformparser.ypp" {(yyval.enums.axis) = QXmlNodeModelIndex::AxisSelf ;} break; case 317: /* Line 1269 of yacc.c. */ -#line 3408 "querytransformparser.ypp" +#line 3495 "querytransformparser.ypp" { parseInfo->nodeTestSource = BuiltinTypes::attribute; } @@ -6441,8 +6528,9 @@ yyreduce: case 318: /* Line 1269 of yacc.c. */ -#line 3412 "querytransformparser.ypp" +#line 3499 "querytransformparser.ypp" { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XSLT20 | QXmlQuery::XmlSchema11IdentityConstraintField), parseInfo, (yyloc)); (yyval.expr) = create(new AxisStep(QXmlNodeModelIndex::AxisAttribute, (yyvsp[(3) - (3)].itemType)), (yyloc), parseInfo); parseInfo->restoreNodeTestSource(); @@ -6451,7 +6539,7 @@ yyreduce: case 319: /* Line 1269 of yacc.c. */ -#line 3418 "querytransformparser.ypp" +#line 3506 "querytransformparser.ypp" { ItemType::Ptr nodeTest; @@ -6466,7 +6554,7 @@ yyreduce: case 320: /* Line 1269 of yacc.c. */ -#line 3429 "querytransformparser.ypp" +#line 3517 "querytransformparser.ypp" { (yyval.expr) = create(new AxisStep(QXmlNodeModelIndex::AxisAttribute, (yyvsp[(1) - (1)].itemType)), (yyloc), parseInfo); } @@ -6474,15 +6562,23 @@ yyreduce: case 322: /* Line 1269 of yacc.c. */ -#line 3436 "querytransformparser.ypp" +#line 3524 "querytransformparser.ypp" { (yyval.expr) = create(new AxisStep(QXmlNodeModelIndex::AxisParent, BuiltinTypes::node), (yyloc), parseInfo); } break; + case 324: +/* Line 1269 of yacc.c. */ +#line 3530 "querytransformparser.ypp" + { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, (yyloc)); + } + break; + case 325: /* Line 1269 of yacc.c. */ -#line 3444 "querytransformparser.ypp" +#line 3535 "querytransformparser.ypp" { (yyval.itemType) = QNameTest::create(parseInfo->nodeTestSource, (yyvsp[(1) - (1)].qName)); } @@ -6490,7 +6586,7 @@ yyreduce: case 327: /* Line 1269 of yacc.c. */ -#line 3450 "querytransformparser.ypp" +#line 3541 "querytransformparser.ypp" { (yyval.itemType) = parseInfo->nodeTestSource; } @@ -6498,7 +6594,7 @@ yyreduce: case 328: /* Line 1269 of yacc.c. */ -#line 3454 "querytransformparser.ypp" +#line 3545 "querytransformparser.ypp" { const NamePool::Ptr np(parseInfo->staticContext->namePool()); const ReflectYYLTYPE ryy((yyloc), parseInfo); @@ -6511,8 +6607,9 @@ yyreduce: case 329: /* Line 1269 of yacc.c. */ -#line 3463 "querytransformparser.ypp" +#line 3554 "querytransformparser.ypp" { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, (yyloc)); const QXmlName::LocalNameCode c = parseInfo->staticContext->namePool()->allocateLocalName((yyvsp[(1) - (1)].sval)); (yyval.itemType) = LocalNameTest::create(parseInfo->nodeTestSource, c); } @@ -6520,15 +6617,16 @@ yyreduce: case 331: /* Line 1269 of yacc.c. */ -#line 3470 "querytransformparser.ypp" +#line 3562 "querytransformparser.ypp" { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, (yyloc)); (yyval.expr) = create(GenericPredicate::create((yyvsp[(1) - (4)].expr), (yyvsp[(3) - (4)].expr), parseInfo->staticContext, fromYYLTYPE((yylsp[(4) - (4)]), parseInfo)), (yyloc), parseInfo); } break; case 339: /* Line 1269 of yacc.c. */ -#line 3482 "querytransformparser.ypp" +#line 3575 "querytransformparser.ypp" { (yyval.expr) = create(new ApplyTemplate(parseInfo->modeFor((yyvsp[(2) - (5)].qName)), parseInfo->templateWithParams, @@ -6541,7 +6639,7 @@ yyreduce: case 341: /* Line 1269 of yacc.c. */ -#line 3493 "querytransformparser.ypp" +#line 3586 "querytransformparser.ypp" { (yyval.expr) = create(new Literal(AtomicString::fromValue((yyvsp[(1) - (1)].sval))), (yyloc), parseInfo); } @@ -6549,31 +6647,34 @@ yyreduce: case 342: /* Line 1269 of yacc.c. */ -#line 3498 "querytransformparser.ypp" +#line 3591 "querytransformparser.ypp" { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, (yyloc)); (yyval.expr) = createNumericLiteral<Double>((yyvsp[(1) - (1)].sval), (yyloc), parseInfo); } break; case 343: /* Line 1269 of yacc.c. */ -#line 3502 "querytransformparser.ypp" +#line 3596 "querytransformparser.ypp" { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, (yyloc)); (yyval.expr) = createNumericLiteral<Numeric>((yyvsp[(1) - (1)].sval), (yyloc), parseInfo); } break; case 344: /* Line 1269 of yacc.c. */ -#line 3507 "querytransformparser.ypp" +#line 3602 "querytransformparser.ypp" { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, (yyloc)); (yyval.expr) = resolveVariable((yyvsp[(2) - (2)].qName), (yyloc), parseInfo, false); } break; case 345: /* Line 1269 of yacc.c. */ -#line 3512 "querytransformparser.ypp" +#line 3608 "querytransformparser.ypp" { /* See: http://www.w3.org/TR/xpath20/#id-variables */ (yyval.qName) = parseInfo->staticContext->namePool()->allocateQName(QString(), (yyvsp[(1) - (1)].sval)); @@ -6582,7 +6683,7 @@ yyreduce: case 346: /* Line 1269 of yacc.c. */ -#line 3517 "querytransformparser.ypp" +#line 3613 "querytransformparser.ypp" { (yyval.qName) = (yyvsp[(1) - (1)].qName); } @@ -6590,23 +6691,25 @@ yyreduce: case 347: /* Line 1269 of yacc.c. */ -#line 3522 "querytransformparser.ypp" +#line 3618 "querytransformparser.ypp" { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, (yyloc)); (yyval.expr) = (yyvsp[(2) - (3)].expr); } break; case 348: /* Line 1269 of yacc.c. */ -#line 3526 "querytransformparser.ypp" +#line 3623 "querytransformparser.ypp" { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, (yyloc)); (yyval.expr) = create(new EmptySequence, (yyloc), parseInfo); } break; case 349: /* Line 1269 of yacc.c. */ -#line 3531 "querytransformparser.ypp" +#line 3629 "querytransformparser.ypp" { (yyval.expr) = create(new ContextItem(), (yyloc), parseInfo); } @@ -6614,7 +6717,7 @@ yyreduce: case 350: /* Line 1269 of yacc.c. */ -#line 3536 "querytransformparser.ypp" +#line 3634 "querytransformparser.ypp" { (yyval.expr) = (yyvsp[(2) - (2)].expr); } @@ -6622,8 +6725,9 @@ yyreduce: case 351: /* Line 1269 of yacc.c. */ -#line 3541 "querytransformparser.ypp" +#line 3639 "querytransformparser.ypp" { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, (yyloc)); if(XPathHelper::isReservedNamespace((yyvsp[(1) - (4)].qName).namespaceURI()) || (yyvsp[(1) - (4)].qName).namespaceURI() == StandardNamespaces::InternalXSLT) { /* We got a call to a builtin function. */ const ReflectYYLTYPE ryy((yyloc), parseInfo); @@ -6653,7 +6757,7 @@ yyreduce: case 352: /* Line 1269 of yacc.c. */ -#line 3569 "querytransformparser.ypp" +#line 3668 "querytransformparser.ypp" { (yyval.expressionList) = Expression::List(); } @@ -6661,7 +6765,7 @@ yyreduce: case 353: /* Line 1269 of yacc.c. */ -#line 3574 "querytransformparser.ypp" +#line 3673 "querytransformparser.ypp" { Expression::List list; list.append((yyvsp[(1) - (1)].expr)); @@ -6671,15 +6775,15 @@ yyreduce: case 355: /* Line 1269 of yacc.c. */ -#line 3583 "querytransformparser.ypp" +#line 3682 "querytransformparser.ypp" { - disallowedConstruct(parseInfo, (yyloc)); + allowedIn(QXmlQuery::XQuery10, parseInfo, (yyloc)); } break; case 360: /* Line 1269 of yacc.c. */ -#line 3624 "querytransformparser.ypp" +#line 3726 "querytransformparser.ypp" { (yyval.enums.tokenizerPosition) = parseInfo->tokenizer->commenceScanOnly(); parseInfo->scanOnlyStack.push(true); @@ -6688,7 +6792,7 @@ yyreduce: case 361: /* Line 1269 of yacc.c. */ -#line 3633 "querytransformparser.ypp" +#line 3735 "querytransformparser.ypp" { ++parseInfo->elementConstructorDepth; Expression::List constructors; @@ -6836,7 +6940,7 @@ yyreduce: case 362: /* Line 1269 of yacc.c. */ -#line 3779 "querytransformparser.ypp" +#line 3881 "querytransformparser.ypp" { /* We add the content constructor after the attribute constructors. This might result * in nested ExpressionSequences, but it will be optimized away later on. */ @@ -6935,7 +7039,7 @@ yyreduce: case 363: /* Line 1269 of yacc.c. */ -#line 3875 "querytransformparser.ypp" +#line 3977 "querytransformparser.ypp" { (yyval.expr) = create(new EmptySequence(), (yyloc), parseInfo); } @@ -6943,7 +7047,7 @@ yyreduce: case 364: /* Line 1269 of yacc.c. */ -#line 3879 "querytransformparser.ypp" +#line 3981 "querytransformparser.ypp" { if(!(yyvsp[(4) - (5)].qName).isLexicallyEqual(parseInfo->tagStack.top())) { @@ -6965,7 +7069,7 @@ yyreduce: case 365: /* Line 1269 of yacc.c. */ -#line 3898 "querytransformparser.ypp" +#line 4000 "querytransformparser.ypp" { (yyval.attributeHolders) = AttributeHolderVector(); } @@ -6973,7 +7077,7 @@ yyreduce: case 366: /* Line 1269 of yacc.c. */ -#line 3902 "querytransformparser.ypp" +#line 4004 "querytransformparser.ypp" { (yyvsp[(1) - (2)].attributeHolders).append((yyvsp[(2) - (2)].attributeHolder)); (yyval.attributeHolders) = (yyvsp[(1) - (2)].attributeHolders); @@ -6982,7 +7086,7 @@ yyreduce: case 367: /* Line 1269 of yacc.c. */ -#line 3908 "querytransformparser.ypp" +#line 4010 "querytransformparser.ypp" { (yyval.attributeHolder) = qMakePair((yyvsp[(1) - (3)].sval), (yyvsp[(3) - (3)].expr)); } @@ -6990,7 +7094,7 @@ yyreduce: case 368: /* Line 1269 of yacc.c. */ -#line 3913 "querytransformparser.ypp" +#line 4015 "querytransformparser.ypp" { (yyval.expr) = createDirAttributeValue((yyvsp[(2) - (3)].expressionList), parseInfo, (yyloc)); } @@ -6998,7 +7102,7 @@ yyreduce: case 369: /* Line 1269 of yacc.c. */ -#line 3918 "querytransformparser.ypp" +#line 4020 "querytransformparser.ypp" { (yyval.expr) = createDirAttributeValue((yyvsp[(2) - (3)].expressionList), parseInfo, (yyloc)); } @@ -7006,7 +7110,7 @@ yyreduce: case 370: /* Line 1269 of yacc.c. */ -#line 3923 "querytransformparser.ypp" +#line 4025 "querytransformparser.ypp" { (yyval.expressionList) = Expression::List(); } @@ -7014,7 +7118,7 @@ yyreduce: case 371: /* Line 1269 of yacc.c. */ -#line 3927 "querytransformparser.ypp" +#line 4029 "querytransformparser.ypp" { Expression::Ptr content((yyvsp[(1) - (2)].expr)); @@ -7028,7 +7132,7 @@ yyreduce: case 372: /* Line 1269 of yacc.c. */ -#line 3937 "querytransformparser.ypp" +#line 4039 "querytransformparser.ypp" { (yyvsp[(2) - (2)].expressionList).prepend(create(new Literal(AtomicString::fromValue((yyvsp[(1) - (2)].sval))), (yyloc), parseInfo)); (yyval.expressionList) = (yyvsp[(2) - (2)].expressionList); @@ -7037,7 +7141,7 @@ yyreduce: case 373: /* Line 1269 of yacc.c. */ -#line 3943 "querytransformparser.ypp" +#line 4045 "querytransformparser.ypp" { (yyval.expressionList) = Expression::List(); parseInfo->isPreviousEnclosedExpr = false; @@ -7046,7 +7150,7 @@ yyreduce: case 374: /* Line 1269 of yacc.c. */ -#line 3948 "querytransformparser.ypp" +#line 4050 "querytransformparser.ypp" { (yyvsp[(1) - (2)].expressionList).append((yyvsp[(2) - (2)].expr)); (yyval.expressionList) = (yyvsp[(1) - (2)].expressionList); @@ -7056,7 +7160,7 @@ yyreduce: case 375: /* Line 1269 of yacc.c. */ -#line 3954 "querytransformparser.ypp" +#line 4056 "querytransformparser.ypp" { if(parseInfo->staticContext->boundarySpacePolicy() == StaticContext::BSPStrip && XPathHelper::isWhitespaceOnly((yyvsp[(2) - (2)].sval))) @@ -7074,7 +7178,7 @@ yyreduce: case 376: /* Line 1269 of yacc.c. */ -#line 3968 "querytransformparser.ypp" +#line 4070 "querytransformparser.ypp" { (yyvsp[(1) - (2)].expressionList).append(create(new TextNodeConstructor(create(new Literal(AtomicString::fromValue((yyvsp[(2) - (2)].sval))), (yyloc), parseInfo)), (yyloc), parseInfo)); (yyval.expressionList) = (yyvsp[(1) - (2)].expressionList); @@ -7084,7 +7188,7 @@ yyreduce: case 377: /* Line 1269 of yacc.c. */ -#line 3974 "querytransformparser.ypp" +#line 4076 "querytransformparser.ypp" { /* We insert a text node constructor that send an empty text node between * the two enclosed expressions, in order to ensure that no space is inserted. @@ -7104,7 +7208,7 @@ yyreduce: case 378: /* Line 1269 of yacc.c. */ -#line 3991 "querytransformparser.ypp" +#line 4093 "querytransformparser.ypp" { (yyval.expr) = create(new CommentConstructor(create(new Literal(AtomicString::fromValue((yyvsp[(2) - (2)].sval))), (yyloc), parseInfo)), (yyloc), parseInfo); } @@ -7112,7 +7216,7 @@ yyreduce: case 379: /* Line 1269 of yacc.c. */ -#line 3996 "querytransformparser.ypp" +#line 4098 "querytransformparser.ypp" { const ReflectYYLTYPE ryy((yyloc), parseInfo); NCNameConstructor::validateTargetName<StaticContext::Ptr, @@ -7128,9 +7232,9 @@ yyreduce: case 387: /* Line 1269 of yacc.c. */ -#line 4017 "querytransformparser.ypp" +#line 4119 "querytransformparser.ypp" { - disallowedConstruct(parseInfo, (yyloc), (yyvsp[(2) - (3)].enums.Bool)); + allowedIn(QXmlQuery::XQuery10, parseInfo, (yyloc), (yyvsp[(2) - (3)].enums.Bool)); (yyval.expr) = create(new DocumentConstructor((yyvsp[(3) - (3)].expr)), (yyloc), parseInfo); } @@ -7138,7 +7242,7 @@ yyreduce: case 388: /* Line 1269 of yacc.c. */ -#line 4024 "querytransformparser.ypp" +#line 4126 "querytransformparser.ypp" { /* This value is incremented before the action below is executed. */ ++parseInfo->elementConstructorDepth; @@ -7147,10 +7251,10 @@ yyreduce: case 389: /* Line 1269 of yacc.c. */ -#line 4029 "querytransformparser.ypp" +#line 4131 "querytransformparser.ypp" { Q_ASSERT(5); - disallowedConstruct(parseInfo, (yyloc), (yyvsp[(2) - (5)].enums.Bool)); + allowedIn(QXmlQuery::XQuery10, parseInfo, (yyloc), (yyvsp[(2) - (5)].enums.Bool)); Expression::Ptr effExpr; @@ -7184,7 +7288,7 @@ yyreduce: case 390: /* Line 1269 of yacc.c. */ -#line 4063 "querytransformparser.ypp" +#line 4165 "querytransformparser.ypp" { (yyval.enums.Bool) = false; } @@ -7192,7 +7296,7 @@ yyreduce: case 391: /* Line 1269 of yacc.c. */ -#line 4067 "querytransformparser.ypp" +#line 4169 "querytransformparser.ypp" { (yyval.enums.Bool) = true; } @@ -7200,9 +7304,9 @@ yyreduce: case 392: /* Line 1269 of yacc.c. */ -#line 4075 "querytransformparser.ypp" +#line 4177 "querytransformparser.ypp" { - disallowedConstruct(parseInfo, (yyloc), (yyvsp[(2) - (4)].enums.Bool)); + allowedIn(QXmlQuery::XQuery10, parseInfo, (yyloc), (yyvsp[(2) - (4)].enums.Bool)); const Expression::Ptr name(create(new AttributeNameValidator((yyvsp[(3) - (4)].expr)), (yyloc), parseInfo)); @@ -7215,7 +7319,7 @@ yyreduce: case 393: /* Line 1269 of yacc.c. */ -#line 4087 "querytransformparser.ypp" +#line 4189 "querytransformparser.ypp" { (yyval.expr) = create(new TextNodeConstructor(createSimpleContent((yyvsp[(3) - (3)].expr), (yyloc), parseInfo)), (yyloc), parseInfo); } @@ -7223,9 +7327,9 @@ yyreduce: case 394: /* Line 1269 of yacc.c. */ -#line 4092 "querytransformparser.ypp" +#line 4194 "querytransformparser.ypp" { - disallowedConstruct(parseInfo, (yyloc), (yyvsp[(2) - (3)].enums.Bool)); + allowedIn(QXmlQuery::XQuery10, parseInfo, (yyloc), (yyvsp[(2) - (3)].enums.Bool)); (yyval.expr) = create(new CommentConstructor(createSimpleContent((yyvsp[(3) - (3)].expr), (yyloc), parseInfo)), (yyloc), parseInfo); } @@ -7233,9 +7337,9 @@ yyreduce: case 395: /* Line 1269 of yacc.c. */ -#line 4099 "querytransformparser.ypp" +#line 4201 "querytransformparser.ypp" { - disallowedConstruct(parseInfo, (yyloc), (yyvsp[(2) - (3)].expr)); + allowedIn(QXmlQuery::XQuery10, parseInfo, (yyloc), (yyvsp[(2) - (3)].expr)); if((yyvsp[(3) - (3)].expr)) { @@ -7248,7 +7352,7 @@ yyreduce: case 396: /* Line 1269 of yacc.c. */ -#line 4110 "querytransformparser.ypp" +#line 4212 "querytransformparser.ypp" { parseInfo->nodeTestSource = BuiltinTypes::attribute; } @@ -7256,7 +7360,7 @@ yyreduce: case 397: /* Line 1269 of yacc.c. */ -#line 4114 "querytransformparser.ypp" +#line 4216 "querytransformparser.ypp" { parseInfo->restoreNodeTestSource(); } @@ -7264,7 +7368,7 @@ yyreduce: case 398: /* Line 1269 of yacc.c. */ -#line 4117 "querytransformparser.ypp" +#line 4219 "querytransformparser.ypp" { (yyval.expr) = create(new Literal(toItem(QNameValue::fromValue(parseInfo->staticContext->namePool(), (yyvsp[(2) - (3)].qName)))), (yyloc), parseInfo); } @@ -7272,7 +7376,7 @@ yyreduce: case 400: /* Line 1269 of yacc.c. */ -#line 4123 "querytransformparser.ypp" +#line 4225 "querytransformparser.ypp" { (yyval.expr) = create(new Literal(toItem(QNameValue::fromValue(parseInfo->staticContext->namePool(), (yyvsp[(1) - (1)].qName)))), (yyloc), parseInfo); } @@ -7280,7 +7384,7 @@ yyreduce: case 402: /* Line 1269 of yacc.c. */ -#line 4129 "querytransformparser.ypp" +#line 4231 "querytransformparser.ypp" { if(BuiltinTypes::xsQName->xdtTypeMatches((yyvsp[(1) - (1)].expr)->staticType()->itemType())) (yyval.expr) = (yyvsp[(1) - (1)].expr); @@ -7295,7 +7399,7 @@ yyreduce: case 403: /* Line 1269 of yacc.c. */ -#line 4144 "querytransformparser.ypp" +#line 4246 "querytransformparser.ypp" { (yyval.expr) = create(new NCNameConstructor(create(new Literal(AtomicString::fromValue((yyvsp[(1) - (1)].sval))), (yyloc), parseInfo)), (yyloc), parseInfo); } @@ -7303,7 +7407,7 @@ yyreduce: case 404: /* Line 1269 of yacc.c. */ -#line 4148 "querytransformparser.ypp" +#line 4250 "querytransformparser.ypp" { (yyval.expr) = create(new NCNameConstructor((yyvsp[(1) - (1)].expr)), (yyloc), parseInfo); } @@ -7311,7 +7415,7 @@ yyreduce: case 405: /* Line 1269 of yacc.c. */ -#line 4157 "querytransformparser.ypp" +#line 4259 "querytransformparser.ypp" { (yyval.expr) = create(new ComputedNamespaceConstructor((yyvsp[(2) - (3)].expr), (yyvsp[(3) - (3)].expr)), (yyloc), parseInfo); } @@ -7319,7 +7423,7 @@ yyreduce: case 406: /* Line 1269 of yacc.c. */ -#line 4162 "querytransformparser.ypp" +#line 4264 "querytransformparser.ypp" { (yyval.sequenceType) = makeGenericSequenceType((yyvsp[(1) - (1)].itemType), Cardinality::exactlyOne()); } @@ -7327,7 +7431,7 @@ yyreduce: case 407: /* Line 1269 of yacc.c. */ -#line 4166 "querytransformparser.ypp" +#line 4268 "querytransformparser.ypp" { (yyval.sequenceType) = makeGenericSequenceType((yyvsp[(1) - (2)].itemType), Cardinality::zeroOrOne()); } @@ -7335,7 +7439,7 @@ yyreduce: case 408: /* Line 1269 of yacc.c. */ -#line 4171 "querytransformparser.ypp" +#line 4273 "querytransformparser.ypp" { (yyval.sequenceType) = CommonSequenceTypes::ZeroOrMoreItems; } @@ -7343,7 +7447,7 @@ yyreduce: case 409: /* Line 1269 of yacc.c. */ -#line 4175 "querytransformparser.ypp" +#line 4277 "querytransformparser.ypp" { (yyval.sequenceType) = (yyvsp[(2) - (2)].sequenceType); } @@ -7351,7 +7455,7 @@ yyreduce: case 410: /* Line 1269 of yacc.c. */ -#line 4180 "querytransformparser.ypp" +#line 4282 "querytransformparser.ypp" { (yyval.sequenceType) = makeGenericSequenceType((yyvsp[(1) - (2)].itemType), (yyvsp[(2) - (2)].cardinality)); } @@ -7359,7 +7463,7 @@ yyreduce: case 411: /* Line 1269 of yacc.c. */ -#line 4185 "querytransformparser.ypp" +#line 4287 "querytransformparser.ypp" { (yyval.sequenceType) = CommonSequenceTypes::Empty; } @@ -7367,31 +7471,31 @@ yyreduce: case 412: /* Line 1269 of yacc.c. */ -#line 4189 "querytransformparser.ypp" +#line 4291 "querytransformparser.ypp" {(yyval.cardinality) = Cardinality::exactlyOne();} break; case 413: /* Line 1269 of yacc.c. */ -#line 4190 "querytransformparser.ypp" +#line 4292 "querytransformparser.ypp" {(yyval.cardinality) = Cardinality::oneOrMore();} break; case 414: /* Line 1269 of yacc.c. */ -#line 4191 "querytransformparser.ypp" +#line 4293 "querytransformparser.ypp" {(yyval.cardinality) = Cardinality::zeroOrMore();} break; case 415: /* Line 1269 of yacc.c. */ -#line 4192 "querytransformparser.ypp" +#line 4294 "querytransformparser.ypp" {(yyval.cardinality) = Cardinality::zeroOrOne();} break; case 419: /* Line 1269 of yacc.c. */ -#line 4198 "querytransformparser.ypp" +#line 4300 "querytransformparser.ypp" { (yyval.itemType) = BuiltinTypes::item; } @@ -7399,7 +7503,7 @@ yyreduce: case 420: /* Line 1269 of yacc.c. */ -#line 4203 "querytransformparser.ypp" +#line 4305 "querytransformparser.ypp" { const SchemaType::Ptr t(parseInfo->staticContext->schemaDefinitions()->createSchemaType((yyvsp[(1) - (1)].qName))); @@ -7435,7 +7539,7 @@ yyreduce: case 428: /* Line 1269 of yacc.c. */ -#line 4247 "querytransformparser.ypp" +#line 4349 "querytransformparser.ypp" { (yyval.itemType) = BuiltinTypes::node; } @@ -7443,7 +7547,7 @@ yyreduce: case 429: /* Line 1269 of yacc.c. */ -#line 4252 "querytransformparser.ypp" +#line 4354 "querytransformparser.ypp" { (yyval.itemType) = BuiltinTypes::document; } @@ -7451,7 +7555,7 @@ yyreduce: case 430: /* Line 1269 of yacc.c. */ -#line 4257 "querytransformparser.ypp" +#line 4359 "querytransformparser.ypp" { // TODO support for document element testing (yyval.itemType) = BuiltinTypes::document; @@ -7460,7 +7564,7 @@ yyreduce: case 433: /* Line 1269 of yacc.c. */ -#line 4266 "querytransformparser.ypp" +#line 4368 "querytransformparser.ypp" { (yyval.itemType) = BuiltinTypes::text; } @@ -7468,7 +7572,7 @@ yyreduce: case 434: /* Line 1269 of yacc.c. */ -#line 4271 "querytransformparser.ypp" +#line 4373 "querytransformparser.ypp" { (yyval.itemType) = BuiltinTypes::comment; } @@ -7476,7 +7580,7 @@ yyreduce: case 435: /* Line 1269 of yacc.c. */ -#line 4276 "querytransformparser.ypp" +#line 4378 "querytransformparser.ypp" { (yyval.itemType) = BuiltinTypes::pi; } @@ -7484,7 +7588,7 @@ yyreduce: case 436: /* Line 1269 of yacc.c. */ -#line 4281 "querytransformparser.ypp" +#line 4383 "querytransformparser.ypp" { (yyval.itemType) = LocalNameTest::create(BuiltinTypes::pi, parseInfo->staticContext->namePool()->allocateLocalName((yyvsp[(3) - (4)].sval))); } @@ -7492,7 +7596,7 @@ yyreduce: case 437: /* Line 1269 of yacc.c. */ -#line 4286 "querytransformparser.ypp" +#line 4388 "querytransformparser.ypp" { if(QXmlUtils::isNCName((yyvsp[(3) - (4)].sval))) { @@ -7511,7 +7615,7 @@ yyreduce: case 440: /* Line 1269 of yacc.c. */ -#line 4305 "querytransformparser.ypp" +#line 4407 "querytransformparser.ypp" { (yyval.itemType) = BuiltinTypes::attribute; } @@ -7519,7 +7623,7 @@ yyreduce: case 441: /* Line 1269 of yacc.c. */ -#line 4310 "querytransformparser.ypp" +#line 4412 "querytransformparser.ypp" { (yyval.itemType) = BuiltinTypes::attribute; } @@ -7527,7 +7631,7 @@ yyreduce: case 442: /* Line 1269 of yacc.c. */ -#line 4315 "querytransformparser.ypp" +#line 4417 "querytransformparser.ypp" { (yyval.itemType) = QNameTest::create(BuiltinTypes::attribute, (yyvsp[(3) - (4)].qName)); } @@ -7535,7 +7639,7 @@ yyreduce: case 443: /* Line 1269 of yacc.c. */ -#line 4319 "querytransformparser.ypp" +#line 4421 "querytransformparser.ypp" { const SchemaType::Ptr t(parseInfo->staticContext->schemaDefinitions()->createSchemaType((yyvsp[(5) - (6)].qName))); @@ -7551,7 +7655,7 @@ yyreduce: case 444: /* Line 1269 of yacc.c. */ -#line 4331 "querytransformparser.ypp" +#line 4433 "querytransformparser.ypp" { const SchemaType::Ptr t(parseInfo->staticContext->schemaDefinitions()->createSchemaType((yyvsp[(5) - (6)].qName))); @@ -7567,7 +7671,7 @@ yyreduce: case 445: /* Line 1269 of yacc.c. */ -#line 4344 "querytransformparser.ypp" +#line 4446 "querytransformparser.ypp" { parseInfo->staticContext->error(QtXmlPatterns::tr("%1 is not in the in-scope attribute " "declarations. Note that the schema import " @@ -7580,7 +7684,7 @@ yyreduce: case 446: /* Line 1269 of yacc.c. */ -#line 4354 "querytransformparser.ypp" +#line 4456 "querytransformparser.ypp" { (yyval.itemType) = BuiltinTypes::element; } @@ -7588,7 +7692,7 @@ yyreduce: case 447: /* Line 1269 of yacc.c. */ -#line 4359 "querytransformparser.ypp" +#line 4461 "querytransformparser.ypp" { (yyval.itemType) = BuiltinTypes::element; } @@ -7596,7 +7700,7 @@ yyreduce: case 448: /* Line 1269 of yacc.c. */ -#line 4364 "querytransformparser.ypp" +#line 4466 "querytransformparser.ypp" { (yyval.itemType) = QNameTest::create(BuiltinTypes::element, (yyvsp[(3) - (4)].qName)); } @@ -7604,7 +7708,7 @@ yyreduce: case 449: /* Line 1269 of yacc.c. */ -#line 4369 "querytransformparser.ypp" +#line 4471 "querytransformparser.ypp" { const SchemaType::Ptr t(parseInfo->staticContext->schemaDefinitions()->createSchemaType((yyvsp[(5) - (7)].qName))); @@ -7621,7 +7725,7 @@ yyreduce: case 450: /* Line 1269 of yacc.c. */ -#line 4383 "querytransformparser.ypp" +#line 4485 "querytransformparser.ypp" { const SchemaType::Ptr t(parseInfo->staticContext->schemaDefinitions()->createSchemaType((yyvsp[(5) - (7)].qName))); @@ -7638,7 +7742,7 @@ yyreduce: case 453: /* Line 1269 of yacc.c. */ -#line 4400 "querytransformparser.ypp" +#line 4502 "querytransformparser.ypp" { parseInfo->staticContext->error(QtXmlPatterns::tr("%1 is not in the in-scope attribute " "declarations. Note that the schema import " @@ -7651,7 +7755,7 @@ yyreduce: case 455: /* Line 1269 of yacc.c. */ -#line 4412 "querytransformparser.ypp" +#line 4514 "querytransformparser.ypp" { (yyval.qName) = parseInfo->staticContext->namePool()->allocateQName(StandardNamespaces::empty, (yyvsp[(1) - (1)].sval)); } @@ -7659,7 +7763,7 @@ yyreduce: case 457: /* Line 1269 of yacc.c. */ -#line 4424 "querytransformparser.ypp" +#line 4526 "querytransformparser.ypp" { if(parseInfo->nodeTestSource == BuiltinTypes::element) (yyval.qName) = parseInfo->staticContext->namePool()->allocateQName(parseInfo->staticContext->namespaceBindings()->lookupNamespaceURI(StandardPrefixes::empty), (yyvsp[(1) - (1)].sval)); @@ -7670,7 +7774,7 @@ yyreduce: case 462: /* Line 1269 of yacc.c. */ -#line 4438 "querytransformparser.ypp" +#line 4540 "querytransformparser.ypp" { (yyval.qName) = parseInfo->staticContext->namePool()->allocateQName(parseInfo->staticContext->defaultFunctionNamespace(), (yyvsp[(1) - (1)].sval)); } @@ -7678,7 +7782,7 @@ yyreduce: case 463: /* Line 1269 of yacc.c. */ -#line 4442 "querytransformparser.ypp" +#line 4544 "querytransformparser.ypp" { (yyval.qName) = parseInfo->staticContext->namePool()->allocateQName(StandardNamespaces::InternalXSLT, (yyvsp[(2) - (2)].sval)); } @@ -7686,7 +7790,7 @@ yyreduce: case 466: /* Line 1269 of yacc.c. */ -#line 4450 "querytransformparser.ypp" +#line 4552 "querytransformparser.ypp" { parseInfo->staticContext->error(QtXmlPatterns::tr("The name of an extension expression must be in " "a namespace."), @@ -7694,9 +7798,25 @@ yyreduce: } break; + case 469: +/* Line 1269 of yacc.c. */ +#line 4562 "querytransformparser.ypp" + { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, (yyloc)); + } + break; + + case 470: +/* Line 1269 of yacc.c. */ +#line 4566 "querytransformparser.ypp" + { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, (yyloc)); + } + break; + case 471: /* Line 1269 of yacc.c. */ -#line 4463 "querytransformparser.ypp" +#line 4571 "querytransformparser.ypp" { const ReflectYYLTYPE ryy((yyloc), parseInfo); @@ -7712,7 +7832,7 @@ yyreduce: case 472: /* Line 1269 of yacc.c. */ -#line 4475 "querytransformparser.ypp" +#line 4583 "querytransformparser.ypp" { (yyval.qName) = parseInfo->staticContext->namePool()->fromClarkName((yyvsp[(1) - (1)].sval)); } @@ -7720,7 +7840,7 @@ yyreduce: /* Line 1269 of yacc.c. */ -#line 7643 "qquerytransformparser.cpp" +#line 7763 "qquerytransformparser.cpp" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -7938,7 +8058,7 @@ yyreturn: /* Line 1486 of yacc.c. */ -#line 4479 "querytransformparser.ypp" +#line 4587 "querytransformparser.ypp" QString Tokenizer::tokenToString(const Token &token) diff --git a/src/xmlpatterns/parser/qquerytransformparser_p.h b/src/xmlpatterns/parser/qquerytransformparser_p.h index b33ca55..bb01788 100644 --- a/src/xmlpatterns/parser/qquerytransformparser_p.h +++ b/src/xmlpatterns/parser/qquerytransformparser_p.h @@ -49,6 +49,57 @@ // // We mean it. +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + /* A Bison parser, made by GNU Bison 2.3a. */ /* Skeleton interface for Bison's Yacc-like parsers in C @@ -104,6 +155,25 @@ # undef SELF #endif +/* These tokens are defined to nothing on Windows because they're + * used in their documentation parser, for use in things like: + * + * int foo(IN char* name, OUT char* path); + * + * Hence this un-break fix. Note that this file was auto generated. */ +#ifdef IN +# undef IN +#endif +#ifdef INSTANCE +# undef INSTANCE +#endif +#ifdef STRICT +# undef STRICT +#endif +#ifdef SELF +# undef SELF +#endif + /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE diff --git a/src/xmlpatterns/parser/querytransformparser.ypp b/src/xmlpatterns/parser/querytransformparser.ypp index f67eb5d..74cee11 100644 --- a/src/xmlpatterns/parser/querytransformparser.ypp +++ b/src/xmlpatterns/parser/querytransformparser.ypp @@ -227,11 +227,18 @@ static inline QSourceLocation fromYYLTYPE(const YYLTYPE &sourceLocator, } /** + * @internal + * @relates QXmlQuery + */ +typedef QFlags<QXmlQuery::QueryLanguage> QueryLanguages; + +/** * @short Flags invalid expressions and declarations in the currently * parsed language. * - * Since this grammar is used for several languages: XQuery 1.0, XSL-T 2.0 and - * XPath 2.0 inside XSL-T, it is the union of all the constructs in these + * Since this grammar is used for several languages: XQuery 1.0, XSL-T 2.0, and + * XPath 2.0 inside XSL-T, and field and selector patterns in W3C XML Schema's + * identity constraints, it is the union of all the constructs in these * languages. However, when dealing with each language individually, we * regularly need to disallow some expressions, such as direct element * constructors when parsing XSL-T, or the typeswitch when parsing XPath. @@ -242,19 +249,46 @@ static inline QSourceLocation fromYYLTYPE(const YYLTYPE &sourceLocator, * instance the @c let clause, should not be flagged as an error, because it's * used for internal purposes. * - * Hence, this function is called from each expression and declaration which is - * unavailable in XPath. + * Hence, this function is called from each expression and declaration with @p + * allowedLanguages stating what languages it is allowed in. * * If @p isInternal is @c true, no error is raised. Otherwise, if the current - * language is not XQuery, an error is raised. + * language is not in @p allowedLanguages, an error is raised. */ -static void disallowedConstruct(const ParserContext *const parseInfo, - const YYLTYPE &sourceLocator, - const bool isInternal = false) +static void allowedIn(const QueryLanguages allowedLanguages, + const ParserContext *const parseInfo, + const YYLTYPE &sourceLocator, + const bool isInternal = false) { - if(!isInternal && parseInfo->languageAccent != QXmlQuery::XQuery10) + /* We treat XPath 2.0 as a subset of XSL-T 2.0, so if XPath 2.0 is allowed + * and XSL-T is the language, it's ok. */ + if(!isInternal && + (!allowedLanguages.testFlag(parseInfo->languageAccent) && !(allowedLanguages.testFlag(QXmlQuery::XPath20) && parseInfo->languageAccent == QXmlQuery::XSLT20))) { - parseInfo->staticContext->error(QtXmlPatterns::tr("A construct was encountered which only is allowed in XQuery."), + + QString langName; + + switch(parseInfo->languageAccent) + { + case QXmlQuery::XPath20: + langName = QLatin1String("XPath 2.0"); + break; + case QXmlQuery::XSLT20: + langName = QLatin1String("XSL-T 2.0"); + break; + case QXmlQuery::XQuery10: + langName = QLatin1String("XQuery 1.0"); + break; + case QXmlQuery::XmlSchema11IdentityConstraintSelector: + langName = QtXmlPatterns::tr("W3C XML Schema identity constraint selector"); + break; + case QXmlQuery::XmlSchema11IdentityConstraintField: + langName = QtXmlPatterns::tr("W3C XML Schema identity constraint field"); + break; + } + + parseInfo->staticContext->error(QtXmlPatterns::tr("A construct was encountered " + "which is disallowed in the current language(%1).").arg(langName), ReportContext::XPST0003, fromYYLTYPE(sourceLocator, parseInfo)); @@ -1560,7 +1594,7 @@ Prolog: /* Empty. */ /* First part. */ | Prolog DefaultNamespaceDecl { - disallowedConstruct(parseInfo, @$); + allowedIn(QXmlQuery::XQuery10, parseInfo, @$); if(parseInfo->hasSecondPrologPart) parseInfo->staticContext->error(QtXmlPatterns::tr("A default namespace declaration must occur before function, " "variable, and option declarations."), ReportContext::XPST0003, fromYYLTYPE(@$, parseInfo)); @@ -1579,7 +1613,7 @@ Prolog: /* Empty. */ } | Prolog Import { - disallowedConstruct(parseInfo, @$); + allowedIn(QXmlQuery::XQuery10, parseInfo, @$); if(parseInfo->hasSecondPrologPart) parseInfo->staticContext->error(QtXmlPatterns::tr("Module imports must occur before function, " "variable, and option declarations."), ReportContext::XPST0003, fromYYLTYPE(@$, parseInfo)); @@ -1597,7 +1631,7 @@ Prolog: /* Empty. */ } | Prolog OptionDecl { - disallowedConstruct(parseInfo, @$); + allowedIn(QXmlQuery::XQuery10, parseInfo, @$); parseInfo->hasSecondPrologPart = true; } @@ -1705,7 +1739,7 @@ OptionalPriority: /* Empty. */ const AtomicValue::Ptr val(Decimal::fromLexical($2)); if(val->hasError()) { - parseInfo->staticContext->error(QtXmlPatterns::tr("The value of attribute %1 must of type %2, which %3 isn't.") + parseInfo->staticContext->error(QtXmlPatterns::tr("The value of attribute %1 must be of type %2, which %3 isn't.") .arg(formatKeyword(QLatin1String("priority")), formatType(parseInfo->staticContext->namePool(), BuiltinTypes::xsDecimal), formatData($2)), @@ -1730,20 +1764,20 @@ TemplateName: NAME ElementName Setter: BoundarySpaceDecl /* [7] */ | DefaultCollationDecl { - disallowedConstruct(parseInfo, @$); + allowedIn(QXmlQuery::XQuery10, parseInfo, @$); } | BaseURIDecl | ConstructionDecl { - disallowedConstruct(parseInfo, @$); + allowedIn(QXmlQuery::XQuery10, parseInfo, @$); } | OrderingModeDecl { - disallowedConstruct(parseInfo, @$); + allowedIn(QXmlQuery::XQuery10, parseInfo, @$); } | EmptyOrderDecl { - disallowedConstruct(parseInfo, @$); + allowedIn(QXmlQuery::XQuery10, parseInfo, @$); } | CopyNamespacesDecl @@ -1755,7 +1789,7 @@ Separator: SEMI_COLON NamespaceDecl: DECLARE NAMESPACE NCNAME G_EQ URILiteral IsInternal Separator /* [10] */ { if(!$6) - disallowedConstruct(parseInfo, @$); + allowedIn(QXmlQuery::XQuery10, parseInfo, @$); if($3 == QLatin1String("xmlns")) { @@ -1867,7 +1901,7 @@ OptionDecl: DECLARE OPTION ElementName StringLiteral Separator OrderingModeDecl: DECLARE ORDERING OrderingMode Separator /* [14] */ { - disallowedConstruct(parseInfo, @$); + allowedIn(QXmlQuery::XQuery10, parseInfo, @$); if(parseInfo->hasDeclaration(ParserContext::OrderingModeDecl)) { parseInfo->staticContext->error(prologMessage("declare ordering"), @@ -1964,7 +1998,7 @@ DefaultCollationDecl: DECLARE DEFAULT COLLATION StringLiteral Separator BaseURIDecl: DECLARE BASEURI IsInternal URILiteral Separator /* [20] */ { - disallowedConstruct(parseInfo, @$, $3); + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XSLT20), parseInfo, @$, $3); if(parseInfo->hasDeclaration(ParserContext::BaseURIDecl)) { parseInfo->staticContext->error(prologMessage("declare base-uri"), @@ -2026,7 +2060,7 @@ FileLocation: URILiteral VarDecl: DECLARE VARIABLE IsInternal DOLLAR VarName TypeDeclaration VariableValue OptionalDefaultValue Separator /* [24] */ { - disallowedConstruct(parseInfo, @$, $3); + allowedIn(QXmlQuery::XQuery10, parseInfo, @$, $3); if(variableByName($5, parseInfo)) { parseInfo->staticContext->error(QtXmlPatterns::tr("A variable by name %1 has already " @@ -2126,7 +2160,7 @@ FunctionDecl: DECLARE FUNCTION IsInternal FunctionName LPAREN ParamList RPAREN TypeDeclaration FunctionBody Separator /* [26] */ { if(!$3) - disallowedConstruct(parseInfo, @$, $3); + allowedIn(QXmlQuery::XQuery10, parseInfo, @$, $3); /* If FunctionBody is null, it is 'external', otherwise the value is the body. */ const QXmlName::NamespaceCode ns($4.namespaceURI()); @@ -2696,7 +2730,7 @@ LetClause: LET IsInternal DOLLAR VarName TypeDeclaration ASSIGN ExprSingle } LetTail /* [36] */ { - disallowedConstruct(parseInfo, @$, $2); + allowedIn(QXmlQuery::XQuery10, parseInfo, @$, $2); Q_ASSERT(parseInfo->variables.top()->name == $4); $$ = create(new LetClause($<expr>8, $9, parseInfo->variables.top()), @$, parseInfo); @@ -2835,6 +2869,7 @@ SomeQuantificationExpr: SOME DOLLAR VarName TypeDeclaration IN ExprSingle {$<enums.slot>$ = parseInfo->staticContext->currentRangeSlot();} SomeQuantificationTail /* [X] */ { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, @$); $$ = create(new QuantifiedExpression($<enums.slot>8, QuantifiedExpression::Some, $<expr>6, $9), @$, parseInfo); parseInfo->finalizePushedVariable(); @@ -2863,6 +2898,7 @@ EveryQuantificationExpr: EVERY DOLLAR VarName TypeDeclaration IN ExprSingle {$<enums.slot>$ = parseInfo->staticContext->currentRangeSlot();} EveryQuantificationTail /* [X] */ { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, @$); $$ = create(new QuantifiedExpression($<enums.slot>8, QuantifiedExpression::Every, $<expr>6, $9), @$, parseInfo); parseInfo->finalizePushedVariable(); @@ -2916,7 +2952,7 @@ TypeswitchExpr: TYPESWITCH LPAREN Expr RPAREN } CaseClause /* [43] */ { - disallowedConstruct(parseInfo, @$); + allowedIn(QXmlQuery::XQuery10, parseInfo, @$); parseInfo->typeswitchSource.pop(); $$ = $6; } @@ -2976,18 +3012,21 @@ CaseDefault: DEFAULT RETURN ExprSingle IfExpr: IF LPAREN Expr RPAREN THEN ExprSingle ELSE ExprSingle /* [45] */ { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, @$); $$ = create(new IfThenClause($3, $6, $8), @$, parseInfo); } OrExpr: AndExpr /* [46] */ | OrExpr OR AndExpr { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, @$); $$ = create(new OrExpression($1, $3), @$, parseInfo); } AndExpr: ComparisonExpr /* [47] */ | AndExpr AND ComparisonExpr { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, @$); $$ = create(new AndExpression($1, $3), @$, parseInfo); } @@ -2999,12 +3038,14 @@ ComparisonExpr: RangeExpr RangeExpr: AdditiveExpr /* [49] */ | AdditiveExpr TO AdditiveExpr { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, @$); $$ = create(new RangeExpression($1, $3), @$, parseInfo); } AdditiveExpr: MultiplicativeExpr /* [50] */ | AdditiveExpr AdditiveOperator MultiplicativeExpr { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, @$); $$ = create(new ArithmeticExpression($1, $2, $3), @$, parseInfo); } @@ -3014,6 +3055,7 @@ AdditiveOperator: PLUS {$$ = AtomicMathematician::Add;} MultiplicativeExpr: UnionExpr /* [51] */ | MultiplicativeExpr MultiplyOperator UnionExpr { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, @$); $$ = create(new ArithmeticExpression($1, $2, $3), @$, parseInfo); } @@ -3025,12 +3067,18 @@ MultiplyOperator: STAR {$$ = AtomicMathematician::Multiply;} UnionExpr: IntersectExceptExpr /* [52] */ | UnionExpr UnionOperator IntersectExceptExpr { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 + | QXmlQuery::XPath20 + | QXmlQuery::XmlSchema11IdentityConstraintField + | QXmlQuery::XmlSchema11IdentityConstraintSelector), + parseInfo, @$); $$ = create(new CombineNodes($1, CombineNodes::Union, $3), @$, parseInfo); } IntersectExceptExpr: InstanceOfExpr /* [53] */ | IntersectExceptExpr IntersectOperator InstanceOfExpr { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, @$); $$ = create(new CombineNodes($1, $2, $3), @$, parseInfo); } @@ -3049,31 +3097,36 @@ IntersectOperator: INTERSECT InstanceOfExpr: TreatExpr /* [54] */ | TreatExpr INSTANCE OF SequenceType { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, @$); $$ = create(new InstanceOf($1, - SequenceType::Ptr($4)), @$, parseInfo); + SequenceType::Ptr($4)), @$, parseInfo); } TreatExpr: CastableExpr /* [55] */ | CastableExpr TREAT AS SequenceType { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, @$); $$ = create(new TreatAs($1, $4), @$, parseInfo); } CastableExpr: CastExpr /* [56] */ | CastExpr CASTABLE AS SingleType { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, @$); $$ = create(new CastableAs($1, $4), @$, parseInfo); } CastExpr: UnaryExpr /* [57] */ | UnaryExpr CAST AS SingleType { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, @$); $$ = create(new CastAs($1, $4), @$, parseInfo); } UnaryExpr: ValueExpr /* [58] */ | UnaryOperator UnaryExpr { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, @$); $$ = create(new UnaryExpression($1, $2, parseInfo->staticContext), @$, parseInfo); } @@ -3092,6 +3145,7 @@ ValueExpr: ValidateExpr GeneralComp: RangeExpr GeneralComparisonOperator RangeExpr /* [60] */ { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, @$); $$ = create(new GeneralComparison($1, $2, $3, parseInfo->isBackwardsCompat.top()), @$, parseInfo); } @@ -3125,7 +3179,7 @@ NodeOperator: IS {$$ = QXmlNodeModelIndex::Is;} ValidateExpr: ValidationMode EnclosedExpr /* [63] */ { - disallowedConstruct(parseInfo, @$); + allowedIn(QXmlQuery::XQuery10, parseInfo, @$); parseInfo->staticContext->error(QtXmlPatterns::tr("The Schema Validation Feature is not supported. " "Hence, %1-expressions may not be used.") .arg(formatKeyword("validate")), @@ -3143,6 +3197,7 @@ ValidationMode: VALIDATE {$$ = Validate::Strict;} ExtensionExpr: Pragmas EnclosedOptionalExpr /* [65] */ { + allowedIn(QXmlQuery::XQuery10, parseInfo, @$); /* We don't support any pragmas, so we only do the * necessary validation and use the fallback expression. */ @@ -3171,7 +3226,7 @@ Pragmas: Pragmas Pragma Pragma: PRAGMA_START PragmaName PragmaContents PRAGMA_END /* [66] */ { - disallowedConstruct(parseInfo, @$); + allowedIn(QXmlQuery::XQuery10, parseInfo, @$); } PragmaContents: /* empty */ /* [67] */ @@ -3241,12 +3296,14 @@ StepExpr: FilteredAxisStep } | BASEURI StringLiteral CURLY_LBRACE Expr CURLY_RBRACE /* [X] */ { + allowedIn(QXmlQuery::XSLT20, parseInfo, @$); Q_ASSERT(!$2.isEmpty()); $$ = create(new StaticBaseURIStore($2, $4), @$, parseInfo); } | DECLARE NAMESPACE NCNAME G_EQ STRING_LITERAL CURLY_LBRACE /* [X] */ { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XSLT20), parseInfo, @$); parseInfo->resolvers.push(parseInfo->staticContext->namespaceBindings()); const NamespaceResolver::Ptr resolver(new DelegatingNamespaceResolver(parseInfo->staticContext->namespaceBindings())); resolver->addBinding(QXmlName(parseInfo->staticContext->namePool()->allocateNamespace($5), @@ -3449,6 +3506,36 @@ Axis: AxisToken COLONCOLON } else $$ = $1; + + switch($1) + { + case QXmlNodeModelIndex::AxisAttribute: + { + allowedIn(QueryLanguages( QXmlQuery::XPath20 + | QXmlQuery::XQuery10 + | QXmlQuery::XmlSchema11IdentityConstraintField + | QXmlQuery::XSLT20), + parseInfo, @$); + break; + } + case QXmlNodeModelIndex::AxisChild: + { + allowedIn(QueryLanguages( QXmlQuery::XPath20 + | QXmlQuery::XQuery10 + | QXmlQuery::XmlSchema11IdentityConstraintField + | QXmlQuery::XmlSchema11IdentityConstraintSelector + | QXmlQuery::XSLT20), + parseInfo, @$); + break; + } + default: + { + allowedIn(QueryLanguages( QXmlQuery::XPath20 + | QXmlQuery::XQuery10 + | QXmlQuery::XSLT20), + parseInfo, @$); + } + } } AxisToken: ANCESTOR_OR_SELF {$$ = QXmlNodeModelIndex::AxisAncestorOrSelf ;} @@ -3470,6 +3557,7 @@ AbbrevForwardStep: AT_SIGN } NodeTest /* [72] */ { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XSLT20 | QXmlQuery::XmlSchema11IdentityConstraintField), parseInfo, @$); $$ = create(new AxisStep(QXmlNodeModelIndex::AxisAttribute, $3), @$, parseInfo); parseInfo->restoreNodeTestSource(); @@ -3499,6 +3587,9 @@ AbbrevReverseStep: DOTDOT NodeTest: NameTest /* [78] */ | KindTest + { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, @$); + } NameTest: ElementName /* [79] */ { @@ -3521,6 +3612,7 @@ WildCard: STAR } | ANY_PREFIX { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, @$); const QXmlName::LocalNameCode c = parseInfo->staticContext->namePool()->allocateLocalName($1); $$ = LocalNameTest::create(parseInfo->nodeTestSource, c); } @@ -3528,6 +3620,7 @@ WildCard: STAR FilterExpr: PrimaryExpr /* [81] */ | FilterExpr LBRACKET Expr RBRACKET { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, @$); $$ = create(GenericPredicate::create($1, $3, parseInfo->staticContext, fromYYLTYPE(@4, parseInfo)), @$, parseInfo); } @@ -3556,15 +3649,18 @@ Literal: NumericLiteral NumericLiteral: XPATH2_NUMBER /* [86] */ { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, @$); $$ = createNumericLiteral<Double>($1, @$, parseInfo); } | NUMBER { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, @$); $$ = createNumericLiteral<Numeric>($1, @$, parseInfo); } VarRef: DOLLAR VarName /* [87] */ { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, @$); $$ = resolveVariable($2, @$, parseInfo, false); } @@ -3580,10 +3676,12 @@ VarName: NCNAME ParenthesizedExpr: LPAREN Expr RPAREN /* [89] */ { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, @$); $$ = $2; } | LPAREN RPAREN { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, @$); $$ = create(new EmptySequence, @$, parseInfo); } @@ -3599,6 +3697,7 @@ OrderingExpr: OrderingMode EnclosedExpr FunctionCallExpr: FunctionName LPAREN FunctionArguments RPAREN /* [93] */ { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, @$); if(XPathHelper::isReservedNamespace($1.namespaceURI()) || $1.namespaceURI() == StandardNamespaces::InternalXSLT) { /* We got a call to a builtin function. */ const ReflectYYLTYPE ryy(@$, parseInfo); @@ -3641,9 +3740,12 @@ FunctionArguments: /* empty */ Constructor: DirectConstructor /* [94] */ { - disallowedConstruct(parseInfo, @$); + allowedIn(QXmlQuery::XQuery10, parseInfo, @$); } | ComputedConstructor +/* The reason we cannot call alloweIn() as the action for ComputedConstructor, + * is that we use the computed constructors for XSL-T, and therefore generate + * INTERNAL tokens. */ DirectConstructor: DirElemConstructor /* [95] */ | DirCommentConstructor @@ -4075,7 +4177,7 @@ ComputedConstructor: CompDocConstructor CompDocConstructor: DOCUMENT IsInternal EnclosedExpr /* [110] */ { - disallowedConstruct(parseInfo, @$, $2); + allowedIn(QXmlQuery::XQuery10, parseInfo, @$, $2); $$ = create(new DocumentConstructor($3), @$, parseInfo); } @@ -4088,7 +4190,7 @@ CompElemConstructor: ELEMENT IsInternal CompElementName EnclosedOptionalExpr /* [111] */ { Q_ASSERT(5); - disallowedConstruct(parseInfo, @$, $2); + allowedIn(QXmlQuery::XQuery10, parseInfo, @$, $2); Expression::Ptr effExpr; @@ -4133,7 +4235,7 @@ CompAttrConstructor: ATTRIBUTE CompAttributeName EnclosedOptionalExpr /* [113] */ { - disallowedConstruct(parseInfo, @$, $2); + allowedIn(QXmlQuery::XQuery10, parseInfo, @$, $2); const Expression::Ptr name(create(new AttributeNameValidator($3), @$, parseInfo)); @@ -4150,14 +4252,14 @@ CompTextConstructor: TEXT IsInternal EnclosedExpr CompCommentConstructor: COMMENT IsInternal EnclosedExpr /* [115] */ { - disallowedConstruct(parseInfo, @$, $2); + allowedIn(QXmlQuery::XQuery10, parseInfo, @$, $2); $$ = create(new CommentConstructor(createSimpleContent($3, @$, parseInfo)), @$, parseInfo); } CompPIConstructor: PROCESSING_INSTRUCTION CompPIName EnclosedOptionalExpr /* [116] */ { - disallowedConstruct(parseInfo, @$, $2); + allowedIn(QXmlQuery::XQuery10, parseInfo, @$, $2); if($3) { @@ -4517,7 +4619,13 @@ PragmaName: NCNAME URILiteral: StringLiteral /* [140] */ StringLiteral: STRING_LITERAL /* [144] */ + { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, @$); + } | XPATH2_STRING_LITERAL + { + allowedIn(QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, @$); + } QName: QNAME /* [154] */ { diff --git a/src/xmlpatterns/schema/.gitignore b/src/xmlpatterns/schema/.gitignore new file mode 100644 index 0000000..2b29f27 --- /dev/null +++ b/src/xmlpatterns/schema/.gitignore @@ -0,0 +1 @@ +tests diff --git a/src/xmlpatterns/schema/builtinschemas.qrc b/src/xmlpatterns/schema/builtinschemas.qrc new file mode 100644 index 0000000..fb43d78 --- /dev/null +++ b/src/xmlpatterns/schema/builtinschemas.qrc @@ -0,0 +1,5 @@ +<!DOCTYPE RCC><RCC version="1.0"> +<qresource> + <file alias="http://www.w3.org/XML/1998/namespace">schemas/xml.xsd</file> +</qresource> +</RCC> diff --git a/src/xmlpatterns/schema/doc/All_diagram.dot b/src/xmlpatterns/schema/doc/All_diagram.dot new file mode 100644 index 0000000..3352b723 --- /dev/null +++ b/src/xmlpatterns/schema/doc/All_diagram.dot @@ -0,0 +1,13 @@ +digraph All { + mindist = 2.0 + 1 -> 2 [label="annotation"] + 1 -> 3 [label="any"] + 1 -> 3 [label="element"] + 2 -> 3 [label="any"] + 2 -> 3 [label="element"] + 3 -> 3 [label="any"] + 3 -> 3 [label="element"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] + 3 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/Alternative_diagram.dot b/src/xmlpatterns/schema/doc/Alternative_diagram.dot new file mode 100644 index 0000000..2119c49 --- /dev/null +++ b/src/xmlpatterns/schema/doc/Alternative_diagram.dot @@ -0,0 +1,11 @@ +digraph Alternative { + mindist = 2.0 + 1 -> 3 [label="complexType"] + 1 -> 2 [label="annotation"] + 1 -> 3 [label="simpleType"] + 2 -> 3 [label="complexType"] + 2 -> 3 [label="simpleType"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] + 3 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/Annotation_diagram.dot b/src/xmlpatterns/schema/doc/Annotation_diagram.dot new file mode 100644 index 0000000..260b6f7 --- /dev/null +++ b/src/xmlpatterns/schema/doc/Annotation_diagram.dot @@ -0,0 +1,9 @@ +digraph Annotation { + mindist = 2.0 + 1 -> 2 [label="appinfo"] + 1 -> 2 [label="documentation"] + 2 -> 2 [label="appinfo"] + 2 -> 2 [label="documentation"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/AnyAttribute_diagram.dot b/src/xmlpatterns/schema/doc/AnyAttribute_diagram.dot new file mode 100644 index 0000000..d252ebd --- /dev/null +++ b/src/xmlpatterns/schema/doc/AnyAttribute_diagram.dot @@ -0,0 +1,6 @@ +digraph AnyAttribute { + mindist = 2.0 + 1 -> 2 [label="annotation"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/Any_diagram.dot b/src/xmlpatterns/schema/doc/Any_diagram.dot new file mode 100644 index 0000000..f54063f --- /dev/null +++ b/src/xmlpatterns/schema/doc/Any_diagram.dot @@ -0,0 +1,6 @@ +digraph Any { + mindist = 2.0 + 1 -> 2 [label="annotation"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/Assert_diagram.dot b/src/xmlpatterns/schema/doc/Assert_diagram.dot new file mode 100644 index 0000000..7093bef --- /dev/null +++ b/src/xmlpatterns/schema/doc/Assert_diagram.dot @@ -0,0 +1,6 @@ +digraph Assert { + mindist = 2.0 + 1 -> 2 [label="annotation"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/Choice_diagram.dot b/src/xmlpatterns/schema/doc/Choice_diagram.dot new file mode 100644 index 0000000..7b32016 --- /dev/null +++ b/src/xmlpatterns/schema/doc/Choice_diagram.dot @@ -0,0 +1,22 @@ +digraph Choice { + mindist = 2.0 + 1 -> 3 [label="choice"] + 1 -> 3 [label="group"] + 1 -> 2 [label="annotation"] + 1 -> 3 [label="sequence"] + 1 -> 3 [label="any"] + 1 -> 3 [label="element"] + 2 -> 3 [label="choice"] + 2 -> 3 [label="group"] + 2 -> 3 [label="sequence"] + 2 -> 3 [label="any"] + 2 -> 3 [label="element"] + 3 -> 3 [label="choice"] + 3 -> 3 [label="group"] + 3 -> 3 [label="sequence"] + 3 -> 3 [label="any"] + 3 -> 3 [label="element"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] + 3 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/ComplexContentExtension_diagram.dot b/src/xmlpatterns/schema/doc/ComplexContentExtension_diagram.dot new file mode 100644 index 0000000..6131612 --- /dev/null +++ b/src/xmlpatterns/schema/doc/ComplexContentExtension_diagram.dot @@ -0,0 +1,47 @@ +digraph ComplexContentExtension { + mindist = 2.0 + 1 -> 4 [label="choice"] + 1 -> 4 [label="group"] + 1 -> 4 [label="all"] + 1 -> 2 [label="annotation"] + 1 -> 4 [label="sequence"] + 1 -> 6 [label="anyAttribute"] + 1 -> 7 [label="assert"] + 1 -> 3 [label="openContent"] + 1 -> 5 [label="attribute"] + 1 -> 5 [label="attributeGroup"] + 2 -> 4 [label="choice"] + 2 -> 4 [label="group"] + 2 -> 4 [label="all"] + 2 -> 4 [label="sequence"] + 2 -> 6 [label="anyAttribute"] + 2 -> 7 [label="assert"] + 2 -> 3 [label="openContent"] + 2 -> 5 [label="attribute"] + 2 -> 5 [label="attributeGroup"] + 3 -> 4 [label="choice"] + 3 -> 4 [label="group"] + 3 -> 4 [label="all"] + 3 -> 4 [label="sequence"] + 3 -> 6 [label="anyAttribute"] + 3 -> 7 [label="assert"] + 3 -> 5 [label="attribute"] + 3 -> 5 [label="attributeGroup"] + 4 -> 6 [label="anyAttribute"] + 4 -> 7 [label="assert"] + 4 -> 5 [label="attribute"] + 4 -> 5 [label="attributeGroup"] + 5 -> 6 [label="anyAttribute"] + 5 -> 7 [label="assert"] + 5 -> 5 [label="attribute"] + 5 -> 5 [label="attributeGroup"] + 6 -> 7 [label="assert"] + 7 -> 7 [label="assert"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] + 3 [shape=doublecircle, style=filled, color=green] + 4 [shape=doublecircle, style=filled, color=green] + 5 [shape=doublecircle, style=filled, color=green] + 6 [shape=doublecircle, style=filled, color=green] + 7 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/ComplexContentRestriction_diagram.dot b/src/xmlpatterns/schema/doc/ComplexContentRestriction_diagram.dot new file mode 100644 index 0000000..bfda892 --- /dev/null +++ b/src/xmlpatterns/schema/doc/ComplexContentRestriction_diagram.dot @@ -0,0 +1,47 @@ +digraph ComplexContentRestriction { + mindist = 2.0 + 1 -> 4 [label="choice"] + 1 -> 4 [label="group"] + 1 -> 4 [label="all"] + 1 -> 2 [label="annotation"] + 1 -> 4 [label="sequence"] + 1 -> 6 [label="anyAttribute"] + 1 -> 7 [label="assert"] + 1 -> 3 [label="openContent"] + 1 -> 5 [label="attribute"] + 1 -> 5 [label="attributeGroup"] + 2 -> 4 [label="choice"] + 2 -> 4 [label="group"] + 2 -> 4 [label="all"] + 2 -> 4 [label="sequence"] + 2 -> 6 [label="anyAttribute"] + 2 -> 7 [label="assert"] + 2 -> 3 [label="openContent"] + 2 -> 5 [label="attribute"] + 2 -> 5 [label="attributeGroup"] + 3 -> 4 [label="choice"] + 3 -> 4 [label="group"] + 3 -> 4 [label="all"] + 3 -> 4 [label="sequence"] + 3 -> 6 [label="anyAttribute"] + 3 -> 7 [label="assert"] + 3 -> 5 [label="attribute"] + 3 -> 5 [label="attributeGroup"] + 4 -> 6 [label="anyAttribute"] + 4 -> 7 [label="assert"] + 4 -> 5 [label="attribute"] + 4 -> 5 [label="attributeGroup"] + 5 -> 6 [label="anyAttribute"] + 5 -> 7 [label="assert"] + 5 -> 5 [label="attribute"] + 5 -> 5 [label="attributeGroup"] + 6 -> 7 [label="assert"] + 7 -> 7 [label="assert"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] + 3 [shape=doublecircle, style=filled, color=green] + 4 [shape=doublecircle, style=filled, color=green] + 5 [shape=doublecircle, style=filled, color=green] + 6 [shape=doublecircle, style=filled, color=green] + 7 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/ComplexContent_diagram.dot b/src/xmlpatterns/schema/doc/ComplexContent_diagram.dot new file mode 100644 index 0000000..949c27e --- /dev/null +++ b/src/xmlpatterns/schema/doc/ComplexContent_diagram.dot @@ -0,0 +1,11 @@ +digraph ComplexContent { + mindist = 2.0 + 1 -> 3 [label="restriction"] + 1 -> 2 [label="annotation"] + 1 -> 3 [label="extension"] + 2 -> 3 [label="restriction"] + 2 -> 3 [label="extension"] + 1 [shape=circle, style=filled, color=blue] + 2 [shape=circle, style=filled, color=red] + 3 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/DefaultOpenContent_diagram.dot b/src/xmlpatterns/schema/doc/DefaultOpenContent_diagram.dot new file mode 100644 index 0000000..61e7d14 --- /dev/null +++ b/src/xmlpatterns/schema/doc/DefaultOpenContent_diagram.dot @@ -0,0 +1,9 @@ +digraph DefaultOpenContent { + mindist = 2.0 + 1 -> 2 [label="annotation"] + 1 -> 3 [label="any"] + 2 -> 3 [label="any"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=circle, style=filled, color=red] + 3 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/EnumerationFacet_diagram.dot b/src/xmlpatterns/schema/doc/EnumerationFacet_diagram.dot new file mode 100644 index 0000000..91be76b --- /dev/null +++ b/src/xmlpatterns/schema/doc/EnumerationFacet_diagram.dot @@ -0,0 +1,6 @@ +digraph EnumerationFacet { + mindist = 2.0 + 1 -> 2 [label="annotation"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/Field_diagram.dot b/src/xmlpatterns/schema/doc/Field_diagram.dot new file mode 100644 index 0000000..1c597b3 --- /dev/null +++ b/src/xmlpatterns/schema/doc/Field_diagram.dot @@ -0,0 +1,6 @@ +digraph Field { + mindist = 2.0 + 1 -> 2 [label="annotation"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/FractionDigitsFacet_diagram.dot b/src/xmlpatterns/schema/doc/FractionDigitsFacet_diagram.dot new file mode 100644 index 0000000..5e098b3 --- /dev/null +++ b/src/xmlpatterns/schema/doc/FractionDigitsFacet_diagram.dot @@ -0,0 +1,6 @@ +digraph FractionDigitsFacet { + mindist = 2.0 + 1 -> 2 [label="annotation"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/GlobalAttribute_diagram.dot b/src/xmlpatterns/schema/doc/GlobalAttribute_diagram.dot new file mode 100644 index 0000000..25a1a43 --- /dev/null +++ b/src/xmlpatterns/schema/doc/GlobalAttribute_diagram.dot @@ -0,0 +1,9 @@ +digraph GlobalAttribute { + mindist = 2.0 + 1 -> 2 [label="annotation"] + 1 -> 3 [label="simpleType"] + 2 -> 3 [label="simpleType"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] + 3 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/GlobalComplexType_diagram.dot b/src/xmlpatterns/schema/doc/GlobalComplexType_diagram.dot new file mode 100644 index 0000000..05e40b7 --- /dev/null +++ b/src/xmlpatterns/schema/doc/GlobalComplexType_diagram.dot @@ -0,0 +1,52 @@ +digraph GlobalComplexType { + mindist = 2.0 + 1 -> 5 [label="choice"] + 1 -> 3 [label="complexContent"] + 1 -> 5 [label="group"] + 1 -> 5 [label="all"] + 1 -> 2 [label="annotation"] + 1 -> 5 [label="sequence"] + 1 -> 3 [label="simpleContent"] + 1 -> 7 [label="anyAttribute"] + 1 -> 8 [label="assert"] + 1 -> 4 [label="openContent"] + 1 -> 6 [label="attribute"] + 1 -> 6 [label="attributeGroup"] + 2 -> 5 [label="choice"] + 2 -> 3 [label="complexContent"] + 2 -> 5 [label="group"] + 2 -> 5 [label="all"] + 2 -> 5 [label="sequence"] + 2 -> 3 [label="simpleContent"] + 2 -> 7 [label="anyAttribute"] + 2 -> 8 [label="assert"] + 2 -> 4 [label="openContent"] + 2 -> 6 [label="attribute"] + 2 -> 6 [label="attributeGroup"] + 4 -> 5 [label="choice"] + 4 -> 5 [label="group"] + 4 -> 5 [label="all"] + 4 -> 5 [label="sequence"] + 4 -> 7 [label="anyAttribute"] + 4 -> 8 [label="assert"] + 4 -> 6 [label="attribute"] + 4 -> 6 [label="attributeGroup"] + 5 -> 7 [label="anyAttribute"] + 5 -> 8 [label="assert"] + 5 -> 6 [label="attribute"] + 5 -> 6 [label="attributeGroup"] + 6 -> 7 [label="anyAttribute"] + 6 -> 8 [label="assert"] + 6 -> 6 [label="attribute"] + 6 -> 6 [label="attributeGroup"] + 7 -> 8 [label="assert"] + 8 -> 8 [label="assert"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] + 3 [shape=doublecircle, style=filled, color=green] + 4 [shape=doublecircle, style=filled, color=green] + 5 [shape=doublecircle, style=filled, color=green] + 6 [shape=doublecircle, style=filled, color=green] + 7 [shape=doublecircle, style=filled, color=green] + 8 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/GlobalElement_diagram.dot b/src/xmlpatterns/schema/doc/GlobalElement_diagram.dot new file mode 100644 index 0000000..20447a7 --- /dev/null +++ b/src/xmlpatterns/schema/doc/GlobalElement_diagram.dot @@ -0,0 +1,32 @@ +digraph GlobalElement { + mindist = 2.0 + 1 -> 3 [label="complexType"] + 1 -> 4 [label="alternative"] + 1 -> 2 [label="annotation"] + 1 -> 5 [label="key"] + 1 -> 3 [label="simpleType"] + 1 -> 5 [label="keyref"] + 1 -> 5 [label="unique"] + 2 -> 3 [label="complexType"] + 2 -> 4 [label="alternative"] + 2 -> 5 [label="key"] + 2 -> 3 [label="simpleType"] + 2 -> 5 [label="keyref"] + 2 -> 5 [label="unique"] + 3 -> 4 [label="alternative"] + 3 -> 5 [label="key"] + 3 -> 5 [label="keyref"] + 3 -> 5 [label="unique"] + 4 -> 4 [label="alternative"] + 4 -> 5 [label="key"] + 4 -> 5 [label="keyref"] + 4 -> 5 [label="unique"] + 5 -> 5 [label="key"] + 5 -> 5 [label="keyref"] + 5 -> 5 [label="unique"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] + 3 [shape=doublecircle, style=filled, color=green] + 4 [shape=doublecircle, style=filled, color=green] + 5 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/GlobalSimpleType_diagram.dot b/src/xmlpatterns/schema/doc/GlobalSimpleType_diagram.dot new file mode 100644 index 0000000..ccb7f54 --- /dev/null +++ b/src/xmlpatterns/schema/doc/GlobalSimpleType_diagram.dot @@ -0,0 +1,13 @@ +digraph GlobalSimpleType { + mindist = 2.0 + 1 -> 3 [label="restriction"] + 1 -> 2 [label="annotation"] + 1 -> 3 [label="list"] + 1 -> 3 [label="union"] + 2 -> 3 [label="restriction"] + 2 -> 3 [label="list"] + 2 -> 3 [label="union"] + 1 [shape=circle, style=filled, color=blue] + 2 [shape=circle, style=filled, color=red] + 3 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/Import_diagram.dot b/src/xmlpatterns/schema/doc/Import_diagram.dot new file mode 100644 index 0000000..3484bc3 --- /dev/null +++ b/src/xmlpatterns/schema/doc/Import_diagram.dot @@ -0,0 +1,6 @@ +digraph Import { + mindist = 2.0 + 1 -> 2 [label="annotation"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/Include_diagram.dot b/src/xmlpatterns/schema/doc/Include_diagram.dot new file mode 100644 index 0000000..357e4c9 --- /dev/null +++ b/src/xmlpatterns/schema/doc/Include_diagram.dot @@ -0,0 +1,6 @@ +digraph Include { + mindist = 2.0 + 1 -> 2 [label="annotation"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/KeyRef_diagram.dot b/src/xmlpatterns/schema/doc/KeyRef_diagram.dot new file mode 100644 index 0000000..ff425b9 --- /dev/null +++ b/src/xmlpatterns/schema/doc/KeyRef_diagram.dot @@ -0,0 +1,12 @@ +digraph KeyRef { + mindist = 2.0 + 1 -> 2 [label="annotation"] + 1 -> 3 [label="selector"] + 2 -> 3 [label="selector"] + 3 -> 4 [label="field"] + 4 -> 4 [label="field"] + 1 [shape=circle, style=filled, color=blue] + 2 [shape=circle, style=filled, color=red] + 3 [shape=circle, style=filled, color=red] + 4 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/Key_diagram.dot b/src/xmlpatterns/schema/doc/Key_diagram.dot new file mode 100644 index 0000000..bbc09cd --- /dev/null +++ b/src/xmlpatterns/schema/doc/Key_diagram.dot @@ -0,0 +1,12 @@ +digraph Key { + mindist = 2.0 + 1 -> 2 [label="annotation"] + 1 -> 3 [label="selector"] + 2 -> 3 [label="selector"] + 3 -> 4 [label="field"] + 4 -> 4 [label="field"] + 1 [shape=circle, style=filled, color=blue] + 2 [shape=circle, style=filled, color=red] + 3 [shape=circle, style=filled, color=red] + 4 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/LengthFacet_diagram.dot b/src/xmlpatterns/schema/doc/LengthFacet_diagram.dot new file mode 100644 index 0000000..1f9205b --- /dev/null +++ b/src/xmlpatterns/schema/doc/LengthFacet_diagram.dot @@ -0,0 +1,6 @@ +digraph LengthFacet { + mindist = 2.0 + 1 -> 2 [label="annotation"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/List_diagram.dot b/src/xmlpatterns/schema/doc/List_diagram.dot new file mode 100644 index 0000000..44cc698 --- /dev/null +++ b/src/xmlpatterns/schema/doc/List_diagram.dot @@ -0,0 +1,9 @@ +digraph List { + mindist = 2.0 + 1 -> 2 [label="annotation"] + 1 -> 3 [label="simpleType"] + 2 -> 3 [label="simpleType"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] + 3 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/LocalAll_diagram.dot b/src/xmlpatterns/schema/doc/LocalAll_diagram.dot new file mode 100644 index 0000000..88f1b61 --- /dev/null +++ b/src/xmlpatterns/schema/doc/LocalAll_diagram.dot @@ -0,0 +1,13 @@ +digraph LocalAll { + mindist = 2.0 + 1 -> 2 [label="annotation"] + 1 -> 3 [label="any"] + 1 -> 3 [label="element"] + 2 -> 3 [label="any"] + 2 -> 3 [label="element"] + 3 -> 3 [label="any"] + 3 -> 3 [label="element"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] + 3 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/LocalAttribute_diagram.dot b/src/xmlpatterns/schema/doc/LocalAttribute_diagram.dot new file mode 100644 index 0000000..b01f0cf --- /dev/null +++ b/src/xmlpatterns/schema/doc/LocalAttribute_diagram.dot @@ -0,0 +1,9 @@ +digraph LocalAttribute { + mindist = 2.0 + 1 -> 2 [label="annotation"] + 1 -> 3 [label="simpleType"] + 2 -> 3 [label="simpleType"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] + 3 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/LocalChoice_diagram.dot b/src/xmlpatterns/schema/doc/LocalChoice_diagram.dot new file mode 100644 index 0000000..b16c47f --- /dev/null +++ b/src/xmlpatterns/schema/doc/LocalChoice_diagram.dot @@ -0,0 +1,22 @@ +digraph LocalChoice { + mindist = 2.0 + 1 -> 3 [label="choice"] + 1 -> 3 [label="group"] + 1 -> 2 [label="annotation"] + 1 -> 3 [label="sequence"] + 1 -> 3 [label="any"] + 1 -> 3 [label="element"] + 2 -> 3 [label="choice"] + 2 -> 3 [label="group"] + 2 -> 3 [label="sequence"] + 2 -> 3 [label="any"] + 2 -> 3 [label="element"] + 3 -> 3 [label="choice"] + 3 -> 3 [label="group"] + 3 -> 3 [label="sequence"] + 3 -> 3 [label="any"] + 3 -> 3 [label="element"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] + 3 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/LocalComplexType_diagram.dot b/src/xmlpatterns/schema/doc/LocalComplexType_diagram.dot new file mode 100644 index 0000000..92c54b7 --- /dev/null +++ b/src/xmlpatterns/schema/doc/LocalComplexType_diagram.dot @@ -0,0 +1,52 @@ +digraph LocalComplexType { + mindist = 2.0 + 1 -> 5 [label="choice"] + 1 -> 3 [label="complexContent"] + 1 -> 5 [label="group"] + 1 -> 5 [label="all"] + 1 -> 2 [label="annotation"] + 1 -> 5 [label="sequence"] + 1 -> 3 [label="simpleContent"] + 1 -> 7 [label="anyAttribute"] + 1 -> 8 [label="assert"] + 1 -> 4 [label="openContent"] + 1 -> 6 [label="attribute"] + 1 -> 6 [label="attributeGroup"] + 2 -> 5 [label="choice"] + 2 -> 3 [label="complexContent"] + 2 -> 5 [label="group"] + 2 -> 5 [label="all"] + 2 -> 5 [label="sequence"] + 2 -> 3 [label="simpleContent"] + 2 -> 7 [label="anyAttribute"] + 2 -> 8 [label="assert"] + 2 -> 4 [label="openContent"] + 2 -> 6 [label="attribute"] + 2 -> 6 [label="attributeGroup"] + 4 -> 5 [label="choice"] + 4 -> 5 [label="group"] + 4 -> 5 [label="all"] + 4 -> 5 [label="sequence"] + 4 -> 7 [label="anyAttribute"] + 4 -> 8 [label="assert"] + 4 -> 6 [label="attribute"] + 4 -> 6 [label="attributeGroup"] + 5 -> 7 [label="anyAttribute"] + 5 -> 8 [label="assert"] + 5 -> 6 [label="attribute"] + 5 -> 6 [label="attributeGroup"] + 6 -> 7 [label="anyAttribute"] + 6 -> 8 [label="assert"] + 6 -> 6 [label="attribute"] + 6 -> 6 [label="attributeGroup"] + 7 -> 8 [label="assert"] + 8 -> 8 [label="assert"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] + 3 [shape=doublecircle, style=filled, color=green] + 4 [shape=doublecircle, style=filled, color=green] + 5 [shape=doublecircle, style=filled, color=green] + 6 [shape=doublecircle, style=filled, color=green] + 7 [shape=doublecircle, style=filled, color=green] + 8 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/LocalElement_diagram.dot b/src/xmlpatterns/schema/doc/LocalElement_diagram.dot new file mode 100644 index 0000000..397397a --- /dev/null +++ b/src/xmlpatterns/schema/doc/LocalElement_diagram.dot @@ -0,0 +1,32 @@ +digraph LocalElement { + mindist = 2.0 + 1 -> 3 [label="complexType"] + 1 -> 4 [label="alternative"] + 1 -> 2 [label="annotation"] + 1 -> 5 [label="key"] + 1 -> 3 [label="simpleType"] + 1 -> 5 [label="keyref"] + 1 -> 5 [label="unique"] + 2 -> 3 [label="complexType"] + 2 -> 4 [label="alternative"] + 2 -> 5 [label="key"] + 2 -> 3 [label="simpleType"] + 2 -> 5 [label="keyref"] + 2 -> 5 [label="unique"] + 3 -> 4 [label="alternative"] + 3 -> 5 [label="key"] + 3 -> 5 [label="keyref"] + 3 -> 5 [label="unique"] + 4 -> 4 [label="alternative"] + 4 -> 5 [label="key"] + 4 -> 5 [label="keyref"] + 4 -> 5 [label="unique"] + 5 -> 5 [label="key"] + 5 -> 5 [label="keyref"] + 5 -> 5 [label="unique"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] + 3 [shape=doublecircle, style=filled, color=green] + 4 [shape=doublecircle, style=filled, color=green] + 5 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/LocalSequence_diagram.dot b/src/xmlpatterns/schema/doc/LocalSequence_diagram.dot new file mode 100644 index 0000000..0dc7f39 --- /dev/null +++ b/src/xmlpatterns/schema/doc/LocalSequence_diagram.dot @@ -0,0 +1,22 @@ +digraph LocalSequence { + mindist = 2.0 + 1 -> 3 [label="choice"] + 1 -> 3 [label="group"] + 1 -> 2 [label="annotation"] + 1 -> 3 [label="sequence"] + 1 -> 3 [label="any"] + 1 -> 3 [label="element"] + 2 -> 3 [label="choice"] + 2 -> 3 [label="group"] + 2 -> 3 [label="sequence"] + 2 -> 3 [label="any"] + 2 -> 3 [label="element"] + 3 -> 3 [label="choice"] + 3 -> 3 [label="group"] + 3 -> 3 [label="sequence"] + 3 -> 3 [label="any"] + 3 -> 3 [label="element"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] + 3 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/LocalSimpleType_diagram.dot b/src/xmlpatterns/schema/doc/LocalSimpleType_diagram.dot new file mode 100644 index 0000000..ac13305 --- /dev/null +++ b/src/xmlpatterns/schema/doc/LocalSimpleType_diagram.dot @@ -0,0 +1,13 @@ +digraph LocalSimpleType { + mindist = 2.0 + 1 -> 3 [label="restriction"] + 1 -> 2 [label="annotation"] + 1 -> 3 [label="list"] + 1 -> 3 [label="union"] + 2 -> 3 [label="restriction"] + 2 -> 3 [label="list"] + 2 -> 3 [label="union"] + 1 [shape=circle, style=filled, color=blue] + 2 [shape=circle, style=filled, color=red] + 3 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/MaxExclusiveFacet_diagram.dot b/src/xmlpatterns/schema/doc/MaxExclusiveFacet_diagram.dot new file mode 100644 index 0000000..28364f7 --- /dev/null +++ b/src/xmlpatterns/schema/doc/MaxExclusiveFacet_diagram.dot @@ -0,0 +1,6 @@ +digraph MaxExclusiveFacet { + mindist = 2.0 + 1 -> 2 [label="annotation"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/MaxInclusiveFacet_diagram.dot b/src/xmlpatterns/schema/doc/MaxInclusiveFacet_diagram.dot new file mode 100644 index 0000000..9e2c265 --- /dev/null +++ b/src/xmlpatterns/schema/doc/MaxInclusiveFacet_diagram.dot @@ -0,0 +1,6 @@ +digraph MaxInclusiveFacet { + mindist = 2.0 + 1 -> 2 [label="annotation"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/MaxLengthFacet_diagram.dot b/src/xmlpatterns/schema/doc/MaxLengthFacet_diagram.dot new file mode 100644 index 0000000..d565217 --- /dev/null +++ b/src/xmlpatterns/schema/doc/MaxLengthFacet_diagram.dot @@ -0,0 +1,6 @@ +digraph MaxLengthFacet { + mindist = 2.0 + 1 -> 2 [label="annotation"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/MinExclusiveFacet_diagram.dot b/src/xmlpatterns/schema/doc/MinExclusiveFacet_diagram.dot new file mode 100644 index 0000000..d3b3f1f --- /dev/null +++ b/src/xmlpatterns/schema/doc/MinExclusiveFacet_diagram.dot @@ -0,0 +1,6 @@ +digraph MinExclusiveFacet { + mindist = 2.0 + 1 -> 2 [label="annotation"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/MinInclusiveFacet_diagram.dot b/src/xmlpatterns/schema/doc/MinInclusiveFacet_diagram.dot new file mode 100644 index 0000000..e5ca65d --- /dev/null +++ b/src/xmlpatterns/schema/doc/MinInclusiveFacet_diagram.dot @@ -0,0 +1,6 @@ +digraph MinInclusiveFacet { + mindist = 2.0 + 1 -> 2 [label="annotation"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/MinLengthFacet_diagram.dot b/src/xmlpatterns/schema/doc/MinLengthFacet_diagram.dot new file mode 100644 index 0000000..1dcced4 --- /dev/null +++ b/src/xmlpatterns/schema/doc/MinLengthFacet_diagram.dot @@ -0,0 +1,6 @@ +digraph MinLengthFacet { + mindist = 2.0 + 1 -> 2 [label="annotation"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/NamedAttributeGroup_diagram.dot b/src/xmlpatterns/schema/doc/NamedAttributeGroup_diagram.dot new file mode 100644 index 0000000..1754f67 --- /dev/null +++ b/src/xmlpatterns/schema/doc/NamedAttributeGroup_diagram.dot @@ -0,0 +1,17 @@ +digraph NamedAttributeGroup { + mindist = 2.0 + 1 -> 2 [label="annotation"] + 1 -> 4 [label="anyAttribute"] + 1 -> 3 [label="attribute"] + 1 -> 3 [label="attributeGroup"] + 2 -> 4 [label="anyAttribute"] + 2 -> 3 [label="attribute"] + 2 -> 3 [label="attributeGroup"] + 3 -> 4 [label="anyAttribute"] + 3 -> 3 [label="attribute"] + 3 -> 3 [label="attributeGroup"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] + 3 [shape=doublecircle, style=filled, color=green] + 4 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/NamedGroup_diagram.dot b/src/xmlpatterns/schema/doc/NamedGroup_diagram.dot new file mode 100644 index 0000000..6d9a289 --- /dev/null +++ b/src/xmlpatterns/schema/doc/NamedGroup_diagram.dot @@ -0,0 +1,13 @@ +digraph NamedGroup { + mindist = 2.0 + 1 -> 3 [label="choice"] + 1 -> 3 [label="all"] + 1 -> 2 [label="annotation"] + 1 -> 3 [label="sequence"] + 2 -> 3 [label="choice"] + 2 -> 3 [label="all"] + 2 -> 3 [label="sequence"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] + 3 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/Notation_diagram.dot b/src/xmlpatterns/schema/doc/Notation_diagram.dot new file mode 100644 index 0000000..951f26a --- /dev/null +++ b/src/xmlpatterns/schema/doc/Notation_diagram.dot @@ -0,0 +1,6 @@ +digraph Notation { + mindist = 2.0 + 1 -> 2 [label="annotation"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/Override_diagram.dot b/src/xmlpatterns/schema/doc/Override_diagram.dot new file mode 100644 index 0000000..448451a --- /dev/null +++ b/src/xmlpatterns/schema/doc/Override_diagram.dot @@ -0,0 +1,21 @@ +digraph Override { + mindist = 2.0 + 1 -> 2 [label="group"] + 1 -> 2 [label="complexType"] + 1 -> 2 [label="annotation"] + 1 -> 2 [label="simpleType"] + 1 -> 2 [label="element"] + 1 -> 2 [label="notation"] + 1 -> 2 [label="attribute"] + 1 -> 2 [label="attributeGroup"] + 2 -> 2 [label="group"] + 2 -> 2 [label="complexType"] + 2 -> 2 [label="annotation"] + 2 -> 2 [label="simpleType"] + 2 -> 2 [label="element"] + 2 -> 2 [label="notation"] + 2 -> 2 [label="attribute"] + 2 -> 2 [label="attributeGroup"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/PatternFacet_diagram.dot b/src/xmlpatterns/schema/doc/PatternFacet_diagram.dot new file mode 100644 index 0000000..794d74c --- /dev/null +++ b/src/xmlpatterns/schema/doc/PatternFacet_diagram.dot @@ -0,0 +1,6 @@ +digraph PatternFacet { + mindist = 2.0 + 1 -> 2 [label="annotation"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/Redefine_diagram.dot b/src/xmlpatterns/schema/doc/Redefine_diagram.dot new file mode 100644 index 0000000..ba4871d --- /dev/null +++ b/src/xmlpatterns/schema/doc/Redefine_diagram.dot @@ -0,0 +1,15 @@ +digraph Redefine { + mindist = 2.0 + 1 -> 2 [label="group"] + 1 -> 2 [label="complexType"] + 1 -> 2 [label="annotation"] + 1 -> 2 [label="simpleType"] + 1 -> 2 [label="attributeGroup"] + 2 -> 2 [label="group"] + 2 -> 2 [label="complexType"] + 2 -> 2 [label="annotation"] + 2 -> 2 [label="simpleType"] + 2 -> 2 [label="attributeGroup"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/ReferredAttributeGroup_diagram.dot b/src/xmlpatterns/schema/doc/ReferredAttributeGroup_diagram.dot new file mode 100644 index 0000000..fd08872 --- /dev/null +++ b/src/xmlpatterns/schema/doc/ReferredAttributeGroup_diagram.dot @@ -0,0 +1,6 @@ +digraph ReferredAttributeGroup { + mindist = 2.0 + 1 -> 2 [label="annotation"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/ReferredGroup_diagram.dot b/src/xmlpatterns/schema/doc/ReferredGroup_diagram.dot new file mode 100644 index 0000000..c32f69f --- /dev/null +++ b/src/xmlpatterns/schema/doc/ReferredGroup_diagram.dot @@ -0,0 +1,13 @@ +digraph ReferredGroup { + mindist = 2.0 + 1 -> 3 [label="choice"] + 1 -> 3 [label="all"] + 1 -> 2 [label="annotation"] + 1 -> 3 [label="sequence"] + 2 -> 3 [label="choice"] + 2 -> 3 [label="all"] + 2 -> 3 [label="sequence"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] + 3 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/Schema_diagram.dot b/src/xmlpatterns/schema/doc/Schema_diagram.dot new file mode 100644 index 0000000..7d39337 --- /dev/null +++ b/src/xmlpatterns/schema/doc/Schema_diagram.dot @@ -0,0 +1,66 @@ +digraph Schema { + mindist = 2.0 + 1 -> 5 [label="group"] + 1 -> 5 [label="complexType"] + 1 -> 2 [label="import"] + 1 -> 2 [label="include"] + 1 -> 2 [label="annotation"] + 1 -> 3 [label="defaultOpenContent"] + 1 -> 5 [label="simpleType"] + 1 -> 5 [label="element"] + 1 -> 5 [label="notation"] + 1 -> 2 [label="override"] + 1 -> 5 [label="attribute"] + 1 -> 5 [label="attributeGroup"] + 1 -> 2 [label="redefine"] + 2 -> 5 [label="group"] + 2 -> 5 [label="complexType"] + 2 -> 2 [label="import"] + 2 -> 2 [label="include"] + 2 -> 2 [label="annotation"] + 2 -> 3 [label="defaultOpenContent"] + 2 -> 5 [label="simpleType"] + 2 -> 5 [label="element"] + 2 -> 5 [label="notation"] + 2 -> 2 [label="override"] + 2 -> 5 [label="attribute"] + 2 -> 5 [label="attributeGroup"] + 2 -> 2 [label="redefine"] + 3 -> 5 [label="group"] + 3 -> 5 [label="complexType"] + 3 -> 4 [label="annotation"] + 3 -> 5 [label="simpleType"] + 3 -> 5 [label="element"] + 3 -> 5 [label="notation"] + 3 -> 5 [label="attribute"] + 3 -> 5 [label="attributeGroup"] + 4 -> 5 [label="group"] + 4 -> 5 [label="complexType"] + 4 -> 5 [label="simpleType"] + 4 -> 5 [label="element"] + 4 -> 5 [label="notation"] + 4 -> 5 [label="attribute"] + 4 -> 5 [label="attributeGroup"] + 5 -> 5 [label="group"] + 5 -> 5 [label="complexType"] + 5 -> 6 [label="annotation"] + 5 -> 5 [label="simpleType"] + 5 -> 5 [label="element"] + 5 -> 5 [label="notation"] + 5 -> 5 [label="attribute"] + 5 -> 5 [label="attributeGroup"] + 6 -> 5 [label="group"] + 6 -> 5 [label="complexType"] + 6 -> 6 [label="annotation"] + 6 -> 5 [label="simpleType"] + 6 -> 5 [label="element"] + 6 -> 5 [label="notation"] + 6 -> 5 [label="attribute"] + 6 -> 5 [label="attributeGroup"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] + 3 [shape=doublecircle, style=filled, color=green] + 4 [shape=doublecircle, style=filled, color=green] + 5 [shape=doublecircle, style=filled, color=green] + 6 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/Selector_diagram.dot b/src/xmlpatterns/schema/doc/Selector_diagram.dot new file mode 100644 index 0000000..f3e93dc --- /dev/null +++ b/src/xmlpatterns/schema/doc/Selector_diagram.dot @@ -0,0 +1,6 @@ +digraph Selector { + mindist = 2.0 + 1 -> 2 [label="annotation"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/Sequence_diagram.dot b/src/xmlpatterns/schema/doc/Sequence_diagram.dot new file mode 100644 index 0000000..9172744 --- /dev/null +++ b/src/xmlpatterns/schema/doc/Sequence_diagram.dot @@ -0,0 +1,22 @@ +digraph Sequence { + mindist = 2.0 + 1 -> 3 [label="choice"] + 1 -> 3 [label="group"] + 1 -> 2 [label="annotation"] + 1 -> 3 [label="sequence"] + 1 -> 3 [label="any"] + 1 -> 3 [label="element"] + 2 -> 3 [label="choice"] + 2 -> 3 [label="group"] + 2 -> 3 [label="sequence"] + 2 -> 3 [label="any"] + 2 -> 3 [label="element"] + 3 -> 3 [label="choice"] + 3 -> 3 [label="group"] + 3 -> 3 [label="sequence"] + 3 -> 3 [label="any"] + 3 -> 3 [label="element"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] + 3 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/SimpleContentExtension_diagram.dot b/src/xmlpatterns/schema/doc/SimpleContentExtension_diagram.dot new file mode 100644 index 0000000..3ceebfd --- /dev/null +++ b/src/xmlpatterns/schema/doc/SimpleContentExtension_diagram.dot @@ -0,0 +1,23 @@ +digraph SimpleContentExtension { + mindist = 2.0 + 1 -> 2 [label="annotation"] + 1 -> 4 [label="anyAttribute"] + 1 -> 5 [label="assert"] + 1 -> 3 [label="attribute"] + 1 -> 3 [label="attributeGroup"] + 2 -> 4 [label="anyAttribute"] + 2 -> 5 [label="assert"] + 2 -> 3 [label="attribute"] + 2 -> 3 [label="attributeGroup"] + 3 -> 4 [label="anyAttribute"] + 3 -> 5 [label="assert"] + 3 -> 3 [label="attribute"] + 3 -> 3 [label="attributeGroup"] + 4 -> 5 [label="assert"] + 5 -> 5 [label="assert"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] + 3 [shape=doublecircle, style=filled, color=green] + 4 [shape=doublecircle, style=filled, color=green] + 5 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/SimpleContentRestriction_diagram.dot b/src/xmlpatterns/schema/doc/SimpleContentRestriction_diagram.dot new file mode 100644 index 0000000..75b0b71 --- /dev/null +++ b/src/xmlpatterns/schema/doc/SimpleContentRestriction_diagram.dot @@ -0,0 +1,87 @@ +digraph SimpleContentRestriction { + mindist = 2.0 + 1 -> 3 [label="simpleType"] + 1 -> 2 [label="annotation"] + 1 -> 4 [label="length"] + 1 -> 6 [label="anyAttribute"] + 1 -> 4 [label="maxExclusive"] + 1 -> 4 [label="totalDigits"] + 1 -> 4 [label="maxInclusive"] + 1 -> 4 [label="maxLength"] + 1 -> 7 [label="assert"] + 1 -> 4 [label="assertion"] + 1 -> 5 [label="attribute"] + 1 -> 4 [label="minExclusive"] + 1 -> 5 [label="attributeGroup"] + 1 -> 4 [label="minInclusive"] + 1 -> 4 [label="minLength"] + 1 -> 4 [label="whiteSpace"] + 1 -> 4 [label="pattern"] + 1 -> 4 [label="enumeration"] + 1 -> 4 [label="fractionDigits"] + 2 -> 3 [label="simpleType"] + 2 -> 4 [label="length"] + 2 -> 6 [label="anyAttribute"] + 2 -> 4 [label="maxExclusive"] + 2 -> 4 [label="totalDigits"] + 2 -> 4 [label="maxInclusive"] + 2 -> 4 [label="maxLength"] + 2 -> 7 [label="assert"] + 2 -> 4 [label="assertion"] + 2 -> 5 [label="attribute"] + 2 -> 4 [label="minExclusive"] + 2 -> 5 [label="attributeGroup"] + 2 -> 4 [label="minInclusive"] + 2 -> 4 [label="minLength"] + 2 -> 4 [label="whiteSpace"] + 2 -> 4 [label="pattern"] + 2 -> 4 [label="enumeration"] + 2 -> 4 [label="fractionDigits"] + 3 -> 4 [label="fractionDigits"] + 3 -> 4 [label="minLength"] + 3 -> 4 [label="whiteSpace"] + 3 -> 6 [label="anyAttribute"] + 3 -> 4 [label="length"] + 3 -> 7 [label="assert"] + 3 -> 4 [label="maxExclusive"] + 3 -> 4 [label="enumeration"] + 3 -> 4 [label="assertion"] + 3 -> 4 [label="maxInclusive"] + 3 -> 5 [label="attribute"] + 3 -> 4 [label="maxLength"] + 3 -> 4 [label="pattern"] + 3 -> 4 [label="totalDigits"] + 3 -> 5 [label="attributeGroup"] + 3 -> 4 [label="minExclusive"] + 3 -> 4 [label="minInclusive"] + 4 -> 4 [label="fractionDigits"] + 4 -> 4 [label="minLength"] + 4 -> 4 [label="whiteSpace"] + 4 -> 6 [label="anyAttribute"] + 4 -> 4 [label="length"] + 4 -> 7 [label="assert"] + 4 -> 4 [label="maxExclusive"] + 4 -> 4 [label="enumeration"] + 4 -> 4 [label="assertion"] + 4 -> 4 [label="maxInclusive"] + 4 -> 5 [label="attribute"] + 4 -> 4 [label="maxLength"] + 4 -> 4 [label="pattern"] + 4 -> 4 [label="totalDigits"] + 4 -> 5 [label="attributeGroup"] + 4 -> 4 [label="minExclusive"] + 4 -> 4 [label="minInclusive"] + 5 -> 6 [label="anyAttribute"] + 5 -> 7 [label="assert"] + 5 -> 5 [label="attribute"] + 5 -> 5 [label="attributeGroup"] + 6 -> 7 [label="assert"] + 7 -> 7 [label="assert"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] + 3 [shape=doublecircle, style=filled, color=green] + 4 [shape=doublecircle, style=filled, color=green] + 5 [shape=doublecircle, style=filled, color=green] + 6 [shape=doublecircle, style=filled, color=green] + 7 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/SimpleContent_diagram.dot b/src/xmlpatterns/schema/doc/SimpleContent_diagram.dot new file mode 100644 index 0000000..c996329 --- /dev/null +++ b/src/xmlpatterns/schema/doc/SimpleContent_diagram.dot @@ -0,0 +1,11 @@ +digraph SimpleContent { + mindist = 2.0 + 1 -> 3 [label="restriction"] + 1 -> 2 [label="annotation"] + 1 -> 3 [label="extension"] + 2 -> 3 [label="restriction"] + 2 -> 3 [label="extension"] + 1 [shape=circle, style=filled, color=blue] + 2 [shape=circle, style=filled, color=red] + 3 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/SimpleRestriction_diagram.dot b/src/xmlpatterns/schema/doc/SimpleRestriction_diagram.dot new file mode 100644 index 0000000..09cb041 --- /dev/null +++ b/src/xmlpatterns/schema/doc/SimpleRestriction_diagram.dot @@ -0,0 +1,62 @@ +digraph SimpleRestriction { + mindist = 2.0 + 1 -> 4 [label="fractionDigits"] + 1 -> 4 [label="minLength"] + 1 -> 4 [label="whiteSpace"] + 1 -> 2 [label="annotation"] + 1 -> 3 [label="simpleType"] + 1 -> 4 [label="length"] + 1 -> 4 [label="maxExclusive"] + 1 -> 4 [label="enumeration"] + 1 -> 4 [label="assertion"] + 1 -> 4 [label="maxInclusive"] + 1 -> 4 [label="maxLength"] + 1 -> 4 [label="pattern"] + 1 -> 4 [label="totalDigits"] + 1 -> 4 [label="minExclusive"] + 1 -> 4 [label="minInclusive"] + 2 -> 4 [label="fractionDigits"] + 2 -> 4 [label="minLength"] + 2 -> 4 [label="whiteSpace"] + 2 -> 3 [label="simpleType"] + 2 -> 4 [label="length"] + 2 -> 4 [label="maxExclusive"] + 2 -> 4 [label="enumeration"] + 2 -> 4 [label="assertion"] + 2 -> 4 [label="maxInclusive"] + 2 -> 4 [label="maxLength"] + 2 -> 4 [label="pattern"] + 2 -> 4 [label="totalDigits"] + 2 -> 4 [label="minExclusive"] + 2 -> 4 [label="minInclusive"] + 3 -> 4 [label="fractionDigits"] + 3 -> 4 [label="minLength"] + 3 -> 4 [label="whiteSpace"] + 3 -> 4 [label="length"] + 3 -> 4 [label="maxExclusive"] + 3 -> 4 [label="enumeration"] + 3 -> 4 [label="assertion"] + 3 -> 4 [label="maxInclusive"] + 3 -> 4 [label="maxLength"] + 3 -> 4 [label="pattern"] + 3 -> 4 [label="totalDigits"] + 3 -> 4 [label="minExclusive"] + 3 -> 4 [label="minInclusive"] + 4 -> 4 [label="fractionDigits"] + 4 -> 4 [label="minLength"] + 4 -> 4 [label="whiteSpace"] + 4 -> 4 [label="length"] + 4 -> 4 [label="maxExclusive"] + 4 -> 4 [label="enumeration"] + 4 -> 4 [label="assertion"] + 4 -> 4 [label="maxInclusive"] + 4 -> 4 [label="maxLength"] + 4 -> 4 [label="pattern"] + 4 -> 4 [label="totalDigits"] + 4 -> 4 [label="minExclusive"] + 4 -> 4 [label="minInclusive"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] + 3 [shape=doublecircle, style=filled, color=green] + 4 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/TotalDigitsFacet_diagram.dot b/src/xmlpatterns/schema/doc/TotalDigitsFacet_diagram.dot new file mode 100644 index 0000000..0ef4cd6 --- /dev/null +++ b/src/xmlpatterns/schema/doc/TotalDigitsFacet_diagram.dot @@ -0,0 +1,6 @@ +digraph TotalDigitsFacet { + mindist = 2.0 + 1 -> 2 [label="annotation"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/Union_diagram.dot b/src/xmlpatterns/schema/doc/Union_diagram.dot new file mode 100644 index 0000000..d6c1865 --- /dev/null +++ b/src/xmlpatterns/schema/doc/Union_diagram.dot @@ -0,0 +1,10 @@ +digraph Union { + mindist = 2.0 + 1 -> 2 [label="annotation"] + 1 -> 3 [label="simpleType"] + 2 -> 3 [label="simpleType"] + 3 -> 3 [label="simpleType"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] + 3 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/Unique_diagram.dot b/src/xmlpatterns/schema/doc/Unique_diagram.dot new file mode 100644 index 0000000..5b1d098 --- /dev/null +++ b/src/xmlpatterns/schema/doc/Unique_diagram.dot @@ -0,0 +1,12 @@ +digraph Unique { + mindist = 2.0 + 1 -> 2 [label="annotation"] + 1 -> 3 [label="selector"] + 2 -> 3 [label="selector"] + 3 -> 4 [label="field"] + 4 -> 4 [label="field"] + 1 [shape=circle, style=filled, color=blue] + 2 [shape=circle, style=filled, color=red] + 3 [shape=circle, style=filled, color=red] + 4 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/WhiteSpaceFacet_diagram.dot b/src/xmlpatterns/schema/doc/WhiteSpaceFacet_diagram.dot new file mode 100644 index 0000000..596403c --- /dev/null +++ b/src/xmlpatterns/schema/doc/WhiteSpaceFacet_diagram.dot @@ -0,0 +1,6 @@ +digraph WhiteSpaceFacet { + mindist = 2.0 + 1 -> 2 [label="annotation"] + 1 [shape=doublecircle, style=filled, color=blue] + 2 [shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/doc/legend.dot b/src/xmlpatterns/schema/doc/legend.dot new file mode 100644 index 0000000..4f5792e --- /dev/null +++ b/src/xmlpatterns/schema/doc/legend.dot @@ -0,0 +1,7 @@ +digraph { + size="5,4" + 1 [label=" start state ", shape=circle, style=filled, color=blue] + 2 [label="start/end state", shape=doublecircle, style=filled, color=blue] + 3 [label=" internal state", shape=circle, style=filled, color=red] + 4 [label=" end state ", shape=doublecircle, style=filled, color=green] +} diff --git a/src/xmlpatterns/schema/qnamespacesupport.cpp b/src/xmlpatterns/schema/qnamespacesupport.cpp new file mode 100644 index 0000000..0ae5309 --- /dev/null +++ b/src/xmlpatterns/schema/qnamespacesupport.cpp @@ -0,0 +1,160 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#include "qnamespacesupport_p.h" + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +NamespaceSupport::NamespaceSupport() +{ +} + +NamespaceSupport::NamespaceSupport(const NamePool::Ptr &namePool) + : m_namePool(namePool) +{ + // the XML namespace + m_ns.insert(StandardPrefixes::xml, StandardNamespaces::xml); +} + +void NamespaceSupport::setPrefix(const QXmlName::PrefixCode prefixCode, const QXmlName::NamespaceCode namespaceCode) +{ + m_ns.insert(prefixCode, namespaceCode); +} + +void NamespaceSupport::setPrefixes(const QXmlStreamNamespaceDeclarations &declarations) +{ + for (int i = 0; i < declarations.count(); i++) { + const QXmlStreamNamespaceDeclaration declaration = declarations.at(i); + + const QXmlName::PrefixCode prefixCode = m_namePool->allocatePrefix(declaration.prefix().toString()); + const QXmlName::NamespaceCode namespaceCode = m_namePool->allocateNamespace(declaration.namespaceUri().toString()); + m_ns.insert(prefixCode, namespaceCode); + } +} + +void NamespaceSupport::setTargetNamespace(const QXmlName::NamespaceCode namespaceCode) +{ + m_ns.insert(0, namespaceCode); +} + +QXmlName::PrefixCode NamespaceSupport::prefix(const QXmlName::NamespaceCode namespaceCode) const +{ + NamespaceHash::const_iterator itc, it = m_ns.constBegin(); + while ((itc=it) != m_ns.constEnd()) { + ++it; + if (*itc == namespaceCode) + return itc.key(); + } + return 0; +} + +QXmlName::NamespaceCode NamespaceSupport::uri(const QXmlName::PrefixCode prefixCode) const +{ + return m_ns.value(prefixCode); +} + +bool NamespaceSupport::processName(const QString& qname, NameType type, QXmlName &name) const +{ + int len = qname.size(); + const QChar *data = qname.constData(); + for (int pos = 0; pos < len; ++pos) { + if (data[pos] == QLatin1Char(':')) { + const QXmlName::PrefixCode prefixCode = m_namePool->allocatePrefix(qname.left(pos)); + if (!m_ns.contains(prefixCode)) + return false; + const QXmlName::NamespaceCode namespaceCode = uri(prefixCode); + const QXmlName::LocalNameCode localNameCode = m_namePool->allocateLocalName(qname.mid(pos + 1)); + name = QXmlName(namespaceCode, localNameCode, prefixCode); + return true; + } + } + + // there was no ':' + QXmlName::NamespaceCode namespaceCode = 0; + // attributes don't take default namespace + if (type == ElementName && !m_ns.isEmpty()) { + namespaceCode = m_ns.value(0); // get default namespace + } + + const QXmlName::LocalNameCode localNameCode = m_namePool->allocateLocalName(qname); + name = QXmlName(namespaceCode, localNameCode, 0); + + return true; +} + +void NamespaceSupport::pushContext() +{ + m_nsStack.push(m_ns); +} + +void NamespaceSupport::popContext() +{ + m_ns.clear(); + if(!m_nsStack.isEmpty()) + m_ns = m_nsStack.pop(); +} + +QList<QXmlName> NamespaceSupport::namespaceBindings() const +{ + QList<QXmlName> bindings; + + QHashIterator<QXmlName::PrefixCode, QXmlName::NamespaceCode> it(m_ns); + while (it.hasNext()) { + it.next(); + bindings.append(QXmlName(it.value(), StandardLocalNames::empty, it.key())); + } + + return bindings; +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/schema/qnamespacesupport_p.h b/src/xmlpatterns/schema/qnamespacesupport_p.h new file mode 100644 index 0000000..47c21a5 --- /dev/null +++ b/src/xmlpatterns/schema/qnamespacesupport_p.h @@ -0,0 +1,173 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_NamespaceSupport_H +#define Patternist_NamespaceSupport_H + +#include "qnamepool_p.h" + +#include <QtCore/QExplicitlySharedDataPointer> +#include <QtCore/QHash> +#include <QtCore/QSet> +#include <QtCore/QStack> +#include <QtCore/QXmlStreamNamespaceDeclarations> + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +namespace QPatternist +{ + /** + * @short A helper class for handling nested namespace declarations. + * + * This class is mostly an adaption of QXmlNamespaceSupport to the NamePool + * mechanism used in XmlPatterns. + * + * @ingroup Patternist_schema + * @author Tobias Koenig <tobias.koenig@trolltech.com> + */ + class NamespaceSupport + { + public: + /** + * Describes whether the name to process is an attribute or element. + */ + enum NameType + { + AttributeName, ///< An attribute name to process. + ElementName ///< An element name to process. + }; + + /** + * Creates an empty namespace support object. + */ + NamespaceSupport(); + + /** + * Creates a new namespace support object. + * + * @param namePool The name pool where all processed names are stored in. + */ + NamespaceSupport(const NamePool::Ptr &namePool); + + /** + * Adds a new prefix-to-namespace binding. + * + * @param prefixCode The name pool code for the prefix. + * @param namespaceCode The name pool code for the namespace. + */ + void setPrefix(const QXmlName::PrefixCode prefixCode, const QXmlName::NamespaceCode namespaceCode); + + /** + * Adds the prefix-to-namespace bindings from @p declarations to + * the namespace support. + */ + void setPrefixes(const QXmlStreamNamespaceDeclarations &declarations); + + /** + * Sets the name pool code of the target namespace of the schema the + * namespace support works on. + */ + void setTargetNamespace(const QXmlName::NamespaceCode code); + + /** + * Returns the prefix code for the given namespace @p code. + */ + QXmlName::PrefixCode prefix(const QXmlName::NamespaceCode code) const; + + /** + * Returns the namespace code for the given prefix @p code. + */ + QXmlName::NamespaceCode uri(const QXmlName::PrefixCode code) const; + + /** + * Converts the given @p qualifiedName to a resolved QXmlName @p name according + * to the current namespace mapping. + * + * @param qualifiedName The full qualified name. + * @param type The type of name processing. + * @param name The resolved QXmlName. + * + * @returns @c true if the name could be processed correctly or @c false if the + * namespace prefix is unknown. + */ + bool processName(const QString &qualifiedName, NameType type, QXmlName &name) const; + + /** + * Pushes the current namespace mapping onto the stack. + */ + void pushContext(); + + /** + * Pops the current namespace mapping from the stack. + */ + void popContext(); + + /** + * Returns the list of namespace bindings. + */ + QList<QXmlName> namespaceBindings() const; + + private: + typedef QHash<QXmlName::PrefixCode, QXmlName::NamespaceCode> NamespaceHash; + + NamePool::Ptr m_namePool; + QStack<NamespaceHash> m_nsStack; + NamespaceHash m_ns; + }; +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/schema/qxsdalternative.cpp b/src/xmlpatterns/schema/qxsdalternative.cpp new file mode 100644 index 0000000..ceaa34b --- /dev/null +++ b/src/xmlpatterns/schema/qxsdalternative.cpp @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxsdalternative_p.h" + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +void XsdAlternative::setTest(const XsdXPathExpression::Ptr &test) +{ + m_test = test; +} + +XsdXPathExpression::Ptr XsdAlternative::test() const +{ + return m_test; +} + +void XsdAlternative::setType(const SchemaType::Ptr &type) +{ + m_type = type; +} + +SchemaType::Ptr XsdAlternative::type() const +{ + return m_type; +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/schema/qxsdalternative_p.h b/src/xmlpatterns/schema/qxsdalternative_p.h new file mode 100644 index 0000000..8dcfb12 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdalternative_p.h @@ -0,0 +1,114 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_XsdAlternative_H +#define Patternist_XsdAlternative_H + +#include "qnamedschemacomponent_p.h" +#include "qschematype_p.h" +#include "qxsdannotated_p.h" +#include "qxsdxpathexpression_p.h" + +#include <QtCore/QList> + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +namespace QPatternist +{ + /** + * @short Represents a XSD alternative object. + * + * @ingroup Patternist_schema + * @author Tobias Koenig <tobias.koenig@trolltech.com> + */ + class XsdAlternative : public NamedSchemaComponent, public XsdAnnotated + { + public: + typedef QExplicitlySharedDataPointer<XsdAlternative> Ptr; + typedef QList<XsdAlternative::Ptr> List; + + /** + * Sets the xpath @p test of the alternative. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#tac-test">Test Definition</a> + */ + void setTest(const XsdXPathExpression::Ptr &test); + + /** + * Returns the xpath test of the alternative. + */ + XsdXPathExpression::Ptr test() const; + + /** + * Sets the @p type of the alternative. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#tac-type_definition">Type Definition</a> + */ + void setType(const SchemaType::Ptr &type); + + /** + * Returns the type of the alternative. + */ + SchemaType::Ptr type() const; + + private: + XsdXPathExpression::Ptr m_test; + SchemaType::Ptr m_type; + }; +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/schema/qxsdannotated.cpp b/src/xmlpatterns/schema/qxsdannotated.cpp new file mode 100644 index 0000000..d9d89f6 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdannotated.cpp @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxsdannotated_p.h" + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +void XsdAnnotated::addAnnotation(const XsdAnnotation::Ptr &annotation) +{ + m_annotations.append(annotation); +} + +void XsdAnnotated::addAnnotations(const XsdAnnotation::List &annotations) +{ + m_annotations << annotations; +} + +XsdAnnotation::List XsdAnnotated::annotations() const +{ + return m_annotations; +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/schema/qxsdannotated_p.h b/src/xmlpatterns/schema/qxsdannotated_p.h new file mode 100644 index 0000000..05010d9 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdannotated_p.h @@ -0,0 +1,96 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_XsdAnnotated_H +#define Patternist_XsdAnnotated_H + +#include "qxsdannotation_p.h" + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +namespace QPatternist +{ + /** + * @short Base class for all XSD components with annotation content. + * + * @ingroup Patternist_schema + * @author Tobias Koenig <tobias.koenig@trolltech.com> + */ + class XsdAnnotated + { + public: + /** + * Adds a new @p annotation to the component. + */ + void addAnnotation(const XsdAnnotation::Ptr &annotation); + + /** + * Adds a list of new @p annotations to the component. + */ + void addAnnotations(const XsdAnnotation::List &annotations); + + /** + * Returns the list of all annotations of the component. + */ + XsdAnnotation::List annotations() const; + + private: + XsdAnnotation::List m_annotations; + }; +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/schema/qxsdannotation.cpp b/src/xmlpatterns/schema/qxsdannotation.cpp new file mode 100644 index 0000000..d53e3b6 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdannotation.cpp @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxsdannotation_p.h" + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +void XsdAnnotation::setId(const DerivedString<TypeID>::Ptr &id) +{ + m_id = id; +} + +DerivedString<TypeID>::Ptr XsdAnnotation::id() const +{ + return m_id; +} + +void XsdAnnotation::addApplicationInformation(const XsdApplicationInformation::Ptr &information) +{ + m_applicationInformation.append(information); +} + +XsdApplicationInformation::List XsdAnnotation::applicationInformation() const +{ + return m_applicationInformation; +} + +void XsdAnnotation::addDocumentation(const XsdDocumentation::Ptr &documentation) +{ + m_documentations.append(documentation); +} + +XsdDocumentation::List XsdAnnotation::documentation() const +{ + return m_documentations; +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/schema/qxsdannotation_p.h b/src/xmlpatterns/schema/qxsdannotation_p.h new file mode 100644 index 0000000..27fb555 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdannotation_p.h @@ -0,0 +1,127 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_XsdAnnotation_H +#define Patternist_XsdAnnotation_H + +#include "qderivedstring_p.h" +#include "qxsdapplicationinformation_p.h" +#include "qxsddocumentation_p.h" + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +namespace QPatternist +{ + /** + * @short Represents a XSD annotation object. + * + * This class represents the <em>annotation</em> object of a XML schema as described + * <a href="http://www.w3.org/TR/xmlschema11-1/#cAnnotations">here</a>. + * + * @ingroup Patternist_schema + * @author Tobias Koenig <tobias.koenig@trolltech.com> + */ + class XsdAnnotation : public NamedSchemaComponent + { + public: + typedef QExplicitlySharedDataPointer<XsdAnnotation> Ptr; + typedef QList<XsdAnnotation::Ptr> List; + + /** + * Sets the @p id of the annotation. + */ + void setId(const DerivedString<TypeID>::Ptr &id); + + /** + * Returns the @p id of the annotation. + */ + DerivedString<TypeID>::Ptr id() const; + + /** + * Adds an application @p information to the annotation. + * + * The application information is meant to be interpreted by + * a software system, e.g. other parts of the XML processor pipeline. + */ + void addApplicationInformation(const XsdApplicationInformation::Ptr &information); + + /** + * Returns the list of all application information of the annotation. + */ + XsdApplicationInformation::List applicationInformation() const; + + /** + * Adds a @p documentation to the annotation. + * + * The documentation is meant to be read by human being, e.g. additional + * constraints or information about schema components. + */ + void addDocumentation(const XsdDocumentation::Ptr &documentation); + + /** + * Returns the list of all documentations of the annotation. + */ + XsdDocumentation::List documentation() const; + + private: + DerivedString<TypeID>::Ptr m_id; + XsdApplicationInformation::List m_applicationInformation; + XsdDocumentation::List m_documentations; + }; +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/schema/qxsdapplicationinformation.cpp b/src/xmlpatterns/schema/qxsdapplicationinformation.cpp new file mode 100644 index 0000000..46d6d56 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdapplicationinformation.cpp @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxsdapplicationinformation_p.h" + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +void XsdApplicationInformation::setSource(const AnyURI::Ptr &source) +{ + m_source = source; +} + +AnyURI::Ptr XsdApplicationInformation::source() const +{ + return m_source; +} + +void XsdApplicationInformation::setContent(const QString &content) +{ + m_content = content; +} + +QString XsdApplicationInformation::content() const +{ + return m_content; +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/schema/qxsdapplicationinformation_p.h b/src/xmlpatterns/schema/qxsdapplicationinformation_p.h new file mode 100644 index 0000000..2eec83a --- /dev/null +++ b/src/xmlpatterns/schema/qxsdapplicationinformation_p.h @@ -0,0 +1,115 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_XsdApplicationInformation_H +#define Patternist_XsdApplicationInformation_H + +#include "qanytype_p.h" +#include "qanyuri_p.h" +#include "qnamedschemacomponent_p.h" + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +namespace QPatternist +{ + /** + * @short Represents a XSD appinfo object. + * + * This class represents the <em>appinfo</em> component of an <em>annotation</em> object + * of a XML schema as described <a href="http://www.w3.org/TR/xmlschema11-1/#cAnnotations">here</a>. + * + * @ingroup Patternist_schema + * @author Tobias Koenig <tobias.koenig@trolltech.com> + */ + class XsdApplicationInformation : public NamedSchemaComponent + { + public: + typedef QExplicitlySharedDataPointer<XsdApplicationInformation> Ptr; + typedef QList<XsdApplicationInformation::Ptr> List; + + /** + * Sets the @p source of the application information. + * + * The source points to an URL that contains more + * information. + */ + void setSource(const AnyURI::Ptr &source); + + /** + * Returns the source of the application information. + */ + AnyURI::Ptr source() const; + + /** + * Sets the @p content of the application information. + * + * The content can be of abritrary type. + */ + void setContent(const QString &content); + + /** + * Returns the content of the application information. + */ + QString content() const; + + private: + AnyURI::Ptr m_source; + QString m_content; + }; +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/schema/qxsdassertion.cpp b/src/xmlpatterns/schema/qxsdassertion.cpp new file mode 100644 index 0000000..8898bd2 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdassertion.cpp @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxsdassertion_p.h" + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +void XsdAssertion::setTest(const XsdXPathExpression::Ptr &test) +{ + m_test = test; +} + +XsdXPathExpression::Ptr XsdAssertion::test() const +{ + return m_test; +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/schema/qxsdassertion_p.h b/src/xmlpatterns/schema/qxsdassertion_p.h new file mode 100644 index 0000000..56674e5 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdassertion_p.h @@ -0,0 +1,101 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_XsdAssertion_H +#define Patternist_XsdAssertion_H + +#include "qnamedschemacomponent_p.h" +#include "qxsdannotated_p.h" +#include "qxsdxpathexpression_p.h" + +#include <QtCore/QList> + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +namespace QPatternist +{ + /** + * @short Represents a XSD assertion object. + * + * @ingroup Patternist_schema + * @author Tobias Koenig <tobias.koenig@trolltech.com> + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#cAssertions">Assertion Definition</a> + */ + class XsdAssertion : public NamedSchemaComponent, public XsdAnnotated + { + public: + typedef QExplicitlySharedDataPointer<XsdAssertion> Ptr; + typedef QList<XsdAssertion::Ptr> List; + + /** + * Sets the @p test of the assertion. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#as-test">Test Definition</a> + */ + void setTest(const XsdXPathExpression::Ptr &test); + + /** + * Returns the test of the assertion. + */ + XsdXPathExpression::Ptr test() const; + + private: + XsdXPathExpression::Ptr m_test; + }; +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/schema/qxsdattribute.cpp b/src/xmlpatterns/schema/qxsdattribute.cpp new file mode 100644 index 0000000..7fd883e --- /dev/null +++ b/src/xmlpatterns/schema/qxsdattribute.cpp @@ -0,0 +1,130 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxsdattribute_p.h" +#include "qxsdcomplextype_p.h" + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + + +void XsdAttribute::Scope::setVariety(Variety variety) +{ + m_variety = variety; +} + +XsdAttribute::Scope::Variety XsdAttribute::Scope::variety() const +{ + return m_variety; +} + +void XsdAttribute::Scope::setParent(const NamedSchemaComponent::Ptr &parent) +{ + m_parent = parent; +} + +NamedSchemaComponent::Ptr XsdAttribute::Scope::parent() const +{ + return m_parent; +} + +void XsdAttribute::ValueConstraint::setVariety(Variety variety) +{ + m_variety = variety; +} + +XsdAttribute::ValueConstraint::Variety XsdAttribute::ValueConstraint::variety() const +{ + return m_variety; +} + +void XsdAttribute::ValueConstraint::setValue(const QString &value) +{ + m_value = value; +} + +QString XsdAttribute::ValueConstraint::value() const +{ + return m_value; +} + +void XsdAttribute::ValueConstraint::setLexicalForm(const QString &form) +{ + m_lexicalForm = form; +} + +QString XsdAttribute::ValueConstraint::lexicalForm() const +{ + return m_lexicalForm; +} + +void XsdAttribute::setType(const AnySimpleType::Ptr &type) +{ + m_type = type; +} + +AnySimpleType::Ptr XsdAttribute::type() const +{ + return m_type; +} + +void XsdAttribute::setScope(const Scope::Ptr &scope) +{ + m_scope = scope; +} + +XsdAttribute::Scope::Ptr XsdAttribute::scope() const +{ + return m_scope; +} + +void XsdAttribute::setValueConstraint(const ValueConstraint::Ptr &constraint) +{ + m_valueConstraint = constraint; +} + +XsdAttribute::ValueConstraint::Ptr XsdAttribute::valueConstraint() const +{ + return m_valueConstraint; +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/schema/qxsdattribute_p.h b/src/xmlpatterns/schema/qxsdattribute_p.h new file mode 100644 index 0000000..220dd28 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdattribute_p.h @@ -0,0 +1,246 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_XsdAttribute_H +#define Patternist_XsdAttribute_H + +#include "qanysimpletype_p.h" +#include "qnamedschemacomponent_p.h" +#include "qxsdannotated_p.h" + +#include <QtCore/QList> + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +namespace QPatternist +{ + /** + * @short Represents a XSD attribute object. + * + * This class represents the <em>attribute</em> object of a XML schema as described + * <a href="http://www.w3.org/TR/xmlschema11-1/#cAttribute_Declarations">here</a>. + * + * It contains information from either a top-level attribute declaration (as child of + * a <em>schema</em> object) or of a local attribute declaration (as child of <em>complexType</em> + * or <em>attributeGroup</em> object without a 'ref' attribute). + * + * All other occurrences of the <em>attribute</em> object are represented by the XsdAttributeUse class. + * + * @see <a href="http://www.w3.org/Submission/2004/SUBM-xmlschema-api-20040309/xml-schema-api.html#Interface-XSAttributeDeclaration">XML Schema API reference</a> + * @ingroup Patternist_schema + * @author Tobias Koenig <tobias.koenig@trolltech.com> + */ + class XsdAttribute : public NamedSchemaComponent, public XsdAnnotated + { + public: + typedef QExplicitlySharedDataPointer<XsdAttribute> Ptr; + typedef QList<XsdAttribute::Ptr> List; + + /** + * @short Describes the scope of an attribute. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#sc_a">Scope Definition</a> + */ + class Scope : public QSharedData + { + public: + typedef QExplicitlySharedDataPointer<Scope> Ptr; + + /** + * Describes the <a href="http://www.w3.org/TR/xmlschema11-1/#ad-scope">scope</a> of an attribute. + */ + enum Variety + { + Global, ///< The attribute is defined globally as child of the <em>schema</em> object. + Local ///< The attribute is defined locally as child of a complex type or attribute group definition. + }; + + /** + * Sets the @p variety of the attribute scope. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#sc_a-variety">Variety Definition</a> + */ + void setVariety(Variety variety); + + /** + * Returns the variety of the attribute scope. + */ + Variety variety() const; + + /** + * Sets the @p parent complex type or attribute group definition of the attribute scope. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#sc_a-parent">Parent Definition</a> + */ + void setParent(const NamedSchemaComponent::Ptr &parent); + + /** + * Returns the parent complex type or attribute group definition of the attribute scope. + */ + NamedSchemaComponent::Ptr parent() const; + + private: + Variety m_variety; + NamedSchemaComponent::Ptr m_parent; + }; + + + /** + * @short Describes the value constraint of an attribute. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#vc_a">Value Constraint Definition</a> + */ + class ValueConstraint : public QSharedData + { + public: + typedef QExplicitlySharedDataPointer<ValueConstraint> Ptr; + + /** + * Describes the <a href="http://www.w3.org/TR/xmlschema11-1/#ad-value_constraint">value constraint</a> of an attribute. + */ + enum Variety + { + Default, ///< The attribute has a default value set. + Fixed ///< The attribute has a fixed value set. + }; + + /** + * Sets the @p variety of the attribute value constraint. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#vc_a-variety">Variety Definition</a> + */ + void setVariety(Variety variety); + + /** + * Returns the variety of the attribute value constraint. + */ + Variety variety() const; + + /** + * Sets the @p value of the constraint. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#vc_a-value">Value Definition</a> + */ + void setValue(const QString &value); + + /** + * Returns the value of the constraint. + */ + QString value() const; + + /** + * Sets the lexical @p form of the constraint. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#vc_a-lexical_form">Lexical Form Definition</a> + */ + void setLexicalForm(const QString &form); + + /** + * Returns the lexical form of the constraint. + */ + QString lexicalForm() const; + + private: + Variety m_variety; + QString m_value; + QString m_lexicalForm; + }; + + /** + * Sets the simple @p type definition of the attribute. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#ad-type_definition">Simple Type Definition</a> + */ + void setType(const AnySimpleType::Ptr &type); + + /** + * Returns the simple type definition of the attribute. + */ + AnySimpleType::Ptr type() const; + + /** + * Sets the @p scope of the attribute. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#ad-scope">Scope Definition</a> + */ + void setScope(const Scope::Ptr &scope); + + /** + * Returns the scope of the attribute. + */ + Scope::Ptr scope() const; + + /** + * Sets the value @p constraint of the attribute. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#ad-value_constraint">Value Constraint Definition</a> + */ + void setValueConstraint(const ValueConstraint::Ptr &constraint); + + /** + * Returns the value constraint of the attribute. + */ + ValueConstraint::Ptr valueConstraint() const; + + private: + AnySimpleType::Ptr m_type; + Scope::Ptr m_scope; + ValueConstraint::Ptr m_valueConstraint; + }; +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/schema/qxsdattributegroup.cpp b/src/xmlpatterns/schema/qxsdattributegroup.cpp new file mode 100644 index 0000000..ff62ef5 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdattributegroup.cpp @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxsdattributegroup_p.h" + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +void XsdAttributeGroup::setAttributeUses(const XsdAttributeUse::List &attributeUses) +{ + m_attributeUses = attributeUses; +} + +void XsdAttributeGroup::addAttributeUse(const XsdAttributeUse::Ptr &attributeUse) +{ + m_attributeUses.append(attributeUse); +} + +XsdAttributeUse::List XsdAttributeGroup::attributeUses() const +{ + return m_attributeUses; +} + +void XsdAttributeGroup::setWildcard(const XsdWildcard::Ptr &wildcard) +{ + m_wildcard = wildcard; +} + +XsdWildcard::Ptr XsdAttributeGroup::wildcard() const +{ + return m_wildcard; +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/schema/qxsdattributegroup_p.h b/src/xmlpatterns/schema/qxsdattributegroup_p.h new file mode 100644 index 0000000..3684df2 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdattributegroup_p.h @@ -0,0 +1,122 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_XsdAttributeGroup_H +#define Patternist_XsdAttributeGroup_H + +#include "qxsdannotated_p.h" +#include "qxsdattributeuse_p.h" +#include "qxsdwildcard_p.h" + +#include <QtCore/QList> + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +namespace QPatternist +{ + /** + * @short Represents the XSD attributeGroup object. + * + * This class represents the <em>attributeGroup</em> object of a XML schema as described + * <a href="http://www.w3.org/TR/xmlschema11-1/#cAttribute_Group_Definitions">here</a>. + * + * @see <a href="http://www.w3.org/Submission/2004/SUBM-xmlschema-api-20040309/xml-schema-api.html#Interface-XSAttributeGroup">XML Schema API reference</a> + * @ingroup Patternist_schema + * @author Tobias Koenig <tobias.koenig@trolltech.com> + */ + class XsdAttributeGroup : public NamedSchemaComponent, public XsdAnnotated + { + public: + typedef QExplicitlySharedDataPointer<XsdAttributeGroup> Ptr; + typedef QList<XsdAttributeGroup::Ptr> List; + + /** + * Sets the list of attribute @p uses that are defined in the attribute group. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#agd-attribute_uses">Attribute Uses</a> + */ + void setAttributeUses(const XsdAttributeUse::List &uses); + + /** + * Adds a new attribute @p use to the attribute group. + */ + void addAttributeUse(const XsdAttributeUse::Ptr &use); + + /** + * Returns the list of all attribute uses of the attribute group. + */ + XsdAttributeUse::List attributeUses() const; + + /** + * Sets the attribute @p wildcard of the attribute group. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#agd-attribute_wildcard">Attribute Wildcard</a> + */ + void setWildcard(const XsdWildcard::Ptr &wildcard); + + /** + * Returns the attribute wildcard of the attribute group. + */ + XsdWildcard::Ptr wildcard() const; + + private: + XsdAttributeUse::List m_attributeUses; + XsdWildcard::Ptr m_wildcard; + }; +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/schema/qxsdattributereference.cpp b/src/xmlpatterns/schema/qxsdattributereference.cpp new file mode 100644 index 0000000..0b3ce03 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdattributereference.cpp @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxsdattributereference_p.h" + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +bool XsdAttributeReference::isAttributeUse() const +{ + return false; +} + +bool XsdAttributeReference::isReference() const +{ + return true; +} + +void XsdAttributeReference::setType(Type type) +{ + m_type = type; +} + +XsdAttributeReference::Type XsdAttributeReference::type() const +{ + return m_type; +} + +void XsdAttributeReference::setReferenceName(const QXmlName &referenceName) +{ + m_referenceName = referenceName; +} + +QXmlName XsdAttributeReference::referenceName() const +{ + return m_referenceName; +} + +void XsdAttributeReference::setSourceLocation(const QSourceLocation &location) +{ + m_sourceLocation = location; +} + +QSourceLocation XsdAttributeReference::sourceLocation() const +{ + return m_sourceLocation; +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/schema/qxsdattributereference_p.h b/src/xmlpatterns/schema/qxsdattributereference_p.h new file mode 100644 index 0000000..0d2bdc1 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdattributereference_p.h @@ -0,0 +1,147 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_XsdAttributeReference_H +#define Patternist_XsdAttributeReference_H + +#include "qxsdattributeuse_p.h" + +#include <QtXmlPatterns/QSourceLocation> + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +namespace QPatternist +{ + /** + * @short A helper class for attribute reference resolving. + * + * For easy resolving of attribute references, we have this class + * that can be used as a place holder for the real attribute use + * object it is referring to. + * So whenever the parser detects an attribute reference, it creates + * a XsdAttributeReference and returns it instead of the XsdAttributeUse. + * During a later phase, the resolver will look for all XsdAttributeReferences + * in the schema and will replace them with their referring XsdAttributeUse + * objects. + * + * @ingroup Patternist_schema + * @author Tobias Koenig <tobias.koenig@trolltech.com> + */ + class XsdAttributeReference : public XsdAttributeUse + { + public: + typedef QExplicitlySharedDataPointer<XsdAttributeReference> Ptr; + + /** + * Describes the type of the attribute reference. + */ + enum Type + { + AttributeUse, ///< The reference points to an attribute use. + AttributeGroup ///< The reference points to an attribute group. + }; + + /** + * Always returns false, used to avoid dynamic casts. + */ + virtual bool isAttributeUse() const; + + /** + * Always returns true, used to avoid dynamic casts. + */ + virtual bool isReference() const; + + /** + * Sets the @p type of the attribute reference. + */ + void setType(Type type); + + /** + * Returns the type of the attribute reference. + */ + Type type() const; + + /** + * Sets the @p name of the attribute or attribute group the + * attribute reference refers to. + */ + void setReferenceName(const QXmlName &name); + + /** + * Returns the name of the attribute or attribute group the + * attribute reference refers to. + */ + QXmlName referenceName() const; + + /** + * Sets the source @p location where the reference is located. + */ + void setSourceLocation(const QSourceLocation &location); + + /** + * Returns the source location where the reference is located. + */ + QSourceLocation sourceLocation() const; + + private: + Type m_type; + QXmlName m_referenceName; + QSourceLocation m_sourceLocation; + }; +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/schema/qxsdattributeterm.cpp b/src/xmlpatterns/schema/qxsdattributeterm.cpp new file mode 100644 index 0000000..78ddd2f --- /dev/null +++ b/src/xmlpatterns/schema/qxsdattributeterm.cpp @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxsdattributeterm_p.h" + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +bool XsdAttributeTerm::isAttributeUse() const +{ + return false; +} + +bool XsdAttributeTerm::isReference() const +{ + return false; +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/schema/qxsdattributeterm_p.h b/src/xmlpatterns/schema/qxsdattributeterm_p.h new file mode 100644 index 0000000..4852d46 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdattributeterm_p.h @@ -0,0 +1,96 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_XsdAttributeTerm_H +#define Patternist_XsdAttributeTerm_H + +#include "qnamedschemacomponent_p.h" +#include "qxsdannotated_p.h" + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +namespace QPatternist +{ + /** + * @short A base class for all attribute types. + * + * For easy resolving of attribute references, we use this as + * common base class for XsdAttribute and XsdAttributeReference. + * + * @ingroup Patternist_schema + * @author Tobias Koenig <tobias.koenig@trolltech.com> + */ + class XsdAttributeTerm : public NamedSchemaComponent, public XsdAnnotated + { + public: + typedef QExplicitlySharedDataPointer<XsdAttributeTerm> Ptr; + + /** + * Returns @c true if the term is an attribute use, @c false otherwise. + */ + virtual bool isAttributeUse() const; + + /** + * Returns @c true if the term is an attribute use reference, @c false otherwise. + * + * @note The reference term is only used internally as helper during type resolving. + */ + virtual bool isReference() const; + }; +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/schema/qxsdattributeuse.cpp b/src/xmlpatterns/schema/qxsdattributeuse.cpp new file mode 100644 index 0000000..d241167 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdattributeuse.cpp @@ -0,0 +1,136 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxsdattributeuse_p.h" + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +void XsdAttributeUse::ValueConstraint::setVariety(Variety variety) +{ + m_variety = variety; +} + +XsdAttributeUse::ValueConstraint::Variety XsdAttributeUse::ValueConstraint::variety() const +{ + return m_variety; +} + +void XsdAttributeUse::ValueConstraint::setValue(const QString &value) +{ + m_value = value; +} + +QString XsdAttributeUse::ValueConstraint::value() const +{ + return m_value; +} + +void XsdAttributeUse::ValueConstraint::setLexicalForm(const QString &form) +{ + m_lexicalForm = form; +} + +QString XsdAttributeUse::ValueConstraint::lexicalForm() const +{ + return m_lexicalForm; +} + +XsdAttributeUse::ValueConstraint::Ptr XsdAttributeUse::ValueConstraint::fromAttributeValueConstraint(const XsdAttribute::ValueConstraint::Ptr &constraint) +{ + XsdAttributeUse::ValueConstraint::Ptr newConstraint(new XsdAttributeUse::ValueConstraint()); + switch (constraint->variety()) { + case XsdAttribute::ValueConstraint::Fixed: newConstraint->setVariety(Fixed); break; + case XsdAttribute::ValueConstraint::Default: newConstraint->setVariety(Default); break; + } + newConstraint->setValue(constraint->value()); + newConstraint->setLexicalForm(constraint->lexicalForm()); + + return newConstraint; +} + +XsdAttributeUse::XsdAttributeUse() + : m_useType(OptionalUse) +{ +} + +bool XsdAttributeUse::isAttributeUse() const +{ + return true; +} + +void XsdAttributeUse::setUseType(UseType type) +{ + m_useType = type; +} + +XsdAttributeUse::UseType XsdAttributeUse::useType() const +{ + return m_useType; +} + +bool XsdAttributeUse::isRequired() const +{ + return (m_useType == RequiredUse); +} + +void XsdAttributeUse::setAttribute(const XsdAttribute::Ptr &attribute) +{ + m_attribute = attribute; +} + +XsdAttribute::Ptr XsdAttributeUse::attribute() const +{ + return m_attribute; +} + +void XsdAttributeUse::setValueConstraint(const ValueConstraint::Ptr &constraint) +{ + m_valueConstraint = constraint; +} + +XsdAttributeUse::ValueConstraint::Ptr XsdAttributeUse::valueConstraint() const +{ + return m_valueConstraint; +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/schema/qxsdattributeuse_p.h b/src/xmlpatterns/schema/qxsdattributeuse_p.h new file mode 100644 index 0000000..eb1dc40 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdattributeuse_p.h @@ -0,0 +1,224 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_XsdAttributeUse_H +#define Patternist_XsdAttributeUse_H + +#include "qxsdattribute_p.h" +#include "qxsdattributeterm_p.h" + +#include <QtCore/QList> + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +namespace QPatternist +{ + /** + * @short Represents a XSD attribute use object. + * + * This class represents the <em>attribute use</em> object of a XML schema as described + * <a href="http://www.w3.org/TR/xmlschema11-1/#cAttributeUse">here</a>. + * + * It contains information from a local attribute declaration (as child of <em>complexType</em> + * or <em>attributeGroup</em> object). + * + * All other occurrences of the <em>attribute</em> object are represented by the XsdAttribute class. + * + * @see <a href="http://www.w3.org/Submission/2004/SUBM-xmlschema-api-20040309/xml-schema-api.html#Interface-XSAttributeUse">XML Schema API reference</a> + * @ingroup Patternist_schema + * @author Tobias Koenig <tobias.koenig@trolltech.com> + */ + class XsdAttributeUse : public XsdAttributeTerm + { + public: + typedef QExplicitlySharedDataPointer<XsdAttributeUse> Ptr; + typedef QList<XsdAttributeUse::Ptr> List; + + /** + * Describes the value constraint of an attribute use. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#vc_au">Value Constraint Definition</a> + */ + class ValueConstraint : public QSharedData + { + public: + typedef QExplicitlySharedDataPointer<ValueConstraint> Ptr; + + /** + * Describes the <a href="http://www.w3.org/TR/xmlschema11-1/#au-value_constraint">value constraint</a> of an attribute use. + */ + enum Variety + { + Default, ///< The attribute use has a default value set. + Fixed ///< The attribute use has a fixed value set. + }; + + /** + * Sets the @p variety of the attribute use value constraint. + */ + void setVariety(Variety variety); + + /** + * Returns the variety of the attribute use value constraint. + */ + Variety variety() const; + + /** + * Sets the @p value of the constraint. + */ + void setValue(const QString &value); + + /** + * Returns the value of the constraint. + */ + QString value() const; + + /** + * Sets the lexical @p form of the constraint. + */ + void setLexicalForm(const QString &form); + + /** + * Returns the lexical form of the constraint. + */ + QString lexicalForm() const; + + /** + * Creates a new value constraint from a XsdAttribute::ValueConstraint. + */ + static ValueConstraint::Ptr fromAttributeValueConstraint(const XsdAttribute::ValueConstraint::Ptr &constraint); + + private: + Variety m_variety; + QString m_value; + QString m_lexicalForm; + }; + + /** + * Describes the use type of the attribute use. + */ + enum UseType + { + OptionalUse, ///< The attribute can be there but doesn't need to. + RequiredUse, ///< The attribute must be there. + ProhibitedUse ///< The attribute is not allowed to be there. + }; + + /** + * Creates a new attribute use object. + */ + XsdAttributeUse(); + + /** + * Always returns true, used to avoid dynamic casts. + */ + virtual bool isAttributeUse() const; + + /** + * Sets the use @p type of the attribute use. + * + * @see UseType + */ + void setUseType(UseType type); + + /** + * Returns the use type of the attribute use. + */ + UseType useType() const; + + /** + * Returns whether the attribute use is required. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#au-required">Required Definition</a> + */ + bool isRequired() const; + + /** + * Sets the @p attribute the attribute use is referring to. + * That is either a local definition as child of a complexType + * or attributeGroup object, or a reference defined by the + * 'ref' attribute. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#au-attribute_declaration">Attribute Declaration</a> + */ + void setAttribute(const XsdAttribute::Ptr &attribute); + + /** + * Returns the attribute the attribute use is referring to. + */ + XsdAttribute::Ptr attribute() const; + + /** + * Sets the value @p constraint of the attribute use. + * + * @see http://www.w3.org/TR/xmlschema11-1/#vc_au + */ + void setValueConstraint(const ValueConstraint::Ptr &constraint); + + /** + * Returns the value constraint of the attribute use. + */ + ValueConstraint::Ptr valueConstraint() const; + + private: + UseType m_useType; + XsdAttribute::Ptr m_attribute; + ValueConstraint::Ptr m_valueConstraint; + }; +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/schema/qxsdcomplextype.cpp b/src/xmlpatterns/schema/qxsdcomplextype.cpp new file mode 100644 index 0000000..0ecca9e --- /dev/null +++ b/src/xmlpatterns/schema/qxsdcomplextype.cpp @@ -0,0 +1,231 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxsdcomplextype_p.h" + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +void XsdComplexType::OpenContent::setMode(Mode mode) +{ + m_mode = mode; +} + +XsdComplexType::OpenContent::Mode XsdComplexType::OpenContent::mode() const +{ + return m_mode; +} + +void XsdComplexType::OpenContent::setWildcard(const XsdWildcard::Ptr &wildcard) +{ + m_wildcard = wildcard; +} + +XsdWildcard::Ptr XsdComplexType::OpenContent::wildcard() const +{ + return m_wildcard; +} + +void XsdComplexType::ContentType::setVariety(Variety variety) +{ + m_variety = variety; +} + +XsdComplexType::ContentType::Variety XsdComplexType::ContentType::variety() const +{ + return m_variety; +} + +void XsdComplexType::ContentType::setParticle(const XsdParticle::Ptr &particle) +{ + m_particle = particle; +} + +XsdParticle::Ptr XsdComplexType::ContentType::particle() const +{ + return m_particle; +} + +void XsdComplexType::ContentType::setOpenContent(const OpenContent::Ptr &content) +{ + m_openContent = content; +} + +XsdComplexType::OpenContent::Ptr XsdComplexType::ContentType::openContent() const +{ + return m_openContent; +} + +void XsdComplexType::ContentType::setSimpleType(const AnySimpleType::Ptr &type) +{ + m_simpleType = type; +} + +AnySimpleType::Ptr XsdComplexType::ContentType::simpleType() const +{ + return m_simpleType; +} + + +XsdComplexType::XsdComplexType() + : m_isAbstract(false) + , m_contentType(new ContentType()) +{ + m_contentType->setVariety(ContentType::Empty); +} + +void XsdComplexType::setIsAbstract(bool abstract) +{ + m_isAbstract = abstract; +} + +bool XsdComplexType::isAbstract() const +{ + return m_isAbstract; +} + +QString XsdComplexType::displayName(const NamePool::Ptr &np) const +{ + return np->displayName(name(np)); +} + +void XsdComplexType::setWxsSuperType(const SchemaType::Ptr &type) +{ + m_superType = type; +} + +SchemaType::Ptr XsdComplexType::wxsSuperType() const +{ + return m_superType; +} + +void XsdComplexType::setContext(const NamedSchemaComponent::Ptr &component) +{ + m_context = component; +} + +NamedSchemaComponent::Ptr XsdComplexType::context() const +{ + return m_context; +} + +void XsdComplexType::setContentType(const ContentType::Ptr &type) +{ + m_contentType = type; +} + +XsdComplexType::ContentType::Ptr XsdComplexType::contentType() const +{ + return m_contentType; +} + +void XsdComplexType::setAttributeUses(const XsdAttributeUse::List &attributeUses) +{ + m_attributeUses = attributeUses; +} + +void XsdComplexType::addAttributeUse(const XsdAttributeUse::Ptr &attributeUse) +{ + m_attributeUses.append(attributeUse); +} + +XsdAttributeUse::List XsdComplexType::attributeUses() const +{ + return m_attributeUses; +} + +void XsdComplexType::setAttributeWildcard(const XsdWildcard::Ptr &wildcard) +{ + m_attributeWildcard = wildcard; +} + +XsdWildcard::Ptr XsdComplexType::attributeWildcard() const +{ + return m_attributeWildcard; +} + +XsdComplexType::TypeCategory XsdComplexType::category() const +{ + return ComplexType; +} + +void XsdComplexType::setDerivationMethod(DerivationMethod method) +{ + m_derivationMethod = method; +} + +XsdComplexType::DerivationMethod XsdComplexType::derivationMethod() const +{ + return m_derivationMethod; +} + +void XsdComplexType::setProhibitedSubstitutions(const BlockingConstraints &substitutions) +{ + m_prohibitedSubstitutions = substitutions; +} + +XsdComplexType::BlockingConstraints XsdComplexType::prohibitedSubstitutions() const +{ + return m_prohibitedSubstitutions; +} + +void XsdComplexType::setAssertions(const XsdAssertion::List &assertions) +{ + m_assertions = assertions; +} + +void XsdComplexType::addAssertion(const XsdAssertion::Ptr &assertion) +{ + m_assertions.append(assertion); +} + +XsdAssertion::List XsdComplexType::assertions() const +{ + return m_assertions; +} + +bool XsdComplexType::isDefinedBySchema() const +{ + return true; +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/schema/qxsdcomplextype_p.h b/src/xmlpatterns/schema/qxsdcomplextype_p.h new file mode 100644 index 0000000..ad04f99 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdcomplextype_p.h @@ -0,0 +1,404 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_XsdComplexType_H +#define Patternist_XsdComplexType_H + +#include "qanytype_p.h" +#include "qxsdassertion_p.h" +#include "qxsdattributeuse_p.h" +#include "qxsdparticle_p.h" +#include "qxsdsimpletype_p.h" +#include "qxsduserschematype_p.h" +#include "qxsdwildcard_p.h" + +#include <QtCore/QSet> + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +namespace QPatternist +{ + /** + * @short Represents a XSD complexType object. + * + * This class represents the <em>complexType</em> object of a XML schema as described + * <a href="http://www.w3.org/TR/xmlschema11-1/#Complex_Type_Definitions">here</a>. + * + * It contains information from either a top-level complex type declaration (as child of a <em>schema</em> object) + * or a local complex type declaration (as descendant of an <em>element</em> object). + * + * @see <a href="http://www.w3.org/Submission/2004/SUBM-xmlschema-api-20040309/xml-schema-api.html#Interface-XSComplexType">XML Schema API reference</a> + * @ingroup Patternist_schema + * @author Tobias Koenig <tobias.koenig@trolltech.com> + */ + class XsdComplexType : public XsdUserSchemaType<AnyType> + { + public: + typedef QExplicitlySharedDataPointer<XsdComplexType> Ptr; + + /** + * @short Describes the open content object of a complex type. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#ct-open_content">Open Content Definition</a> + */ + class OpenContent : public QSharedData, public XsdAnnotated + { + public: + typedef QExplicitlySharedDataPointer<OpenContent> Ptr; + + /** + * Describes the mode of the open content. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#oc-mode">Mode Definition</a> + */ + enum Mode + { + None, + Interleave, + Suffix + }; + + /** + * Sets the @p mode of the open content. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#oc-mode">Mode Definition</a> + */ + void setMode(Mode mode); + + /** + * Returns the mode of the open content. + */ + Mode mode() const; + + /** + * Sets the @p wildcard of the open content. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#oc-wildcard">Wildcard Definition</a> + */ + void setWildcard(const XsdWildcard::Ptr &wildcard); + + /** + * Returns the wildcard of the open content. + */ + XsdWildcard::Ptr wildcard() const; + + private: + Mode m_mode; + XsdWildcard::Ptr m_wildcard; + }; + + /** + * @short Describes the content type of a complex type. + */ + class ContentType : public QSharedData + { + public: + typedef QExplicitlySharedDataPointer<ContentType> Ptr; + + /** + * Describes the variety of the content type. + */ + enum Variety + { + Empty = 0, ///< The complex type has no further content. + Simple, ///< The complex type has only simple type content (e.g. text, number etc.) + ElementOnly, ///< The complex type has further elements or attributes but no text as content. + Mixed ///< The complex type has further elements or attributes and text as content. + }; + + /** + * Sets the @p variety of the content type. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#ct-variety">Variety Definition</a> + */ + void setVariety(Variety variety); + + /** + * Returns the variety of the content type. + */ + Variety variety() const; + + /** + * Sets the @p particle object of the content type. + * + * The content type has only a particle object if + * its variety is ElementOnly or Mixed. + * + * @see XsdParticle + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#ct-particle">Particle Declaration</a> + */ + void setParticle(const XsdParticle::Ptr &particle); + + /** + * Returns the particle object of the content type, + * or an empty pointer if its variety is neither + * ElementOnly nor Mixed. + */ + XsdParticle::Ptr particle() const; + + /** + * Sets the open @p content object of the content type. + * + * The content type has only an open content object if + * its variety is ElementOnly or Mixed. + * + * @see OpenContent + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#ct-open_content">Open Content Declaration</a> + */ + void setOpenContent(const OpenContent::Ptr &content); + + /** + * Returns the open content object of the content type, + * or an empty pointer if its variety is neither + * ElementOnly nor Mixed. + */ + OpenContent::Ptr openContent() const; + + /** + * Sets the simple @p type object of the content type. + * + * The content type has only a simple type object if + * its variety is Simple. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#ct-simple_type_definition">Simple Type Definition</a> + */ + void setSimpleType(const AnySimpleType::Ptr &type); + + /** + * Returns the simple type object of the content type, + * or an empty pointer if its variety is not Simple. + */ + AnySimpleType::Ptr simpleType() const; + + private: + Variety m_variety; + XsdParticle::Ptr m_particle; + OpenContent::Ptr m_openContent; + XsdSimpleType::Ptr m_simpleType; + }; + + + /** + * Creates a complex type object with empty content. + */ + XsdComplexType(); + + /** + * Destroys the complex type object. + */ + ~XsdComplexType() {}; + + /** + * Returns the display name of the complex type. + * + * The display name can be used to show the type name + * to the user. + * + * @param namePool The name pool where the type name is stored in. + */ + virtual QString displayName(const NamePool::Ptr &namePool) const; + + /** + * Sets the base type of the complex type. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#ctd-base_type_definition">Base Type Definition</a> + */ + void setWxsSuperType(const SchemaType::Ptr &type); + + /** + * Returns the base type of the complex type. + */ + virtual SchemaType::Ptr wxsSuperType() const; + + /** + * Sets the context @p component of the complex type. + * + * The component is either an element declaration or a complex type definition. + */ + void setContext(const NamedSchemaComponent::Ptr &component); + + /** + * Returns the context component of the complex type. + */ + NamedSchemaComponent::Ptr context() const; + + /** + * Sets the derivation @p method of the complex type. + * + * The derivation method depends on whether the complex + * type object has an extension or restriction object as child. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#ctd-derivation_method">Derivation Method Definition</a> + * @see DerivationMethod + */ + void setDerivationMethod(DerivationMethod method); + + /** + * Returns the derivation method of the complex type. + */ + virtual DerivationMethod derivationMethod() const; + + /** + * Sets whether the complex type is @p abstract. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#ctd-abstract">Abstract Definition</a> + */ + void setIsAbstract(bool abstract); + + /** + * Returns whether the complex type is abstract. + */ + virtual bool isAbstract() const; + + /** + * Sets the list of all attribute @p uses of the complex type. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#ctd-attribute_uses">Attribute Uses Declaration</a> + */ + void setAttributeUses(const XsdAttributeUse::List &uses); + + /** + * Adds a new attribute @p use to the complex type. + */ + void addAttributeUse(const XsdAttributeUse::Ptr &use); + + /** + * Returns the list of all attribute uses of the complex type. + */ + XsdAttributeUse::List attributeUses() const; + + /** + * Sets the attribute @p wildcard of the complex type. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#ctd-attribute_wildcard">Attribute Wildcard Declaration</a> + */ + void setAttributeWildcard(const XsdWildcard::Ptr &wildcard); + + /** + * Returns the attribute wildcard of the complex type. + */ + XsdWildcard::Ptr attributeWildcard() const; + + /** + * Always returns SchemaType::ComplexType + */ + virtual TypeCategory category() const; + + /** + * Sets the content @p type of the complex type. + * + * @see ContentType + */ + void setContentType(const ContentType::Ptr &type); + + /** + * Returns the content type of the complex type. + */ + ContentType::Ptr contentType() const; + + /** + * Sets the prohibited @p substitutions of the complex type. + * + * Only ExtensionConstraint and RestrictionConstraint are allowed. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#ctd-prohibited_substitutions">Prohibited Substitutions Definition</a> + */ + void setProhibitedSubstitutions(const BlockingConstraints &substitutions); + + /** + * Returns the prohibited substitutions of the complex type. + */ + BlockingConstraints prohibitedSubstitutions() const; + + /** + * Sets the @p assertions of the complex type. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#ctd-assertions">Assertions Definition</a> + */ + void setAssertions(const XsdAssertion::List &assertions); + + /** + * Adds an @p assertion to the complex type. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#ctd-assertions">Assertions Definition</a> + */ + void addAssertion(const XsdAssertion::Ptr &assertion); + + /** + * Returns the assertions of the complex type. + */ + XsdAssertion::List assertions() const; + + /** + * Always returns @c true. + */ + virtual bool isDefinedBySchema() const; + + private: + SchemaType::Ptr m_superType; + NamedSchemaComponent::Ptr m_context; + DerivationMethod m_derivationMethod; + bool m_isAbstract; + XsdAttributeUse::List m_attributeUses; + XsdWildcard::Ptr m_attributeWildcard; + ContentType::Ptr m_contentType; + BlockingConstraints m_prohibitedSubstitutions; + XsdAssertion::List m_assertions; + }; +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/schema/qxsddocumentation.cpp b/src/xmlpatterns/schema/qxsddocumentation.cpp new file mode 100644 index 0000000..b3e1682 --- /dev/null +++ b/src/xmlpatterns/schema/qxsddocumentation.cpp @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxsddocumentation_p.h" + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +XsdDocumentation::XsdDocumentation() +{ +} + +XsdDocumentation::~XsdDocumentation() +{ +} + +void XsdDocumentation::setSource(const AnyURI::Ptr &source) +{ + m_source = source; +} + +AnyURI::Ptr XsdDocumentation::source() const +{ + return m_source; +} + +void XsdDocumentation::setLanguage(const DerivedString<TypeLanguage>::Ptr &language) +{ + m_language = language; +} + +DerivedString<TypeLanguage>::Ptr XsdDocumentation::language() const +{ + return m_language; +} + +void XsdDocumentation::setContent(const QString &content) +{ + m_content = content; +} + +QString XsdDocumentation::content() const +{ + return m_content; +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/schema/qxsddocumentation_p.h b/src/xmlpatterns/schema/qxsddocumentation_p.h new file mode 100644 index 0000000..049ba80 --- /dev/null +++ b/src/xmlpatterns/schema/qxsddocumentation_p.h @@ -0,0 +1,137 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_XsdDocumentation_H +#define Patternist_XsdDocumentation_H + +#include "qanytype_p.h" +#include "qanyuri_p.h" +#include "qderivedstring_p.h" +#include "qnamedschemacomponent_p.h" + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +namespace QPatternist +{ + /** + * @short Represents a XSD documentation object. + * + * This class represents the <em>documentation</em> component of an <em>annotation</em> object + * of a XML schema as described <a href="http://www.w3.org/TR/xmlschema11-1/#cAnnotations">here</a>. + * + * @ingroup Patternist_schema + * @author Tobias Koenig <tobias.koenig@trolltech.com> + */ + class XsdDocumentation : public NamedSchemaComponent + { + public: + typedef QExplicitlySharedDataPointer<XsdDocumentation> Ptr; + typedef QList<XsdDocumentation::Ptr> List; + + /** + * Creates a new documentation object. + */ + XsdDocumentation(); + + /** + * Destroys the documentation object. + */ + ~XsdDocumentation(); + + /** + * Sets the @p source of the documentation. + * + * The source points to an URL that contains more + * information. + */ + void setSource(const AnyURI::Ptr &source); + + /** + * Returns the source of the documentation. + */ + AnyURI::Ptr source() const; + + /** + * Sets the @p language of the documentation. + */ + void setLanguage(const DerivedString<TypeLanguage>::Ptr &language); + + /** + * Returns the language of the documentation. + */ + DerivedString<TypeLanguage>::Ptr language() const; + + /** + * Sets the @p content of the documentation. + * + * The content can be of abritrary type. + */ + void setContent(const QString &content); + + /** + * Returns the content of the documentation. + */ + QString content() const; + + private: + AnyURI::Ptr m_source; + DerivedString<TypeLanguage>::Ptr m_language; + QString m_content; + }; +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/schema/qxsdelement.cpp b/src/xmlpatterns/schema/qxsdelement.cpp new file mode 100644 index 0000000..c907144 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdelement.cpp @@ -0,0 +1,244 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxsdelement_p.h" + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +void XsdElement::Scope::setVariety(Variety variety) +{ + m_variety = variety; +} + +XsdElement::Scope::Variety XsdElement::Scope::variety() const +{ + return m_variety; +} + +void XsdElement::Scope::setParent(const NamedSchemaComponent::Ptr &parent) +{ + m_parent = parent; +} + +NamedSchemaComponent::Ptr XsdElement::Scope::parent() const +{ + return m_parent; +} + +void XsdElement::ValueConstraint::setVariety(Variety variety) +{ + m_variety = variety; +} + +XsdElement::ValueConstraint::Variety XsdElement::ValueConstraint::variety() const +{ + return m_variety; +} + +void XsdElement::ValueConstraint::setValue(const QString &value) +{ + m_value = value; +} + +QString XsdElement::ValueConstraint::value() const +{ + return m_value; +} + +void XsdElement::ValueConstraint::setLexicalForm(const QString &form) +{ + m_lexicalForm = form; +} + +QString XsdElement::ValueConstraint::lexicalForm() const +{ + return m_lexicalForm; +} + +void XsdElement::TypeTable::addAlternative(const XsdAlternative::Ptr &alternative) +{ + m_alternatives.append(alternative); +} + +XsdAlternative::List XsdElement::TypeTable::alternatives() const +{ + return m_alternatives; +} + +void XsdElement::TypeTable::setDefaultTypeDefinition(const XsdAlternative::Ptr &type) +{ + m_defaultTypeDefinition = type; +} + +XsdAlternative::Ptr XsdElement::TypeTable::defaultTypeDefinition() const +{ + return m_defaultTypeDefinition; +} + + +XsdElement::XsdElement() + : m_isAbstract(false) +{ +} + +bool XsdElement::isElement() const +{ + return true; +} + +void XsdElement::setType(const SchemaType::Ptr &type) +{ + m_type = type; +} + +SchemaType::Ptr XsdElement::type() const +{ + return m_type; +} + +void XsdElement::setScope(const Scope::Ptr &scope) +{ + m_scope = scope; +} + +XsdElement::Scope::Ptr XsdElement::scope() const +{ + return m_scope; +} + +void XsdElement::setValueConstraint(const ValueConstraint::Ptr &constraint) +{ + m_valueConstraint = constraint; +} + +XsdElement::ValueConstraint::Ptr XsdElement::valueConstraint() const +{ + return m_valueConstraint; +} + +void XsdElement::setTypeTable(const TypeTable::Ptr &table) +{ + m_typeTable = table; +} + +XsdElement::TypeTable::Ptr XsdElement::typeTable() const +{ + return m_typeTable; +} + +void XsdElement::setIsAbstract(bool abstract) +{ + m_isAbstract = abstract; +} + +bool XsdElement::isAbstract() const +{ + return m_isAbstract; +} + +void XsdElement::setIsNillable(bool nillable) +{ + m_isNillable = nillable; +} + +bool XsdElement::isNillable() const +{ + return m_isNillable; +} + +void XsdElement::setDisallowedSubstitutions(const BlockingConstraints &substitutions) +{ + m_disallowedSubstitutions = substitutions; +} + +XsdElement::BlockingConstraints XsdElement::disallowedSubstitutions() const +{ + return m_disallowedSubstitutions; +} + +void XsdElement::setSubstitutionGroupExclusions(const SchemaType::DerivationConstraints &exclusions) +{ + m_substitutionGroupExclusions = exclusions; +} + +SchemaType::DerivationConstraints XsdElement::substitutionGroupExclusions() const +{ + return m_substitutionGroupExclusions; +} + +void XsdElement::setIdentityConstraints(const XsdIdentityConstraint::List &constraints) +{ + m_identityConstraints = constraints; +} + +void XsdElement::addIdentityConstraint(const XsdIdentityConstraint::Ptr &constraint) +{ + m_identityConstraints.append(constraint); +} + +XsdIdentityConstraint::List XsdElement::identityConstraints() const +{ + return m_identityConstraints; +} + +void XsdElement::setSubstitutionGroupAffiliations(const XsdElement::List &affiliations) +{ + m_substitutionGroupAffiliations = affiliations; +} + +XsdElement::List XsdElement::substitutionGroupAffiliations() const +{ + return m_substitutionGroupAffiliations; +} + +void XsdElement::addSubstitutionGroup(const XsdElement::Ptr &element) +{ + m_substitutionGroups.insert(element); +} + +XsdElement::List XsdElement::substitutionGroups() const +{ + return m_substitutionGroups.toList(); +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/schema/qxsdelement_p.h b/src/xmlpatterns/schema/qxsdelement_p.h new file mode 100644 index 0000000..304e888 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdelement_p.h @@ -0,0 +1,403 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_XsdElement_H +#define Patternist_XsdElement_H + +#include "qschemacomponent_p.h" +#include "qschematype_p.h" +#include "qxsdalternative_p.h" +#include "qxsdidentityconstraint_p.h" +#include "qxsdcomplextype_p.h" + +#include <QtCore/QList> +#include <QtCore/QSet> + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +namespace QPatternist +{ + /** + * @short Represents a XSD element object. + * + * This class represents the <em>element</em> object of a XML schema as described + * <a href="http://www.w3.org/TR/xmlschema11-1/#cElement_Declarations">here</a>. + * + * It contains information from either a top-level element declaration (as child of a <em>schema</em> object) + * or a local element declaration (as descendant of an <em>complexType</em> object). + * + * @see <a href="http://www.w3.org/Submission/2004/SUBM-xmlschema-api-20040309/xml-schema-api.html#Interface-XSElementDecl">XML Schema API reference</a> + * @ingroup Patternist_schema + * @author Tobias Koenig <tobias.koenig@trolltech.com> + */ + class XsdElement : public XsdTerm + { + public: + typedef QExplicitlySharedDataPointer<XsdElement> Ptr; + typedef QList<XsdElement::Ptr> List; + + + /** + * Describes the <a href="http://www.w3.org/TR/xmlschema11-1/#ed-value_constraint">constraint type</a> of the element. + */ + enum ConstraintType + { + NoneConstraint, ///< The value of the element has no constraints. + DefaultConstraint, ///< The element has a default value set. + FixedConstraint ///< The element has a fixed value set. + }; + + /** + * Describes the scope of an element. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#sc_e">Scope Definition</a> + */ + class Scope : public QSharedData + { + public: + typedef QExplicitlySharedDataPointer<Scope> Ptr; + + /** + * Describes the <a href="http://www.w3.org/TR/xmlschema11-1/#ad-scope">scope</a> of an attribute. + */ + enum Variety + { + Global, ///< The element is defined globally as child of the <em>schema</em> object. + Local ///< The element is defined locally as child of a complex type or model group definition. + }; + + /** + * Sets the @p variety of the element scope. + */ + void setVariety(Variety variety); + + /** + * Returns the variety of the element scope. + */ + Variety variety() const; + + /** + * Sets the @p parent complex type or model group definition of the element scope. + */ + void setParent(const NamedSchemaComponent::Ptr &parent); + + /** + * Returns the parent complex type or model group definition of the element scope. + */ + NamedSchemaComponent::Ptr parent() const; + + private: + Variety m_variety; + NamedSchemaComponent::Ptr m_parent; + }; + + /** + * Describes a type table of an element. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#tt">Type Table Definition</a> + */ + class TypeTable : public QSharedData + { + public: + typedef QExplicitlySharedDataPointer<TypeTable> Ptr; + + /** + * Adds an @p alternative to the type table. + */ + void addAlternative(const XsdAlternative::Ptr &alternative); + + /** + * Returns the alternatives of the type table. + */ + XsdAlternative::List alternatives() const; + + /** + * Sets the default @p type definition. + */ + void setDefaultTypeDefinition(const XsdAlternative::Ptr &type); + + /** + * Returns the default type definition. + */ + XsdAlternative::Ptr defaultTypeDefinition() const; + + private: + XsdAlternative::List m_alternatives; + XsdAlternative::Ptr m_defaultTypeDefinition; + }; + + + /** + * Describes the value constraint of an element. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#vc_e">Value Constraint Definition</a> + */ + class ValueConstraint : public QSharedData + { + public: + typedef QExplicitlySharedDataPointer<ValueConstraint> Ptr; + + /** + * Describes the <a href="http://www.w3.org/TR/xmlschema11-1/#ed-value_constraint">value constraint</a> of an element. + */ + enum Variety + { + Default, ///< The element has a default value set. + Fixed ///< The element has a fixed value set. + }; + + /** + * Sets the @p variety of the element value constraint. + */ + void setVariety(Variety variety); + + /** + * Returns the variety of the element value constraint. + */ + Variety variety() const; + + /** + * Sets the @p value of the constraint. + */ + void setValue(const QString &value); + + /** + * Returns the value of the constraint. + */ + QString value() const; + + /** + * Sets the lexical @p form of the constraint. + */ + void setLexicalForm(const QString &form); + + /** + * Returns the lexical form of the constraint. + */ + QString lexicalForm() const; + + private: + Variety m_variety; + QString m_value; + QString m_lexicalForm; + }; + + /** + * Creates a new element object. + */ + XsdElement(); + + /** + * Always returns @c true, used to avoid dynamic casts. + */ + virtual bool isElement() const; + + /** + * Sets the @p type of the element. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#ed-type_definition">Type Definition</a> + */ + void setType(const SchemaType::Ptr &type); + + /** + * Returns the type of the element. + */ + SchemaType::Ptr type() const; + + /** + * Sets the @p scope of the element. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#ed-scope">Scope Definition</a> + */ + void setScope(const Scope::Ptr &scope); + + /** + * Returns the scope of the element. + */ + Scope::Ptr scope() const; + + /** + * Sets the value @p constraint of the element. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#ed-value_constraint">Value Constraint Definition</a> + */ + void setValueConstraint(const ValueConstraint::Ptr &constraint); + + /** + * Returns the value constraint of the element. + */ + ValueConstraint::Ptr valueConstraint() const; + + /** + * Sets the type table of the element. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#ed-type_table">Type Table Definition</a> + */ + void setTypeTable(const TypeTable::Ptr &table); + + /** + * Returns the type table of the element. + */ + TypeTable::Ptr typeTable() const; + + /** + * Sets whether the element is @p abstract. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#ed-abstract">Abstract Definition</a> + */ + void setIsAbstract(bool abstract); + + /** + * Returns whether the element is abstract. + */ + bool isAbstract() const; + + /** + * Sets whether the element is @p nillable. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#ed-nillable">Nillable Definition</a> + */ + void setIsNillable(bool nillable); + + /** + * Returns whether the element is nillable. + */ + bool isNillable() const; + + /** + * Sets the disallowed @p substitutions of the element. + * + * Only ExtensionConstraint, RestrictionConstraint and SubstitutionConstraint are allowed. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#ed-disallowed_substitutions">Disallowed Substitutions Definition</a> + */ + void setDisallowedSubstitutions(const BlockingConstraints &substitutions); + + /** + * Returns the disallowed substitutions of the element. + */ + BlockingConstraints disallowedSubstitutions() const; + + /** + * Sets the substitution group @p exclusions of the element. + * + * Only SchemaType::ExtensionConstraint and SchemaType::RestrictionConstraint are allowed. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#ed-substitution_group_exclusions">Substitution Group Exclusions Definition</a> + */ + void setSubstitutionGroupExclusions(const SchemaType::DerivationConstraints &exclusions); + + /** + * Returns the substitution group exclusions of the element. + */ + SchemaType::DerivationConstraints substitutionGroupExclusions() const; + + /** + * Sets the identity @p constraints of the element. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#ed-identity-constraint_definitions">Identity Constraint Definition</a> + */ + void setIdentityConstraints(const XsdIdentityConstraint::List &constraints); + + /** + * Adds a new identity @p constraint to the element. + */ + void addIdentityConstraint(const XsdIdentityConstraint::Ptr &constraint); + + /** + * Returns a list of all identity constraints of the element. + */ + XsdIdentityConstraint::List identityConstraints() const; + + /** + * Sets the substitution group @p affiliations of the element. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#ed-substituion_group_affiliations">Substitution Group Affiliations</a> + */ + void setSubstitutionGroupAffiliations(const XsdElement::List &affiliations); + + /** + * Returns the substitution group affiliations of the element. + */ + XsdElement::List substitutionGroupAffiliations() const; + + /** + * Adds a substitution group to the element. + */ + void addSubstitutionGroup(const XsdElement::Ptr &elements); + + /** + * Returns the substitution groups of the element. + */ + XsdElement::List substitutionGroups() const; + + private: + SchemaType::Ptr m_type; + Scope::Ptr m_scope; + ValueConstraint::Ptr m_valueConstraint; + TypeTable::Ptr m_typeTable; + bool m_isAbstract; + bool m_isNillable; + BlockingConstraints m_disallowedSubstitutions; + SchemaType::DerivationConstraints m_substitutionGroupExclusions; + XsdIdentityConstraint::List m_identityConstraints; + XsdElement::List m_substitutionGroupAffiliations; + QSet<XsdElement::Ptr> m_substitutionGroups; + }; +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/schema/qxsdfacet.cpp b/src/xmlpatterns/schema/qxsdfacet.cpp new file mode 100644 index 0000000..7bbbc9d --- /dev/null +++ b/src/xmlpatterns/schema/qxsdfacet.cpp @@ -0,0 +1,124 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxsdfacet_p.h" + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +XsdFacet::XsdFacet() + : m_type(None) +{ +} + +void XsdFacet::setType(Type type) +{ + m_type = type; +} + +XsdFacet::Type XsdFacet::type() const +{ + return m_type; +} + +void XsdFacet::setValue(const AtomicValue::Ptr &value) +{ + m_value = value; +} + +AtomicValue::Ptr XsdFacet::value() const +{ + return m_value; +} + +void XsdFacet::setMultiValue(const AtomicValue::List &value) +{ + m_multiValue = value; +} + +AtomicValue::List XsdFacet::multiValue() const +{ + return m_multiValue; +} + +void XsdFacet::setAssertions(const XsdAssertion::List &assertions) +{ + m_assertions = assertions; +} + +XsdAssertion::List XsdFacet::assertions() const +{ + return m_assertions; +} + +void XsdFacet::setFixed(bool fixed) +{ + m_fixed = fixed; +} + +bool XsdFacet::fixed() const +{ + return m_fixed; +} + +QString XsdFacet::typeName(Type type) +{ + switch (type) { + case Length: return QLatin1String("length"); break; + case MinimumLength: return QLatin1String("minLength"); break; + case MaximumLength: return QLatin1String("maxLength"); break; + case Pattern: return QLatin1String("pattern"); break; + case WhiteSpace: return QLatin1String("whiteSpace"); break; + case MaximumInclusive: return QLatin1String("maxInclusive"); break; + case MaximumExclusive: return QLatin1String("maxExclusive"); break; + case MinimumInclusive: return QLatin1String("minInclusive"); break; + case MinimumExclusive: return QLatin1String("minExclusive"); break; + case TotalDigits: return QLatin1String("totalDigits"); break; + case FractionDigits: return QLatin1String("fractionDigits"); break; + case Enumeration: return QLatin1String("enumeration"); break; + case Assertion: return QLatin1String("assertion"); break; + case None: // fall through + default: return QLatin1String("none"); break; + } +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/schema/qxsdfacet_p.h b/src/xmlpatterns/schema/qxsdfacet_p.h new file mode 100644 index 0000000..5d16b4e --- /dev/null +++ b/src/xmlpatterns/schema/qxsdfacet_p.h @@ -0,0 +1,213 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_XsdFacet_H +#define Patternist_XsdFacet_H + +#include "qitem_p.h" +#include "qnamedschemacomponent_p.h" +#include "qxsdannotated_p.h" +#include "qxsdassertion_p.h" + +#include <QtCore/QList> + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +namespace QPatternist +{ + /** + * @short Represents a XSD facet object. + * + * This class represents one of the following XML schema objects: + * + * <ul> + * <li><em>length</em> <a href="http://www.w3.org/TR/xmlschema-2/#rf-length">Definition</a></li> + * <li><em>minLength</em> <a href="http://www.w3.org/TR/xmlschema-2/#rf-minLength">Definition</a></li> + * <li><em>maxLength</em> <a href="http://www.w3.org/TR/xmlschema-2/#rf-maxLength">Definition</a></li> + * <li><em>pattern</em> <a href="http://www.w3.org/TR/xmlschema-2/#rf-pattern">Definition</a></li> + * <li><em>whiteSpace</em> <a href="http://www.w3.org/TR/xmlschema-2/#rf-whiteSpace">Definition</a></li> + * <li><em>maxInclusive</em> <a href="http://www.w3.org/TR/xmlschema-2/#rf-maxInclusive">Definition</a></li> + * <li><em>maxExclusive</em> <a href="http://www.w3.org/TR/xmlschema-2/#rf-maxExclusive">Definition</a></li> + * <li><em>minInclusive</em> <a href="http://www.w3.org/TR/xmlschema-2/#rf-minInclusive">Definition</a></li> + * <li><em>minExclusive</em> <a href="http://www.w3.org/TR/xmlschema-2/#rf-minExclusive">Definition</a></li> + * <li><em>totalDigits</em> <a href="http://www.w3.org/TR/xmlschema-2/#rf-totalDigits">Definition</a></li> + * <li><em>fractionDigits</em> <a href="http://www.w3.org/TR/xmlschema-2/#rf-fractionDigits">Definition</a></li> + * <li><em>enumeration</em> <a href="http://www.w3.org/TR/xmlschema-2/#rf-enumeration">Definition</a></li> + * <li><em>assertion</em> <a href="http://www.w3.org/TR/xmlschema-2/#rf-assertion">Definition</a></li> + * </ul> + * + * @see <a href="http://www.w3.org/Submission/2004/SUBM-xmlschema-api-20040309/xml-schema-api.html#Interface-XSFacet">XML Schema API reference</a> + * @ingroup Patternist_schema + * @author Tobias Koenig <tobias.koenig@trolltech.com> + */ + class XsdFacet : public NamedSchemaComponent, public XsdAnnotated + { + public: + typedef QExplicitlySharedDataPointer<XsdFacet> Ptr; + + /** + * Describes the type of the facet. + */ + enum Type + { + None = 0, ///< An invalid facet. + Length = 1 << 0, ///< Match the exact length (<a href="http://www.w3.org/TR/xmlschema-2/#rf-length">Length Definition</a>) + MinimumLength = 1 << 1, ///< Match the minimum length (<a href="http://www.w3.org/TR/xmlschema-2/#rf-minLength">Minimum Length Definition</a>) + MaximumLength = 1 << 2, ///< Match the maximum length (<a href="http://www.w3.org/TR/xmlschema-2/#rf-maxLength">Maximum Length Definition</a>) + Pattern = 1 << 3, ///< Match a regular expression (<a href="http://www.w3.org/TR/xmlschema-2/#rf-pattern">Pattern Definition</a>) + WhiteSpace = 1 << 4, ///< Match a whitespace rule (<a href="http://www.w3.org/TR/xmlschema-2/#rf-whiteSpace">White Space Definition</a>) + MaximumInclusive = 1 << 5, ///< Match a maximum inclusive (<a href="http://www.w3.org/TR/xmlschema-2/#rf-maxInclusive">Maximum Inclusive Definition</a>) + MaximumExclusive = 1 << 6, ///< Match a maximum exclusive (<a href="http://www.w3.org/TR/xmlschema-2/#rf-maxExclusive">Maximum Exclusive Definition</a>) + MinimumInclusive = 1 << 7, ///< Match a minimum inclusive (<a href="http://www.w3.org/TR/xmlschema-2/#rf-minInclusive">Minimum Inclusive Definition</a>) + MinimumExclusive = 1 << 8, ///< Match a minimum exclusive (<a href="http://www.w3.org/TR/xmlschema-2/#rf-minExclusive">Minimum Exclusive Definition</a>) + TotalDigits = 1 << 9, ///< Match some integer digits (<a href="http://www.w3.org/TR/xmlschema-2/#rf-totalDigits">Total Digits Definition</a>) + FractionDigits = 1 << 10, ///< Match some double digits (<a href="http://www.w3.org/TR/xmlschema-2/#rf-fractionDigits">Fraction Digits Definition</a>) + Enumeration = 1 << 11, ///< Match an enumeration (<a href="http://www.w3.org/TR/xmlschema-2/#rf-enumeration">Enumeration Definition</a>) + Assertion = 1 << 12, ///< Match an assertion (<a href="http://www.w3.org/TR/xmlschema-2/#rf-assertion">Assertion Definition</a>) + }; + typedef QHash<XsdFacet::Type, XsdFacet::Ptr> Hash; + typedef QHashIterator<XsdFacet::Type, XsdFacet::Ptr> HashIterator; + + /** + * Creates a new facet object of type None. + */ + XsdFacet(); + + /** + * Sets the @p type of the facet. + * + * @see Type + */ + void setType(Type type); + + /** + * Returns the type of the facet. + */ + Type type() const; + + /** + * Sets the @p value of the facet. + * + * Depending on the type of the facet the + * value can be a string, interger, double etc. + * + * @note This method should be used for all types of facets + * except Pattern, Enumeration and Assertion. + */ + void setValue(const AtomicValue::Ptr &value); + + /** + * Returns the value of the facet or an empty pointer if facet + * type is Pattern, Enumeration or Assertion. + */ + AtomicValue::Ptr value() const; + + /** + * Sets the @p value of the facet. + * + * @note This method should be used for if the type of the + * facet is Pattern or Enumeration. + */ + void setMultiValue(const AtomicValue::List &value); + + /** + * Returns the value of the facet or an empty pointer if facet + * type is not of type Pattern or Enumeration. + */ + AtomicValue::List multiValue() const; + + /** + * Sets the @p assertions of the facet. + * + * @note This method should be used if the type of the + * facet is Assertion. + */ + void setAssertions(const XsdAssertion::List &assertions); + + /** + * Returns the assertions of the facet or an empty pointer if facet + * type is not of type Assertion. + */ + XsdAssertion::List assertions() const; + + /** + * Sets whether the facet is @p fixed. + * + * All facets except pattern, enumeration and assertion can be fixed. + */ + void setFixed(bool fixed); + + /** + * Returns whether the facet is fixed. + */ + bool fixed() const; + + /** + * Returns the textual description of the facet @p type. + */ + static QString typeName(Type type); + + private: + Type m_type; + AtomicValue::Ptr m_value; + AtomicValue::List m_multiValue; + XsdAssertion::List m_assertions; + bool m_fixed; + }; +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/schema/qxsdidcache.cpp b/src/xmlpatterns/schema/qxsdidcache.cpp new file mode 100644 index 0000000..25788c8 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdidcache.cpp @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxsdidcache_p.h" + +#include <QtCore/QReadLocker> +#include <QtCore/QWriteLocker> + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +void XsdIdCache::addId(const QString &id) +{ + const QWriteLocker locker(&m_lock); + Q_ASSERT(!m_ids.contains(id)); + + m_ids.insert(id); +} + +bool XsdIdCache::hasId(const QString &id) const +{ + const QReadLocker locker(&m_lock); + + return m_ids.contains(id); +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/schema/qxsdidcache_p.h b/src/xmlpatterns/schema/qxsdidcache_p.h new file mode 100644 index 0000000..dae967e --- /dev/null +++ b/src/xmlpatterns/schema/qxsdidcache_p.h @@ -0,0 +1,99 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_XsdIdCache_H +#define Patternist_XsdIdCache_H + +#include "qschemacomponent_p.h" + +#include <QtCore/QExplicitlySharedDataPointer> +#include <QtCore/QReadWriteLock> +#include <QtCore/QSet> +#include <QtCore/QString> + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +namespace QPatternist +{ + /** + * @short Helper class for keeping track of all existing IDs in a schema. + * + * @ingroup Patternist_schema + * @author Tobias Koenig <tobias.koenig@trolltech.com> + */ + class XsdIdCache : public QSharedData + { + public: + typedef QExplicitlySharedDataPointer<XsdIdCache> Ptr; + + /** + * Adds an @p id to the id cache. + */ + void addId(const QString &id); + + /** + * Returns whether the id cache contains the given @p id already. + */ + bool hasId(const QString &id) const; + + private: + QSet<QString> m_ids; + mutable QReadWriteLock m_lock; + }; +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/schema/qxsdidchelper.cpp b/src/xmlpatterns/schema/qxsdidchelper.cpp new file mode 100644 index 0000000..a7fa00d --- /dev/null +++ b/src/xmlpatterns/schema/qxsdidchelper.cpp @@ -0,0 +1,137 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxsdidchelper_p.h" + +#include "qderivedstring_p.h" +#include "qxsdschemahelper_p.h" + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +FieldNode::FieldNode() +{ +} + +FieldNode::FieldNode(const QXmlItem &item, const QString &data, const SchemaType::Ptr &type) + : m_item(item) + , m_data(data) + , m_type(type) +{ +} + +bool FieldNode::isEmpty() const +{ + return m_item.isNull(); +} + +bool FieldNode::isEqualTo(const FieldNode &other, const NamePool::Ptr &namePool, const ReportContext::Ptr &context, const SourceLocationReflection *const reflection) const +{ + if (m_type != other.m_type) + return false; + + const DerivedString<TypeString>::Ptr string = DerivedString<TypeString>::fromLexical(namePool, m_data); + const DerivedString<TypeString>::Ptr otherString = DerivedString<TypeString>::fromLexical(namePool, other.m_data); + + return XsdSchemaHelper::constructAndCompare(string, AtomicComparator::OperatorEqual, otherString, m_type, context, reflection); +} + +QXmlItem FieldNode::item() const +{ + return m_item; +} + +TargetNode::TargetNode(const QXmlItem &item) + : m_item(item) +{ +} + +QXmlItem TargetNode::item() const +{ + return m_item; +} + +QVector<QXmlItem> TargetNode::fieldItems() const +{ + QVector<QXmlItem> items; + + for (int i = 0; i < m_fields.count(); ++i) + items.append(m_fields.at(i).item()); + + return items; +} + +int TargetNode::emptyFieldsCount() const +{ + int counter = 0; + for (int i = 0; i < m_fields.count(); ++i) { + if (m_fields.at(i).isEmpty()) + ++counter; + } + + return counter; +} + +bool TargetNode::fieldsAreEqual(const TargetNode &other, const NamePool::Ptr &namePool, const ReportContext::Ptr &context, const SourceLocationReflection *const reflection) const +{ + if (m_fields.count() != other.m_fields.count()) + return false; + + for (int i = 0; i < m_fields.count(); ++i) { + if (!m_fields.at(i).isEqualTo(other.m_fields.at(i), namePool, context, reflection)) + return false; + } + + return true; +} + +void TargetNode::addField(const QXmlItem &item, const QString &data, const SchemaType::Ptr &type) +{ + m_fields.append(FieldNode(item, data, type)); +} + +bool TargetNode::operator==(const TargetNode &other) const +{ + return (m_item.toNodeModelIndex() == other.m_item.toNodeModelIndex()); +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/schema/qxsdidchelper_p.h b/src/xmlpatterns/schema/qxsdidchelper_p.h new file mode 100644 index 0000000..ee593b8 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdidchelper_p.h @@ -0,0 +1,186 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_XsdIdcHelper_H +#define Patternist_XsdIdcHelper_H + +#include "qreportcontext_p.h" +#include "qschematype_p.h" + +#include <QtXmlPatterns/QXmlItem> + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +namespace QPatternist +{ + + /** + * @short A helper class for validating identity constraints. + * + * This class represents a field node from the key-sequence as defined in + * the validation rules at http://www.w3.org/TR/xmlschema11-1/#d0e32243. + */ + class FieldNode + { + public: + /** + * Creates an empty field node. + */ + FieldNode(); + + /** + * Creates a field node that is bound to a xml node. + * + * @param item The xml node the field is bound to. + * @param data The string content of that field. + * @param type The type that is bound to that field. + */ + FieldNode(const QXmlItem &item, const QString &data, const SchemaType::Ptr &type); + + /** + * Returns whether this field is empty. + * + * A field can be empty, if the xpath expression selects an absent attribute + * or element. + */ + bool isEmpty() const; + + /** + * Returns whether this field is equal to the @p other field. + * + * Equal means that both have the same type and there content is equal in the + * types value space. + */ + bool isEqualTo(const FieldNode &other, const NamePool::Ptr &namePool, const ReportContext::Ptr &context, const SourceLocationReflection *const reflection) const; + + /** + * Returns the xml node item the field is bound to. + */ + QXmlItem item() const; + + private: + QXmlItem m_item; + QString m_data; + SchemaType::Ptr m_type; + }; + + /** + * @short A helper class for validating identity constraints. + * + * This class represents a target or qualified node from the target or qualified + * node set as defined in the validation rules at http://www.w3.org/TR/xmlschema11-1/#d0e32243. + * + * A target node is part of the qualified node set, if all of its fields are not empty. + */ + class TargetNode + { + public: + /** + * Defines a set of target nodes. + */ + typedef QSet<TargetNode> Set; + + /** + * Creates a new target node that is bound to the xml node @p item. + */ + explicit TargetNode(const QXmlItem &item); + + /** + * Returns the xml node item the target node is bound to. + */ + QXmlItem item() const; + + /** + * Returns all xml node items, the fields of that target node are bound to. + */ + QVector<QXmlItem> fieldItems() const; + + /** + * Returns the number of fields that are empty. + */ + int emptyFieldsCount() const; + + /** + * Returns whether the target node has the same fields as the @p other target node. + */ + bool fieldsAreEqual(const TargetNode &other, const NamePool::Ptr &namePool, const ReportContext::Ptr &context, const SourceLocationReflection *const reflection) const; + + /** + * Adds a new field to the target node with the given values. + */ + void addField(const QXmlItem &item, const QString &data, const SchemaType::Ptr &type); + + /** + * Returns whether the target node is equal to the @p other target node. + */ + bool operator==(const TargetNode &other) const; + + private: + QXmlItem m_item; + QVector<FieldNode> m_fields; + }; + + /** + * Creates a hash value for the given target @p node. + */ + inline uint qHash(const QPatternist::TargetNode &node) + { + return qHash(node.item().toNodeModelIndex()); + } +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/schema/qxsdidentityconstraint.cpp b/src/xmlpatterns/schema/qxsdidentityconstraint.cpp new file mode 100644 index 0000000..9d0207c --- /dev/null +++ b/src/xmlpatterns/schema/qxsdidentityconstraint.cpp @@ -0,0 +1,93 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxsdidentityconstraint_p.h" + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +void XsdIdentityConstraint::setCategory(Category category) +{ + m_category = category; +} + +XsdIdentityConstraint::Category XsdIdentityConstraint::category() const +{ + return m_category; +} + +void XsdIdentityConstraint::setSelector(const XsdXPathExpression::Ptr &selector) +{ + m_selector = selector; +} + +XsdXPathExpression::Ptr XsdIdentityConstraint::selector() const +{ + return m_selector; +} + +void XsdIdentityConstraint::setFields(const XsdXPathExpression::List &fields) +{ + m_fields = fields; +} + +void XsdIdentityConstraint::addField(const XsdXPathExpression::Ptr &field) +{ + m_fields.append(field); +} + +XsdXPathExpression::List XsdIdentityConstraint::fields() const +{ + return m_fields; +} + +void XsdIdentityConstraint::setReferencedKey(const XsdIdentityConstraint::Ptr &referencedKey) +{ + m_referencedKey = referencedKey; +} + +XsdIdentityConstraint::Ptr XsdIdentityConstraint::referencedKey() const +{ + return m_referencedKey; +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/schema/qxsdidentityconstraint_p.h b/src/xmlpatterns/schema/qxsdidentityconstraint_p.h new file mode 100644 index 0000000..b6bb3d0 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdidentityconstraint_p.h @@ -0,0 +1,173 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_XsdIdentityConstraint_H +#define Patternist_XsdIdentityConstraint_H + +#include "qnamedschemacomponent_p.h" +#include "qxsdannotated_p.h" +#include "qxsdxpathexpression_p.h" + +#include <QtCore/QStringList> + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +namespace QPatternist +{ + /** + * @short Represents a XSD identity constraint object. + * + * This class represents the <em>identity constraint</em> object of a XML schema as described + * <a href="http://www.w3.org/TR/xmlschema11-1/#cIdentity-constraint_Definitions">here</a>. + * + * It contains information from either a <em>key</em> object, a <em>keyref</em> object or an + * <em>unique</em> object. + * + * @see <a href="http://www.w3.org/Submission/2004/SUBM-xmlschema-api-20040309/xml-schema-api.html#Interface-XSIdentityConstraint">XML Schema API reference</a> + * @ingroup Patternist_schema + * @author Tobias Koenig <tobias.koenig@trolltech.com> + */ + class XsdIdentityConstraint : public NamedSchemaComponent, public XsdAnnotated + { + public: + typedef QExplicitlySharedDataPointer<XsdIdentityConstraint> Ptr; + typedef QList<XsdIdentityConstraint::Ptr> List; + + /** + * Describes the <a href="http://www.w3.org/TR/xmlschema11-1/#icd-identity-constraint_category">category</a> of the identity constraint. + */ + enum Category + { + Key = 1, ///< The constraint is a key constraint + KeyReference, ///< The constraint is a keyref constraint + Unique ///< The constraint is an unique constraint + }; + + /** + * Sets the @p category of the identity constraint. + * + * @see Category + */ + void setCategory(Category category); + + /** + * Returns the category of the identity constraint. + */ + Category category() const; + + /** + * Sets the @p selector of the identity constraint. + * + * The selector is a restricted XPath 1.0 expression, + * that selects a set of nodes. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#icd-selector"></a> + */ + void setSelector(const XsdXPathExpression::Ptr &selector); + + /** + * Returns the selector of the identity constraint. + */ + XsdXPathExpression::Ptr selector() const; + + /** + * Sets the @p fields of the identity constraint. + * + * Each field is a restricted XPath 1.0 expression, + * that selects a set of nodes. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#icd-fields"></a> + */ + void setFields(const XsdXPathExpression::List &fields); + + /** + * Adds a new @p field to the identity constraint. + */ + void addField(const XsdXPathExpression::Ptr &field); + + /** + * Returns all fields of the identity constraint. + */ + XsdXPathExpression::List fields() const; + + /** + * Sets the referenced @p key of the identity constraint. + * + * The key points to a identity constraint of type Key or Unique. + * + * The identity constraint has only a referenced key if its + * type is KeyReference. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#icd-referenced_key"></a> + */ + void setReferencedKey(const XsdIdentityConstraint::Ptr &key); + + /** + * Returns the referenced key of the identity constraint or an empty + * pointer if its type is not KeyReference. + */ + XsdIdentityConstraint::Ptr referencedKey() const; + + private: + Category m_category; + XsdXPathExpression::Ptr m_selector; + XsdXPathExpression::List m_fields; + XsdIdentityConstraint::Ptr m_referencedKey; + }; +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/schema/qxsdinstancereader.cpp b/src/xmlpatterns/schema/qxsdinstancereader.cpp new file mode 100644 index 0000000..9ff8d61 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdinstancereader.cpp @@ -0,0 +1,196 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxsdinstancereader_p.h" + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +XsdInstanceReader::XsdInstanceReader(const QAbstractXmlNodeModel *model, const XsdSchemaContext::Ptr &context) + : m_context(context) + , m_model(model->iterate(model->root(QXmlNodeModelIndex()), QXmlNodeModelIndex::AxisChild)) +{ +} + +bool XsdInstanceReader::atEnd() const +{ + return (m_model.current() == AbstractXmlPullProvider::EndOfInput); +} + +void XsdInstanceReader::readNext() +{ + m_model.next(); + + if (m_model.current() == AbstractXmlPullProvider::StartElement) { + m_cachedAttributes = m_model.attributes(); + m_cachedAttributeItems = m_model.attributeItems(); + m_cachedSourceLocation = m_model.sourceLocation(); + m_cachedItem = QXmlItem(m_model.index()); + } +} + +bool XsdInstanceReader::isStartElement() const +{ + return (m_model.current() == AbstractXmlPullProvider::StartElement); +} + +bool XsdInstanceReader::isEndElement() const +{ + return (m_model.current() == AbstractXmlPullProvider::EndElement); +} + +bool XsdInstanceReader::hasChildText() const +{ + const QXmlNodeModelIndex index = m_model.index(); + QXmlNodeModelIndex::Iterator::Ptr it = index.model()->iterate(index, QXmlNodeModelIndex::AxisChild); + + QXmlNodeModelIndex currentIndex = it->next(); + while (!currentIndex.isNull()) { + if (currentIndex.kind() == QXmlNodeModelIndex::Text) + return true; + + currentIndex = it->next(); + } + + return false; +} + +bool XsdInstanceReader::hasChildElement() const +{ + const QXmlNodeModelIndex index = m_model.index(); + QXmlNodeModelIndex::Iterator::Ptr it = index.model()->iterate(index, QXmlNodeModelIndex::AxisChild); + + QXmlNodeModelIndex currentIndex = it->next(); + while (!currentIndex.isNull()) { + if (currentIndex.kind() == QXmlNodeModelIndex::Element) + return true; + + currentIndex = it->next(); + } + + return false; +} + +QXmlName XsdInstanceReader::name() const +{ + return m_model.name(); +} + +QXmlName XsdInstanceReader::convertToQName(const QString &name) const +{ + const int pos = name.indexOf(QLatin1Char(':')); + + QXmlName::PrefixCode prefixCode = 0; + QXmlName::NamespaceCode namespaceCode; + QXmlName::LocalNameCode localNameCode; + if (pos != -1) { + prefixCode = m_context->namePool()->allocatePrefix(name.left(pos)); + namespaceCode = m_cachedItem.toNodeModelIndex().namespaceForPrefix(prefixCode); + localNameCode = m_context->namePool()->allocateLocalName(name.mid(pos + 1)); + } else { + prefixCode = StandardPrefixes::empty; + namespaceCode = m_cachedItem.toNodeModelIndex().namespaceForPrefix(prefixCode); + if (namespaceCode == -1) + namespaceCode = StandardNamespaces::empty; + localNameCode = m_context->namePool()->allocateLocalName(name); + } + + return QXmlName(namespaceCode, localNameCode, prefixCode); +} + +bool XsdInstanceReader::hasAttribute(const QXmlName &name) const +{ + return m_cachedAttributes.contains(name); +} + +QString XsdInstanceReader::attribute(const QXmlName &name) const +{ + Q_ASSERT(m_cachedAttributes.contains(name)); + + return m_cachedAttributes.value(name); +} + +QSet<QXmlName> XsdInstanceReader::attributeNames() const +{ + return m_cachedAttributes.keys().toSet(); +} + +QString XsdInstanceReader::text() const +{ + const QXmlNodeModelIndex index = m_model.index(); + QXmlNodeModelIndex::Iterator::Ptr it = index.model()->iterate(index, QXmlNodeModelIndex::AxisChild); + + QString result; + + QXmlNodeModelIndex currentIndex = it->next(); + while (!currentIndex.isNull()) { + if (currentIndex.kind() == QXmlNodeModelIndex::Text) { + result.append(Item(currentIndex).stringValue()); + } + + currentIndex = it->next(); + } + + return result; +} + +QXmlItem XsdInstanceReader::item() const +{ + return m_cachedItem; +} + +QXmlItem XsdInstanceReader::attributeItem(const QXmlName &name) const +{ + return m_cachedAttributeItems.value(name); +} + +QSourceLocation XsdInstanceReader::sourceLocation() const +{ + return m_cachedSourceLocation; +} + +QVector<QXmlName> XsdInstanceReader::namespaceBindings(const QXmlNodeModelIndex &index) const +{ + return index.namespaceBindings(); +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/schema/qxsdinstancereader_p.h b/src/xmlpatterns/schema/qxsdinstancereader_p.h new file mode 100644 index 0000000..af189e3 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdinstancereader_p.h @@ -0,0 +1,189 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_XsdInstanceReader_H +#define Patternist_XsdInstanceReader_H + +#include "qabstractxmlnodemodel.h" +#include "qpullbridge_p.h" +#include "qxsdschemacontext_p.h" + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +namespace QPatternist +{ + /** + * @short The schema instance reader. + * + * This class reads in a xml instance document from a QAbstractXmlNodeModel + * and provides a QXmlStreamReader like interface with some additional context + * information. + * + * @ingroup Patternist_schema + * @author Tobias Koenig <tobias.koenig@trolltech.com> + */ + class XsdInstanceReader + { + public: + typedef QExplicitlySharedDataPointer<XsdInstanceReader> Ptr; + + /** + * Creates a new instance reader that will read the data from + * the given @p model. + * + * @param model The model the data are read from. + * @param context The context that is used for error reporting etc. + */ + XsdInstanceReader(const QAbstractXmlNodeModel *model, const XsdSchemaContext::Ptr &context); + + protected: + /** + * Returns @c true if the end of the document is reached, @c false otherwise. + */ + bool atEnd() const; + + /** + * Reads the next node from the document. + */ + void readNext(); + + /** + * Returns whether the current node is a start element. + */ + bool isStartElement() const; + + /** + * Returns whether the current node is an end element. + */ + bool isEndElement() const; + + /** + * Returns whether the current node has a text node among its children. + */ + bool hasChildText() const; + + /** + * Returns whether the current node has an element node among its children. + */ + bool hasChildElement() const; + + /** + * Returns the name of the current node. + */ + QXmlName name() const; + + /** + * Returns whether the current node has an attribute with the given @p name. + */ + bool hasAttribute(const QXmlName &name) const; + + /** + * Returns the attribute with the given @p name of the current node. + */ + QString attribute(const QXmlName &name) const; + + /** + * Returns the list of attribute names of the current node. + */ + QSet<QXmlName> attributeNames() const; + + /** + * Returns the concatenated text of all direct child text nodes. + */ + QString text() const; + + /** + * Converts a qualified name into a QXmlName according to the namespace + * mappings of the current node. + */ + QXmlName convertToQName(const QString &name) const; + + /** + * Returns a source location object for the current position. + */ + QSourceLocation sourceLocation() const; + + /** + * Returns the QXmlItem for the current position. + */ + QXmlItem item() const; + + /** + * Returns the QXmlItem for the attribute with the given @p name at the current position. + */ + QXmlItem attributeItem(const QXmlName &name) const; + + /** + * Returns the namespace bindings for the given node model @p index. + */ + QVector<QXmlName> namespaceBindings(const QXmlNodeModelIndex &index) const; + + /** + * The shared schema context. + */ + XsdSchemaContext::Ptr m_context; + + private: + PullBridge m_model; + QHash<QXmlName, QString> m_cachedAttributes; + QHash<QXmlName, QXmlItem> m_cachedAttributeItems; + QSourceLocation m_cachedSourceLocation; + QXmlItem m_cachedItem; + }; +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/schema/qxsdmodelgroup.cpp b/src/xmlpatterns/schema/qxsdmodelgroup.cpp new file mode 100644 index 0000000..ca7eb42 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdmodelgroup.cpp @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxsdmodelgroup_p.h" + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +XsdModelGroup::XsdModelGroup() + : m_compositor(SequenceCompositor) +{ +} + +bool XsdModelGroup::isModelGroup() const +{ + return true; +} + +void XsdModelGroup::setCompositor(ModelCompositor compositor) +{ + m_compositor = compositor; +} + +XsdModelGroup::ModelCompositor XsdModelGroup::compositor() const +{ + return m_compositor; +} + +void XsdModelGroup::setParticles(const XsdParticle::List &particles) +{ + m_particles = particles; +} + +XsdParticle::List XsdModelGroup::particles() const +{ + return m_particles; +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/schema/qxsdmodelgroup_p.h b/src/xmlpatterns/schema/qxsdmodelgroup_p.h new file mode 100644 index 0000000..f01d5bf --- /dev/null +++ b/src/xmlpatterns/schema/qxsdmodelgroup_p.h @@ -0,0 +1,139 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_XsdModelGroup_H +#define Patternist_XsdModelGroup_H + +#include "qxsdparticle_p.h" +#include "qxsdterm_p.h" + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +template<typename N> class QList; + +namespace QPatternist +{ + /** + * @short Represents a XSD model group object. + * + * This class represents the <em>model group</em> object of a XML schema as described + * <a href="http://www.w3.org/TR/xmlschema11-1/#cModel_Group_Definitions">here</a>. + * + * It contains information from either a <em>sequence</em> object, a <em>choice</em> object or an + * <em>all</em> object. + * + * @see <a href="http://www.w3.org/Submission/2004/SUBM-xmlschema-api-20040309/xml-schema-api.html#Interface-XSModelGroup">XML Schema API reference</a> + * @ingroup Patternist_schema + * @author Tobias Koenig <tobias.koenig@trolltech.com> + */ + class XsdModelGroup : public XsdTerm + { + public: + typedef QExplicitlySharedDataPointer<XsdModelGroup> Ptr; + typedef QList<XsdModelGroup::Ptr> List; + + /** + * Describes the <a href="http://www.w3.org/TR/xmlschema11-1/#mg-compositor">compositor</a> of the model group. + */ + enum ModelCompositor + { + SequenceCompositor, ///< The model group is a sequence. + ChoiceCompositor, ///< The model group is a choice. + AllCompositor ///< The model group contains elements only. + }; + + /** + * Creates a new model group object. + */ + XsdModelGroup(); + + /** + * Returns always @c true, used to avoid dynamic casts. + */ + virtual bool isModelGroup() const; + + /** + * Sets the @p compositor of the model group. + * + * @see ModelCompositor + */ + void setCompositor(ModelCompositor compositor); + + /** + * Returns the compositor of the model group. + */ + ModelCompositor compositor() const; + + /** + * Sets the list of @p particles of the model group. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#mg-particles">Particles Definition</a> + */ + void setParticles(const XsdParticle::List &particles); + + /** + * Returns the list of particles of the model group. + */ + XsdParticle::List particles() const; + + private: + ModelCompositor m_compositor; + XsdParticle::List m_particles; + }; +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/schema/qxsdnotation.cpp b/src/xmlpatterns/schema/qxsdnotation.cpp new file mode 100644 index 0000000..59697d7 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdnotation.cpp @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxsdnotation_p.h" + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +void XsdNotation::setPublicId(const DerivedString<TypeToken>::Ptr &id) +{ + m_publicId = id; +} + +DerivedString<TypeToken>::Ptr XsdNotation::publicId() const +{ + return m_publicId; +} + +void XsdNotation::setSystemId(const AnyURI::Ptr &id) +{ + m_systemId = id; +} + +AnyURI::Ptr XsdNotation::systemId() const +{ + return m_systemId; +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/schema/qxsdnotation_p.h b/src/xmlpatterns/schema/qxsdnotation_p.h new file mode 100644 index 0000000..1ad2c47 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdnotation_p.h @@ -0,0 +1,119 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_XsdNotation_H +#define Patternist_XsdNotation_H + +#include "qanyuri_p.h" +#include "qderivedstring_p.h" +#include "qnamedschemacomponent_p.h" +#include "qxsdannotated_p.h" + +#include <QtCore/QList> + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +namespace QPatternist +{ + /** + * @short Represents a XSD notation object, which should not + * be confused with the atomic type @c xs:NOTATION. + * + * This class represents the <em>notation</em> object of a XML schema as described + * <a href="http://www.w3.org/TR/xmlschema11-1/#cNotation_Declarations">here</a>. + * + * @see <a href="http://www.w3.org/Submission/2004/SUBM-xmlschema-api-20040309/xml-schema-api.html#XS-NotationDecl">XML Schema API reference</a> + * @ingroup Patternist_schema + * @author Tobias Koenig <tobias.koenig@trolltech.com> + */ + class XsdNotation : public NamedSchemaComponent, public XsdAnnotated + { + public: + typedef QExplicitlySharedDataPointer<XsdNotation> Ptr; + typedef QList<XsdNotation::Ptr> List; + + /** + * Sets the public @p identifier of the notation. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#nd-public_identifier">Public Identifier Definition</a> + */ + void setPublicId(const DerivedString<TypeToken>::Ptr &identifier); + + /** + * Returns the public identifier of the notation. + */ + DerivedString<TypeToken>::Ptr publicId() const; + + /** + * Sets the system @p identifier of the notation. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#nd-system_identifier">System Identifier Definition</a> + */ + void setSystemId(const AnyURI::Ptr &identifier); + + /** + * Returns the system identifier of the notation. + */ + AnyURI::Ptr systemId() const; + + private: + DerivedString<TypeToken>::Ptr m_publicId; + AnyURI::Ptr m_systemId; + }; +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/schema/qxsdparticle.cpp b/src/xmlpatterns/schema/qxsdparticle.cpp new file mode 100644 index 0000000..0e58bf6 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdparticle.cpp @@ -0,0 +1,95 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxsdparticle_p.h" + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +XsdParticle::XsdParticle() + : m_minimumOccurs(1) + , m_maximumOccurs(1) + , m_maximumOccursUnbounded(false) +{ +} + +void XsdParticle::setMinimumOccurs(unsigned int occurs) +{ + m_minimumOccurs = occurs; +} + +unsigned int XsdParticle::minimumOccurs() const +{ + return m_minimumOccurs; +} + +void XsdParticle::setMaximumOccurs(unsigned int occurs) +{ + m_maximumOccurs = occurs; +} + +unsigned int XsdParticle::maximumOccurs() const +{ + return m_maximumOccurs; +} + +void XsdParticle::setMaximumOccursUnbounded(bool unbounded) +{ + m_maximumOccursUnbounded = unbounded; +} + +bool XsdParticle::maximumOccursUnbounded() const +{ + return m_maximumOccursUnbounded; +} + +void XsdParticle::setTerm(const XsdTerm::Ptr &term) +{ + m_term = term; +} + +XsdTerm::Ptr XsdParticle::term() const +{ + return m_term; +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/schema/qxsdparticle_p.h b/src/xmlpatterns/schema/qxsdparticle_p.h new file mode 100644 index 0000000..a183192 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdparticle_p.h @@ -0,0 +1,154 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_XsdParticle_H +#define Patternist_XsdParticle_H + +#include "qnamedschemacomponent_p.h" +#include "qxsdterm_p.h" + +#include <QtCore/QList> + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +namespace QPatternist +{ + /** + * @short Represents a XSD particle object. + * + * This class represents the <em>particle</em> object of a XML schema as described + * <a href="http://www.w3.org/TR/xmlschema11-1/#cParticles">here</a>. + * + * It contains information about the number of occurrence and a reference to + * either an <em>element</em> object, a <em>group</em> object or an <em>any</em> object. + * + * @see <a href="http://www.w3.org/Submission/2004/SUBM-xmlschema-api-20040309/xml-schema-api.html#Interface-XSParticle">XML Schema API reference</a> + * @ingroup Patternist_schema + * @author Tobias Koenig <tobias.koenig@trolltech.com> + */ + class XsdParticle : public NamedSchemaComponent + { + public: + typedef QExplicitlySharedDataPointer<XsdParticle> Ptr; + typedef QList<XsdParticle::Ptr> List; + + /** + * Creates a new particle object. + */ + XsdParticle(); + + /** + * Sets the minimum @p occurrence of the particle. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#p-min_occurs">Minimum Occurrence Definition</a> + */ + void setMinimumOccurs(unsigned int occurrence); + + /** + * Returns the minimum occurrence of the particle. + */ + unsigned int minimumOccurs() const; + + /** + * Sets the maximum @p occurrence of the particle. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#p-max_occurs">Maximum Occurrence Definition</a> + */ + void setMaximumOccurs(unsigned int occurrence); + + /** + * Returns the maximum occurrence of the particle. + * + * @note This value has only a meaning if maximumOccursUnbounded is @c false. + */ + unsigned int maximumOccurs() const; + + /** + * Sets whether the maximum occurrence of the particle is unbounded. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#p-max_occurs">Maximum Occurrence Definition</a> + */ + void setMaximumOccursUnbounded(bool unbounded); + + /** + * Returns whether the maximum occurrence of the particle is unbounded. + */ + bool maximumOccursUnbounded() const; + + /** + * Sets the @p term of the particle. + * + * The term can be an element, a model group or an element wildcard. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#p-term">Term Definition</a> + */ + void setTerm(const XsdTerm::Ptr &term); + + /** + * Returns the term of the particle. + */ + XsdTerm::Ptr term() const; + + private: + unsigned int m_minimumOccurs; + unsigned int m_maximumOccurs; + bool m_maximumOccursUnbounded; + XsdTerm::Ptr m_term; + }; +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/schema/qxsdparticlechecker.cpp b/src/xmlpatterns/schema/qxsdparticlechecker.cpp new file mode 100644 index 0000000..f7fa442 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdparticlechecker.cpp @@ -0,0 +1,540 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxsdparticlechecker_p.h" + +#include "qxsdelement_p.h" +#include "qxsdmodelgroup_p.h" +#include "qxsdschemahelper_p.h" +#include "qxsdstatemachine_p.h" +#include "qxsdstatemachinebuilder_p.h" +#include "qxsdtypechecker_p.h" + +#include <QtCore/QFile> + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +namespace QPatternist +{ + /** + * This template specialization is picked up by XsdStateMachine and allows us + * to print nice edge labels. + */ + template <> + QString XsdStateMachine<XsdTerm::Ptr>::transitionTypeToString(XsdTerm::Ptr term) const + { + if (!term) + return QLatin1String("(empty)"); + + if (term->isElement()) { + return XsdElement::Ptr(term)->displayName(m_namePool); + } else if (term->isWildcard()) { + const XsdWildcard::Ptr wildcard(term); + return QLatin1String("(wildcard)"); + } else { + return QString(); + } + } +} + +/** + * This method is used by the isUPAConform method to check whether @p term and @p otherTerm + * are the same resp. match each other. + */ +static bool termMatches(const XsdTerm::Ptr &term, const XsdTerm::Ptr &otherTerm, const NamePool::Ptr &namePool) +{ + if (term->isElement()) { + const XsdElement::Ptr element(term); + + if (otherTerm->isElement()) { + // both, the term and the other term are elements + + const XsdElement::Ptr otherElement(otherTerm); + + // if they have the same name they match + if (element->name(namePool) == otherElement->name(namePool)) + return true; + + } else if (otherTerm->isWildcard()) { + // the term is an element and the other term a wildcard + + const XsdWildcard::Ptr wildcard(otherTerm); + + // wildcards using XsdWildcard::absentNamespace, so we have to fix that here + QXmlName name = element->name(namePool); + if (name.namespaceURI() == StandardNamespaces::empty) + name.setNamespaceURI(namePool->allocateNamespace(XsdWildcard::absentNamespace())); + + // if the wildcards namespace constraint allows the elements name, they match + if (XsdSchemaHelper::wildcardAllowsExpandedName(name, wildcard, namePool)) + return true; + } + } else if (term->isWildcard()) { + const XsdWildcard::Ptr wildcard(term); + + if (otherTerm->isElement()) { + // the term is a wildcard and the other term an element + + const XsdElement::Ptr otherElement(otherTerm); + + // wildcards using XsdWildcard::absentNamespace, so we have to fix that here + QXmlName name = otherElement->name(namePool); + if (name.namespaceURI() == StandardNamespaces::empty) + name.setNamespaceURI(namePool->allocateNamespace(XsdWildcard::absentNamespace())); + + // if the wildcards namespace constraint allows the elements name, they match + if (XsdSchemaHelper::wildcardAllowsExpandedName(name, wildcard, namePool)) + return true; + + } else if (otherTerm->isWildcard()) { + // both, the term and the other term are wildcards + + const XsdWildcard::Ptr otherWildcard(otherTerm); + + // check if the range of the wildcard overlaps. + const XsdWildcard::Ptr intersectionWildcard = XsdSchemaHelper::wildcardIntersection(wildcard, otherWildcard); + if (!intersectionWildcard || + (intersectionWildcard && !(intersectionWildcard->namespaceConstraint()->variety() != XsdWildcard::NamespaceConstraint::Not && intersectionWildcard->namespaceConstraint()->namespaces().isEmpty()))) + return true; + } + } + + return false; +} + +/** + * This method is used by the subsumes algorithm to check whether the @p derivedTerm is validly derived from the @p baseTerm. + * + * @param baseTerm The term of the base component (type or group). + * @param derivedTerm The term of the derived component (type or group). + * @param particles A hash to map the passed base and derived term to the particles they belong to. + * @param context The schema context. + * @param errorMsg The error message in the case that an error occurs. + */ +static bool derivedTermValid(const XsdTerm::Ptr &baseTerm, const XsdTerm::Ptr &derivedTerm, const QHash<XsdTerm::Ptr, XsdParticle::Ptr> &particles, const XsdSchemaContext::Ptr &context, QString &errorMsg) +{ + const NamePool::Ptr namePool(context->namePool()); + + // find the particles where the base and derived term belongs to + const XsdParticle::Ptr baseParticle = particles.value(baseTerm); + const XsdParticle::Ptr derivedParticle = particles.value(derivedTerm); + + // check that an empty particle can not be derived from a non-empty particle + if (derivedParticle && baseParticle) { + if (XsdSchemaHelper::isParticleEmptiable(derivedParticle) && !XsdSchemaHelper::isParticleEmptiable(baseParticle)) { + errorMsg = QtXmlPatterns::tr("empty particle cannot be derived from non-empty particle"); + return false; + } + } + + if (baseTerm->isElement()) { + const XsdElement::Ptr element(baseTerm); + + if (derivedTerm->isElement()) { + // if both terms are elements + + const XsdElement::Ptr derivedElement(derivedTerm); + + // check names are equal + if (element->name(namePool) != derivedElement->name(namePool)) { + errorMsg = QtXmlPatterns::tr("derived particle is missing element %1").arg(formatKeyword(element->displayName(namePool))); + return false; + } + + // check value constraints are equal (if available) + if (element->valueConstraint() && element->valueConstraint()->variety() == XsdElement::ValueConstraint::Fixed) { + if (!derivedElement->valueConstraint()) { + errorMsg = QtXmlPatterns::tr("derived element %1 is missing value constraint as defined in base particle").arg(formatKeyword(derivedElement->displayName(namePool))); + return false; + } + + if (derivedElement->valueConstraint()->variety() != XsdElement::ValueConstraint::Fixed) { + errorMsg = QtXmlPatterns::tr("derived element %1 has weaker value constraint than base particle").arg(formatKeyword(derivedElement->displayName(namePool))); + return false; + } + + const QSourceLocation dummyLocation(QUrl(QLatin1String("http://dummy.org")), 1, 1); + const XsdTypeChecker checker(context, QVector<QXmlName>(), dummyLocation); + if (!checker.valuesAreEqual(element->valueConstraint()->value(), derivedElement->valueConstraint()->value(), derivedElement->type())) { + errorMsg = QtXmlPatterns::tr("fixed value constraint of element %1 differs from value constraint in base particle").arg(formatKeyword(derivedElement->displayName(namePool))); + return false; + } + } + + // check that a derived element can not be nillable if the base element is not nillable + if (!element->isNillable() && derivedElement->isNillable()) { + errorMsg = QtXmlPatterns::tr("derived element %1 cannot be nillable as base element is not nillable").arg(formatKeyword(derivedElement->displayName(namePool))); + return false; + } + + // check that the constraints of the derived element are more strict then the constraints of the base element + const XsdElement::BlockingConstraints baseConstraints = element->disallowedSubstitutions(); + const XsdElement::BlockingConstraints derivedConstraints = derivedElement->disallowedSubstitutions(); + if (((baseConstraints & XsdElement::RestrictionConstraint) && !(derivedConstraints & XsdElement::RestrictionConstraint)) || + ((baseConstraints & XsdElement::ExtensionConstraint) && !(derivedConstraints & XsdElement::ExtensionConstraint)) || + ((baseConstraints & XsdElement::SubstitutionConstraint) && !(derivedConstraints & XsdElement::SubstitutionConstraint))) { + errorMsg = QtXmlPatterns::tr("block constraints of derived element %1 must not be more weaker than in the base element").arg(formatKeyword(derivedElement->displayName(namePool))); + return false; + } + + // if the type of both elements is the same we can stop testing here + if (element->type()->name(namePool) == derivedElement->type()->name(namePool)) + return true; + + // check that the type of the derived element can validly derived from the type of the base element + if (derivedElement->type()->isSimpleType()) { + if (!XsdSchemaHelper::isSimpleDerivationOk(derivedElement->type(), element->type(), SchemaType::DerivationConstraints())) { + errorMsg = QtXmlPatterns::tr("simple type of derived element %1 cannot be validly derived from base element").arg(formatKeyword(derivedElement->displayName(namePool))); + return false; + } + } else if (derivedElement->type()->isComplexType()) { + if (!XsdSchemaHelper::isComplexDerivationOk(derivedElement->type(), element->type(), SchemaType::DerivationConstraints())) { + errorMsg = QtXmlPatterns::tr("complex type of derived element %1 cannot be validly derived from base element").arg(formatKeyword(derivedElement->displayName(namePool))); + return false; + } + } + + // if both, derived and base element, have a complex type that contains a particle itself, apply the subsumes algorithm + // recursive on their particles + if (element->type()->isComplexType() && derivedElement->type()->isComplexType()) { + if (element->type()->isDefinedBySchema() && derivedElement->type()->isDefinedBySchema()) { + const XsdComplexType::Ptr baseType(element->type()); + const XsdComplexType::Ptr derivedType(derivedElement->type()); + if ((baseType->contentType()->variety() == XsdComplexType::ContentType::ElementOnly || + baseType->contentType()->variety() == XsdComplexType::ContentType::Mixed) && + (derivedType->contentType()->variety() == XsdComplexType::ContentType::ElementOnly || + derivedType->contentType()->variety() == XsdComplexType::ContentType::Mixed)) { + + return XsdParticleChecker::subsumes(baseType->contentType()->particle(), derivedType->contentType()->particle(), context, errorMsg); + } + } + } + + return true; + } else if (derivedTerm->isWildcard()) { + // derive a wildcard from an element is not allowed + errorMsg = QtXmlPatterns::tr("element %1 is missing in derived particle").arg(formatKeyword(element->displayName(namePool))); + return false; + } + } else if (baseTerm->isWildcard()) { + const XsdWildcard::Ptr wildcard(baseTerm); + + if (derivedTerm->isElement()) { + // the base term is a wildcard and derived term an element + + const XsdElement::Ptr derivedElement(derivedTerm); + + // wildcards using XsdWildcard::absentNamespace, so we have to fix that here + QXmlName name = derivedElement->name(namePool); + if (name.namespaceURI() == StandardNamespaces::empty) + name.setNamespaceURI(namePool->allocateNamespace(XsdWildcard::absentNamespace())); + + // check that name of the element is allowed by the wildcards namespace constraint + if (!XsdSchemaHelper::wildcardAllowsExpandedName(name, wildcard, namePool)) { + errorMsg = QtXmlPatterns::tr("element %1 does not match namespace constraint of wildcard in base particle").arg(formatKeyword(derivedElement->displayName(namePool))); + return false; + } + + } else if (derivedTerm->isWildcard()) { + // both, derived and base term are wildcards + + const XsdWildcard::Ptr derivedWildcard(derivedTerm); + + // check that the derived wildcard is a valid subset of the base wildcard + if (!XsdSchemaHelper::isWildcardSubset(derivedWildcard, wildcard)) { + errorMsg = QtXmlPatterns::tr("wildcard in derived particle is not a valid subset of wildcard in base particle"); + return false; + } + + if (!XsdSchemaHelper::checkWildcardProcessContents(wildcard, derivedWildcard)) { + errorMsg = QtXmlPatterns::tr("processContent of wildcard in derived particle is weaker than wildcard in base particle"); + return false; + } + } + + return true; + } + + return false; +} + +typedef QHash<QXmlName, XsdElement::Ptr> ElementHash; + +/** + * Internal helper method that checks if the given @p particle contains an element with the + * same name and type twice. + */ +static bool hasDuplicatedElementsInternal(const XsdParticle::Ptr &particle, const NamePool::Ptr &namePool, ElementHash &hash, XsdElement::Ptr &conflictingElement) +{ + const XsdTerm::Ptr term = particle->term(); + if (term->isElement()) { + const XsdElement::Ptr mainElement(term); + XsdElement::List substGroups = mainElement->substitutionGroups(); + if (substGroups.isEmpty()) + substGroups << mainElement; + + for (int i = 0; i < substGroups.count(); ++i) { + const XsdElement::Ptr element = substGroups.at(i); + if (hash.contains(element->name(namePool))) { + if (element->type()->name(namePool) != hash.value(element->name(namePool))->type()->name(namePool)) { + conflictingElement = element; + return true; + } + } else { + hash.insert(element->name(namePool), element); + } + } + } else if (term->isModelGroup()) { + const XsdModelGroup::Ptr group(term); + const XsdParticle::List particles = group->particles(); + for (int i = 0; i < particles.count(); ++i) { + if (hasDuplicatedElementsInternal(particles.at(i), namePool, hash, conflictingElement)) + return true; + } + } + + return false; +} + +bool XsdParticleChecker::hasDuplicatedElements(const XsdParticle::Ptr &particle, const NamePool::Ptr &namePool, XsdElement::Ptr &conflictingElement) +{ + ElementHash hash; + return hasDuplicatedElementsInternal(particle, namePool, hash, conflictingElement); +} + +bool XsdParticleChecker::isUPAConform(const XsdParticle::Ptr &particle, const NamePool::Ptr &namePool) +{ + /** + * The algorithm is implemented like described in http://www.ltg.ed.ac.uk/~ht/XML_Europe_2003.html#S2.2 + */ + + // create a state machine for the given particle + XsdStateMachine<XsdTerm::Ptr> stateMachine(namePool); + + XsdStateMachineBuilder builder(&stateMachine, namePool); + const XsdStateMachine<XsdTerm::Ptr>::StateId endState = builder.reset(); + const XsdStateMachine<XsdTerm::Ptr>::StateId startState = builder.buildParticle(particle, endState); + builder.addStartState(startState); + +/* + static int counter = 0; + { + QFile file(QString("/tmp/file_upa%1.dot").arg(counter)); + file.open(QIODevice::WriteOnly); + stateMachine.outputGraph(&file, "Base"); + file.close(); + } + ::system(QString("dot -Tpng /tmp/file_upa%1.dot -o/tmp/file_upa%1.png").arg(counter).toLatin1().data()); +*/ + const XsdStateMachine<XsdTerm::Ptr> dfa = stateMachine.toDFA(); +/* + { + QFile file(QString("/tmp/file_upa%1dfa.dot").arg(counter)); + file.open(QIODevice::WriteOnly); + dfa.outputGraph(&file, "Base"); + file.close(); + } + ::system(QString("dot -Tpng /tmp/file_upa%1dfa.dot -o/tmp/file_upa%1dfa.png").arg(counter).toLatin1().data()); +*/ + const QHash<XsdStateMachine<XsdTerm::Ptr>::StateId, XsdStateMachine<XsdTerm::Ptr>::StateType> states = dfa.states(); + const QHash<XsdStateMachine<XsdTerm::Ptr>::StateId, QHash<XsdTerm::Ptr, QVector<XsdStateMachine<XsdTerm::Ptr>::StateId> > > transitions = dfa.transitions(); + + // the basic idea of that algorithm is to iterate over all states of that machine and check that no two edges + // that match on the same term leave a state, so for a given term it should always be obvious which edge to take + QHashIterator<XsdStateMachine<XsdTerm::Ptr>::StateId, XsdStateMachine<XsdTerm::Ptr>::StateType> stateIt(states); + while (stateIt.hasNext()) { // iterate over all states + stateIt.next(); + + // fetch all transitions the current state allows + const QHash<XsdTerm::Ptr, QVector<XsdStateMachine<XsdTerm::Ptr>::StateId> > currentTransitions = transitions.value(stateIt.key()); + QHashIterator<XsdTerm::Ptr, QVector<XsdStateMachine<XsdTerm::Ptr>::StateId> > transitionIt(currentTransitions); + while (transitionIt.hasNext()) { // iterate over all transitions + transitionIt.next(); + + if (transitionIt.value().size() > 1) { + // we have one state with two edges leaving it, that means + // the XsdTerm::Ptr exists twice, that is an error + return false; + } + + QHashIterator<XsdTerm::Ptr, QVector<XsdStateMachine<XsdTerm::Ptr>::StateId> > innerTransitionIt(currentTransitions); + while (innerTransitionIt.hasNext()) { // iterate over all transitions again, as we have to compare all transitions with all + innerTransitionIt.next(); + + if (transitionIt.key() == innerTransitionIt.key()) // do no compare with ourself + continue; + + // use the helper method termMatches to check if both term matches + if (termMatches(transitionIt.key(), innerTransitionIt.key(), namePool)) + return false; + } + } + } + + return true; +} + +bool XsdParticleChecker::subsumes(const XsdParticle::Ptr &particle, const XsdParticle::Ptr &derivedParticle, const XsdSchemaContext::Ptr &context, QString &errorMsg) +{ + /** + * The algorithm is implemented like described in http://www.ltg.ed.ac.uk/~ht/XML_Europe_2003.html#S2.3 + */ + + const NamePool::Ptr namePool(context->namePool()); + + XsdStateMachine<XsdTerm::Ptr> baseStateMachine(namePool); + XsdStateMachine<XsdTerm::Ptr> derivedStateMachine(namePool); + + // build up state machines for both particles + { + XsdStateMachineBuilder builder(&baseStateMachine, namePool); + const XsdStateMachine<XsdTerm::Ptr>::StateId endState = builder.reset(); + const XsdStateMachine<XsdTerm::Ptr>::StateId startState = builder.buildParticle(particle, endState); + builder.addStartState(startState); + + baseStateMachine = baseStateMachine.toDFA(); + } + { + XsdStateMachineBuilder builder(&derivedStateMachine, namePool); + const XsdStateMachine<XsdTerm::Ptr>::StateId endState = builder.reset(); + const XsdStateMachine<XsdTerm::Ptr>::StateId startState = builder.buildParticle(derivedParticle, endState); + builder.addStartState(startState); + + derivedStateMachine = derivedStateMachine.toDFA(); + } + + QHash<XsdTerm::Ptr, XsdParticle::Ptr> particlesHash = XsdStateMachineBuilder::particleLookupMap(particle); + particlesHash.unite(XsdStateMachineBuilder::particleLookupMap(derivedParticle)); + +/* + static int counter = 0; + { + QFile file(QString("/tmp/file_base%1.dot").arg(counter)); + file.open(QIODevice::WriteOnly); + baseStateMachine.outputGraph(&file, QLatin1String("Base")); + file.close(); + } + { + QFile file(QString("/tmp/file_derived%1.dot").arg(counter)); + file.open(QIODevice::WriteOnly); + derivedStateMachine.outputGraph(&file, QLatin1String("Base")); + file.close(); + } + ::system(QString("dot -Tpng /tmp/file_base%1.dot -o/tmp/file_base%1.png").arg(counter).toLatin1().data()); + ::system(QString("dot -Tpng /tmp/file_derived%1.dot -o/tmp/file_derived%1.png").arg(counter).toLatin1().data()); +*/ + + const XsdStateMachine<XsdTerm::Ptr>::StateId baseStartState = baseStateMachine.startState(); + const QHash<XsdStateMachine<XsdTerm::Ptr>::StateId, XsdStateMachine<XsdTerm::Ptr>::StateType> baseStates = baseStateMachine.states(); + const QHash<XsdStateMachine<XsdTerm::Ptr>::StateId, QHash<XsdTerm::Ptr, QVector<XsdStateMachine<XsdTerm::Ptr>::StateId> > > baseTransitions = baseStateMachine.transitions(); + + const XsdStateMachine<XsdTerm::Ptr>::StateId derivedStartState = derivedStateMachine.startState(); + const QHash<XsdStateMachine<XsdTerm::Ptr>::StateId, XsdStateMachine<XsdTerm::Ptr>::StateType> derivedStates = derivedStateMachine.states(); + const QHash<XsdStateMachine<XsdTerm::Ptr>::StateId, QHash<XsdTerm::Ptr, QVector<XsdStateMachine<XsdTerm::Ptr>::StateId> > > derivedTransitions = derivedStateMachine.transitions(); + + // @see http://www.ltg.ed.ac.uk/~ht/XML_Europe_2003.html#S2.3.1 + + // define working set + QList<QPair<XsdStateMachine<XsdTerm::Ptr>::StateId, XsdStateMachine<XsdTerm::Ptr>::StateId> > workSet; + QList<QPair<XsdStateMachine<XsdTerm::Ptr>::StateId, XsdStateMachine<XsdTerm::Ptr>::StateId> > processedSet; + + // 1) fill working set initially with start states + workSet.append(qMakePair<XsdStateMachine<XsdTerm::Ptr>::StateId, XsdStateMachine<XsdTerm::Ptr>::StateId>(baseStartState, derivedStartState)); + processedSet.append(qMakePair<XsdStateMachine<XsdTerm::Ptr>::StateId, XsdStateMachine<XsdTerm::Ptr>::StateId>(baseStartState, derivedStartState)); + + while (!workSet.isEmpty()) { // while there are state sets to process + + // 3) dequeue on state set + const QPair<XsdStateMachine<XsdTerm::Ptr>::StateId, XsdStateMachine<XsdTerm::Ptr>::StateId> set = workSet.takeFirst(); + + const QHash<XsdTerm::Ptr, QVector<XsdStateMachine<XsdTerm::Ptr>::StateId> > derivedTrans = derivedTransitions.value(set.second); + QHashIterator<XsdTerm::Ptr, QVector<XsdStateMachine<XsdTerm::Ptr>::StateId> > derivedIt(derivedTrans); + + const QHash<XsdTerm::Ptr, QVector<XsdStateMachine<XsdTerm::Ptr>::StateId> > baseTrans = baseTransitions.value(set.first); + + while (derivedIt.hasNext()) { + derivedIt.next(); + + bool found = false; + QHashIterator<XsdTerm::Ptr, QVector<XsdStateMachine<XsdTerm::Ptr>::StateId> > baseIt(baseTrans); + while (baseIt.hasNext()) { + baseIt.next(); + if (derivedTermValid(baseIt.key(), derivedIt.key(), particlesHash, context, errorMsg)) { + const QPair<XsdStateMachine<XsdTerm::Ptr>::StateId, XsdStateMachine<XsdTerm::Ptr>::StateId> endSet = + qMakePair<XsdStateMachine<XsdTerm::Ptr>::StateId, XsdStateMachine<XsdTerm::Ptr>::StateId>(baseIt.value().first(), derivedIt.value().first()); + if (!processedSet.contains(endSet) && !workSet.contains(endSet)) { + workSet.append(endSet); + processedSet.append(endSet); + } + + found = true; + } + } + + if (!found) { + return false; + } + } + } + + // 5) + QHashIterator<XsdStateMachine<XsdTerm::Ptr>::StateId, XsdStateMachine<XsdTerm::Ptr>::StateType> it(derivedStates); + while (it.hasNext()) { + it.next(); + + if (it.value() == XsdStateMachine<XsdTerm::Ptr>::EndState || it.value() == XsdStateMachine<XsdTerm::Ptr>::StartEndState) { + for (int i = 0; i < processedSet.count(); ++i) { + if (processedSet.at(i).second == it.key() && + (baseStates.value(processedSet.at(i).first) != XsdStateMachine<XsdTerm::Ptr>::EndState && + baseStates.value(processedSet.at(i).first) != XsdStateMachine<XsdTerm::Ptr>::StartEndState)) { + errorMsg = QtXmlPatterns::tr("derived particle allows content that is not allowed in the base particle"); + return false; + } + } + } + } + + return true; +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/schema/qxsdparticlechecker_p.h b/src/xmlpatterns/schema/qxsdparticlechecker_p.h new file mode 100644 index 0000000..feed108 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdparticlechecker_p.h @@ -0,0 +1,99 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_XsdParticleChecker_H +#define Patternist_XsdParticleChecker_H + +#include "qxsdelement_p.h" +#include "qxsdparticle_p.h" +#include "qxsdschemacontext_p.h" +#include "qxsdwildcard_p.h" + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +namespace QPatternist +{ + /** + * @short A helper class to check validity of particles. + * + * @ingroup Patternist_schema + * @author Tobias Koenig <tobias.koenig@trolltech.com> + */ + class XsdParticleChecker + { + public: + /** + * Checks whether the given @p particle has two or more element + * declarations with the same name but different type definitions. + */ + static bool hasDuplicatedElements(const XsdParticle::Ptr &particle, const NamePool::Ptr &namePool, XsdElement::Ptr &conflictingElement); + + /** + * Checks whether the given @p particle is valid according the + * UPA (http://www.w3.org/TR/xmlschema-1/#cos-nonambig) constraint. + */ + static bool isUPAConform(const XsdParticle::Ptr &particle, const NamePool::Ptr &namePool); + + /** + * Checks whether the given @p particle subsumes the given @p derivedParticle. + * (http://www.w3.org/TR/xmlschema-1/#cos-particle-restrict) + */ + static bool subsumes(const XsdParticle::Ptr &particle, const XsdParticle::Ptr &derivedParticle, const XsdSchemaContext::Ptr &context, QString &errorMsg); + }; +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/schema/qxsdreference.cpp b/src/xmlpatterns/schema/qxsdreference.cpp new file mode 100644 index 0000000..176dc31 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdreference.cpp @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxsdreference_p.h" + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +bool XsdReference::isReference() const +{ + return true; +} + +void XsdReference::setType(Type type) +{ + m_type = type; +} + +XsdReference::Type XsdReference::type() const +{ + return m_type; +} + +void XsdReference::setReferenceName(const QXmlName &referenceName) +{ + m_referenceName = referenceName; +} + +QXmlName XsdReference::referenceName() const +{ + return m_referenceName; +} + +void XsdReference::setSourceLocation(const QSourceLocation &location) +{ + m_sourceLocation = location; +} + +QSourceLocation XsdReference::sourceLocation() const +{ + return m_sourceLocation; +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/schema/qxsdreference_p.h b/src/xmlpatterns/schema/qxsdreference_p.h new file mode 100644 index 0000000..1354d77 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdreference_p.h @@ -0,0 +1,145 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_XsdReference_H +#define Patternist_XsdReference_H + +#include "qxsdterm_p.h" + +#include <QtXmlPatterns/QSourceLocation> + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +namespace QPatternist +{ + /** + * @short A helper class for element and group reference resolving. + * + * For easy resolving of element and group references, we have this class + * that can be used as a place holder for the real element or group + * object it is referring to. + * So whenever the parser detects an element or group reference, it creates + * a XsdReference and returns it instead of the XsdElement or XsdModelGroup. + * During a later phase, the resolver will look for all XsdReferences + * in the schema and will replace them with their referring XsdElement or + * XsdModelGroup objects. + * + * @ingroup Patternist_schema + * @author Tobias Koenig <tobias.koenig@trolltech.com> + */ + class XsdReference : public XsdTerm + { + public: + typedef QExplicitlySharedDataPointer<XsdReference> Ptr; + + /** + * Describes the type of the reference. + */ + enum Type + { + Element, ///< The reference points to an element. + ModelGroup ///< The reference points to a model group. + }; + + /** + * Returns always @c true, used to avoid dynamic casts. + */ + virtual bool isReference() const; + + /** + * Sets the @p type of the reference. + * + * @see Type + */ + void setType(Type type); + + /** + * Returns the type of the reference. + */ + Type type() const; + + /** + * Sets the @p name of the referenced object. + * + * The name can either be a top-level element declaration + * or a top-level group declaration. + */ + void setReferenceName(const QXmlName &ame); + + /** + * Returns the name of the referenced object. + */ + QXmlName referenceName() const; + + /** + * Sets the source @p location where the reference is located. + */ + void setSourceLocation(const QSourceLocation &location); + + /** + * Returns the source location where the reference is located. + */ + QSourceLocation sourceLocation() const; + + private: + Type m_type; + QXmlName m_referenceName; + QSourceLocation m_sourceLocation; + }; +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/schema/qxsdschema.cpp b/src/xmlpatterns/schema/qxsdschema.cpp new file mode 100644 index 0000000..aac5773 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdschema.cpp @@ -0,0 +1,272 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxsdschema_p.h" + +#include <QtCore/QReadLocker> +#include <QtCore/QWriteLocker> + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +XsdSchema::XsdSchema(const NamePool::Ptr &namePool) + : m_namePool(namePool) +{ +} + +XsdSchema::~XsdSchema() +{ +} + +NamePool::Ptr XsdSchema::namePool() const +{ + return m_namePool; +} + +void XsdSchema::setTargetNamespace(const QString &targetNamespace) +{ + m_targetNamespace = targetNamespace; +} + +QString XsdSchema::targetNamespace() const +{ + return m_targetNamespace; +} + +void XsdSchema::addElement(const XsdElement::Ptr &element) +{ + const QWriteLocker locker(&m_lock); + + m_elements.insert(element->name(m_namePool), element); +} + +XsdElement::Ptr XsdSchema::element(const QXmlName &name) const +{ + const QReadLocker locker(&m_lock); + + return m_elements.value(name); +} + +XsdElement::List XsdSchema::elements() const +{ + const QReadLocker locker(&m_lock); + + return m_elements.values(); +} + +void XsdSchema::addAttribute(const XsdAttribute::Ptr &attribute) +{ + const QWriteLocker locker(&m_lock); + + m_attributes.insert(attribute->name(m_namePool), attribute); +} + +XsdAttribute::Ptr XsdSchema::attribute(const QXmlName &name) const +{ + const QReadLocker locker(&m_lock); + + return m_attributes.value(name); +} + +XsdAttribute::List XsdSchema::attributes() const +{ + const QReadLocker locker(&m_lock); + + return m_attributes.values(); +} + +void XsdSchema::addType(const SchemaType::Ptr &type) +{ + const QWriteLocker locker(&m_lock); + + m_types.insert(type->name(m_namePool), type); +} + +SchemaType::Ptr XsdSchema::type(const QXmlName &name) const +{ + const QReadLocker locker(&m_lock); + + return m_types.value(name); +} + +SchemaType::List XsdSchema::types() const +{ + const QReadLocker locker(&m_lock); + + return m_types.values(); +} + +XsdSimpleType::List XsdSchema::simpleTypes() const +{ + QReadLocker locker(&m_lock); + + XsdSimpleType::List retval; + + const SchemaType::List types = m_types.values(); + for (int i = 0; i < types.count(); ++i) { + if (types.at(i)->isSimpleType() && types.at(i)->isDefinedBySchema()) + retval.append(types.at(i)); + } + + return retval; +} + +XsdComplexType::List XsdSchema::complexTypes() const +{ + QReadLocker locker(&m_lock); + + XsdComplexType::List retval; + + const SchemaType::List types = m_types.values(); + for (int i = 0; i < types.count(); ++i) { + if (types.at(i)->isComplexType() && types.at(i)->isDefinedBySchema()) + retval.append(types.at(i)); + } + + return retval; +} + +void XsdSchema::addAnonymousType(const SchemaType::Ptr &type) +{ + const QWriteLocker locker(&m_lock); + + // search for not used anonymous type name + QXmlName typeName = type->name(m_namePool); + while (m_anonymousTypes.contains(typeName)) { + typeName = m_namePool->allocateQName(QString(), QLatin1String("merged_") + m_namePool->stringForLocalName(typeName.localName()), QString()); + } + + m_anonymousTypes.insert(typeName, type); +} + +SchemaType::List XsdSchema::anonymousTypes() const +{ + const QReadLocker locker(&m_lock); + + return m_anonymousTypes.values(); +} + +void XsdSchema::addAttributeGroup(const XsdAttributeGroup::Ptr &group) +{ + const QWriteLocker locker(&m_lock); + + m_attributeGroups.insert(group->name(m_namePool), group); +} + +XsdAttributeGroup::Ptr XsdSchema::attributeGroup(const QXmlName name) const +{ + const QReadLocker locker(&m_lock); + + return m_attributeGroups.value(name); +} + +XsdAttributeGroup::List XsdSchema::attributeGroups() const +{ + const QReadLocker locker(&m_lock); + + return m_attributeGroups.values(); +} + +void XsdSchema::addElementGroup(const XsdModelGroup::Ptr &group) +{ + const QWriteLocker locker(&m_lock); + + m_elementGroups.insert(group->name(m_namePool), group); +} + +XsdModelGroup::Ptr XsdSchema::elementGroup(const QXmlName &name) const +{ + const QReadLocker locker(&m_lock); + + return m_elementGroups.value(name); +} + +XsdModelGroup::List XsdSchema::elementGroups() const +{ + const QReadLocker locker(&m_lock); + + return m_elementGroups.values(); +} + +void XsdSchema::addNotation(const XsdNotation::Ptr ¬ation) +{ + const QWriteLocker locker(&m_lock); + + m_notations.insert(notation->name(m_namePool), notation); +} + +XsdNotation::Ptr XsdSchema::notation(const QXmlName &name) const +{ + const QReadLocker locker(&m_lock); + + return m_notations.value(name); +} + +XsdNotation::List XsdSchema::notations() const +{ + const QReadLocker locker(&m_lock); + + return m_notations.values(); +} + +void XsdSchema::addIdentityConstraint(const XsdIdentityConstraint::Ptr &constraint) +{ + const QWriteLocker locker(&m_lock); + + m_identityConstraints.insert(constraint->name(m_namePool), constraint); +} + +XsdIdentityConstraint::Ptr XsdSchema::identityConstraint(const QXmlName &name) const +{ + const QReadLocker locker(&m_lock); + + return m_identityConstraints.value(name); +} + +XsdIdentityConstraint::List XsdSchema::identityConstraints() const +{ + const QReadLocker locker(&m_lock); + + return m_identityConstraints.values(); +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/schema/qxsdschema_p.h b/src/xmlpatterns/schema/qxsdschema_p.h new file mode 100644 index 0000000..d697673 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdschema_p.h @@ -0,0 +1,301 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_XsdSchema_H +#define Patternist_XsdSchema_H + +#include "qschematype_p.h" +#include "qxsdannotated_p.h" +#include "qxsdattribute_p.h" +#include "qxsdattributegroup_p.h" +#include "qxsdcomplextype_p.h" +#include "qxsdelement_p.h" +#include "qxsdidentityconstraint_p.h" +#include "qxsdmodelgroup_p.h" +#include "qxsdnotation_p.h" +#include "qxsdsimpletype_p.h" + +#include <QtCore/QHash> +#include <QtCore/QReadWriteLock> + +/** + * @defgroup Patternist_schema XML Schema Processing + */ + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +namespace QPatternist +{ + /** + * @short Represents a XSD schema object. + * + * The class provides access to all components of a parsed XSD. + * + * @note In the documentation of this class objects, which are direct + * children of the <em>schema</em> object, are called top-level objects. + * + * @see <a href="http://www.w3.org/Submission/2004/SUBM-xmlschema-api-20040309/xml-schema-api.html#Interface-XSModel">XML Schema API reference</a> + * @ingroup Patternist_schema + * @author Tobias Koenig <tobias.koenig@trolltech.com> + */ + class XsdSchema : public QSharedData, public XsdAnnotated + { + public: + typedef QExplicitlySharedDataPointer<XsdSchema> Ptr; + typedef QList<XsdSchema::Ptr> List; + + /** + * Creates a new schema object. + * + * @param namePool The namepool that should be used for names of + * all schema components. + */ + XsdSchema(const NamePool::Ptr &namePool); + + /** + * Destroys the schema object. + */ + ~XsdSchema(); + + /** + * Returns the namepool that is used for names of + * all schema components. + */ + NamePool::Ptr namePool() const; + + /** + * Sets the @p targetNamespace of the schema. + */ + void setTargetNamespace(const QString &targetNamespace); + + /** + * Returns the target namespace of the schema. + */ + QString targetNamespace() const; + + /** + * Adds a new top-level @p element to the schema. + * + * @param element The new element. + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#declare-element">Element Declaration</a> + */ + void addElement(const XsdElement::Ptr &element); + + /** + * Returns the top-level element of the schema with + * the given @p name or an empty pointer if none exist. + */ + XsdElement::Ptr element(const QXmlName &name) const; + + /** + * Returns the list of all top-level elements. + */ + XsdElement::List elements() const; + + /** + * Adds a new top-level @p attribute to the schema. + * + * @param attribute The new attribute. + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#declare-attribute">Attribute Declaration</a> + */ + void addAttribute(const XsdAttribute::Ptr &attribute); + + /** + * Returns the top-level attribute of the schema with + * the given @p name or an empty pointer if none exist. + */ + XsdAttribute::Ptr attribute(const QXmlName &name) const; + + /** + * Returns the list of all top-level attributes. + */ + XsdAttribute::List attributes() const; + + /** + * Adds a new top-level @p type to the schema. + * That can be a simple or a complex type. + * + * @param type The new type. + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#declare-datatype">Simple Type Declaration</a> + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#declare-type">Complex Type Declaration</a> + */ + void addType(const SchemaType::Ptr &type); + + /** + * Returns the top-level type of the schema with + * the given @p name or an empty pointer if none exist. + */ + SchemaType::Ptr type(const QXmlName &name) const; + + /** + * Returns the list of all top-level types. + */ + SchemaType::List types() const; + + /** + * Returns the list of all top-level simple types. + */ + XsdSimpleType::List simpleTypes() const; + + /** + * Returns the list of all top-level complex types. + */ + XsdComplexType::List complexTypes() const; + + /** + * Adds an anonymous @p type to the schema. + * Anonymous types have no name and are declared + * locally inside an element object. + * + * @param type The new anonymous type. + */ + void addAnonymousType(const SchemaType::Ptr &type); + + /** + * Returns the list of all anonymous types. + */ + SchemaType::List anonymousTypes() const; + + /** + * Adds a new top-level attribute @p group to the schema. + * + * @param group The new attribute group. + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#declare-attributeGroup">Attribute Group Declaration</a> + */ + void addAttributeGroup(const XsdAttributeGroup::Ptr &group); + + /** + * Returns the top-level attribute group of the schema with + * the given @p name or an empty pointer if none exist. + */ + XsdAttributeGroup::Ptr attributeGroup(const QXmlName name) const; + + /** + * Returns the list of all top-level attribute groups. + */ + XsdAttributeGroup::List attributeGroups() const; + + /** + * Adds a new top-level element @p group to the schema. + * + * @param group The new element group. + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#declare-namedModelGroup">Element Group Declaration</a> + */ + void addElementGroup(const XsdModelGroup::Ptr &group); + + /** + * Returns the top-level element group of the schema with + * the given @p name or an empty pointer if none exist. + */ + XsdModelGroup::Ptr elementGroup(const QXmlName &name) const; + + /** + * Returns the list of all top-level element groups. + */ + XsdModelGroup::List elementGroups() const; + + /** + * Adds a new top-level @p notation to the schema. + * + * @param notation The new notation. + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#declare-notation">Notation Declaration</a> + */ + void addNotation(const XsdNotation::Ptr ¬ation); + + /** + * Returns the top-level notation of the schema with + * the given @p name or an empty pointer if none exist. + */ + XsdNotation::Ptr notation(const QXmlName &name) const; + + /** + * Returns the list of all top-level notations. + */ + XsdNotation::List notations() const; + + /** + * Adds a new identity @p constraint to the schema. + */ + void addIdentityConstraint(const XsdIdentityConstraint::Ptr &constraint); + + /** + * Returns the identity constraint with the given @p name + * or an empty pointer if none exist. + */ + XsdIdentityConstraint::Ptr identityConstraint(const QXmlName &name) const; + + /** + * Returns the list of all identity constraints in this schema. + */ + XsdIdentityConstraint::List identityConstraints() const; + + private: + NamePool::Ptr m_namePool; + QString m_targetNamespace; + QHash<QXmlName, XsdElement::Ptr> m_elements; + QHash<QXmlName, XsdAttribute::Ptr> m_attributes; + QHash<QXmlName, SchemaType::Ptr> m_types; + QHash<QXmlName, SchemaType::Ptr> m_anonymousTypes; + QHash<QXmlName, XsdAttributeGroup::Ptr> m_attributeGroups; + QHash<QXmlName, XsdModelGroup::Ptr> m_elementGroups; + QHash<QXmlName, XsdNotation::Ptr> m_notations; + QHash<QXmlName, XsdIdentityConstraint::Ptr> m_identityConstraints; + mutable QReadWriteLock m_lock; + }; +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/schema/qxsdschemachecker.cpp b/src/xmlpatterns/schema/qxsdschemachecker.cpp new file mode 100644 index 0000000..d2001eb --- /dev/null +++ b/src/xmlpatterns/schema/qxsdschemachecker.cpp @@ -0,0 +1,2061 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxsdschemachecker_p.h" + +#include "qderivedinteger_p.h" +#include "qderivedstring_p.h" +#include "qpatternplatform_p.h" +#include "qqnamevalue_p.h" +#include "qsourcelocationreflection_p.h" +#include "qvaluefactory_p.h" +#include "qxsdattributereference_p.h" +#include "qxsdparticlechecker_p.h" +#include "qxsdreference_p.h" +#include "qxsdschemacontext_p.h" +#include "qxsdschemahelper_p.h" +#include "qxsdschemaparsercontext_p.h" +#include "qxsdschematypesfactory_p.h" +#include "qxsdtypechecker_p.h" + +#include "qxsdschemachecker_helper.cpp" + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +XsdSchemaChecker::XsdSchemaChecker(const QExplicitlySharedDataPointer<XsdSchemaContext> &context, const XsdSchemaParserContext *parserContext) + : m_context(context) + , m_namePool(parserContext->namePool()) + , m_schema(parserContext->schema()) +{ + setupAllowedAtomicFacets(); +} + +XsdSchemaChecker::~XsdSchemaChecker() +{ +} + +/* + * This method is called after the resolver has set the base type for every + * type and information about deriavtion and 'is simple type vs. is complex type' + * are available. + */ +void XsdSchemaChecker::basicCheck() +{ + // first check that there is no circular inheritance, only the + // wxsSuperType is used here + checkBasicCircularInheritances(); + + // check the basic constraints like simple type can not inherit from complex type etc. + checkBasicSimpleTypeConstraints(); + checkBasicComplexTypeConstraints(); +} + +void XsdSchemaChecker::check() +{ + checkCircularInheritances(); + checkInheritanceRestrictions(); + checkSimpleDerivationRestrictions(); + checkSimpleTypeConstraints(); + checkComplexTypeConstraints(); + checkDuplicatedAttributeUses(); + + checkElementConstraints(); + checkAttributeConstraints(); + checkAttributeUseConstraints(); +// checkElementDuplicates(); +} + +void XsdSchemaChecker::addComponentLocationHash(const ComponentLocationHash &hash) +{ + m_componentLocationHash.unite(hash); +} + +/** + * Checks whether the @p otherType is the same as @p myType or if one of its + * ancestors is the same as @p myType. + */ +static bool matchesType(const SchemaType::Ptr &myType, const SchemaType::Ptr &otherType, QSet<SchemaType::Ptr> visitedTypes) +{ + bool retval = false; + + if (otherType) { + if (visitedTypes.contains(otherType)) { + return true; + } else { + visitedTypes.insert(otherType); + } + // simple types can have different varieties, so we have to check each of them + if (otherType->isSimpleType()) { + const XsdSimpleType::Ptr simpleType = otherType; + if (simpleType->category() == XsdSimpleType::SimpleTypeAtomic) { + // for atomic type we use the same test as in SchemaType::wxsTypeMatches + retval = (myType == simpleType ? true : matchesType(myType, simpleType->wxsSuperType(), visitedTypes)); + } else if (simpleType->category() == XsdSimpleType::SimpleTypeList) { + // for list type we test against the itemType property + retval = (myType == simpleType->itemType() ? true : matchesType(myType, simpleType->itemType()->wxsSuperType(), visitedTypes)); + } else if (simpleType->category() == XsdSimpleType::SimpleTypeUnion) { + // for union type we test against each member type + const XsdSimpleType::List members = simpleType->memberTypes(); + for (int i = 0; i < members.count(); ++i) { + if (myType == members.at(i) ? true : matchesType(myType, members.at(i)->wxsSuperType(), visitedTypes)) { + retval = true; + break; + } + } + } else { + // reached xsAnySimple type whichs category is None + retval = false; + } + } else { + // if no simple type we handle it like in SchemaType::wxsTypeMatches + retval = (myType == otherType ? true : matchesType(myType, otherType->wxsSuperType(), visitedTypes)); + } + } else // if otherType is null it doesn't match + retval = false; + + return retval; +} + +/** + * Checks whether there is a circular inheritance for the union inheritance. + */ +static bool hasCircularUnionInheritance(const XsdSimpleType::Ptr &type, const SchemaType::Ptr &otherType, NamePool::Ptr &namePool) +{ + if (type == otherType) { + return true; + } + + if (!otherType->isSimpleType() || !otherType->isDefinedBySchema()) { + return false; + } + + const XsdSimpleType::Ptr simpleOtherType = otherType; + + if (simpleOtherType->category() == XsdSimpleType::SimpleTypeUnion) { + const XsdSimpleType::List memberTypes = simpleOtherType->memberTypes(); + for (int i = 0; i < memberTypes.count(); ++i) { + if (otherType->wxsSuperType() == type) { + return true; + } + if (hasCircularUnionInheritance(type, memberTypes.at(i), namePool)) { + return true; + } + } + } + + return false; +} + +static inline bool wxsTypeMatches(const SchemaType::Ptr &type, const SchemaType::Ptr &otherType, QSet<SchemaType::Ptr> &visitedTypes, SchemaType::Ptr &conflictingType) +{ + if (!otherType) + return false; + + if (visitedTypes.contains(otherType)) { // inheritance loop detected + conflictingType = otherType; + return true; + } else { + visitedTypes.insert(otherType); + } + + if (type == otherType) + return true; + + return wxsTypeMatches(type, otherType->wxsSuperType(), visitedTypes, conflictingType); +} + +void XsdSchemaChecker::checkBasicCircularInheritances() +{ + // check all global types... + SchemaType::List types = m_schema->types(); + + // .. and anonymous types + types << m_schema->anonymousTypes(); + + for (int i = 0; i < types.count(); ++i) { + const SchemaType::Ptr type = types.at(i); + const QSourceLocation location = sourceLocationForType(type); + + // @see http://www.w3.org/TR/xmlschema11-1/#ct-props-correct 3) + + // check normal base type inheritance + QSet<SchemaType::Ptr> visitedTypes; + SchemaType::Ptr conflictingType; + + if (wxsTypeMatches(type, type->wxsSuperType(), visitedTypes, conflictingType)) { + if (conflictingType) + m_context->error(QtXmlPatterns::tr("%1 has inheritance loop in its base type %2") + .arg(formatType(m_namePool, type)) + .arg(formatType(m_namePool, conflictingType)), + XsdSchemaContext::XSDError, location); + else + m_context->error(QtXmlPatterns::tr("circular inheritance of base type %1").arg(formatType(m_namePool, type)), XsdSchemaContext::XSDError, location); + + return; + } + } +} + +void XsdSchemaChecker::checkCircularInheritances() +{ + // check all global types... + SchemaType::List types = m_schema->types(); + + // .. and anonymous types + types << m_schema->anonymousTypes(); + + for (int i = 0; i < types.count(); ++i) { + const SchemaType::Ptr type = types.at(i); + const QSourceLocation location = sourceLocationForType(type); + + // @see http://www.w3.org/TR/xmlschema11-1/#ct-props-correct 3) + + // check normal base type inheritance + QSet<SchemaType::Ptr> visitedTypes; + if (matchesType(type, type->wxsSuperType(), visitedTypes)) { + m_context->error(QtXmlPatterns::tr("circular inheritance of base type %1").arg(formatType(m_namePool, type)), XsdSchemaContext::XSDError, location); + return; + } + + // check union member inheritance + if (type->isSimpleType() && type->isDefinedBySchema()) { + const XsdSimpleType::Ptr simpleType = type; + if (simpleType->category() == XsdSimpleType::SimpleTypeUnion) { + const XsdSimpleType::List memberTypes = simpleType->memberTypes(); + for (int j = 0; j < memberTypes.count(); ++j) { + if (hasCircularUnionInheritance(simpleType, memberTypes.at(j), m_namePool)) { + m_context->error(QtXmlPatterns::tr("circular inheritance of union %1").arg(formatType(m_namePool, type)), XsdSchemaContext::XSDError, location); + return; + } + } + } + } + } +} + +void XsdSchemaChecker::checkInheritanceRestrictions() +{ + // check all global types... + SchemaType::List types = m_schema->types(); + + // .. and anonymous types + types << m_schema->anonymousTypes(); + + for (int i = 0; i < types.count(); ++i) { + const SchemaType::Ptr type = types.at(i); + const QSourceLocation location = sourceLocationForType(type); + + // check inheritance restrictions given by final property of base class + const SchemaType::Ptr baseType = type->wxsSuperType(); + if (baseType->isDefinedBySchema()) { + if ((type->derivationMethod() == SchemaType::DerivationRestriction) && (baseType->derivationConstraints() & SchemaType::RestrictionConstraint)) { + m_context->error(QtXmlPatterns::tr("%1 is not allowed to derive from %2 by restriction as the latter defines it as final") + .arg(formatType(m_namePool, type)) + .arg(formatType(m_namePool, baseType)), XsdSchemaContext::XSDError, location); + return; + } else if ((type->derivationMethod() == SchemaType::DerivationExtension) && (baseType->derivationConstraints() & SchemaType::ExtensionConstraint)) { + m_context->error(QtXmlPatterns::tr("%1 is not allowed to derive from %2 by extension as the latter defines it as final") + .arg(formatType(m_namePool, type)) + .arg(formatType(m_namePool, baseType)), XsdSchemaContext::XSDError, location); + return; + } + } + } +} + +void XsdSchemaChecker::checkBasicSimpleTypeConstraints() +{ + // check all global types... + SchemaType::List types = m_schema->types(); + + // .. and anonymous types + types << m_schema->anonymousTypes(); + + for (int i = 0; i < types.count(); ++i) { + const SchemaType::Ptr type = types.at(i); + + if (!type->isSimpleType()) + continue; + + const XsdSimpleType::Ptr simpleType = type; + + const QSourceLocation location = sourceLocation(simpleType); + + // check inheritance restrictions of simple type defined by schema constraints + const SchemaType::Ptr baseType = simpleType->wxsSuperType(); + + if (baseType->isComplexType() && (simpleType->name(m_namePool) != BuiltinTypes::xsAnySimpleType->name(m_namePool))) { + m_context->error(QtXmlPatterns::tr("base type of simple type %1 cannot be complex type %2") + .arg(formatType(m_namePool, simpleType)) + .arg(formatType(m_namePool, baseType)), + XsdSchemaContext::XSDError, location); + return; + } + + if (baseType == BuiltinTypes::xsAnyType) { + if (type->name(m_namePool) != BuiltinTypes::xsAnySimpleType->name(m_namePool)) { + m_context->error(QtXmlPatterns::tr("simple type %1 cannot have direct base type %2") + .arg(formatType(m_namePool, simpleType)) + .arg(formatType(m_namePool, BuiltinTypes::xsAnyType)), + XsdSchemaContext::XSDError, location); + return; + } + } + } +} + +void XsdSchemaChecker::checkSimpleTypeConstraints() +{ + // check all global types... + SchemaType::List types = m_schema->types(); + + // .. and anonymous types + types << m_schema->anonymousTypes(); + + for (int i = 0; i < types.count(); ++i) { + const SchemaType::Ptr type = types.at(i); + + if (!type->isSimpleType()) + continue; + + const XsdSimpleType::Ptr simpleType = type; + + const QSourceLocation location = sourceLocation(simpleType); + + if (simpleType->category() == XsdSimpleType::None) { + // additional checks + // check that no user defined type has xs:AnySimpleType as base type (except xs:AnyAtomicType) + if (simpleType->wxsSuperType()->name(m_namePool) == BuiltinTypes::xsAnySimpleType->name(m_namePool)) { + if (simpleType->name(m_namePool) != BuiltinTypes::xsAnyAtomicType->name(m_namePool)) { + m_context->error(QtXmlPatterns::tr("simple type %1 is not allowed to have base type %2") + .arg(formatType(m_namePool, simpleType)) + .arg(formatType(m_namePool, simpleType->wxsSuperType())), + XsdSchemaContext::XSDError, location); + return; + } + } + // check that no user defined type has xs:AnyAtomicType as base type + if (simpleType->wxsSuperType()->name(m_namePool) == BuiltinTypes::xsAnyAtomicType->name(m_namePool)) { + m_context->error(QtXmlPatterns::tr("simple type %1 is not allowed to have base type %2") + .arg(formatType(m_namePool, simpleType)) + .arg(formatType(m_namePool, simpleType->wxsSuperType())), + XsdSchemaContext::XSDError, location); + return; + } + } + + // @see http://www.w3.org/TR/xmlschema11-1/#d0e37310 + if (simpleType->category() == XsdSimpleType::SimpleTypeAtomic) { + // 1.1 + if ((simpleType->wxsSuperType()->category() != XsdSimpleType::SimpleTypeAtomic) && (simpleType->name(m_namePool) != BuiltinTypes::xsAnyAtomicType->name(m_namePool))) { + m_context->error(QtXmlPatterns::tr("simple type %1 can only have simple atomic type as base type") + .arg(formatType(m_namePool, simpleType)), + XsdSchemaContext::XSDError, location); + } + // 1.2 + if (simpleType->wxsSuperType()->derivationConstraints() & SchemaType::RestrictionConstraint) { + m_context->error(QtXmlPatterns::tr("simple type %1 cannot derive from %2 as the latter defines restriction as final") + .arg(formatType(m_namePool, simpleType->wxsSuperType())) + .arg(formatType(m_namePool, simpleType)), + XsdSchemaContext::XSDError, location); + } + + // 1.3 + // checked by checkConstrainingFacets already + } else if (simpleType->category() == XsdSimpleType::SimpleTypeList) { + const AnySimpleType::Ptr itemType = simpleType->itemType(); + + // 2.1 or @see http://www.w3.org/TR/xmlschema-2/#cos-list-of-atomic + if (itemType->category() != SchemaType::SimpleTypeAtomic && itemType->category() != SchemaType::SimpleTypeUnion) { + m_context->error(QtXmlPatterns::tr("variety of item type of %1 must be either atomic or union").arg(formatType(m_namePool, simpleType)), XsdSchemaContext::XSDError, location); + return; + } + + // 2.1 second part + if (itemType->category() == SchemaType::SimpleTypeUnion && itemType->isDefinedBySchema()) { + const XsdSimpleType::Ptr simpleItemType = itemType; + const AnySimpleType::List memberTypes = simpleItemType->memberTypes(); + for (int j = 0; j < memberTypes.count(); ++j) { + if (memberTypes.at(j)->category() != SchemaType::SimpleTypeAtomic) { + m_context->error(QtXmlPatterns::tr("variety of member types of %1 must be atomic").arg(formatType(m_namePool, simpleItemType)), XsdSchemaContext::XSDError, location); + return; + } + } + } + + // 2.2.1 + if (simpleType->wxsSuperType()->name(m_namePool) == BuiltinTypes::xsAnySimpleType->name(m_namePool)) { + if (itemType->isSimpleType() && itemType->isDefinedBySchema()) { + const XsdSimpleType::Ptr simpleItemType = itemType; + + // 2.2.1.1 + if (simpleItemType->derivationConstraints() & XsdSimpleType::ListConstraint) { + m_context->error(QtXmlPatterns::tr("%1 is not allowed to derive from %2 by list as the latter defines it as final") + .arg(formatType(m_namePool, simpleType)) + .arg(formatType(m_namePool, simpleItemType)), XsdSchemaContext::XSDError, location); + return; + } + + // 2.2.1.2 + const XsdFacet::Hash facets = simpleType->facets(); + XsdFacet::HashIterator it(facets); + + bool invalidFacetFound = false; + while (it.hasNext()) { + it.next(); + if (it.key() != XsdFacet::WhiteSpace) { + invalidFacetFound = true; + break; + } + } + + if (invalidFacetFound) { + m_context->error(QtXmlPatterns::tr("simple type %1 is only allowed to have %2 facet") + .arg(formatType(m_namePool, simpleType)) + .arg(formatKeyword("whiteSpace")), + XsdSchemaContext::XSDError, location); + return; + } + } + } else { // 2.2.2 + // 2.2.2.1 + if (simpleType->wxsSuperType()->category() != XsdSimpleType::SimpleTypeList) { + m_context->error(QtXmlPatterns::tr("base type of simple type %1 must have variety of type list").arg(formatType(m_namePool, simpleType)), XsdSchemaContext::XSDError, location); + return; + } + + // 2.2.2.2 + if (simpleType->wxsSuperType()->derivationConstraints() & SchemaType::RestrictionConstraint) { + m_context->error(QtXmlPatterns::tr("base type of simple type %1 has defined derivation by restriction as final").arg(formatType(m_namePool, simpleType)), XsdSchemaContext::XSDError, location); + return; + } + + // 2.2.2.3 + if (!XsdSchemaHelper::isSimpleDerivationOk(itemType, XsdSimpleType::Ptr(simpleType->wxsSuperType())->itemType(), SchemaType::DerivationConstraints())) { + m_context->error(QtXmlPatterns::tr("item type of base type does not match item type of %1").arg(formatType(m_namePool, simpleType)), XsdSchemaContext::XSDError, location); + return; + } + + // 2.2.2.4 + const XsdFacet::Hash facets = simpleType->facets(); + XsdFacet::HashIterator it(facets); + + bool invalidFacetFound = false; + XsdFacet::Type invalidFacetType = XsdFacet::None; + while (it.hasNext()) { + it.next(); + const XsdFacet::Type facetType = it.key(); + if (facetType != XsdFacet::Length && + facetType != XsdFacet::MinimumLength && + facetType != XsdFacet::MaximumLength && + facetType != XsdFacet::WhiteSpace && + facetType != XsdFacet::Pattern && + facetType != XsdFacet::Enumeration) { + invalidFacetType = facetType; + invalidFacetFound = true; + break; + } + } + + if (invalidFacetFound) { + m_context->error(QtXmlPatterns::tr("simple type %1 contains not allowed facet type %2") + .arg(formatType(m_namePool, simpleType)) + .arg(formatKeyword(XsdFacet::typeName(invalidFacetType))), + XsdSchemaContext::XSDError, location); + return; + } + + // 2.2.2.5 + // TODO: check value constraints + } + + + } else if (simpleType->category() == XsdSimpleType::SimpleTypeUnion) { + const AnySimpleType::List memberTypes = simpleType->memberTypes(); + + if (simpleType->wxsSuperType()->name(m_namePool) == BuiltinTypes::xsAnySimpleType->name(m_namePool)) { // 3.1.1 + // 3.3.1.1 + for (int i = 0; i < memberTypes.count(); ++i) { + const AnySimpleType::Ptr memberType = memberTypes.at(i); + + if (memberType->derivationConstraints() & XsdSimpleType::UnionConstraint) { + m_context->error(QtXmlPatterns::tr("%1 is not allowed to derive from %2 by union as the latter defines it as final") + .arg(formatType(m_namePool, simpleType)) + .arg(formatType(m_namePool, memberType)), XsdSchemaContext::XSDError, location); + return; + } + } + + // 3.3.1.2 + if (!simpleType->facets().isEmpty()) { + m_context->error(QtXmlPatterns::tr("%1 is not allowed to have any facets") + .arg(formatType(m_namePool, simpleType)), + XsdSchemaContext::XSDError, location); + return; + } + } else { + // 3.1.2.1 + if (simpleType->wxsSuperType()->category() != SchemaType::SimpleTypeUnion) { + m_context->error(QtXmlPatterns::tr("base type %1 of simple type %2 must have variety of union") + .arg(formatType(m_namePool, simpleType->wxsSuperType())) + .arg(formatType(m_namePool, simpleType)), + XsdSchemaContext::XSDError, location); + return; + } + + // 3.1.2.2 + if (simpleType->wxsSuperType()->derivationConstraints() & SchemaType::DerivationRestriction) { + m_context->error(QtXmlPatterns::tr("base type %1 of simple type %2 is not allowed to have restriction in %3 attribute") + .arg(formatType(m_namePool, simpleType->wxsSuperType())) + .arg(formatType(m_namePool, simpleType)) + .arg(formatAttribute("final")), + XsdSchemaContext::XSDError, location); + return; + } + + //3.1.2.3 + if (simpleType->wxsSuperType()->isDefinedBySchema()) { + const XsdSimpleType::Ptr simpleBaseType(simpleType->wxsSuperType()); + + AnySimpleType::List baseMemberTypes = simpleBaseType->memberTypes(); + for (int i = 0; i < memberTypes.count(); ++i) { + const AnySimpleType::Ptr memberType = memberTypes.at(i); + const AnySimpleType::Ptr baseMemberType = baseMemberTypes.at(i); + + if (!XsdSchemaHelper::isSimpleDerivationOk(memberType, baseMemberType, SchemaType::DerivationConstraints())) { + m_context->error(QtXmlPatterns::tr("member type %1 cannot be derived from member type %2 of %3's base type %4") + .arg(formatType(m_namePool, memberType)) + .arg(formatType(m_namePool, baseMemberType)) + .arg(formatType(m_namePool, simpleType)) + .arg(formatType(m_namePool, simpleBaseType)), + XsdSchemaContext::XSDError, location); + } + } + } + + // 3.1.2.4 + const XsdFacet::Hash facets = simpleType->facets(); + XsdFacet::HashIterator it(facets); + + bool invalidFacetFound = false; + XsdFacet::Type invalidFacetType = XsdFacet::None; + while (it.hasNext()) { + it.next(); + const XsdFacet::Type facetType = it.key(); + if (facetType != XsdFacet::Pattern && + facetType != XsdFacet::Enumeration) { + invalidFacetType = facetType; + invalidFacetFound = true; + break; + } + } + + if (invalidFacetFound) { + m_context->error(QtXmlPatterns::tr("simple type %1 contains not allowed facet type %2") + .arg(formatType(m_namePool, simpleType)) + .arg(formatKeyword(XsdFacet::typeName(invalidFacetType))), + XsdSchemaContext::XSDError, location); + return; + } + + // 3.1.2.5 + // TODO: check value constraints + } + } + } +} + +void XsdSchemaChecker::checkBasicComplexTypeConstraints() +{ + // check all global types... + SchemaType::List types = m_schema->types(); + + // .. and anonymous types + types << m_schema->anonymousTypes(); + + for (int i = 0; i < types.count(); ++i) { + const SchemaType::Ptr type = types.at(i); + + if (!type->isComplexType() || !type->isDefinedBySchema()) + continue; + + const XsdComplexType::Ptr complexType = type; + + const QSourceLocation location = sourceLocation(complexType); + + // check inheritance restrictions of complex type defined by schema constraints + const SchemaType::Ptr baseType = complexType->wxsSuperType(); + + // @see http://www.w3.org/TR/xmlschema11-1/#ct-props-correct 2) + if (baseType->isSimpleType() && (complexType->derivationMethod() != XsdComplexType::DerivationExtension)) { + m_context->error(QtXmlPatterns::tr("derivation method of %1 must be extension because the base type %2 is a simple type") + .arg(formatType(m_namePool, complexType)) + .arg(formatType(m_namePool, baseType)), + XsdSchemaContext::XSDError, location); + return; + } + } +} + +void XsdSchemaChecker::checkComplexTypeConstraints() +{ + // check all global types... + SchemaType::List types = m_schema->types(); + + // .. and anonymous types + types << m_schema->anonymousTypes(); + + for (int i = 0; i < types.count(); ++i) { + const SchemaType::Ptr type = types.at(i); + + if (!type->isComplexType() || !type->isDefinedBySchema()) + continue; + + const XsdComplexType::Ptr complexType = type; + + const QSourceLocation location = sourceLocation(complexType); + + if (complexType->contentType()->particle()) { + XsdElement::Ptr duplicatedElement; + if (XsdParticleChecker::hasDuplicatedElements(complexType->contentType()->particle(), m_namePool, duplicatedElement)) { + m_context->error(QtXmlPatterns::tr("complex type %1 has duplicated element %2 in its content model") + .arg(formatType(m_namePool, complexType)) + .arg(formatKeyword(duplicatedElement->displayName(m_namePool))), + XsdSchemaContext::XSDError, location); + return; + } + + if (!XsdParticleChecker::isUPAConform(complexType->contentType()->particle(), m_namePool)) { + m_context->error(QtXmlPatterns::tr("complex type %1 has non-deterministic content") + .arg(formatType(m_namePool, complexType)), + XsdSchemaContext::XSDError, location); + return; + } + } + + // check inheritance restrictions of complex type defined by schema constraints + const SchemaType::Ptr baseType = complexType->wxsSuperType(); + + // @see http://www.w3.org/TR/xmlschema11-1/#cos-ct-extends + if (complexType->derivationMethod() == XsdComplexType::DerivationExtension) { + if (baseType->isComplexType() && baseType->isDefinedBySchema()) { + const XsdComplexType::Ptr complexBaseType = baseType; + + // we can skip 1.1 here, as it is tested in checkInheritanceRestrictions() already + + // 1.2 and 1.3 + QString errorMsg; + if (!XsdSchemaHelper::isValidAttributeUsesExtension(complexType->attributeUses(), complexBaseType->attributeUses(), + complexType->attributeWildcard(), complexBaseType->attributeWildcard(), m_context, errorMsg)) { + m_context->error(QtXmlPatterns::tr("attributes of complex type %1 are not a valid extension of the attributes of base type %2: %3") + .arg(formatType(m_namePool, complexType)) + .arg(formatType(m_namePool, baseType)) + .arg(errorMsg), + XsdSchemaContext::XSDError, location); + return; + } + + // 1.4 + bool validContentType = false; + if (complexType->contentType()->variety() == XsdComplexType::ContentType::Simple && complexBaseType->contentType()->variety() == XsdComplexType::ContentType::Simple) { + if (complexType->contentType()->simpleType() == complexBaseType->contentType()->simpleType()) { + validContentType = true; // 1.4.1 + } + } else if (complexType->contentType()->variety() == XsdComplexType::ContentType::Empty && complexBaseType->contentType()->variety() == XsdComplexType::ContentType::Empty) { + validContentType = true; // 1.4.2 + } else { // 1.4.3 + if (complexType->contentType()->variety() == XsdComplexType::ContentType::ElementOnly || complexType->contentType()->variety() == XsdComplexType::ContentType::Mixed) { // 1.4.3.1 + if (complexBaseType->contentType()->variety() == XsdComplexType::ContentType::Empty) { + validContentType = true; // 1.4.3.2.1 + } else { // 1.4.3.2.2 + if (complexType->contentType()->particle()) { // our own check + if ((complexType->contentType()->variety() == XsdComplexType::ContentType::ElementOnly && complexBaseType->contentType()->variety() == XsdComplexType::ContentType::ElementOnly) || + (complexType->contentType()->variety() == XsdComplexType::ContentType::Mixed && complexBaseType->contentType()->variety() == XsdComplexType::ContentType::Mixed)) { // 1.4.3.2.2.1 + if (isValidParticleExtension(complexType->contentType()->particle(), complexBaseType->contentType()->particle())) { + validContentType = true; // 1.4.3.2.2.2 + } + } + } + // 1.4.3.2.2.3 and 1.4.3.2.2.4 handle 'open content' that we do not support yet + } + } + } + + // 1.5 WTF?!? + + if (!validContentType) { + m_context->error(QtXmlPatterns::tr("content model of complex type %1 is not a valid extension of content model of %2") + .arg(formatType(m_namePool, complexType)) + .arg(formatType(m_namePool, complexBaseType)), + XsdSchemaContext::XSDError, location); + return; + } + + } else if (baseType->isSimpleType()) { + // 2.1 + if (complexType->contentType()->variety() != XsdComplexType::ContentType::Simple) { + m_context->error(QtXmlPatterns::tr("complex type %1 must have simple content") + .arg(formatType(m_namePool, complexType)), + XsdSchemaContext::XSDError, location); + return; + } + + if (complexType->contentType()->simpleType() != baseType) { + m_context->error(QtXmlPatterns::tr("complex type %1 must have the same simple type as its base class %2") + .arg(formatType(m_namePool, complexType)) + .arg(formatType(m_namePool, baseType)), + XsdSchemaContext::XSDError, location); + return; + } + + // 2.2 tested in checkInheritanceRestrictions() already + } + } else if (complexType->derivationMethod() == XsdComplexType::DerivationRestriction) { + // @see http://www.w3.org/TR/xmlschema11-1/#d0e21402 + const SchemaType::Ptr baseType(complexType->wxsSuperType()); + + bool derivationOk = false; + QString errorMsg; + + // we can partly skip 1 here, as it is tested in checkInheritanceRestrictions() already + if (baseType->isComplexType()) { + + // 2.1 + if (baseType->name(m_namePool) == BuiltinTypes::xsAnyType->name(m_namePool)) { + derivationOk = true; + } + + if (baseType->isDefinedBySchema()) { + const XsdComplexType::Ptr complexBaseType(baseType); + + // 2.2.1 + if (complexType->contentType()->variety() == XsdComplexType::ContentType::Simple) { + // 2.2.2.1 + if (XsdSchemaHelper::isSimpleDerivationOk(complexType->contentType()->simpleType(), complexBaseType->contentType()->simpleType(), SchemaType::DerivationConstraints())) + derivationOk = true; + + // 2.2.2.2 + if (complexBaseType->contentType()->variety() == XsdComplexType::ContentType::Mixed) { + if (XsdSchemaHelper::isParticleEmptiable(complexBaseType->contentType()->particle())) + derivationOk = true; + } + } + + // 2.3.1 + if (complexType->contentType()->variety() == XsdComplexType::ContentType::Empty) { + // 2.3.2.1 + if (complexBaseType->contentType()->variety() == XsdComplexType::ContentType::Empty) + derivationOk = true; + + // 2.3.2.2 + if (complexBaseType->contentType()->variety() == XsdComplexType::ContentType::ElementOnly || complexBaseType->contentType()->variety() == XsdComplexType::ContentType::Mixed) { + if (XsdSchemaHelper::isParticleEmptiable(complexBaseType->contentType()->particle())) + derivationOk = true; + } + } + + // 2.4.1.1 + if (((complexType->contentType()->variety() == XsdComplexType::ContentType::ElementOnly) && + (complexBaseType->contentType()->variety() == XsdComplexType::ContentType::ElementOnly || complexBaseType->contentType()->variety() == XsdComplexType::ContentType::Mixed)) || + // 2.4.1.2 + (complexType->contentType()->variety() == XsdComplexType::ContentType::Mixed && complexBaseType->contentType()->variety() == XsdComplexType::ContentType::Mixed)) { + + // 2.4.2 + if (XsdParticleChecker::subsumes(complexBaseType->contentType()->particle(), complexType->contentType()->particle(), m_context, errorMsg)) + derivationOk = true; + } + } + } + + if (!derivationOk) { + m_context->error(QtXmlPatterns::tr("complex type %1 cannot be derived from base type %2%3") + .arg(formatType(m_namePool, complexType)) + .arg(formatType(m_namePool, baseType)) + .arg(errorMsg.isEmpty() ? QString() : QLatin1String(": ") + errorMsg), + XsdSchemaContext::XSDError, location); + return; + } + + if (baseType->isDefinedBySchema()) { + const XsdComplexType::Ptr complexBaseType(baseType); + + QString errorMsg; + if (!XsdSchemaHelper::isValidAttributeUsesRestriction(complexType->attributeUses(), complexBaseType->attributeUses(), + complexType->attributeWildcard(), complexBaseType->attributeWildcard(), m_context, errorMsg)) { + m_context->error(QtXmlPatterns::tr("attributes of complex type %1 are not a valid restriction from the attributes of base type %2: %3") + .arg(formatType(m_namePool, complexType)) + .arg(formatType(m_namePool, baseType)) + .arg(errorMsg), + XsdSchemaContext::XSDError, location); + return; + } + } + } + + // check that complex type with simple content is not allowed to inherit from + // built in complex type xs:AnyType + if (complexType->contentType()->variety() == XsdComplexType::ContentType::Simple) { + if (baseType->name(m_namePool) == BuiltinTypes::xsAnyType->name(m_namePool)) { + m_context->error(QtXmlPatterns::tr("complex type %1 with simple content cannot be derived from complex base type %2") + .arg(formatType(m_namePool, complexType)) + .arg(formatType(m_namePool, baseType)), + XsdSchemaContext::XSDError, location); + return; + } + } + } +} + +void XsdSchemaChecker::checkSimpleDerivationRestrictions() +{ + // check all global types... + SchemaType::List types = m_schema->types(); + + // .. and anonymous types + types << m_schema->anonymousTypes(); + + for (int i = 0; i < types.count(); ++i) { + const SchemaType::Ptr type = types.at(i); + + if (type->isComplexType()) + continue; + + if (type->category() != SchemaType::SimpleTypeList && type->category() != SchemaType::SimpleTypeUnion) + continue; + + const XsdSimpleType::Ptr simpleType = type; + const QSourceLocation location = sourceLocation(simpleType); + + // check all simple types derived by list + if (simpleType->category() == XsdSimpleType::SimpleTypeList) { + const AnySimpleType::Ptr itemType = simpleType->itemType(); + + if (itemType->isComplexType()) { + m_context->error(QtXmlPatterns::tr("item type of simple type %1 cannot be a complex type") + .arg(formatType(m_namePool, simpleType)), + XsdSchemaContext::XSDError, location); + return; + } + + + if (itemType->isSimpleType() && itemType->isDefinedBySchema()) { + const XsdSimpleType::Ptr simpleItemType = itemType; + if (simpleItemType->derivationConstraints() & XsdSimpleType::ListConstraint) { + m_context->error(QtXmlPatterns::tr("%1 is not allowed to derive from %2 by list as the latter defines it as final") + .arg(formatType(m_namePool, simpleType)) + .arg(formatType(m_namePool, simpleItemType)), + XsdSchemaContext::XSDError, location); + return; + } + } + + // @see http://www.w3.org/TR/xmlschema-2/#cos-list-of-atomic + if (itemType->category() != SchemaType::SimpleTypeAtomic && itemType->category() != SchemaType::SimpleTypeUnion) { + m_context->error(QtXmlPatterns::tr("variety of item type of %1 must be either atomic or union").arg(formatType(m_namePool, simpleType)), XsdSchemaContext::XSDError, location); + return; + } + + if (itemType->category() == SchemaType::SimpleTypeUnion && itemType->isDefinedBySchema()) { + const XsdSimpleType::Ptr simpleItemType = itemType; + const AnySimpleType::List memberTypes = simpleItemType->memberTypes(); + for (int j = 0; j < memberTypes.count(); ++j) { + if (memberTypes.at(j)->category() != SchemaType::SimpleTypeAtomic) { + m_context->error(QtXmlPatterns::tr("variety of member types of %1 must be atomic").arg(formatType(m_namePool, simpleItemType)), XsdSchemaContext::XSDError, location); + return; + } + } + } + } + + // check all simple types derived by union + if (simpleType->category() == XsdSimpleType::SimpleTypeUnion) { + const AnySimpleType::List memberTypes = simpleType->memberTypes(); + + for (int i = 0; i < memberTypes.count(); ++i) { + const AnySimpleType::Ptr memberType = memberTypes.at(i); + + if (memberType->isComplexType()) { + m_context->error(QtXmlPatterns::tr("member type of simple type %1 cannot be a complex type") + .arg(formatType(m_namePool, simpleType)), + XsdSchemaContext::XSDError, location); + return; + } + + // @see http://www.w3.org/TR/xmlschema-2/#cos-no-circular-unions + if (simpleType->name(m_namePool) == memberType->name(m_namePool)) { + m_context->error(QtXmlPatterns::tr("%1 is not allowed to have a member type with the same name as itself") + .arg(formatType(m_namePool, simpleType)), + XsdSchemaContext::XSDError, location); + return; + } + + if (memberType->isSimpleType() && memberType->isDefinedBySchema()) { + const XsdSimpleType::Ptr simpleMemberType = memberType; + if (simpleMemberType->derivationConstraints() & XsdSimpleType::UnionConstraint) { + m_context->error(QtXmlPatterns::tr("%1 is not allowed to derive from %2 by union as the latter defines it as final") + .arg(formatType(m_namePool, simpleType)) + .arg(formatType(m_namePool, simpleMemberType)), + XsdSchemaContext::XSDError, location); + return; + } + } + } + } + } +} + +void XsdSchemaChecker::checkConstrainingFacets() +{ + // first the global simple types + const SchemaType::List types = m_schema->types(); + for (int i = 0; i < types.count(); ++i) { + if (!(types.at(i)->isSimpleType()) || !(types.at(i)->isDefinedBySchema())) + continue; + + const XsdSimpleType::Ptr simpleType = types.at(i); + checkConstrainingFacets(simpleType->facets(), simpleType); + } + + // and afterwards all anonymous simple types + const SchemaType::List anonymousTypes = m_schema->anonymousTypes(); + for (int i = 0; i < anonymousTypes.count(); ++i) { + if (!(anonymousTypes.at(i)->isSimpleType()) || !(anonymousTypes.at(i)->isDefinedBySchema())) + continue; + + const XsdSimpleType::Ptr simpleType = anonymousTypes.at(i); + checkConstrainingFacets(simpleType->facets(), simpleType); + } +} + +void XsdSchemaChecker::checkConstrainingFacets(const XsdFacet::Hash &facets, const XsdSimpleType::Ptr &simpleType) +{ + if (facets.isEmpty()) + return; + + SchemaType::Ptr comparableBaseType; + if (!simpleType->wxsSuperType()->isDefinedBySchema()) + comparableBaseType = simpleType->wxsSuperType(); + else + comparableBaseType = simpleType->primitiveType(); + + const XsdSchemaSourceLocationReflection reflection(sourceLocation(simpleType)); + + // start checks + if (facets.contains(XsdFacet::Length)) { + const XsdFacet::Ptr lengthFacet = facets.value(XsdFacet::Length); + const DerivedInteger<TypeNonNegativeInteger>::Ptr lengthValue = lengthFacet->value(); + + // @see http://www.w3.org/TR/xmlschema-2/#length-minLength-maxLength + if (facets.contains(XsdFacet::MinimumLength)) { + const XsdFacet::Ptr minLengthFacet = facets.value(XsdFacet::MinimumLength); + const DerivedInteger<TypeNonNegativeInteger>::Ptr minLengthValue = minLengthFacet->value(); + + bool foundSuperMinimumLength = false; + SchemaType::Ptr baseType = simpleType->wxsSuperType(); + while (baseType) { + const XsdFacet::Hash baseFacets = m_context->facetsForType(baseType); + if (baseFacets.contains(XsdFacet::MinimumLength) && !baseFacets.contains(XsdFacet::Length)) { + const DerivedInteger<TypeNonNegativeInteger>::Ptr superValue(baseFacets.value(XsdFacet::MinimumLength)->value()); + if (minLengthValue->toInteger() == superValue->toInteger()) { + foundSuperMinimumLength = true; + break; + } + } + + baseType = baseType->wxsSuperType(); + } + + if ((minLengthValue->toInteger() > lengthValue->toInteger()) || !foundSuperMinimumLength) { + m_context->error(QtXmlPatterns::tr("%1 facet collides with %2 facet") + .arg(formatKeyword("length")) + .arg(formatKeyword("minLength")), + XsdSchemaContext::XSDError, sourceLocation(simpleType)); + return; + } + } + + // @see http://www.w3.org/TR/xmlschema-2/#length-minLength-maxLength + if (facets.contains(XsdFacet::MaximumLength)) { + const XsdFacet::Ptr maxLengthFacet = facets.value(XsdFacet::MaximumLength); + const DerivedInteger<TypeNonNegativeInteger>::Ptr maxLengthValue = maxLengthFacet->value(); + + bool foundSuperMaximumLength = false; + SchemaType::Ptr baseType = simpleType->wxsSuperType(); + while (baseType) { + const XsdFacet::Hash baseFacets = m_context->facetsForType(baseType); + if (baseFacets.contains(XsdFacet::MaximumLength) && !baseFacets.contains(XsdFacet::Length)) { + const DerivedInteger<TypeNonNegativeInteger>::Ptr superValue(baseFacets.value(XsdFacet::MaximumLength)->value()); + if (maxLengthValue->toInteger() == superValue->toInteger()) { + foundSuperMaximumLength = true; + break; + } + } + + baseType = baseType->wxsSuperType(); + } + + if ((maxLengthValue->toInteger() < lengthValue->toInteger()) || !foundSuperMaximumLength) { + m_context->error(QtXmlPatterns::tr("%1 facet collides with %2 facet") + .arg(formatKeyword("length")) + .arg(formatKeyword("maxLength")), + XsdSchemaContext::XSDError, sourceLocation(simpleType)); + return; + } + } + + // @see http://www.w3.org/TR/xmlschema-2/#length-valid-restriction + if (simpleType->derivationMethod() == XsdSimpleType::DerivationRestriction) { + const XsdFacet::Hash baseFacets = m_context->facetsForType(simpleType->wxsSuperType()); + if (baseFacets.contains(XsdFacet::Length)) { + const DerivedInteger<TypeNonNegativeInteger>::Ptr baseValue = baseFacets.value(XsdFacet::Length)->value(); + if (lengthValue->toInteger() != baseValue->toInteger()) { + m_context->error(QtXmlPatterns::tr("%1 facet must have the same value as %2 facet of base type") + .arg(formatKeyword("length")) + .arg(formatKeyword("length")), + XsdSchemaContext::XSDError, sourceLocation(simpleType)); + return; + } + } + } + } + + if (facets.contains(XsdFacet::MinimumLength)) { + const XsdFacet::Ptr minLengthFacet = facets.value(XsdFacet::MinimumLength); + const DerivedInteger<TypeNonNegativeInteger>::Ptr minLengthValue = minLengthFacet->value(); + + if (facets.contains(XsdFacet::MaximumLength)) { + const XsdFacet::Ptr maxLengthFacet = facets.value(XsdFacet::MaximumLength); + const DerivedInteger<TypeNonNegativeInteger>::Ptr maxLengthValue = maxLengthFacet->value(); + + // @see http://www.w3.org/TR/xmlschema-2/#minLength-less-than-equal-to-maxLength + if (maxLengthValue->toInteger() < minLengthValue->toInteger()) { + m_context->error(QtXmlPatterns::tr("%1 facet collides with %2 facet") + .arg(formatKeyword("minLength")) + .arg(formatKeyword("maxLength")), + XsdSchemaContext::XSDError, sourceLocation(simpleType)); + return; + } + + // @see http://www.w3.org/TR/xmlschema-2/#minLength-valid-restriction + //TODO: check parent facets + } + + // @see http://www.w3.org/TR/xmlschema-2/#minLength-valid-restriction + if (simpleType->derivationMethod() == XsdSimpleType::DerivationRestriction) { + const XsdFacet::Hash baseFacets = m_context->facetsForType(simpleType->wxsSuperType()); + if (baseFacets.contains(XsdFacet::MinimumLength)) { + const DerivedInteger<TypeNonNegativeInteger>::Ptr baseValue = baseFacets.value(XsdFacet::MinimumLength)->value(); + if (minLengthValue->toInteger() < baseValue->toInteger()) { + m_context->error(QtXmlPatterns::tr("%1 facet must be equal or greater than %2 facet of base type") + .arg(formatKeyword("minLength")) + .arg(formatKeyword("minLength")), + XsdSchemaContext::XSDError, sourceLocation(simpleType)); + return; + } + } + } + } + if (facets.contains(XsdFacet::MaximumLength)) { + const XsdFacet::Ptr maxLengthFacet = facets.value(XsdFacet::MaximumLength); + const DerivedInteger<TypeNonNegativeInteger>::Ptr maxLengthValue = maxLengthFacet->value(); + + // @see http://www.w3.org/TR/xmlschema-2/#maxLength-valid-restriction + if (simpleType->derivationMethod() == XsdSimpleType::DerivationRestriction) { + const XsdFacet::Hash baseFacets = m_context->facetsForType(simpleType->wxsSuperType()); + if (baseFacets.contains(XsdFacet::MaximumLength)) { + const DerivedInteger<TypeNonNegativeInteger>::Ptr baseValue(baseFacets.value(XsdFacet::MaximumLength)->value()); + if (maxLengthValue->toInteger() > baseValue->toInteger()) { + m_context->error(QtXmlPatterns::tr("%1 facet must be less than or equal to %2 facet of base type") + .arg(formatKeyword("maxLength")) + .arg(formatKeyword("maxLength")), + XsdSchemaContext::XSDError, sourceLocation(simpleType)); + return; + } + } + } + } + if (facets.contains(XsdFacet::Pattern)) { + // we keep the patterns in separated facets + // @see http://www.w3.org/TR/xmlschema-2/#src-multiple-patterns + + // @see http://www.w3.org/TR/xmlschema-2/#cvc-pattern-valid + const XsdFacet::Ptr patternFacet = facets.value(XsdFacet::Pattern); + const AtomicValue::List multiValue = patternFacet->multiValue(); + + for (int i = 0; i < multiValue.count(); ++i) { + const DerivedString<TypeString>::Ptr value = multiValue.at(i); + const QRegExp exp = PatternPlatform::parsePattern(value->stringValue(), m_context, &reflection); + if (!exp.isValid()) { + m_context->error(QtXmlPatterns::tr("%1 facet contains invalid regular expression").arg(formatKeyword("pattern")), XsdSchemaContext::XSDError, sourceLocation(simpleType)); + return; + } + } + } + if (facets.contains(XsdFacet::Enumeration)) { + // @see http://www.w3.org/TR/xmlschema-2/#src-multiple-enumerations + + const XsdFacet::Ptr facet = facets.value(XsdFacet::Enumeration); + + if (BuiltinTypes::xsNOTATION->wxsTypeMatches(simpleType)) { + const AtomicValue::List notationNames = facet->multiValue(); + for (int k = 0; k < notationNames.count(); ++k) { + const QNameValue::Ptr notationName = notationNames.at(k); + if (!m_schema->notation(notationName->qName())) { + m_context->error(QtXmlPatterns::tr("unknown notation %1 used in %2 facet") + .arg(formatKeyword(m_namePool, notationName->qName())) + .arg(formatKeyword("enumeration")), + XsdSchemaContext::XSDError, sourceLocation(simpleType)); + } + } + } else if (BuiltinTypes::xsQName->wxsTypeMatches(simpleType)) { + } else { + const XsdTypeChecker checker(m_context, QVector<QXmlName>(), sourceLocation(simpleType)); + + const AnySimpleType::Ptr baseType = simpleType->wxsSuperType(); + const XsdFacet::Hash baseFacets = XsdTypeChecker::mergedFacetsForType(baseType, m_context); + + const AtomicValue::List multiValue = facet->multiValue(); + for (int k = 0; k < multiValue.count(); ++k) { + const QString stringValue = multiValue.at(k)->as<DerivedString<TypeString> >()->stringValue(); + const QString actualValue = XsdTypeChecker::normalizedValue(stringValue, baseFacets); + + QString errorMsg; + if (!checker.isValidString(actualValue, baseType, errorMsg)) { + m_context->error(QtXmlPatterns::tr("%1 facet contains invalid value %2: %3") + .arg(formatKeyword("enumeration")) + .arg(formatData(stringValue)) + .arg(errorMsg), + XsdSchemaContext::XSDError, sourceLocation(simpleType)); + return; + } + } + } + } + if (facets.contains(XsdFacet::WhiteSpace)) { + const XsdFacet::Ptr whiteSpaceFacet = facets.value(XsdFacet::WhiteSpace); + const DerivedString<TypeString>::Ptr whiteSpaceValue = whiteSpaceFacet->value(); + + // @see http://www.w3.org/TR/xmlschema-2/#whiteSpace-valid-restriction + if (simpleType->derivationMethod() == XsdSimpleType::DerivationRestriction) { + const XsdFacet::Hash baseFacets = m_context->facetsForType(simpleType->wxsSuperType()); + if (baseFacets.contains(XsdFacet::WhiteSpace)) { + const QString value = whiteSpaceValue->stringValue(); + const QString baseValue = DerivedString<TypeString>::Ptr(baseFacets.value(XsdFacet::WhiteSpace)->value())->stringValue(); + if (value == XsdSchemaToken::toString(XsdSchemaToken::Replace) || value == XsdSchemaToken::toString(XsdSchemaToken::Preserve)) { + if (baseValue == XsdSchemaToken::toString(XsdSchemaToken::Collapse)) { + m_context->error(QtXmlPatterns::tr("%1 facet cannot be %2 or %3 if %4 facet of base type is %5") + .arg(formatKeyword("whiteSpace")) + .arg(formatData("replace")) + .arg(formatData("preserve")) + .arg(formatKeyword("whiteSpace")) + .arg(formatData("collapse")), + XsdSchemaContext::XSDError, sourceLocation(simpleType)); + return; + } + } + if (value == XsdSchemaToken::toString(XsdSchemaToken::Preserve) && baseValue == XsdSchemaToken::toString(XsdSchemaToken::Replace)) { + m_context->error(QtXmlPatterns::tr("%1 facet cannot be %2 if %3 facet of base type is %4") + .arg(formatKeyword("whiteSpace")) + .arg(formatData("preserve")) + .arg(formatKeyword("whiteSpace")) + .arg(formatData("replace")), + XsdSchemaContext::XSDError, sourceLocation(simpleType)); + return; + } + } + } + } + if (facets.contains(XsdFacet::MaximumInclusive)) { + const XsdFacet::Ptr maxFacet = facets.value(XsdFacet::MaximumInclusive); + + // @see http://www.w3.org/TR/xmlschema-2/#minInclusive-less-than-equal-to-maxInclusive + if (facets.contains(XsdFacet::MinimumInclusive)) { + const XsdFacet::Ptr minFacet = facets.value(XsdFacet::MinimumInclusive); + + if (comparableBaseType) { + if (XsdSchemaHelper::constructAndCompare(minFacet->value(), AtomicComparator::OperatorGreaterThan, maxFacet->value(), comparableBaseType, m_context, &reflection)) { + m_context->error(QtXmlPatterns::tr("%1 facet must be less than or equal to %2 facet") + .arg(formatKeyword("minInclusive")) + .arg(formatKeyword("maxInclusive")), + XsdSchemaContext::XSDError, sourceLocation(simpleType)); + return; + } + } + } + + // @see http://www.w3.org/TR/xmlschema-2/#maxInclusive-valid-restriction + if (simpleType->derivationMethod() == XsdSimpleType::DerivationRestriction) { + const XsdFacet::Hash baseFacets = m_context->facetsForType(simpleType->wxsSuperType()); + if (baseFacets.contains(XsdFacet::MaximumInclusive)) { + const XsdFacet::Ptr baseFacet = baseFacets.value(XsdFacet::MaximumInclusive); + if (comparableBaseType) { + if (XsdSchemaHelper::constructAndCompare(maxFacet->value(), AtomicComparator::OperatorGreaterThan, baseFacet->value(), comparableBaseType, m_context, &reflection)) { + m_context->error(QtXmlPatterns::tr("%1 facet must be less than or equal to %2 facet of base type") + .arg(formatKeyword("maxInclusive")) + .arg(formatKeyword("maxInclusive")), + XsdSchemaContext::XSDError, sourceLocation(simpleType)); + return; + } + } + } + if (baseFacets.contains(XsdFacet::MaximumExclusive)) { + const XsdFacet::Ptr baseFacet = baseFacets.value(XsdFacet::MaximumExclusive); + if (comparableBaseType) { + if (XsdSchemaHelper::constructAndCompare(maxFacet->value(), AtomicComparator::OperatorGreaterOrEqual, baseFacet->value(), comparableBaseType, m_context, &reflection)) { + m_context->error(QtXmlPatterns::tr("%1 facet must be less than %2 facet of base type") + .arg(formatKeyword("maxInclusive")) + .arg(formatKeyword("maxExclusive")), + XsdSchemaContext::XSDError, sourceLocation(simpleType)); + return; + } + } + } + } + } + if (facets.contains(XsdFacet::MaximumExclusive)) { + const XsdFacet::Ptr maxFacet = facets.value(XsdFacet::MaximumExclusive); + + // @see http://www.w3.org/TR/xmlschema-2/#maxInclusive-maxExclusive + if (facets.contains(XsdFacet::MaximumInclusive)) { + m_context->error(QtXmlPatterns::tr("%1 facet and %2 facet cannot appear together") + .arg(formatKeyword("maxExclusive")) + .arg(formatKeyword("maxInclusive")), + XsdSchemaContext::XSDError, sourceLocation(simpleType)); + return; + } + + // @see http://www.w3.org/TR/xmlschema-2/#minExclusive-less-than-equal-to-maxExclusive + if (facets.contains(XsdFacet::MinimumExclusive)) { + const XsdFacet::Ptr minFacet = facets.value(XsdFacet::MinimumExclusive); + if (comparableBaseType) { + if (XsdSchemaHelper::constructAndCompare(minFacet->value(), AtomicComparator::OperatorGreaterThan, maxFacet->value(), comparableBaseType, m_context, &reflection)) { + m_context->error(QtXmlPatterns::tr("%1 facet must be less than or equal to %2 facet") + .arg(formatKeyword("minExclusive")) + .arg(formatKeyword("maxExclusive")), + XsdSchemaContext::XSDError, sourceLocation(simpleType)); + return; + } + } + } + + // @see http://www.w3.org/TR/xmlschema-2/#maxExclusive-valid-restriction + if (simpleType->derivationMethod() == XsdSimpleType::DerivationRestriction) { + const XsdFacet::Hash baseFacets = m_context->facetsForType(simpleType->wxsSuperType()); + if (baseFacets.contains(XsdFacet::MaximumExclusive)) { + const XsdFacet::Ptr baseFacet = baseFacets.value(XsdFacet::MaximumExclusive); + if (comparableBaseType) { + if (XsdSchemaHelper::constructAndCompare(maxFacet->value(), AtomicComparator::OperatorGreaterThan, baseFacet->value(), comparableBaseType, m_context, &reflection)) { + m_context->error(QtXmlPatterns::tr("%1 facet must be less than or equal to %2 facet of base type") + .arg(formatKeyword("maxExclusive")) + .arg(formatKeyword("maxExclusive")), + XsdSchemaContext::XSDError, sourceLocation(simpleType)); + return; + } + } + } + if (baseFacets.contains(XsdFacet::MaximumInclusive)) { + const XsdFacet::Ptr baseFacet = baseFacets.value(XsdFacet::MaximumInclusive); + if (comparableBaseType) { + if (XsdSchemaHelper::constructAndCompare(maxFacet->value(), AtomicComparator::OperatorGreaterThan, baseFacet->value(), comparableBaseType, m_context, &reflection)) { + m_context->error(QtXmlPatterns::tr("%1 facet must be less than or equal to %2 facet of base type") + .arg(formatKeyword("maxExclusive")) + .arg(formatKeyword("maxInclusive")), + XsdSchemaContext::XSDError, sourceLocation(simpleType)); + return; + } + } + } + if (baseFacets.contains(XsdFacet::MinimumInclusive)) { + const XsdFacet::Ptr baseFacet = baseFacets.value(XsdFacet::MinimumInclusive); + if (comparableBaseType) { + if (XsdSchemaHelper::constructAndCompare(maxFacet->value(), AtomicComparator::OperatorLessOrEqual, baseFacet->value(), comparableBaseType, m_context, &reflection)) { + m_context->error(QtXmlPatterns::tr("%1 facet must be greater than %2 facet of base type") + .arg(formatKeyword("maxExclusive")) + .arg(formatKeyword("minInclusive")), + XsdSchemaContext::XSDError, sourceLocation(simpleType)); + return; + } + } + } + if (baseFacets.contains(XsdFacet::MinimumExclusive)) { + const XsdFacet::Ptr baseFacet = baseFacets.value(XsdFacet::MinimumExclusive); + if (comparableBaseType) { + if (XsdSchemaHelper::constructAndCompare(maxFacet->value(), AtomicComparator::OperatorLessOrEqual, baseFacet->value(), comparableBaseType, m_context, &reflection)) { + m_context->error(QtXmlPatterns::tr("%1 facet must be greater than %2 facet of base type") + .arg(formatKeyword("maxExclusive")) + .arg(formatKeyword("minExclusive")), + XsdSchemaContext::XSDError, sourceLocation(simpleType)); + return; + } + } + } + } + } + if (facets.contains(XsdFacet::MinimumExclusive)) { + const XsdFacet::Ptr minFacet = facets.value(XsdFacet::MinimumExclusive); + + // @see http://www.w3.org/TR/xmlschema-2/#minInclusive-minExclusive + if (facets.contains(XsdFacet::MinimumInclusive)) { + m_context->error(QtXmlPatterns::tr("%1 facet and %2 facet cannot appear together") + .arg(formatKeyword("minExclusive")) + .arg(formatKeyword("minInclusive")), + XsdSchemaContext::XSDError, sourceLocation(simpleType)); + return; + } + + // @see http://www.w3.org/TR/xmlschema-2/#minExclusive-less-than-maxInclusive + if (facets.contains(XsdFacet::MaximumInclusive)) { + const XsdFacet::Ptr maxFacet = facets.value(XsdFacet::MaximumInclusive); + if (comparableBaseType) { + if (XsdSchemaHelper::constructAndCompare(minFacet->value(), AtomicComparator::OperatorGreaterOrEqual, maxFacet->value(), comparableBaseType, m_context, &reflection)) { + m_context->error(QtXmlPatterns::tr("%1 facet must be less than %2 facet") + .arg(formatKeyword("minExclusive")) + .arg(formatKeyword("maxInclusive")), + XsdSchemaContext::XSDError, sourceLocation(simpleType)); + return; + } + } + } + + // @see http://www.w3.org/TR/xmlschema-2/#minExclusive-valid-restriction + if (simpleType->derivationMethod() == XsdSimpleType::DerivationRestriction) { + const XsdFacet::Hash baseFacets = m_context->facetsForType(simpleType->wxsSuperType()); + if (baseFacets.contains(XsdFacet::MinimumExclusive)) { + const XsdFacet::Ptr baseFacet = baseFacets.value(XsdFacet::MinimumExclusive); + if (comparableBaseType) { + if (XsdSchemaHelper::constructAndCompare(minFacet->value(), AtomicComparator::OperatorLessThan, baseFacet->value(), comparableBaseType, m_context, &reflection)) { + m_context->error(QtXmlPatterns::tr("%1 facet must be greater than or equal to %2 facet of base type") + .arg(formatKeyword("minExclusive")) + .arg(formatKeyword("minExclusive")), + XsdSchemaContext::XSDError, sourceLocation(simpleType)); + return; + } + } + } + if (baseFacets.contains(XsdFacet::MaximumExclusive)) { + const XsdFacet::Ptr baseFacet = baseFacets.value(XsdFacet::MaximumExclusive); + if (comparableBaseType) { + if (XsdSchemaHelper::constructAndCompare(minFacet->value(), AtomicComparator::OperatorGreaterOrEqual, baseFacet->value(), comparableBaseType, m_context, &reflection)) { + m_context->error(QtXmlPatterns::tr("%1 facet must be less than %2 facet of base type") + .arg(formatKeyword("minExclusive")) + .arg(formatKeyword("maxExclusive")), + XsdSchemaContext::XSDError, sourceLocation(simpleType)); + return; + } + } + } + if (baseFacets.contains(XsdFacet::MaximumInclusive)) { + const XsdFacet::Ptr baseFacet = baseFacets.value(XsdFacet::MaximumInclusive); + if (comparableBaseType) { + if (XsdSchemaHelper::constructAndCompare(minFacet->value(), AtomicComparator::OperatorGreaterThan, baseFacet->value(), comparableBaseType, m_context, &reflection)) { + m_context->error(QtXmlPatterns::tr("%1 facet must be less than or equal to %2 facet of base type") + .arg(formatKeyword("minExclusive")) + .arg(formatKeyword("maxInclusive")), + XsdSchemaContext::XSDError, sourceLocation(simpleType)); + return; + } + } + } + } + } + if (facets.contains(XsdFacet::MinimumInclusive)) { + const XsdFacet::Ptr minFacet = facets.value(XsdFacet::MinimumInclusive); + + // @see http://www.w3.org/TR/xmlschema-2/#minInclusive-less-than-maxExclusive + if (facets.contains(XsdFacet::MaximumExclusive)) { + const XsdFacet::Ptr maxFacet = facets.value(XsdFacet::MaximumExclusive); + if (comparableBaseType) { + if (XsdSchemaHelper::constructAndCompare(minFacet->value(), AtomicComparator::OperatorGreaterOrEqual, maxFacet->value(), comparableBaseType, m_context, &reflection)) { + m_context->error(QtXmlPatterns::tr("%1 facet must be less than %2 facet") + .arg(formatKeyword("minInclusive")) + .arg(formatKeyword("maxExclusive")), + XsdSchemaContext::XSDError, sourceLocation(simpleType)); + return; + } + } + } + + // @see http://www.w3.org/TR/xmlschema-2/#minInclusive-valid-restriction + if (simpleType->derivationMethod() == XsdSimpleType::DerivationRestriction) { + const XsdFacet::Hash baseFacets = m_context->facetsForType(simpleType->wxsSuperType()); + if (baseFacets.contains(XsdFacet::MinimumInclusive)) { + const XsdFacet::Ptr baseFacet = baseFacets.value(XsdFacet::MinimumInclusive); + if (comparableBaseType) { + if (XsdSchemaHelper::constructAndCompare(minFacet->value(), AtomicComparator::OperatorLessThan, baseFacet->value(), comparableBaseType, m_context, &reflection)) { + m_context->error(QtXmlPatterns::tr("%1 facet must be greater than or equal to %2 facet of base type") + .arg(formatKeyword("minInclusive")) + .arg(formatKeyword("minInclusive")), + XsdSchemaContext::XSDError, sourceLocation(simpleType)); + return; + } + } + } + if (baseFacets.contains(XsdFacet::MinimumExclusive)) { + const XsdFacet::Ptr baseFacet = baseFacets.value(XsdFacet::MinimumExclusive); + if (comparableBaseType) { + if (XsdSchemaHelper::constructAndCompare(minFacet->value(), AtomicComparator::OperatorLessOrEqual, baseFacet->value(), comparableBaseType, m_context, &reflection)) { + m_context->error(QtXmlPatterns::tr("%1 facet must be greater than %2 facet of base type") + .arg(formatKeyword("minInclusive")) + .arg(formatKeyword("minExclusive")), + XsdSchemaContext::XSDError, sourceLocation(simpleType)); + return; + } + } + } + if (baseFacets.contains(XsdFacet::MaximumInclusive)) { + const XsdFacet::Ptr baseFacet = baseFacets.value(XsdFacet::MaximumInclusive); + if (comparableBaseType) { + if (XsdSchemaHelper::constructAndCompare(minFacet->value(), AtomicComparator::OperatorGreaterThan, baseFacet->value(), comparableBaseType, m_context, &reflection)) { + m_context->error(QtXmlPatterns::tr("%1 facet must be less than or equal to %2 facet of base type") + .arg(formatKeyword("minInclusive")) + .arg(formatKeyword("maxInclusive")), + XsdSchemaContext::XSDError, sourceLocation(simpleType)); + return; + } + } + } + if (baseFacets.contains(XsdFacet::MaximumExclusive)) { + const XsdFacet::Ptr baseFacet = baseFacets.value(XsdFacet::MaximumExclusive); + if (comparableBaseType) { + if (XsdSchemaHelper::constructAndCompare(minFacet->value(), AtomicComparator::OperatorGreaterOrEqual, baseFacet->value(), comparableBaseType, m_context, &reflection)) { + m_context->error(QtXmlPatterns::tr("%1 facet must be less than %2 facet of base type") + .arg(formatKeyword("minInclusive")) + .arg(formatKeyword("maxExclusive")), + XsdSchemaContext::XSDError, sourceLocation(simpleType)); + return; + } + } + } + } + } + if (facets.contains(XsdFacet::TotalDigits)) { + const XsdFacet::Ptr totalDigitsFacet = facets.value(XsdFacet::TotalDigits); + const DerivedInteger<TypeNonNegativeInteger>::Ptr totalDigitsValue = totalDigitsFacet->value(); + + // @see http://www.w3.org/TR/xmlschema-2/#totalDigits-valid-restriction + if (simpleType->derivationMethod() == XsdSimpleType::DerivationRestriction) { + const XsdFacet::Hash baseFacets = m_context->facetsForType(simpleType->wxsSuperType()); + if (baseFacets.contains(XsdFacet::TotalDigits)) { + const XsdFacet::Ptr baseFacet = baseFacets.value(XsdFacet::TotalDigits); + const DerivedInteger<TypeNonNegativeInteger>::Ptr baseValue = baseFacet->value(); + + if (totalDigitsValue->toInteger() > baseValue->toInteger()) { + m_context->error(QtXmlPatterns::tr("%1 facet must be less than or equal to %2 facet of base type") + .arg(formatKeyword("totalDigits")) + .arg(formatKeyword("totalDigits")), + XsdSchemaContext::XSDError, sourceLocation(simpleType)); + return; + } + } + } + } + if (facets.contains(XsdFacet::FractionDigits)) { + const XsdFacet::Ptr fractionDigitsFacet = facets.value(XsdFacet::FractionDigits); + const DerivedInteger<TypeNonNegativeInteger>::Ptr fractionDigitsValue = fractionDigitsFacet->value(); + + // http://www.w3.org/TR/xmlschema-2/#fractionDigits-totalDigits + if (facets.contains(XsdFacet::TotalDigits)) { + const XsdFacet::Ptr totalDigitsFacet = facets.value(XsdFacet::TotalDigits); + const DerivedInteger<TypeNonNegativeInteger>::Ptr totalDigitsValue = totalDigitsFacet->value(); + + if (fractionDigitsValue->toInteger() > totalDigitsValue->toInteger()) { + m_context->error(QtXmlPatterns::tr("%1 facet must be less than or equal to %2 facet") + .arg(formatKeyword("fractionDigits")) + .arg(formatKeyword("totalDigits")), + XsdSchemaContext::XSDError, sourceLocation(simpleType)); + return; + } + } + + // @see http://www.w3.org/TR/xmlschema-2/#fractionDigits-valid-restriction + if (simpleType->derivationMethod() == XsdSimpleType::DerivationRestriction) { + const XsdFacet::Hash baseFacets = m_context->facetsForType(simpleType->wxsSuperType()); + if (baseFacets.contains(XsdFacet::FractionDigits)) { + const XsdFacet::Ptr baseFacet = baseFacets.value(XsdFacet::FractionDigits); + const DerivedInteger<TypeNonNegativeInteger>::Ptr baseValue = baseFacet->value(); + + if (fractionDigitsValue->toInteger() > baseValue->toInteger()) { + m_context->error(QtXmlPatterns::tr("%1 facet must be less than or equal to %2 facet of base type") + .arg(formatKeyword("fractionDigits")) + .arg(formatKeyword("fractionDigits")), + XsdSchemaContext::XSDError, sourceLocation(simpleType)); + return; + } + } + } + } + + + // check whether facets are allowed for simple types variety + if (simpleType->wxsSuperType()->category() == SchemaType::SimpleTypeAtomic) { + if (simpleType->primitiveType()) { + const QXmlName primitiveTypeName = simpleType->primitiveType()->name(m_namePool); + if (m_allowedAtomicFacets.contains(primitiveTypeName)) { + const QSet<XsdFacet::Type> allowedFacets = m_allowedAtomicFacets.value(primitiveTypeName); + QSet<XsdFacet::Type> availableFacets = facets.keys().toSet(); + + if (!availableFacets.subtract(allowedFacets).isEmpty()) { + m_context->error(QtXmlPatterns::tr("simple type contains not allowed facet %1") + .arg(formatKeyword(XsdFacet::typeName(availableFacets.toList().first()))), + XsdSchemaContext::XSDError, sourceLocation(simpleType)); + return; + } + } + } + } else if (simpleType->wxsSuperType()->category() == SchemaType::SimpleTypeList) { + if (facets.contains(XsdFacet::MaximumInclusive) || facets.contains(XsdFacet::MinimumInclusive) || + facets.contains(XsdFacet::MaximumExclusive) || facets.contains(XsdFacet::MinimumExclusive) || + facets.contains(XsdFacet::TotalDigits) || facets.contains(XsdFacet::FractionDigits)) + { + m_context->error(QtXmlPatterns::tr("%1, %2, %3, %4, %5 and %6 facets are not allowed when derived by list") + .arg(formatKeyword("maxInclusive")) + .arg(formatKeyword("maxExclusive")) + .arg(formatKeyword("minInclusive")) + .arg(formatKeyword("minExclusive")) + .arg(formatKeyword("totalDigits")) + .arg(formatKeyword("fractionDigits")), + XsdSchemaContext::XSDError, sourceLocation(simpleType)); + } + } else if (simpleType->wxsSuperType()->category() == SchemaType::SimpleTypeUnion) { + if (facets.contains(XsdFacet::MaximumInclusive) || facets.contains(XsdFacet::MinimumInclusive) || + facets.contains(XsdFacet::MaximumExclusive) || facets.contains(XsdFacet::MinimumExclusive) || + facets.contains(XsdFacet::TotalDigits) || facets.contains(XsdFacet::FractionDigits) || + facets.contains(XsdFacet::MinimumLength) || facets.contains(XsdFacet::MaximumLength) || + facets.contains(XsdFacet::Length) || facets.contains(XsdFacet::WhiteSpace)) + { + m_context->error(QtXmlPatterns::tr("only %1 and %2 facets are allowed when derived by union") + .arg(formatKeyword("pattern")) + .arg(formatKeyword("enumeration")), + XsdSchemaContext::XSDError, sourceLocation(simpleType)); + } + } + + // check whether value of facet matches the value space of the simple types base type + const SchemaType::Ptr baseType = simpleType->wxsSuperType(); + if (!baseType->isDefinedBySchema()) { + const XsdSchemaSourceLocationReflection reflection(sourceLocation(simpleType)); + + XsdFacet::HashIterator it(facets); + while (it.hasNext()) { + it.next(); + const XsdFacet::Ptr facet = it.value(); + if (facet->type() == XsdFacet::MaximumInclusive || + facet->type() == XsdFacet::MaximumExclusive || + facet->type() == XsdFacet::MinimumInclusive || + facet->type() == XsdFacet::MinimumExclusive) { + const DerivedString<TypeString>::Ptr stringValue = facet->value(); + const AtomicValue::Ptr value = ValueFactory::fromLexical(stringValue->stringValue(), baseType, m_context, &reflection); + if (value->hasError()) { + m_context->error(QtXmlPatterns::tr("%1 contains %2 facet with invalid data: %3") + .arg(formatType(m_namePool, simpleType)) + .arg(formatKeyword(XsdFacet::typeName(facet->type()))) + .arg(formatData(stringValue->stringValue())), + XsdSchemaContext::XSDError, sourceLocation(simpleType)); + return; + } + } + + // @see http://www.w3.org/TR/xmlschema-2/#enumeration-valid-restriction + if (facet->type() == XsdFacet::Enumeration && baseType != BuiltinTypes::xsNOTATION) { + const AtomicValue::List multiValue = facet->multiValue(); + for (int j = 0; j < multiValue.count(); ++j) { + const QString stringValue = DerivedString<TypeString>::Ptr(multiValue.at(j))->stringValue(); + const AtomicValue::Ptr value = ValueFactory::fromLexical(stringValue, baseType, m_context, &reflection); + if (value->hasError()) { + m_context->error(QtXmlPatterns::tr("%1 contains %2 facet with invalid data: %3") + .arg(formatType(m_namePool, simpleType)) + .arg(formatKeyword(XsdFacet::typeName(XsdFacet::Enumeration))) + .arg(formatData(stringValue)), + XsdSchemaContext::XSDError, sourceLocation(simpleType)); + return; + } + } + } + } + } +} + +void XsdSchemaChecker::checkDuplicatedAttributeUses() +{ + // first all global attribute groups + const XsdAttributeGroup::List attributeGroups = m_schema->attributeGroups(); + for (int i = 0; i < attributeGroups.count(); ++i) { + const XsdAttributeGroup::Ptr attributeGroup = attributeGroups.at(i); + const XsdAttributeUse::List uses = attributeGroup->attributeUses(); + + // @see http://www.w3.org/TR/xmlschema11-1/#ct-props-correct 4) + XsdAttribute::Ptr conflictingAttribute; + if (hasDuplicatedAttributeUses(uses, conflictingAttribute)) { + m_context->error(QtXmlPatterns::tr("attribute group %1 contains attribute %2 twice") + .arg(formatKeyword(attributeGroup->displayName(m_namePool))) + .arg(formatKeyword(conflictingAttribute->displayName(m_namePool))), + XsdSchemaContext::XSDError, sourceLocation(attributeGroup)); + return; + } + + // @see http://www.w3.org/TR/xmlschema11-1/#ct-props-correct 5) + if (hasMultipleIDAttributeUses(uses)) { + m_context->error(QtXmlPatterns::tr("attribute group %1 contains two different attributes that both have types derived from %2") + .arg(formatKeyword(attributeGroup->displayName(m_namePool))) + .arg(formatType(m_namePool, BuiltinTypes::xsID)), + XsdSchemaContext::XSDError, sourceLocation(attributeGroup)); + return; + } + + if (hasConstraintIDAttributeUse(uses, conflictingAttribute)) { + m_context->error(QtXmlPatterns::tr("attribute group %1 contains attribute %2 that has value constraint but type that inherits from %3") + .arg(formatKeyword(attributeGroup->displayName(m_namePool))) + .arg(formatKeyword(conflictingAttribute->displayName(m_namePool))) + .arg(formatType(m_namePool, BuiltinTypes::xsID)), + XsdSchemaContext::XSDError, sourceLocation(attributeGroup)); + return; + } + } + + // then the global and anonymous complex types + SchemaType::List types = m_schema->types(); + types << m_schema->anonymousTypes(); + + for (int i = 0; i < types.count(); ++i) { + if (!(types.at(i)->isComplexType()) || !types.at(i)->isDefinedBySchema()) + continue; + + const XsdComplexType::Ptr complexType = types.at(i); + const XsdAttributeUse::List attributeUses = complexType->attributeUses(); + + // @see http://www.w3.org/TR/xmlschema11-1/#ct-props-correct 4) + XsdAttribute::Ptr conflictingAttribute; + if (hasDuplicatedAttributeUses(attributeUses, conflictingAttribute)) { + m_context->error(QtXmlPatterns::tr("complex type %1 contains attribute %2 twice") + .arg(formatType(m_namePool, complexType)) + .arg(formatKeyword(conflictingAttribute->displayName(m_namePool))), + XsdSchemaContext::XSDError, sourceLocation(complexType)); + return; + } + + // @see http://www.w3.org/TR/xmlschema11-1/#ct-props-correct 5) + if (hasMultipleIDAttributeUses(attributeUses)) { + m_context->error(QtXmlPatterns::tr("complex type %1 contains two different attributes that both have types derived from %2") + .arg(formatType(m_namePool, complexType)) + .arg(formatType(m_namePool, BuiltinTypes::xsID)), + XsdSchemaContext::XSDError, sourceLocation(complexType)); + return; + } + + if (hasConstraintIDAttributeUse(attributeUses, conflictingAttribute)) { + m_context->error(QtXmlPatterns::tr("complex type %1 contains attribute %2 that has value constraint but type that inherits from %3") + .arg(formatType(m_namePool, complexType)) + .arg(formatKeyword(conflictingAttribute->displayName(m_namePool))) + .arg(formatType(m_namePool, BuiltinTypes::xsID)), + XsdSchemaContext::XSDError, sourceLocation(complexType)); + return; + } + } +} + +void XsdSchemaChecker::checkElementConstraints() +{ + const QSet<XsdElement::Ptr> elements = collectAllElements(m_schema); + QSetIterator<XsdElement::Ptr> it(elements); + while (it.hasNext()) { + const XsdElement::Ptr element = it.next(); + + // @see http://www.w3.org/TR/xmlschema11-1/#e-props-correct + + // 2 and xs:ID check + if (element->valueConstraint()) { + const SchemaType::Ptr type = element->type(); + + AnySimpleType::Ptr targetType; + if (type->isSimpleType() && type->category() == SchemaType::SimpleTypeAtomic) { + targetType = type; + + // if it is a XsdSimpleType, use its primitive type as target type + if (type->isDefinedBySchema()) + targetType = XsdSimpleType::Ptr(type)->primitiveType(); + + } else if (type->isComplexType() && type->isDefinedBySchema()) { + const XsdComplexType::Ptr complexType(type); + + if (complexType->contentType()->variety() == XsdComplexType::ContentType::Simple) { + const AnySimpleType::Ptr simpleType = complexType->contentType()->simpleType(); + if (simpleType->category() == AnySimpleType::SimpleTypeAtomic) { + targetType = simpleType; + + if (simpleType->isDefinedBySchema()) + targetType = XsdSimpleType::Ptr(simpleType)->primitiveType(); + } + } else if (complexType->contentType()->variety() != XsdComplexType::ContentType::Mixed) { + m_context->error(QtXmlPatterns::tr("element %1 is not allowed to have a value constraint if its base type is complex") + .arg(formatKeyword(element->displayName(m_namePool))), + XsdSchemaContext::XSDError, sourceLocation(element)); + return; + } + } + if ((targetType == BuiltinTypes::xsID) || BuiltinTypes::xsID->wxsTypeMatches(type)) { + m_context->error(QtXmlPatterns::tr("element %1 is not allowed to have a value constraint if its type is derived from %2") + .arg(formatKeyword(element->displayName(m_namePool))) + .arg(formatType(m_namePool, BuiltinTypes::xsID)), + XsdSchemaContext::XSDError, sourceLocation(element)); + return; + } + + if (type->isSimpleType()) { + QString errorMsg; + if (!isValidValue(element->valueConstraint()->value(), type, errorMsg)) { + m_context->error(QtXmlPatterns::tr("value constraint of element %1 is not of elements type: %2") + .arg(formatKeyword(element->displayName(m_namePool))) + .arg(errorMsg), + XsdSchemaContext::XSDError, sourceLocation(element)); + return; + } + } else if (type->isComplexType() && type->isDefinedBySchema()) { + const XsdComplexType::Ptr complexType(type); + if (complexType->contentType()->variety() == XsdComplexType::ContentType::Simple) { + QString errorMsg; + if (!isValidValue(element->valueConstraint()->value(), complexType->contentType()->simpleType(), errorMsg)) { + m_context->error(QtXmlPatterns::tr("value constraint of element %1 is not of elements type: %2") + .arg(formatKeyword(element->displayName(m_namePool))) + .arg(errorMsg), + XsdSchemaContext::XSDError, sourceLocation(element)); + return; + } + } + } + } + + if (!element->substitutionGroupAffiliations().isEmpty()) { + // 3 + if (!element->scope() || element->scope()->variety() != XsdElement::Scope::Global) { + m_context->error(QtXmlPatterns::tr("element %1 is not allowed to have substitution group affiliation as it is no global element").arg(formatKeyword(element->displayName(m_namePool))), + XsdSchemaContext::XSDError, sourceLocation(element)); + return; + } + + // 4 + const XsdElement::List affiliations = element->substitutionGroupAffiliations(); + for (int i = 0; i < affiliations.count(); ++i) { + const XsdElement::Ptr affiliation = affiliations.at(i); + + bool derivationOk = false; + if (element->type()->isComplexType() && affiliation->type()->isComplexType()) { + if (XsdSchemaHelper::isComplexDerivationOk(element->type(), affiliation->type(), affiliation->substitutionGroupExclusions())) { + derivationOk = true; + } + } + if (element->type()->isComplexType() && affiliation->type()->isSimpleType()) { + if (XsdSchemaHelper::isComplexDerivationOk(element->type(), affiliation->type(), affiliation->substitutionGroupExclusions())) { + derivationOk = true; + } + } + if (element->type()->isSimpleType()) { + if (XsdSchemaHelper::isSimpleDerivationOk(element->type(), affiliation->type(), affiliation->substitutionGroupExclusions())) { + derivationOk = true; + } + } + + if (!derivationOk) { + m_context->error(QtXmlPatterns::tr("type of element %1 cannot be derived from type of substitution group affiliation").arg(formatKeyword(element->displayName(m_namePool))), + XsdSchemaContext::XSDError, sourceLocation(element)); + return; + } + } + + // 5 was checked in XsdSchemaResolver::resolveSubstitutionGroupAffiliations() already + } + } +} + +void XsdSchemaChecker::checkAttributeConstraints() +{ + // all global attributes + XsdAttribute::List attributes = m_schema->attributes(); + + // and all local attributes + SchemaType::List types = m_schema->types(); + types << m_schema->anonymousTypes(); + + for (int i = 0; i < types.count(); ++i) { + if (!types.at(i)->isComplexType() || !types.at(i)->isDefinedBySchema()) + continue; + + const XsdComplexType::Ptr complexType(types.at(i)); + const XsdAttributeUse::List uses = complexType->attributeUses(); + for (int j = 0; j < uses.count(); ++j) + attributes.append(uses.at(j)->attribute()); + } + + for (int i = 0; i < attributes.count(); ++i) { + const XsdAttribute::Ptr attribute = attributes.at(i); + + if (!attribute->valueConstraint()) + continue; + + if (attribute->valueConstraint()->variety() == XsdAttribute::ValueConstraint::Default || attribute->valueConstraint()->variety() == XsdAttribute::ValueConstraint::Fixed) { + const SchemaType::Ptr type = attribute->type(); + + QString errorMsg; + if (!isValidValue(attribute->valueConstraint()->value(), attribute->type(), errorMsg)) { + m_context->error(QtXmlPatterns::tr("value constraint of attribute %1 is not of attributes type: %2") + .arg(formatKeyword(attribute->displayName(m_namePool))) + .arg(errorMsg), + XsdSchemaContext::XSDError, sourceLocation(attribute)); + return; + } + } + + if (BuiltinTypes::xsID->wxsTypeMatches(attribute->type())) { + m_context->error(QtXmlPatterns::tr("attribute %1 has value constraint but has type derived from %2") + .arg(formatKeyword(attribute->displayName(m_namePool))) + .arg(formatType(m_namePool, BuiltinTypes::xsID)), + XsdSchemaContext::XSDError, sourceLocation(attribute)); + return; + } + } +} + +bool XsdSchemaChecker::isValidValue(const QString &stringValue, const AnySimpleType::Ptr &type, QString &errorMsg) const +{ + if (BuiltinTypes::xsAnySimpleType->name(m_namePool) == type->name(m_namePool)) + return true; // no need to check xs:anyType content + + const XsdFacet::Hash facets = XsdTypeChecker::mergedFacetsForType(type, m_context); + const QString actualValue = XsdTypeChecker::normalizedValue(stringValue, facets); + + const XsdTypeChecker checker(m_context, QVector<QXmlName>(), QSourceLocation(QUrl(QLatin1String("http://dummy.org")), 1, 1)); + return checker.isValidString(actualValue, type, errorMsg); +} + +void XsdSchemaChecker::checkAttributeUseConstraints() +{ + XsdComplexType::List complexTypes; + + SchemaType::List types = m_schema->types(); + types << m_schema->anonymousTypes(); + + for (int i = 0; i < types.count(); ++i) { + const SchemaType::Ptr type = types.at(i); + if (type->isComplexType() && type->isDefinedBySchema()) + complexTypes.append(XsdComplexType::Ptr(type)); + } + + for (int i = 0; i < complexTypes.count(); ++i) { + const XsdComplexType::Ptr complexType(complexTypes.at(i)); + const SchemaType::Ptr baseType = complexType->wxsSuperType(); + if (!baseType || !baseType->isComplexType() || !baseType->isDefinedBySchema()) + continue; + + const XsdComplexType::Ptr complexBaseType(baseType); + + const XsdAttributeUse::List attributeUses = complexType->attributeUses(); + QHash<QXmlName, XsdAttributeUse::Ptr> lookupHash; + for (int j = 0; j < attributeUses.count(); ++j) + lookupHash.insert(attributeUses.at(j)->attribute()->name(m_namePool), attributeUses.at(j)); + + const XsdAttributeUse::List baseAttributeUses = complexBaseType->attributeUses(); + for (int j = 0; j < baseAttributeUses.count(); ++j) { + const XsdAttributeUse::Ptr baseAttributeUse = baseAttributeUses.at(j); + + if (lookupHash.contains(baseAttributeUse->attribute()->name(m_namePool))) { + const XsdAttributeUse::Ptr attributeUse = lookupHash.value(baseAttributeUse->attribute()->name(m_namePool)); + + if (baseAttributeUse->useType() == XsdAttributeUse::RequiredUse) { + if (attributeUse->useType() == XsdAttributeUse::OptionalUse || attributeUse->useType() == XsdAttributeUse::ProhibitedUse) { + m_context->error(QtXmlPatterns::tr("%1 attribute in derived complex type must be %2 like in base type") + .arg(formatAttribute("use")) + .arg(formatData("required")), + XsdSchemaContext::XSDError, sourceLocation(complexType)); + return; + } + } + + if (baseAttributeUse->valueConstraint()) { + if (baseAttributeUse->valueConstraint()->variety() == XsdAttributeUse::ValueConstraint::Fixed) { + if (!attributeUse->valueConstraint()) { + m_context->error(QtXmlPatterns::tr("attribute %1 in derived complex type must have %2 value constraint like in base type") + .arg(formatKeyword(attributeUse->attribute()->displayName(m_namePool))) + .arg(formatData("fixed")), + XsdSchemaContext::XSDError, sourceLocation(complexType)); + return; + } else { + if (attributeUse->valueConstraint()->variety() == XsdAttributeUse::ValueConstraint::Fixed) { + const XsdTypeChecker checker(m_context, QVector<QXmlName>(), sourceLocation(complexType)); + if (!checker.valuesAreEqual(attributeUse->valueConstraint()->value(), baseAttributeUse->valueConstraint()->value(), attributeUse->attribute()->type())) { + m_context->error(QtXmlPatterns::tr("attribute %1 in derived complex type must have the same %2 value constraint like in base type") + .arg(formatKeyword(attributeUse->attribute()->displayName(m_namePool))) + .arg(formatData("fixed")), + XsdSchemaContext::XSDError, sourceLocation(complexType)); + return; + } + } else { + m_context->error(QtXmlPatterns::tr("attribute %1 in derived complex type must have %2 value constraint") + .arg(formatKeyword(attributeUse->attribute()->displayName(m_namePool))) + .arg(formatData("fixed")), + XsdSchemaContext::XSDError, sourceLocation(complexType)); + return; + } + } + } + } + } + } + + // additional check that process content property of attribute wildcard in derived type is + // not weaker than the wildcard in base type + const XsdWildcard::Ptr baseWildcard(complexBaseType->attributeWildcard()); + const XsdWildcard::Ptr derivedWildcard(complexType->attributeWildcard()); + if (baseWildcard && derivedWildcard) { + if (!XsdSchemaHelper::checkWildcardProcessContents(baseWildcard, derivedWildcard)) { + m_context->error(QtXmlPatterns::tr("processContent of base wildcard must be weaker than derived wildcard"), XsdSchemaContext::XSDError, sourceLocation(complexType)); + return; + } + } + } +} + +void XsdSchemaChecker::checkElementDuplicates() +{ + // check all global types... + SchemaType::List types = m_schema->types(); + + // .. and anonymous types + types << m_schema->anonymousTypes(); + + for (int i = 0; i < types.count(); ++i) { + const SchemaType::Ptr type = types.at(i); + + if (!type->isComplexType() || !type->isDefinedBySchema()) + continue; + + const XsdComplexType::Ptr complexType(type); + + if ((complexType->contentType()->variety() == XsdComplexType::ContentType::ElementOnly) || (complexType->contentType()->variety() == XsdComplexType::ContentType::Mixed)) { + DuplicatedElementMap elementMap; + DuplicatedWildcardMap wildcardMap; + + checkElementDuplicates(complexType->contentType()->particle(), elementMap, wildcardMap); + } + } +} + +void XsdSchemaChecker::checkElementDuplicates(const XsdParticle::Ptr &particle, DuplicatedElementMap &elementMap, DuplicatedWildcardMap &wildcardMap) +{ + if (particle->term()->isElement()) { + const XsdElement::Ptr element(particle->term()); + + if (elementMap.contains(element->name(m_namePool))) { + if (element->type() != elementMap.value(element->name(m_namePool))) { + m_context->error(QtXmlPatterns::tr("element %1 exists twice with different types") + .arg(formatKeyword(element->displayName(m_namePool))), + XsdSchemaContext::XSDError, sourceLocation(element)); + return; + } + } else { + elementMap.insert(element->name(m_namePool), element->type()); + } + + // check substitution group affiliation + const XsdElement::List substElements = element->substitutionGroupAffiliations(); + for (int i = 0; i < substElements.count(); ++i) { + const XsdElement::Ptr substElement = substElements.at(i); + if (elementMap.contains(substElement->name(m_namePool))) { + if (substElement->type() != elementMap.value(substElement->name(m_namePool))) { + m_context->error(QtXmlPatterns::tr("element %1 exists twice with different types") + .arg(formatKeyword(substElement->displayName(m_namePool))), + XsdSchemaContext::XSDError, sourceLocation(element)); + return; + } + } else { + elementMap.insert(substElement->name(m_namePool), substElement->type()); + } + } + } else if (particle->term()->isModelGroup()) { + const XsdModelGroup::Ptr group(particle->term()); + const XsdParticle::List particles = group->particles(); + for (int i = 0; i < particles.count(); ++i) + checkElementDuplicates(particles.at(i), elementMap, wildcardMap); + } else if (particle->term()->isWildcard()) { + const XsdWildcard::Ptr wildcard(particle->term()); + + bool error = false; + if (!wildcardMap.contains(wildcard->namespaceConstraint()->variety())) { + if (!wildcardMap.isEmpty()) + error = true; + } else { + const XsdWildcard::Ptr otherWildcard = wildcardMap.value(wildcard->namespaceConstraint()->variety()); + if ((wildcard->processContents() != otherWildcard->processContents()) || (wildcard->namespaceConstraint()->namespaces() != otherWildcard->namespaceConstraint()->namespaces())) + error = true; + } + + if (error) { + m_context->error(QtXmlPatterns::tr("particle contains non-deterministic wildcards"), XsdSchemaContext::XSDError, sourceLocation(wildcard)); + return; + } else { + wildcardMap.insert(wildcard->namespaceConstraint()->variety(), wildcard); + } + } +} + +QSourceLocation XsdSchemaChecker::sourceLocation(const NamedSchemaComponent::Ptr &component) const +{ + if (m_componentLocationHash.contains(component)) { + return m_componentLocationHash.value(component); + } else { + QSourceLocation location; + location.setLine(1); + location.setColumn(1); + location.setUri(QString::fromLatin1("dummyUri")); + + return location; + } +} + +QSourceLocation XsdSchemaChecker::sourceLocationForType(const SchemaType::Ptr &type) const +{ + if (type->isSimpleType()) + return sourceLocation(XsdSimpleType::Ptr(type)); + else + return sourceLocation(XsdComplexType::Ptr(type)); +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/schema/qxsdschemachecker_helper.cpp b/src/xmlpatterns/schema/qxsdschemachecker_helper.cpp new file mode 100644 index 0000000..28957b7 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdschemachecker_helper.cpp @@ -0,0 +1,306 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +bool XsdSchemaChecker::hasDuplicatedAttributeUses(const XsdAttributeUse::List &list, XsdAttribute::Ptr &conflictingAttribute) const +{ + const int length = list.count(); + + for (int i = 0; i < length; ++i) { + for (int j = 0; j < length; ++j) { + if (i == j) + continue; + + if (list.at(i)->attribute()->name(m_namePool) == list.at(j)->attribute()->name(m_namePool)) { + conflictingAttribute = list.at(i)->attribute(); + return true; + } + } + } + + return false; +} + +bool XsdSchemaChecker::hasMultipleIDAttributeUses(const XsdAttributeUse::List &list) const +{ + const int length = list.count(); + + bool hasIdDerivedAttribute = false; + for (int i = 0; i < length; ++i) { + if (BuiltinTypes::xsID->wxsTypeMatches(list.at(i)->attribute()->type())) { + if (hasIdDerivedAttribute) + return true; + else + hasIdDerivedAttribute = true; + } + } + + return false; +} + +bool XsdSchemaChecker::hasConstraintIDAttributeUse(const XsdAttributeUse::List &list, XsdAttribute::Ptr &conflictingAttribute) const +{ + const int length = list.count(); + + for (int i = 0; i < length; ++i) { + const XsdAttributeUse::Ptr attributeUse(list.at(i)); + if (BuiltinTypes::xsID->wxsTypeMatches(attributeUse->attribute()->type())) { + if (attributeUse->valueConstraint()) { + conflictingAttribute = attributeUse->attribute(); + return true; + } + } + } + + return false; +} + +bool XsdSchemaChecker::particleEqualsRecursively(const XsdParticle::Ptr &particle, const XsdParticle::Ptr &otherParticle) const +{ + // @see http://www.w3.org/TR/xmlschema11-1/#cos-particle-extend + //TODO: find out what 'properties' of a particle should be checked here... + + if (particle->minimumOccurs() != otherParticle->minimumOccurs()) + return false; + + if (particle->maximumOccursUnbounded() != otherParticle->maximumOccursUnbounded()) + return false; + + if (particle->maximumOccurs() != otherParticle->maximumOccurs()) + return false; + + const XsdTerm::Ptr term = particle->term(); + const XsdTerm::Ptr otherTerm = otherParticle->term(); + + if (term->isElement() && !(otherTerm->isElement())) + return false; + + if (term->isModelGroup() && !(otherTerm->isModelGroup())) + return false; + + if (term->isWildcard() && !(otherTerm->isWildcard())) + return false; + + if (term->isElement()) { + const XsdElement::Ptr element = term; + const XsdElement::Ptr otherElement = otherTerm; + + if (element->name(m_namePool) != otherElement->name(m_namePool)) + return false; + + if (element->type()->name(m_namePool) != otherElement->type()->name(m_namePool)) + return false; + } + + if (term->isModelGroup()) { + const XsdModelGroup::Ptr group = term; + const XsdModelGroup::Ptr otherGroup = otherTerm; + + if (group->particles().count() != otherGroup->particles().count()) + return false; + + for (int i = 0; i < group->particles().count(); ++i) { + if (!particleEqualsRecursively(group->particles().at(i), otherGroup->particles().at(i))) + return false; + } + } + + if (term->isWildcard()) { + } + + return true; +} + +bool XsdSchemaChecker::isValidParticleExtension(const XsdParticle::Ptr &extension, const XsdParticle::Ptr &base) const +{ + // @see http://www.w3.org/TR/xmlschema11-1/#cos-particle-extend + + // 1 + if (extension == base) + return true; + + // 2 + if (extension->minimumOccurs() == 1 && extension->maximumOccurs() == 1 && extension->maximumOccursUnbounded() == false) { + if (extension->term()->isModelGroup()) { + const XsdModelGroup::Ptr modelGroup = extension->term(); + if (modelGroup->compositor() == XsdModelGroup::SequenceCompositor) { + if (particleEqualsRecursively(modelGroup->particles().first(), base)) + return true; + } + } + } + + // 3 + if (extension->minimumOccurs() == base->minimumOccurs()) { // 3.1 + if (extension->term()->isModelGroup() && base->term()->isModelGroup()) { + const XsdModelGroup::Ptr extensionGroup(extension->term()); + const XsdModelGroup::Ptr baseGroup(base->term()); + + if (extensionGroup->compositor() == XsdModelGroup::AllCompositor && baseGroup->compositor() == XsdModelGroup::AllCompositor) { + const XsdParticle::List extensionParticles = extensionGroup->particles(); + const XsdParticle::List baseParticles = baseGroup->particles(); + for (int i = 0; i < baseParticles.count() && i < extensionParticles.count(); ++i) { + if (baseParticles.at(i) != extensionParticles.at(i)) + return false; + } + } + } + } + + return false; +} + +QSet<XsdElement::Ptr> collectAllElements(const XsdParticle::Ptr &particle) +{ + QSet<XsdElement::Ptr> elements; + + const XsdTerm::Ptr term(particle->term()); + if (term->isElement()) { + elements.insert(XsdElement::Ptr(term)); + } else if (term->isModelGroup()) { + const XsdModelGroup::Ptr group(term); + + for (int i = 0; i < group->particles().count(); ++i) + elements.unite(collectAllElements(group->particles().at(i))); + } + + return elements; +} + +QSet<XsdElement::Ptr> collectAllElements(const XsdSchema::Ptr &schema) +{ + QSet<XsdElement::Ptr> elements; + + // collect global elements + const XsdElement::List elementList = schema->elements(); + for (int i = 0; i < elementList.count(); ++i) + elements.insert(elementList.at(i)); + + // collect all elements from global groups + const XsdModelGroup::List groupList = schema->elementGroups(); + for (int i = 0; i < groupList.count(); ++i) { + const XsdModelGroup::Ptr group(groupList.at(i)); + + for (int j = 0; j < group->particles().count(); ++j) + elements.unite(collectAllElements(group->particles().at(j))); + } + + // collect all elements from complex type definitions + SchemaType::List types; + types << schema->types() << schema->anonymousTypes(); + + for (int i = 0; i < types.count(); ++i) { + if (types.at(i)->isComplexType() && types.at(i)->isDefinedBySchema()) { + const XsdComplexType::Ptr complexType(types.at(i)); + if (complexType->contentType()->particle()) + elements.unite(collectAllElements(complexType->contentType()->particle())); + } + } + + return elements; +} + +bool XsdSchemaChecker::elementSequenceAccepted(const XsdModelGroup::Ptr &sequence, const XsdParticle::Ptr &particle) const +{ + // @see http://www.w3.org/TR/xmlschema11-1/#cvc-accept + + if (particle->term()->isWildcard()) { // 1 + const XsdWildcard::Ptr wildcard(particle->term()); + + // 1.1 + if ((unsigned int)sequence->particles().count() < particle->minimumOccurs()) + return false; + + // 1.2 + if (!particle->maximumOccursUnbounded()) { + if ((unsigned int)sequence->particles().count() > particle->maximumOccurs()) + return false; + } + + // 1.3 + const XsdParticle::List particles(sequence->particles()); + for (int i = 0; i < particles.count(); ++i) { + if (particles.at(i)->term()->isElement()) { + if (!XsdSchemaHelper::wildcardAllowsExpandedName(XsdElement::Ptr(particles.at(i)->term())->name(m_namePool), wildcard, m_namePool)) + return false; + } + } + } else if (particle->term()->isElement()) { // 2 + const XsdElement::Ptr element(particle->term()); + + // 2.1 + if ((unsigned int)sequence->particles().count() < particle->minimumOccurs()) + return false; + + // 2.2 + if (!particle->maximumOccursUnbounded()) { + if ((unsigned int)sequence->particles().count() > particle->maximumOccurs()) + return false; + } + + // 2.3 + const XsdParticle::List particles(sequence->particles()); + for (int i = 0; i < particles.count(); ++i) { + bool isValid = false; + if (particles.at(i)->term()->isElement()) { + const XsdElement::Ptr seqElement(particles.at(i)->term()); + + // 2.3.1 + if (element->name(m_namePool) == seqElement->name(m_namePool)) + isValid = true; + + // 2.3.2 + if (element->scope() && element->scope()->variety() == XsdElement::Scope::Global) { + if (!(element->disallowedSubstitutions() & NamedSchemaComponent::SubstitutionConstraint)) { + //TODO: continue + } + } + } + } + } + + return true; +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/schema/qxsdschemachecker_p.h b/src/xmlpatterns/schema/qxsdschemachecker_p.h new file mode 100644 index 0000000..843f909 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdschemachecker_p.h @@ -0,0 +1,284 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_XsdSchemaChecker_H +#define Patternist_XsdSchemaChecker_H + +#include "qschematype_p.h" +#include "qxsdattribute_p.h" +#include "qxsdattributegroup_p.h" +#include "qxsdelement_p.h" +#include "qxsdmodelgroup_p.h" +#include "qxsdnotation_p.h" +#include "qxsdschema_p.h" +#include "qxsdsimpletype_p.h" + +#include <QtCore/QExplicitlySharedDataPointer> + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +namespace QPatternist +{ + class XsdSchemaContext; + class XsdSchemaParserContext; + + /** + * @short Encapsulates the checking of schema valitity after reference resolving has finished. + * + * @ingroup Patternist_schema + * @author Tobias Koenig <tobias.koenig@trolltech.com> + */ + class XsdSchemaChecker : public QSharedData + { + public: + typedef QExplicitlySharedDataPointer<XsdSchemaChecker> Ptr; + + /** + * Creates a new schema checker. + * + * @param context The context that is used for customization. + * @param parserContext The context that contains all the data structures. + */ + XsdSchemaChecker(const QExplicitlySharedDataPointer<XsdSchemaContext> &context, const XsdSchemaParserContext *parserContext); + + /** + * Destroys the schema checker. + */ + ~XsdSchemaChecker(); + + /** + * Starts a basic check process. + * + * This check only validates the basic super type inheritance + * of simple and complex types. + */ + void basicCheck(); + + /** + * Starts the real check process. + */ + void check(); + + /** + * Checks the constraining facets of all global and anonymous simple types for validity. + */ + void checkConstrainingFacets(); + + /** + * Adds the component location hash, so the checker is able to report meaning full + * error messages. + */ + void addComponentLocationHash(const QHash<NamedSchemaComponent::Ptr, QSourceLocation> &hash); + + private: + void checkSimpleRestrictionBaseType(); + + /** + * Checks that no simple or complex type inherits itself. + */ + void checkBasicCircularInheritances(); + + /** + * Checks the advanced circular inheritance. + */ + void checkCircularInheritances(); + + /** + * Checks for inheritance restrictions given by final or finalDefault + * attributes. + */ + void checkInheritanceRestrictions(); + + /** + * Checks for various constraints for simple types defined by schema. + */ + void checkBasicSimpleTypeConstraints(); + void checkSimpleTypeConstraints(); + + /** + * Checks for various constraints for complex types defined by schema. + */ + void checkBasicComplexTypeConstraints(); + void checkComplexTypeConstraints(); + + /** + * Checks for list and union derivation restrictions given by final or finalDefault + * attributes. + */ + void checkSimpleDerivationRestrictions(); + + /** + * Checks the set of constraining @p facets that belongs to @p simpleType for validity. + */ + void checkConstrainingFacets(const XsdFacet::Hash &facets, const XsdSimpleType::Ptr &simpleType); + + /** + * Checks for duplicated attribute uses (attributes with the same name) inside a complex type. + */ + void checkDuplicatedAttributeUses(); + + /** + * Check the element constraints. + */ + void checkElementConstraints(); + + /** + * Check the attribute constraints. + */ + void checkAttributeConstraints(); + + /** + * Check the attribute use constraints. + */ + void checkAttributeUseConstraints(); + + /** + * A map used to find duplicated elements inside a model group. + */ + typedef QHash<QXmlName, SchemaType::Ptr> DuplicatedElementMap; + + /** + * A map used to find duplicated wildcards inside a model group. + */ + typedef QHash<XsdWildcard::NamespaceConstraint::Variety, XsdWildcard::Ptr> DuplicatedWildcardMap; + + /** + * Check for duplicated elements and element wildcards in all complex type particles. + */ + void checkElementDuplicates(); + + /** + * Check for duplicated elements and element wildcards in the given @p particle. + * + * @param particle The particle to check. + * @param elementMap A map to find the duplicated elements. + * @param wildcardMap A map to find the duplicated element wildcards. + */ + void checkElementDuplicates(const XsdParticle::Ptr &particle, DuplicatedElementMap &elementMap, DuplicatedWildcardMap &wildcardMap); + + /** + * Setup fast lookup list for allowed facets of atomic simple types. + */ + void setupAllowedAtomicFacets(); + + /** + * Returns the source location of the given schema @p component or a dummy + * source location if the component is not found in the component location hash. + */ + QSourceLocation sourceLocation(const NamedSchemaComponent::Ptr &component) const; + + /** + * Returns the source location of the given schema @p type or a dummy + * source location if the type is not found in the component location hash. + */ + QSourceLocation sourceLocationForType(const SchemaType::Ptr &type) const; + + /** + * Checks that the string @p value is valid according the value space of @p type + * for the given @p component. + */ + bool isValidValue(const QString &value, const AnySimpleType::Ptr &type, QString &errorMsg) const; + + /** + * Returns the list of facets for the given @p type. + */ + XsdFacet::Hash facetsForType(const SchemaType::Ptr &type) const; + + /** + * Returns whether the given @p list of attribute uses contains two (or more) attribute + * uses that point to attributes with the same name. @p conflictingAttribute + * will contain the conflicting attribute in that case. + */ + bool hasDuplicatedAttributeUses(const XsdAttributeUse::List &list, XsdAttribute::Ptr &conflictingAttribute) const; + + /** + * Returns whether the given @p list of attribute uses contains two (or more) attribute + * uses that have a type inherited by xs:ID. + */ + bool hasMultipleIDAttributeUses(const XsdAttributeUse::List &list) const; + + /** + * Returns whether the given @p list of attribute uses contains an attribute + * uses that has a type inherited by xs:ID with a value constraint. @p conflictingAttribute + * will contain the conflicting attribute in that case. + */ + bool hasConstraintIDAttributeUse(const XsdAttributeUse::List &list, XsdAttribute::Ptr &conflictingAttribute) const; + + /** + * Checks whether the @p particle equals the @p otherParticle recursively. + */ + bool particleEqualsRecursively(const XsdParticle::Ptr &particle, const XsdParticle::Ptr &otherParticle) const; + + /** + * Checks whether the @p extension particle is a valid extension of the @p base particle. + */ + bool isValidParticleExtension(const XsdParticle::Ptr &extension, const XsdParticle::Ptr &base) const; + + /** + * Checks whether the @p sequence of elements is accepted by the given @p particle. + */ + bool elementSequenceAccepted(const XsdModelGroup::Ptr &sequence, const XsdParticle::Ptr &particle) const; + + QExplicitlySharedDataPointer<XsdSchemaContext> m_context; + NamePool::Ptr m_namePool; + XsdSchema::Ptr m_schema; + QHash<QXmlName, QSet<XsdFacet::Type> > m_allowedAtomicFacets; + QHash<NamedSchemaComponent::Ptr, QSourceLocation> m_componentLocationHash; + }; +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/schema/qxsdschemachecker_setup.cpp b/src/xmlpatterns/schema/qxsdschemachecker_setup.cpp new file mode 100644 index 0000000..a36ecc2 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdschemachecker_setup.cpp @@ -0,0 +1,327 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxsdschemachecker_p.h" + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +void XsdSchemaChecker::setupAllowedAtomicFacets() +{ + // string + { + QSet<XsdFacet::Type> facets; + facets << XsdFacet::Length + << XsdFacet::MinimumLength + << XsdFacet::MaximumLength + << XsdFacet::Pattern + << XsdFacet::Enumeration + << XsdFacet::WhiteSpace + << XsdFacet::Assertion; + + m_allowedAtomicFacets.insert(BuiltinTypes::xsString->name(m_namePool), facets); + } + + // boolean + { + QSet<XsdFacet::Type> facets; + facets << XsdFacet::Pattern + << XsdFacet::WhiteSpace + << XsdFacet::Assertion; + + m_allowedAtomicFacets.insert(BuiltinTypes::xsBoolean->name(m_namePool), facets); + } + + // float + { + QSet<XsdFacet::Type> facets; + facets << XsdFacet::Pattern + << XsdFacet::Enumeration + << XsdFacet::WhiteSpace + << XsdFacet::MaximumInclusive + << XsdFacet::MaximumExclusive + << XsdFacet::MinimumInclusive + << XsdFacet::MinimumExclusive + << XsdFacet::Assertion; + + m_allowedAtomicFacets.insert(BuiltinTypes::xsFloat->name(m_namePool), facets); + } + + // double + { + QSet<XsdFacet::Type> facets; + facets << XsdFacet::Pattern + << XsdFacet::Enumeration + << XsdFacet::WhiteSpace + << XsdFacet::MaximumInclusive + << XsdFacet::MaximumExclusive + << XsdFacet::MinimumInclusive + << XsdFacet::MinimumExclusive + << XsdFacet::Assertion; + + m_allowedAtomicFacets.insert(BuiltinTypes::xsDouble->name(m_namePool), facets); + } + + // decimal + { + QSet<XsdFacet::Type> facets; + facets << XsdFacet::TotalDigits + << XsdFacet::FractionDigits + << XsdFacet::Pattern + << XsdFacet::Enumeration + << XsdFacet::WhiteSpace + << XsdFacet::MaximumInclusive + << XsdFacet::MaximumExclusive + << XsdFacet::MinimumInclusive + << XsdFacet::MinimumExclusive + << XsdFacet::Assertion; + + m_allowedAtomicFacets.insert(BuiltinTypes::xsDecimal->name(m_namePool), facets); + } + + // duration + { + QSet<XsdFacet::Type> facets; + facets << XsdFacet::Pattern + << XsdFacet::Enumeration + << XsdFacet::WhiteSpace + << XsdFacet::MaximumInclusive + << XsdFacet::MaximumExclusive + << XsdFacet::MinimumInclusive + << XsdFacet::MinimumExclusive + << XsdFacet::Assertion; + + m_allowedAtomicFacets.insert(BuiltinTypes::xsDuration->name(m_namePool), facets); + } + + // dateTime + { + QSet<XsdFacet::Type> facets; + facets << XsdFacet::Pattern + << XsdFacet::Enumeration + << XsdFacet::WhiteSpace + << XsdFacet::MaximumInclusive + << XsdFacet::MaximumExclusive + << XsdFacet::MinimumInclusive + << XsdFacet::MinimumExclusive + << XsdFacet::Assertion; + + m_allowedAtomicFacets.insert(BuiltinTypes::xsDateTime->name(m_namePool), facets); + } + + // time + { + QSet<XsdFacet::Type> facets; + facets << XsdFacet::Pattern + << XsdFacet::Enumeration + << XsdFacet::WhiteSpace + << XsdFacet::MaximumInclusive + << XsdFacet::MaximumExclusive + << XsdFacet::MinimumInclusive + << XsdFacet::MinimumExclusive + << XsdFacet::Assertion; + + m_allowedAtomicFacets.insert(BuiltinTypes::xsTime->name(m_namePool), facets); + } + + // date + { + QSet<XsdFacet::Type> facets; + facets << XsdFacet::Pattern + << XsdFacet::Enumeration + << XsdFacet::WhiteSpace + << XsdFacet::MaximumInclusive + << XsdFacet::MaximumExclusive + << XsdFacet::MinimumInclusive + << XsdFacet::MinimumExclusive + << XsdFacet::Assertion; + + m_allowedAtomicFacets.insert(BuiltinTypes::xsDate->name(m_namePool), facets); + } + + // gYearMonth + { + QSet<XsdFacet::Type> facets; + facets << XsdFacet::Pattern + << XsdFacet::Enumeration + << XsdFacet::WhiteSpace + << XsdFacet::MaximumInclusive + << XsdFacet::MaximumExclusive + << XsdFacet::MinimumInclusive + << XsdFacet::MinimumExclusive + << XsdFacet::Assertion; + + m_allowedAtomicFacets.insert(BuiltinTypes::xsGYearMonth->name(m_namePool), facets); + } + + // gYear + { + QSet<XsdFacet::Type> facets; + facets << XsdFacet::Pattern + << XsdFacet::Enumeration + << XsdFacet::WhiteSpace + << XsdFacet::MaximumInclusive + << XsdFacet::MaximumExclusive + << XsdFacet::MinimumInclusive + << XsdFacet::MinimumExclusive + << XsdFacet::Assertion; + + m_allowedAtomicFacets.insert(BuiltinTypes::xsGYear->name(m_namePool), facets); + } + + // gMonthDay + { + QSet<XsdFacet::Type> facets; + facets << XsdFacet::Pattern + << XsdFacet::Enumeration + << XsdFacet::WhiteSpace + << XsdFacet::MaximumInclusive + << XsdFacet::MaximumExclusive + << XsdFacet::MinimumInclusive + << XsdFacet::MinimumExclusive + << XsdFacet::Assertion; + + m_allowedAtomicFacets.insert(BuiltinTypes::xsGMonthDay->name(m_namePool), facets); + } + + // gDay + { + QSet<XsdFacet::Type> facets; + facets << XsdFacet::Pattern + << XsdFacet::Enumeration + << XsdFacet::WhiteSpace + << XsdFacet::MaximumInclusive + << XsdFacet::MaximumExclusive + << XsdFacet::MinimumInclusive + << XsdFacet::MinimumExclusive + << XsdFacet::Assertion; + + m_allowedAtomicFacets.insert(BuiltinTypes::xsGDay->name(m_namePool), facets); + } + + // gMonth + { + QSet<XsdFacet::Type> facets; + facets << XsdFacet::Pattern + << XsdFacet::Enumeration + << XsdFacet::WhiteSpace + << XsdFacet::MaximumInclusive + << XsdFacet::MaximumExclusive + << XsdFacet::MinimumInclusive + << XsdFacet::MinimumExclusive + << XsdFacet::Assertion; + + m_allowedAtomicFacets.insert(BuiltinTypes::xsGMonth->name(m_namePool), facets); + } + + // hexBinary + { + QSet<XsdFacet::Type> facets; + facets << XsdFacet::Length + << XsdFacet::MinimumLength + << XsdFacet::MaximumLength + << XsdFacet::Pattern + << XsdFacet::Enumeration + << XsdFacet::WhiteSpace + << XsdFacet::Assertion; + + m_allowedAtomicFacets.insert(BuiltinTypes::xsHexBinary->name(m_namePool), facets); + } + + // base64Binary + { + QSet<XsdFacet::Type> facets; + facets << XsdFacet::Length + << XsdFacet::MinimumLength + << XsdFacet::MaximumLength + << XsdFacet::Pattern + << XsdFacet::Enumeration + << XsdFacet::WhiteSpace + << XsdFacet::Assertion; + + m_allowedAtomicFacets.insert(BuiltinTypes::xsBase64Binary->name(m_namePool), facets); + } + + // anyURI + { + QSet<XsdFacet::Type> facets; + facets << XsdFacet::Length + << XsdFacet::MinimumLength + << XsdFacet::MaximumLength + << XsdFacet::Pattern + << XsdFacet::Enumeration + << XsdFacet::WhiteSpace + << XsdFacet::Assertion; + + m_allowedAtomicFacets.insert(BuiltinTypes::xsAnyURI->name(m_namePool), facets); + } + + // QName + { + QSet<XsdFacet::Type> facets; + facets << XsdFacet::Length + << XsdFacet::MinimumLength + << XsdFacet::MaximumLength + << XsdFacet::Pattern + << XsdFacet::Enumeration + << XsdFacet::WhiteSpace + << XsdFacet::Assertion; + + m_allowedAtomicFacets.insert(BuiltinTypes::xsQName->name(m_namePool), facets); + } + + // NOTATION + { + QSet<XsdFacet::Type> facets; + facets << XsdFacet::Length + << XsdFacet::MinimumLength + << XsdFacet::MaximumLength + << XsdFacet::Pattern + << XsdFacet::Enumeration + << XsdFacet::WhiteSpace + << XsdFacet::Assertion; + + m_allowedAtomicFacets.insert(BuiltinTypes::xsNOTATION->name(m_namePool), facets); + } +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/schema/qxsdschemacontext.cpp b/src/xmlpatterns/schema/qxsdschemacontext.cpp new file mode 100644 index 0000000..6d646bc --- /dev/null +++ b/src/xmlpatterns/schema/qxsdschemacontext.cpp @@ -0,0 +1,528 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxsdschemacontext_p.h" + +#include "qderivedinteger_p.h" +#include "qderivedstring_p.h" +#include "qxsdschematypesfactory_p.h" + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +XsdSchemaContext::XsdSchemaContext(const NamePool::Ptr &namePool) + : m_namePool(namePool) + , m_networkAccessManager(0) + , m_uriResolver(0) + , m_messageHandler(0) +{ +} + +NamePool::Ptr XsdSchemaContext::namePool() const +{ + return m_namePool; +} + +QUrl XsdSchemaContext::baseURI() const +{ + return m_baseURI; +} + +void XsdSchemaContext::setBaseURI(const QUrl &uri) +{ + m_baseURI = uri; +} + +void XsdSchemaContext::setNetworkAccessManager(QNetworkAccessManager *accessManager) +{ + m_networkAccessManager = accessManager; +} + +QNetworkAccessManager* XsdSchemaContext::networkAccessManager() const +{ + return m_networkAccessManager; +} + +void XsdSchemaContext::setMessageHandler(QAbstractMessageHandler *handler) +{ + m_messageHandler = handler; +} + +QAbstractMessageHandler* XsdSchemaContext::messageHandler() const +{ + return m_messageHandler; +} + +QSourceLocation XsdSchemaContext::locationFor(const SourceLocationReflection *const) const +{ + return QSourceLocation(); +} + +void XsdSchemaContext::setUriResolver(const QAbstractUriResolver *uriResolver) +{ + m_uriResolver = uriResolver; +} + +const QAbstractUriResolver* XsdSchemaContext::uriResolver() const +{ + return m_uriResolver; +} + +XsdFacet::Hash XsdSchemaContext::facetsForType(const AnySimpleType::Ptr &type) const +{ + if (type->isDefinedBySchema()) + return XsdSimpleType::Ptr(type)->facets(); + else { + if (m_builtinTypesFacetList.isEmpty()) + m_builtinTypesFacetList = setupBuiltinTypesFacetList(); + + return m_builtinTypesFacetList.value(type); + } +} + +SchemaTypeFactory::Ptr XsdSchemaContext::schemaTypeFactory() const +{ + if (!m_schemaTypeFactory) + m_schemaTypeFactory = SchemaTypeFactory::Ptr(new XsdSchemaTypesFactory(m_namePool)); + + return m_schemaTypeFactory; +} + +QHash<SchemaType::Ptr, XsdFacet::Hash> XsdSchemaContext::setupBuiltinTypesFacetList() const +{ + QHash<SchemaType::Ptr, XsdFacet::Hash> hash; + + const XsdFacet::Ptr fixedCollapseWhiteSpace(new XsdFacet()); + fixedCollapseWhiteSpace->setType(XsdFacet::WhiteSpace); + fixedCollapseWhiteSpace->setValue(DerivedString<TypeString>::fromLexical(m_namePool, XsdSchemaToken::toString(XsdSchemaToken::Collapse))); + fixedCollapseWhiteSpace->setFixed(true); + + const XsdFacet::Ptr collapseWhiteSpace(new XsdFacet()); + collapseWhiteSpace->setType(XsdFacet::WhiteSpace); + collapseWhiteSpace->setValue(DerivedString<TypeString>::fromLexical(m_namePool, XsdSchemaToken::toString(XsdSchemaToken::Collapse))); + collapseWhiteSpace->setFixed(false); + + const XsdFacet::Ptr preserveWhiteSpace(new XsdFacet()); + preserveWhiteSpace->setType(XsdFacet::WhiteSpace); + preserveWhiteSpace->setValue(DerivedString<TypeString>::fromLexical(m_namePool, XsdSchemaToken::toString(XsdSchemaToken::Preserve))); + preserveWhiteSpace->setFixed(false); + + const XsdFacet::Ptr replaceWhiteSpace(new XsdFacet()); + replaceWhiteSpace->setType(XsdFacet::WhiteSpace); + replaceWhiteSpace->setValue(DerivedString<TypeString>::fromLexical(m_namePool, XsdSchemaToken::toString(XsdSchemaToken::Replace))); + replaceWhiteSpace->setFixed(false); + + const XsdFacet::Ptr fixedZeroFractionDigits(new XsdFacet()); + fixedZeroFractionDigits->setType(XsdFacet::FractionDigits); + fixedZeroFractionDigits->setValue(DerivedInteger<TypeNonNegativeInteger>::fromValue(m_namePool, 0)); + fixedZeroFractionDigits->setFixed(true); + + { + XsdFacet::Hash &facets = hash[BuiltinTypes::xsString]; + facets.insert(preserveWhiteSpace->type(), preserveWhiteSpace); + } + + { + XsdFacet::Hash &facets = hash[BuiltinTypes::xsBoolean]; + facets.insert(fixedCollapseWhiteSpace->type(), fixedCollapseWhiteSpace); + } + + { + XsdFacet::Hash &facets = hash[BuiltinTypes::xsDecimal]; + facets.insert(fixedCollapseWhiteSpace->type(), fixedCollapseWhiteSpace); + } + + { + XsdFacet::Hash &facets = hash[BuiltinTypes::xsFloat]; + facets.insert(fixedCollapseWhiteSpace->type(), fixedCollapseWhiteSpace); + } + + { + XsdFacet::Hash &facets = hash[BuiltinTypes::xsDouble]; + facets.insert(fixedCollapseWhiteSpace->type(), fixedCollapseWhiteSpace); + } + + { + XsdFacet::Hash &facets = hash[BuiltinTypes::xsDuration]; + facets.insert(fixedCollapseWhiteSpace->type(), fixedCollapseWhiteSpace); + } + + { + XsdFacet::Hash &facets = hash[BuiltinTypes::xsDateTime]; + facets.insert(fixedCollapseWhiteSpace->type(), fixedCollapseWhiteSpace); + } + + { + XsdFacet::Hash &facets = hash[BuiltinTypes::xsTime]; + facets.insert(fixedCollapseWhiteSpace->type(), fixedCollapseWhiteSpace); + } + + { + XsdFacet::Hash &facets = hash[BuiltinTypes::xsDate]; + facets.insert(fixedCollapseWhiteSpace->type(), fixedCollapseWhiteSpace); + } + + { + XsdFacet::Hash &facets = hash[BuiltinTypes::xsGYearMonth]; + facets.insert(fixedCollapseWhiteSpace->type(), fixedCollapseWhiteSpace); + } + + { + XsdFacet::Hash &facets = hash[BuiltinTypes::xsGYear]; + facets.insert(fixedCollapseWhiteSpace->type(), fixedCollapseWhiteSpace); + } + + { + XsdFacet::Hash &facets = hash[BuiltinTypes::xsGMonthDay]; + facets.insert(fixedCollapseWhiteSpace->type(), fixedCollapseWhiteSpace); + } + + { + XsdFacet::Hash &facets = hash[BuiltinTypes::xsGDay]; + facets.insert(fixedCollapseWhiteSpace->type(), fixedCollapseWhiteSpace); + } + + { + XsdFacet::Hash &facets = hash[BuiltinTypes::xsGMonth]; + facets.insert(fixedCollapseWhiteSpace->type(), fixedCollapseWhiteSpace); + } + + { + XsdFacet::Hash &facets = hash[BuiltinTypes::xsHexBinary]; + facets.insert(fixedCollapseWhiteSpace->type(), fixedCollapseWhiteSpace); + } + + { + XsdFacet::Hash &facets = hash[BuiltinTypes::xsBase64Binary]; + facets.insert(fixedCollapseWhiteSpace->type(), fixedCollapseWhiteSpace); + } + + { + XsdFacet::Hash &facets = hash[BuiltinTypes::xsAnyURI]; + facets.insert(fixedCollapseWhiteSpace->type(), fixedCollapseWhiteSpace); + } + + { + XsdFacet::Hash &facets = hash[BuiltinTypes::xsQName]; + facets.insert(fixedCollapseWhiteSpace->type(), fixedCollapseWhiteSpace); + } + + { + XsdFacet::Hash &facets = hash[BuiltinTypes::xsNOTATION]; + facets.insert(fixedCollapseWhiteSpace->type(), fixedCollapseWhiteSpace); + } + + { + XsdFacet::Hash &facets = hash[BuiltinTypes::xsNormalizedString]; + facets.insert(replaceWhiteSpace->type(), replaceWhiteSpace); + } + + { + XsdFacet::Hash &facets = hash[BuiltinTypes::xsToken]; + facets.insert(collapseWhiteSpace->type(), collapseWhiteSpace); + } + + { + XsdFacet::Hash &facets = hash[BuiltinTypes::xsLanguage]; + facets.insert(collapseWhiteSpace->type(), collapseWhiteSpace); + + const XsdFacet::Ptr pattern(new XsdFacet()); + pattern->setType(XsdFacet::Pattern); + pattern->setMultiValue(AtomicValue::List() << DerivedString<TypeString>::fromLexical(m_namePool, QString::fromLatin1("[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*"))); + facets.insert(pattern->type(), pattern); + } + + { + XsdFacet::Hash &facets = hash[BuiltinTypes::xsNMTOKEN]; + facets.insert(collapseWhiteSpace->type(), collapseWhiteSpace); + + const XsdFacet::Ptr pattern(new XsdFacet()); + pattern->setType(XsdFacet::Pattern); + pattern->setMultiValue(AtomicValue::List() << DerivedString<TypeString>::fromLexical(m_namePool, QString::fromLatin1("\\c+"))); + facets.insert(pattern->type(), pattern); + } + + { + XsdFacet::Hash &facets = hash[BuiltinTypes::xsName]; + facets.insert(collapseWhiteSpace->type(), collapseWhiteSpace); + + const XsdFacet::Ptr pattern(new XsdFacet()); + pattern->setType(XsdFacet::Pattern); + pattern->setMultiValue(AtomicValue::List() << DerivedString<TypeString>::fromLexical(m_namePool, QString::fromLatin1("\\i\\c*"))); + facets.insert(pattern->type(), pattern); + } + + const XsdFacet::Ptr ncNamePattern(new XsdFacet()); + { + ncNamePattern->setType(XsdFacet::Pattern); + AtomicValue::List patterns; + patterns << DerivedString<TypeString>::fromLexical(m_namePool, QString::fromLatin1("\\i\\c*")); + patterns << DerivedString<TypeString>::fromLexical(m_namePool, QString::fromLatin1("[\\i-[:]][\\c-[:]]*")); + ncNamePattern->setMultiValue(patterns); + } + + { + XsdFacet::Hash &facets = hash[BuiltinTypes::xsNCName]; + facets.insert(collapseWhiteSpace->type(), collapseWhiteSpace); + facets.insert(ncNamePattern->type(), ncNamePattern); + } + + { + XsdFacet::Hash &facets = hash[BuiltinTypes::xsID]; + facets.insert(collapseWhiteSpace->type(), collapseWhiteSpace); + facets.insert(ncNamePattern->type(), ncNamePattern); + } + + { + XsdFacet::Hash &facets = hash[BuiltinTypes::xsIDREF]; + facets.insert(collapseWhiteSpace->type(), collapseWhiteSpace); + facets.insert(ncNamePattern->type(), ncNamePattern); + } + + { + XsdFacet::Hash &facets = hash[BuiltinTypes::xsENTITY]; + facets.insert(collapseWhiteSpace->type(), collapseWhiteSpace); + facets.insert(ncNamePattern->type(), ncNamePattern); + } + + const XsdFacet::Ptr integerPattern(new XsdFacet()); + integerPattern->setType(XsdFacet::Pattern); + integerPattern->setMultiValue(AtomicValue::List() << DerivedString<TypeString>::fromLexical(m_namePool, QString::fromLatin1("[\\-+]?[0-9]+"))); + + { + XsdFacet::Hash &facets = hash[BuiltinTypes::xsInteger]; + facets.insert(fixedCollapseWhiteSpace->type(), fixedCollapseWhiteSpace); + facets.insert(fixedZeroFractionDigits->type(), fixedZeroFractionDigits); + facets.insert(integerPattern->type(), integerPattern); + } + + { + XsdFacet::Hash &facets = hash[BuiltinTypes::xsNonPositiveInteger]; + facets.insert(fixedCollapseWhiteSpace->type(), fixedCollapseWhiteSpace); + facets.insert(fixedZeroFractionDigits->type(), fixedZeroFractionDigits); + facets.insert(integerPattern->type(), integerPattern); + + const XsdFacet::Ptr maxInclusive(new XsdFacet()); + maxInclusive->setType(XsdFacet::MaximumInclusive); + maxInclusive->setValue(DerivedString<TypeString>::fromLexical(m_namePool, QString::fromLatin1("0"))); + facets.insert(maxInclusive->type(), maxInclusive); + } + + { + XsdFacet::Hash &facets = hash[BuiltinTypes::xsNegativeInteger]; + facets.insert(fixedCollapseWhiteSpace->type(), fixedCollapseWhiteSpace); + facets.insert(fixedZeroFractionDigits->type(), fixedZeroFractionDigits); + facets.insert(integerPattern->type(), integerPattern); + + const XsdFacet::Ptr maxInclusive(new XsdFacet()); + maxInclusive->setType(XsdFacet::MaximumInclusive); + maxInclusive->setValue(DerivedString<TypeString>::fromLexical(m_namePool, QString::fromLatin1("-1"))); + facets.insert(maxInclusive->type(), maxInclusive); + } + + { + XsdFacet::Hash &facets = hash[BuiltinTypes::xsLong]; + facets.insert(fixedCollapseWhiteSpace->type(), fixedCollapseWhiteSpace); + facets.insert(fixedZeroFractionDigits->type(), fixedZeroFractionDigits); + facets.insert(integerPattern->type(), integerPattern); + + const XsdFacet::Ptr maxInclusive(new XsdFacet()); + maxInclusive->setType(XsdFacet::MaximumInclusive); + maxInclusive->setValue(DerivedString<TypeString>::fromLexical(m_namePool, QString::fromLatin1("9223372036854775807"))); + facets.insert(maxInclusive->type(), maxInclusive); + + const XsdFacet::Ptr minInclusive(new XsdFacet()); + minInclusive->setType(XsdFacet::MinimumInclusive); + minInclusive->setValue(DerivedString<TypeString>::fromLexical(m_namePool, QString::fromLatin1("-9223372036854775808"))); + facets.insert(minInclusive->type(), minInclusive); + } + + { + XsdFacet::Hash &facets = hash[BuiltinTypes::xsInt]; + facets.insert(fixedCollapseWhiteSpace->type(), fixedCollapseWhiteSpace); + facets.insert(fixedZeroFractionDigits->type(), fixedZeroFractionDigits); + facets.insert(integerPattern->type(), integerPattern); + + const XsdFacet::Ptr maxInclusive(new XsdFacet()); + maxInclusive->setType(XsdFacet::MaximumInclusive); + maxInclusive->setValue(DerivedString<TypeString>::fromLexical(m_namePool, QString::fromLatin1("2147483647"))); + facets.insert(maxInclusive->type(), maxInclusive); + + const XsdFacet::Ptr minInclusive(new XsdFacet()); + minInclusive->setType(XsdFacet::MinimumInclusive); + minInclusive->setValue(DerivedString<TypeString>::fromLexical(m_namePool, QString::fromLatin1("-2147483648"))); + facets.insert(minInclusive->type(), minInclusive); + } + + { + XsdFacet::Hash &facets = hash[BuiltinTypes::xsShort]; + facets.insert(fixedCollapseWhiteSpace->type(), fixedCollapseWhiteSpace); + facets.insert(fixedZeroFractionDigits->type(), fixedZeroFractionDigits); + facets.insert(integerPattern->type(), integerPattern); + + const XsdFacet::Ptr maxInclusive(new XsdFacet()); + maxInclusive->setType(XsdFacet::MaximumInclusive); + maxInclusive->setValue(DerivedString<TypeString>::fromLexical(m_namePool, QString::fromLatin1("32767"))); + facets.insert(maxInclusive->type(), maxInclusive); + + const XsdFacet::Ptr minInclusive(new XsdFacet()); + minInclusive->setType(XsdFacet::MinimumInclusive); + minInclusive->setValue(DerivedString<TypeString>::fromLexical(m_namePool, QString::fromLatin1("-32768"))); + facets.insert(minInclusive->type(), minInclusive); + } + + { + XsdFacet::Hash &facets = hash[BuiltinTypes::xsByte]; + facets.insert(fixedCollapseWhiteSpace->type(), fixedCollapseWhiteSpace); + facets.insert(fixedZeroFractionDigits->type(), fixedZeroFractionDigits); + facets.insert(integerPattern->type(), integerPattern); + + const XsdFacet::Ptr maxInclusive(new XsdFacet()); + maxInclusive->setType(XsdFacet::MaximumInclusive); + maxInclusive->setValue(DerivedString<TypeString>::fromLexical(m_namePool, QString::fromLatin1("127"))); + facets.insert(maxInclusive->type(), maxInclusive); + + const XsdFacet::Ptr minInclusive(new XsdFacet()); + minInclusive->setType(XsdFacet::MinimumInclusive); + minInclusive->setValue(DerivedString<TypeString>::fromLexical(m_namePool, QString::fromLatin1("-128"))); + facets.insert(minInclusive->type(), minInclusive); + } + + const XsdFacet::Ptr unsignedMinInclusive(new XsdFacet()); + unsignedMinInclusive->setType(XsdFacet::MinimumInclusive); + unsignedMinInclusive->setValue(DerivedString<TypeString>::fromLexical(m_namePool, QString::fromLatin1("0"))); + + { + XsdFacet::Hash &facets = hash[BuiltinTypes::xsNonNegativeInteger]; + facets.insert(fixedCollapseWhiteSpace->type(), fixedCollapseWhiteSpace); + facets.insert(fixedZeroFractionDigits->type(), fixedZeroFractionDigits); + facets.insert(integerPattern->type(), integerPattern); + facets.insert(unsignedMinInclusive->type(), unsignedMinInclusive); + } + + { + XsdFacet::Hash &facets = hash[BuiltinTypes::xsUnsignedLong]; + facets.insert(fixedCollapseWhiteSpace->type(), fixedCollapseWhiteSpace); + facets.insert(fixedZeroFractionDigits->type(), fixedZeroFractionDigits); + facets.insert(integerPattern->type(), integerPattern); + facets.insert(unsignedMinInclusive->type(), unsignedMinInclusive); + + const XsdFacet::Ptr maxInclusive(new XsdFacet()); + maxInclusive->setType(XsdFacet::MaximumInclusive); + maxInclusive->setValue(DerivedString<TypeString>::fromLexical(m_namePool, QString::fromLatin1("18446744073709551615"))); + facets.insert(maxInclusive->type(), maxInclusive); + } + + { + XsdFacet::Hash &facets = hash[BuiltinTypes::xsUnsignedInt]; + facets.insert(fixedCollapseWhiteSpace->type(), fixedCollapseWhiteSpace); + facets.insert(fixedZeroFractionDigits->type(), fixedZeroFractionDigits); + facets.insert(integerPattern->type(), integerPattern); + facets.insert(unsignedMinInclusive->type(), unsignedMinInclusive); + + const XsdFacet::Ptr maxInclusive(new XsdFacet()); + maxInclusive->setType(XsdFacet::MaximumInclusive); + maxInclusive->setValue(DerivedString<TypeString>::fromLexical(m_namePool, QString::fromLatin1("4294967295"))); + facets.insert(maxInclusive->type(), maxInclusive); + } + + { + XsdFacet::Hash &facets = hash[BuiltinTypes::xsUnsignedShort]; + facets.insert(fixedCollapseWhiteSpace->type(), fixedCollapseWhiteSpace); + facets.insert(fixedZeroFractionDigits->type(), fixedZeroFractionDigits); + facets.insert(integerPattern->type(), integerPattern); + facets.insert(unsignedMinInclusive->type(), unsignedMinInclusive); + + const XsdFacet::Ptr maxInclusive(new XsdFacet()); + maxInclusive->setType(XsdFacet::MaximumInclusive); + maxInclusive->setValue(DerivedString<TypeString>::fromLexical(m_namePool, QString::fromLatin1("65535"))); + facets.insert(maxInclusive->type(), maxInclusive); + } + + { + XsdFacet::Hash &facets = hash[BuiltinTypes::xsUnsignedByte]; + facets.insert(fixedCollapseWhiteSpace->type(), fixedCollapseWhiteSpace); + facets.insert(fixedZeroFractionDigits->type(), fixedZeroFractionDigits); + facets.insert(integerPattern->type(), integerPattern); + facets.insert(unsignedMinInclusive->type(), unsignedMinInclusive); + + const XsdFacet::Ptr maxInclusive(new XsdFacet()); + maxInclusive->setType(XsdFacet::MaximumInclusive); + maxInclusive->setValue(DerivedString<TypeString>::fromLexical(m_namePool, QString::fromLatin1("255"))); + facets.insert(maxInclusive->type(), maxInclusive); + } + + { + XsdFacet::Hash &facets = hash[BuiltinTypes::xsPositiveInteger]; + facets.insert(fixedCollapseWhiteSpace->type(), fixedCollapseWhiteSpace); + facets.insert(fixedZeroFractionDigits->type(), fixedZeroFractionDigits); + + const XsdFacet::Ptr minInclusive(new XsdFacet()); + minInclusive->setType(XsdFacet::MinimumInclusive); + minInclusive->setValue(DerivedString<TypeString>::fromLexical(m_namePool, QString::fromLatin1("1"))); + facets.insert(minInclusive->type(), minInclusive); + } + + { + XsdFacet::Hash &facets = hash[BuiltinTypes::xsYearMonthDuration]; + facets.insert(fixedCollapseWhiteSpace->type(), fixedCollapseWhiteSpace); + + const XsdFacet::Ptr pattern(new XsdFacet()); + pattern->setType(XsdFacet::Pattern); + pattern->setMultiValue(AtomicValue::List() << DerivedString<TypeString>::fromLexical(m_namePool, QString::fromLatin1("[^DT]*"))); + facets.insert(pattern->type(), pattern); + } + + { + XsdFacet::Hash &facets = hash[BuiltinTypes::xsDayTimeDuration]; + facets.insert(fixedCollapseWhiteSpace->type(), fixedCollapseWhiteSpace); + + const XsdFacet::Ptr pattern(new XsdFacet()); + pattern->setType(XsdFacet::Pattern); + pattern->setMultiValue(AtomicValue::List() << DerivedString<TypeString>::fromLexical(m_namePool, QString::fromLatin1("[^YM]*(T.*)?"))); + facets.insert(pattern->type(), pattern); + } + + return hash; +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/schema/qxsdschemacontext_p.h b/src/xmlpatterns/schema/qxsdschemacontext_p.h new file mode 100644 index 0000000..9c00964 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdschemacontext_p.h @@ -0,0 +1,187 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_XsdSchemaContext_H +#define Patternist_XsdSchemaContext_H + +#include "qnamedschemacomponent_p.h" +#include "qreportcontext_p.h" +#include "qschematypefactory_p.h" +#include "qxsdschematoken_p.h" +#include "qxsdschema_p.h" +#include "qxsdschemachecker_p.h" +#include "qxsdschemaresolver_p.h" + +#include <QtCore/QUrl> +#include <QtNetwork/QNetworkAccessManager> +#include <QtXmlPatterns/QAbstractMessageHandler> + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +namespace QPatternist +{ + /** + * @short A context for schema parsing and validation. + * + * This class provides the infrastructure for error reporting and + * network access. Additionally it stores objects that are used by + * both, the parser and the validator. + * + * @ingroup Patternist_schema + * @author Tobias Koenig <tobias.koenig@trolltech.com> + */ + class XsdSchemaContext : public ReportContext + { + public: + /** + * A smart pointer wrapping XsdSchemaContext instances. + */ + typedef QExplicitlySharedDataPointer<XsdSchemaContext> Ptr; + + /** + * Creates a new schema context object. + * + * @param namePool The name pool all names belong to. + */ + XsdSchemaContext(const NamePool::Ptr &namePool); + + /** + * Returns the name pool of the schema context. + */ + virtual NamePool::Ptr namePool() const; + + /** + * Sets the base URI for the main schema. + * + * The main schema is the one that includes resp. imports + * all the other schema files. + */ + virtual void setBaseURI(const QUrl &uri); + + /** + * Returns the base URI of the main schema. + */ + virtual QUrl baseURI() const; + + /** + * Sets the network access manager that should be used + * to access referenced schema definitions. + */ + void setNetworkAccessManager(QNetworkAccessManager *accessManager); + + /** + * Returns the network access manager that is used to + * access referenced schema definitions. + */ + virtual QNetworkAccessManager* networkAccessManager() const; + + /** + * Sets the message @p handler used by the context for error reporting. + */ + void setMessageHandler(QAbstractMessageHandler *handler); + + /** + * Returns the message handler used by the context for + * error reporting. + */ + virtual QAbstractMessageHandler* messageHandler() const; + + /** + * Always returns an empty source location. + */ + virtual QSourceLocation locationFor(const SourceLocationReflection *const reflection) const; + + /** + * Sets the uri @p resolver that is used for resolving URIs in the + * schema parser. + */ + void setUriResolver(const QAbstractUriResolver *resolver); + + /** + * Returns the uri resolver that is used for resolving URIs in the + * schema parser. + */ + virtual const QAbstractUriResolver* uriResolver() const; + + /** + * Returns the list of facets for the given simple @p type. + */ + XsdFacet::Hash facetsForType(const AnySimpleType::Ptr &type) const; + + /** + * Returns a schema type factory that contains some predefined schema types. + */ + SchemaTypeFactory::Ptr schemaTypeFactory() const; + + /** + * The following variables should not be accessed directly. + */ + mutable SchemaTypeFactory::Ptr m_schemaTypeFactory; + mutable QHash<SchemaType::Ptr, XsdFacet::Hash> m_builtinTypesFacetList; + + private: + QHash<SchemaType::Ptr, XsdFacet::Hash> setupBuiltinTypesFacetList() const; + + NamePool::Ptr m_namePool; + QNetworkAccessManager* m_networkAccessManager; + QUrl m_baseURI; + const QAbstractUriResolver* m_uriResolver; + QAbstractMessageHandler* m_messageHandler; + }; +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/schema/qxsdschemadebugger.cpp b/src/xmlpatterns/schema/qxsdschemadebugger.cpp new file mode 100644 index 0000000..5d2d6f0 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdschemadebugger.cpp @@ -0,0 +1,226 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxsdschemadebugger_p.h" + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +XsdSchemaDebugger::XsdSchemaDebugger(const NamePool::Ptr &namePool) + : m_namePool(namePool) +{ +} + +void XsdSchemaDebugger::dumpParticle(const XsdParticle::Ptr &particle, int level) +{ + QString prefix; prefix.fill(QLatin1Char(' '), level); + + qDebug("%s min=%s max=%s", qPrintable(prefix), qPrintable(QString::number(particle->minimumOccurs())), + qPrintable(particle->maximumOccursUnbounded() ? QLatin1String("unbounded") : QString::number(particle->maximumOccurs()))); + + if (particle->term()->isElement()) { + qDebug("%selement (%s)", qPrintable(prefix), qPrintable(XsdElement::Ptr(particle->term())->displayName(m_namePool))); + } else if (particle->term()->isModelGroup()) { + const XsdModelGroup::Ptr group(particle->term()); + if (group->compositor() == XsdModelGroup::SequenceCompositor) { + qDebug("%ssequence", qPrintable(prefix)); + } else if (group->compositor() == XsdModelGroup::AllCompositor) { + qDebug("%sall", qPrintable(prefix)); + } else if (group->compositor() == XsdModelGroup::ChoiceCompositor) { + qDebug("%schoice", qPrintable(prefix)); + } + + for (int i = 0; i < group->particles().count(); ++i) + dumpParticle(group->particles().at(i), level + 5); + } else if (particle->term()->isWildcard()) { + XsdWildcard::Ptr wildcard(particle->term()); + qDebug("%swildcard (process=%d)", qPrintable(prefix), wildcard->processContents()); + } +} + +void XsdSchemaDebugger::dumpInheritance(const SchemaType::Ptr &type, int level) +{ + QString prefix; prefix.fill(QLatin1Char(' '), level); + qDebug("%s-->%s", qPrintable(prefix), qPrintable(type->displayName(m_namePool))); + if (type->wxsSuperType()) + dumpInheritance(type->wxsSuperType(), ++level); +} + +void XsdSchemaDebugger::dumpWildcard(const XsdWildcard::Ptr &wildcard) +{ + QVector<QString> varietyNames; + varietyNames.append(QLatin1String("Any")); + varietyNames.append(QLatin1String("Enumeration")); + varietyNames.append(QLatin1String("Not")); + + QVector<QString> processContentsNames; + processContentsNames.append(QLatin1String("Strict")); + processContentsNames.append(QLatin1String("Lax")); + processContentsNames.append(QLatin1String("Skip")); + + qDebug(" processContents: %s", qPrintable(processContentsNames.at((int)wildcard->processContents()))); + const XsdWildcard::NamespaceConstraint::Ptr constraint = wildcard->namespaceConstraint(); + qDebug(" variety: %s", qPrintable(varietyNames.at((int)constraint->variety()))); + if (constraint->variety() != XsdWildcard::NamespaceConstraint::Any) + qDebug() << " namespaces:" << constraint->namespaces(); +} + +void XsdSchemaDebugger::dumpType(const SchemaType::Ptr &type) +{ + if (type->isComplexType()) { + const XsdComplexType::Ptr complexType(type); + qDebug("\n+++ Complex Type +++"); + qDebug("Name: %s (abstract: %s)", qPrintable(complexType->displayName(m_namePool)), complexType->isAbstract() ? "yes" : "no"); + if (complexType->wxsSuperType()) + qDebug(" base type: %s", qPrintable(complexType->wxsSuperType()->displayName(m_namePool))); + else + qDebug(" base type: (none)"); + if (complexType->contentType()->variety() == XsdComplexType::ContentType::Empty) + qDebug(" content type: empty"); + if (complexType->contentType()->variety() == XsdComplexType::ContentType::Simple) + qDebug(" content type: simple"); + if (complexType->contentType()->variety() == XsdComplexType::ContentType::ElementOnly) + qDebug(" content type: element-only"); + if (complexType->contentType()->variety() == XsdComplexType::ContentType::Mixed) + qDebug(" content type: mixed"); + if (complexType->contentType()->variety() == XsdComplexType::ContentType::Simple) { + if (complexType->contentType()->simpleType()) + qDebug(" simple type: %s", qPrintable(complexType->contentType()->simpleType()->displayName(m_namePool))); + else + qDebug(" simple type: (none)"); + } + + const XsdAttributeUse::List uses = complexType->attributeUses(); + qDebug(" %d attributes", uses.count()); + for (int i = 0; i < uses.count(); ++i) { + qDebug(" attr: %s", qPrintable(uses.at(i)->attribute()->displayName(m_namePool))); + } + qDebug(" has attribute wildcard: %s", complexType->attributeWildcard() ? "yes" : "no"); + if (complexType->attributeWildcard()) { + dumpWildcard(complexType->attributeWildcard()); + } + + if (complexType->contentType()->particle()) { + dumpParticle(complexType->contentType()->particle(), 5); + } + } else { + qDebug("\n+++ Simple Type +++"); + qDebug("Name: %s", qPrintable(type->displayName(m_namePool))); + if (type->isDefinedBySchema()) { + const XsdSimpleType::Ptr simpleType(type); + if (simpleType->primitiveType()) + qDebug(" primitive type: %s", qPrintable(simpleType->primitiveType()->displayName(m_namePool))); + else + qDebug(" primitive type: (none)"); + } + dumpInheritance(type, 0); + } +} + + +void XsdSchemaDebugger::dumpElement(const XsdElement::Ptr &element) +{ + QStringList disallowedSubstGroup; + if (element->disallowedSubstitutions() & XsdElement::RestrictionConstraint) + disallowedSubstGroup << QLatin1String("restriction"); + if (element->disallowedSubstitutions() & XsdElement::ExtensionConstraint) + disallowedSubstGroup << QLatin1String("extension"); + if (element->disallowedSubstitutions() & XsdElement::SubstitutionConstraint) + disallowedSubstGroup << QLatin1String("substitution"); + + + qDebug() << "Name:" << element->displayName(m_namePool); + qDebug() << "IsAbstract:" << (element->isAbstract() ? "yes" : "no"); + qDebug() << "Type:" << element->type()->displayName(m_namePool); + qDebug() << "DisallowedSubstitutionGroups:" << disallowedSubstGroup.join(QLatin1String("' ")); +} + +void XsdSchemaDebugger::dumpAttribute(const XsdAttribute::Ptr &attribute) +{ + qDebug() << "Name:" << attribute->displayName(m_namePool); + qDebug() << "Type:" << attribute->type()->displayName(m_namePool); +} + +void XsdSchemaDebugger::dumpSchema(const XsdSchema::Ptr &schema) +{ + qDebug() << "------------------------------ Schema -------------------------------"; + + // elements + { + qDebug() << "Global Elements:"; + const XsdElement::List elements = schema->elements(); + for (int i = 0; i < elements.count(); ++i) { + dumpElement(elements.at(i)); + } + } + + // attributes + { + qDebug() << "Global Attributes:"; + const XsdAttribute::List attributes = schema->attributes(); + for (int i = 0; i < attributes.count(); ++i) { + dumpAttribute(attributes.at(i)); + } + } + + // types + { + qDebug() << "Global Types:"; + const SchemaType::List types = schema->types(); + for (int i = 0; i < types.count(); ++i) { + dumpType(types.at(i)); + } + } + + // anonymous types + { + qDebug() << "Anonymous Types:"; + const SchemaType::List types = schema->anonymousTypes(); + for (int i = 0; i < types.count(); ++i) { + dumpType(types.at(i)); + } + } + + qDebug() << "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"; +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/schema/qxsdschemadebugger_p.h b/src/xmlpatterns/schema/qxsdschemadebugger_p.h new file mode 100644 index 0000000..cc3f7de --- /dev/null +++ b/src/xmlpatterns/schema/qxsdschemadebugger_p.h @@ -0,0 +1,127 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_XsdSchemaDebugger_H +#define Patternist_XsdSchemaDebugger_H + +#include "qxsdschema_p.h" + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +namespace QPatternist +{ + /** + * A helper class to print out the structure of a compiled schema. + */ + class XsdSchemaDebugger + { + public: + /** + * Creates a new schema debugger. + * + * @param namePool The name pool that the schema uses. + */ + XsdSchemaDebugger(const NamePool::Ptr &namePool); + + /** + * Dumps the structure of the given @p particle. + * + * @param particle The particle to dump. + * @param level The level of indention. + */ + void dumpParticle(const XsdParticle::Ptr &particle, int level = 0); + + /** + * Dumps the inheritance path of the given @p type. + * + * @param type The type to dump. + * @param level The level of indention. + */ + void dumpInheritance(const SchemaType::Ptr &type, int level = 0); + + /** + * Dumps the structure of the given @p wildcard. + */ + void dumpWildcard(const XsdWildcard::Ptr &wildcard); + + /** + * Dumps the structure of the given @p type. + */ + void dumpType(const SchemaType::Ptr &type); + + /** + * Dumps the structure of the given @p element. + */ + void dumpElement(const XsdElement::Ptr &element); + + /** + * Dumps the structure of the given @p attribute. + */ + void dumpAttribute(const XsdAttribute::Ptr &attribute); + + /** + * Dumps the structure of the complete @p schema. + */ + void dumpSchema(const XsdSchema::Ptr &schema); + + private: + const NamePool::Ptr m_namePool; + }; + +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/schema/qxsdschemahelper.cpp b/src/xmlpatterns/schema/qxsdschemahelper.cpp new file mode 100644 index 0000000..70812b2 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdschemahelper.cpp @@ -0,0 +1,821 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxsdschemahelper_p.h" + +#include "qbuiltintypes_p.h" +#include "qvaluefactory_p.h" +#include "qxsdcomplextype_p.h" +#include "qxsdmodelgroup_p.h" +#include "qxsdsimpletype_p.h" +#include "qxsdtypechecker_p.h" + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +/* + * Calculates the effective total range minimum of the given @p particle as + * described by the algorithm in the schema spec. + */ +static inline unsigned int effectiveTotalRangeMinimum(const XsdParticle::Ptr &particle) +{ + const XsdModelGroup::Ptr group = particle->term(); + + if (group->compositor() == XsdModelGroup::ChoiceCompositor) { + // @see http://www.w3.org/TR/xmlschema11-1/# cos-choice-range + + int minValue = -1; + + const XsdParticle::List particles = group->particles(); + if (particles.isEmpty()) + minValue = 0; + + for (int i = 0; i < particles.count(); ++i) { + const XsdParticle::Ptr particle = particles.at(i); + + if (particle->term()->isElement() || particle->term()->isWildcard()) { + if (minValue == -1) { + minValue = particle->minimumOccurs(); + } else { + minValue = qMin((unsigned int)minValue, particle->minimumOccurs()); + } + } else if (particle->term()->isModelGroup()) { + if (minValue == -1) { + minValue = effectiveTotalRangeMinimum(particle); + } else { + minValue = qMin((unsigned int)minValue, effectiveTotalRangeMinimum(particle)); + } + } + } + + return (particle->minimumOccurs() * minValue); + + } else { + // @see http://www.w3.org/TR/xmlschema11-1/# cos-seq-range + + unsigned int sum = 0; + const XsdParticle::List particles = group->particles(); + for (int i = 0; i < particles.count(); ++i) { + const XsdParticle::Ptr particle = particles.at(i); + + if (particle->term()->isElement() || particle->term()->isWildcard()) + sum += particle->minimumOccurs(); + else if (particle->term()->isModelGroup()) + sum += effectiveTotalRangeMinimum(particle); + } + + return (particle->minimumOccurs() * sum); + } +} + +bool XsdSchemaHelper::isParticleEmptiable(const XsdParticle::Ptr &particle) +{ + // @see http://www.w3.org/TR/xmlschema11-1/#cos-group-emptiable + + if (particle->minimumOccurs() == 0) + return true; + + if (!(particle->term()->isModelGroup())) + return false; + + return (effectiveTotalRangeMinimum(particle) == 0); +} + +bool XsdSchemaHelper::wildcardAllowsNamespaceName(const QString &nameSpace, const XsdWildcard::NamespaceConstraint::Ptr &constraint) +{ + // @see http://www.w3.org/TR/xmlschema11-1/#cvc-wildcard-namespace + + // 1 + if (constraint->variety() == XsdWildcard::NamespaceConstraint::Any) + return true; + + // 2 + if (constraint->variety() == XsdWildcard::NamespaceConstraint::Not) { // 2.1 + if (!constraint->namespaces().contains(nameSpace)) // 2.2 + if (nameSpace != XsdWildcard::absentNamespace()) // 2.3 + return true; + } + + // 3 + if (constraint->variety() == XsdWildcard::NamespaceConstraint::Enumeration) { + if (constraint->namespaces().contains(nameSpace)) + return true; + } + + return false; +} + +bool XsdSchemaHelper::wildcardAllowsExpandedName(const QXmlName &name, const XsdWildcard::Ptr &wildcard, const NamePool::Ptr &namePool) +{ + // @see http://www.w3.org/TR/xmlschema11-1/#cvc-wildcard-name + + // 1 + if (!wildcardAllowsNamespaceName(namePool->stringForNamespace(name.namespaceURI()), wildcard->namespaceConstraint())) + return false; + + // 2, 3, 4 + //TODO: we have no disallowed namespace yet + + return true; +} + +// small helper function that should be available in Qt 4.6 +template<class T> +static inline bool containsSet(const QSet<T> &super, const QSet<T> &sub) +{ + QSetIterator<T> it(sub); + while (it.hasNext()) { + if (!super.contains(it.next())) + return false; + } + + return true; +} + +bool XsdSchemaHelper::isWildcardSubset(const XsdWildcard::Ptr &wildcard, const XsdWildcard::Ptr &otherWildcard) +{ + // @see http://www.w3.org/TR/xmlschema11-1/#cos-ns-subset + // wildcard =^ sub + // otherWildcard =^ super + + const XsdWildcard::NamespaceConstraint::Ptr constraint(wildcard->namespaceConstraint()); + const XsdWildcard::NamespaceConstraint::Ptr otherConstraint(otherWildcard->namespaceConstraint()); + + // 1 + if (otherConstraint->variety() == XsdWildcard::NamespaceConstraint::Any) + return true; + + // 2 + if ((constraint->variety() == XsdWildcard::NamespaceConstraint::Enumeration) && (otherConstraint->variety() == XsdWildcard::NamespaceConstraint::Enumeration)) { + if (containsSet<QString>(otherConstraint->namespaces(), constraint->namespaces())) + return true; + } + + // 3 + if ((constraint->variety() == XsdWildcard::NamespaceConstraint::Enumeration) && (otherConstraint->variety() == XsdWildcard::NamespaceConstraint::Not)) { + if (constraint->namespaces().intersect(otherConstraint->namespaces()).isEmpty()) + return true; + } + + // 4 + if ((constraint->variety() == XsdWildcard::NamespaceConstraint::Not) && (otherConstraint->variety() == XsdWildcard::NamespaceConstraint::Not)) { + if (containsSet<QString>(constraint->namespaces(), otherConstraint->namespaces())) + return true; + } + + return false; +} + +XsdWildcard::Ptr XsdSchemaHelper::wildcardUnion(const XsdWildcard::Ptr &wildcard, const XsdWildcard::Ptr &otherWildcard) +{ + // @see http://www.w3.org/TR/xmlschema11-1/#cos-aw-union + + XsdWildcard::Ptr unionWildcard(new XsdWildcard()); + + const XsdWildcard::NamespaceConstraint::Ptr constraint(wildcard->namespaceConstraint()); + const XsdWildcard::NamespaceConstraint::Ptr otherConstraint(otherWildcard->namespaceConstraint()); + + // 1 + if ((constraint->variety() == otherConstraint->variety()) && + (constraint->namespaces() == otherConstraint->namespaces())) { + unionWildcard->namespaceConstraint()->setVariety(constraint->variety()); + unionWildcard->namespaceConstraint()->setNamespaces(constraint->namespaces()); + return unionWildcard; + } + + // 2 + if ((constraint->variety() == XsdWildcard::NamespaceConstraint::Any) || (otherConstraint->variety() == XsdWildcard::NamespaceConstraint::Any)) { + unionWildcard->namespaceConstraint()->setVariety(XsdWildcard::NamespaceConstraint::Any); + return unionWildcard; + } + + // 3 + if ((constraint->variety() == XsdWildcard::NamespaceConstraint::Enumeration) && (otherConstraint->variety() == XsdWildcard::NamespaceConstraint::Enumeration)) { + unionWildcard->namespaceConstraint()->setVariety(XsdWildcard::NamespaceConstraint::Enumeration); + unionWildcard->namespaceConstraint()->setNamespaces(constraint->namespaces() + otherConstraint->namespaces()); + return unionWildcard; + } + + // 4 + if ((constraint->variety() == XsdWildcard::NamespaceConstraint::Not) && (otherConstraint->variety() == XsdWildcard::NamespaceConstraint::Not)) { + if (constraint->namespaces() != otherConstraint->namespaces()) { + unionWildcard->namespaceConstraint()->setVariety(XsdWildcard::NamespaceConstraint::Not); + unionWildcard->namespaceConstraint()->setNamespaces(QSet<QString>() << XsdWildcard::absentNamespace()); + return unionWildcard; + } + } + + // 5 + QSet<QString> sSet, negatedSet; + bool matches5 = false; + if (((constraint->variety() == XsdWildcard::NamespaceConstraint::Not) && !constraint->namespaces().contains(XsdWildcard::absentNamespace())) + && (otherConstraint->variety() == XsdWildcard::NamespaceConstraint::Enumeration)) { + + negatedSet = constraint->namespaces(); + sSet = otherConstraint->namespaces(); + matches5 = true; + } else if (((otherConstraint->variety() == XsdWildcard::NamespaceConstraint::Not) && !otherConstraint->namespaces().contains(XsdWildcard::absentNamespace())) + && (constraint->variety() == XsdWildcard::NamespaceConstraint::Enumeration)) { + + negatedSet = otherConstraint->namespaces(); + sSet = constraint->namespaces(); + matches5 = true; + } + + if (matches5) { + if (sSet.contains(negatedSet.values().first()) && sSet.contains(XsdWildcard::absentNamespace())) { // 5.1 + unionWildcard->namespaceConstraint()->setVariety(XsdWildcard::NamespaceConstraint::Any); + return unionWildcard; + } + if (sSet.contains(negatedSet.values().first()) && !sSet.contains(XsdWildcard::absentNamespace())) { // 5.2 + unionWildcard->namespaceConstraint()->setVariety(XsdWildcard::NamespaceConstraint::Not); + unionWildcard->namespaceConstraint()->setNamespaces(QSet<QString>() << XsdWildcard::absentNamespace()); + return unionWildcard; + } + if (!sSet.contains(negatedSet.values().first()) && sSet.contains(XsdWildcard::absentNamespace())) { // 5.3 + return XsdWildcard::Ptr(); // not expressible + } + if (!sSet.contains(negatedSet.values().first()) && !sSet.contains(XsdWildcard::absentNamespace())) { // 5.4 + unionWildcard->namespaceConstraint()->setVariety(XsdWildcard::NamespaceConstraint::Not); + unionWildcard->namespaceConstraint()->setNamespaces(negatedSet); + return unionWildcard; + } + } + + // 6 + bool matches6 = false; + if (((constraint->variety() == XsdWildcard::NamespaceConstraint::Not) && constraint->namespaces().contains(XsdWildcard::absentNamespace())) + && (otherConstraint->variety() == XsdWildcard::NamespaceConstraint::Enumeration)) { + + negatedSet = constraint->namespaces(); + sSet = otherConstraint->namespaces(); + matches6 = true; + } else if (((otherConstraint->variety() == XsdWildcard::NamespaceConstraint::Not) && otherConstraint->namespaces().contains(XsdWildcard::absentNamespace())) + && (constraint->variety() == XsdWildcard::NamespaceConstraint::Enumeration)) { + + negatedSet = otherConstraint->namespaces(); + sSet = constraint->namespaces(); + matches6 = true; + } + + if (matches6) { + if (sSet.contains(XsdWildcard::absentNamespace())) { // 6.1 + unionWildcard->namespaceConstraint()->setVariety(XsdWildcard::NamespaceConstraint::Any); + return unionWildcard; + } + if (!sSet.contains(XsdWildcard::absentNamespace())) { // 6.2 + unionWildcard->namespaceConstraint()->setVariety(XsdWildcard::NamespaceConstraint::Not); + unionWildcard->namespaceConstraint()->setNamespaces(QSet<QString>() += XsdWildcard::absentNamespace()); + return unionWildcard; + } + } + + return XsdWildcard::Ptr(); +} + +XsdWildcard::Ptr XsdSchemaHelper::wildcardIntersection(const XsdWildcard::Ptr &wildcard, const XsdWildcard::Ptr &otherWildcard) +{ + // @see http://www.w3.org/TR/xmlschema11-1/#cos-aw-intersect + + const XsdWildcard::NamespaceConstraint::Ptr constraint(wildcard->namespaceConstraint()); + const XsdWildcard::NamespaceConstraint::Ptr otherConstraint(otherWildcard->namespaceConstraint()); + + const XsdWildcard::Ptr intersectionWildcard(new XsdWildcard()); + + // 1 + if ((constraint->variety() == otherConstraint->variety()) && + (constraint->namespaces() == otherConstraint->namespaces())) { + intersectionWildcard->namespaceConstraint()->setVariety(constraint->variety()); + intersectionWildcard->namespaceConstraint()->setNamespaces(constraint->namespaces()); + return intersectionWildcard; + } + + // 2 + if ((constraint->variety() == XsdWildcard::NamespaceConstraint::Any) && + (otherConstraint->variety() != XsdWildcard::NamespaceConstraint::Any)) { + intersectionWildcard->namespaceConstraint()->setVariety(otherConstraint->variety()); + intersectionWildcard->namespaceConstraint()->setNamespaces(otherConstraint->namespaces()); + return intersectionWildcard; + } + + // 2 + if ((constraint->variety() != XsdWildcard::NamespaceConstraint::Any) && + (otherConstraint->variety() == XsdWildcard::NamespaceConstraint::Any)) { + intersectionWildcard->namespaceConstraint()->setVariety(constraint->variety()); + intersectionWildcard->namespaceConstraint()->setNamespaces(constraint->namespaces()); + return intersectionWildcard; + } + + // 3 + if ((constraint->variety() == XsdWildcard::NamespaceConstraint::Not) && + (otherConstraint->variety() == XsdWildcard::NamespaceConstraint::Enumeration)) { + + QSet<QString> set = otherConstraint->namespaces(); + set.subtract(constraint->namespaces()); + set.remove(XsdWildcard::absentNamespace()); + + intersectionWildcard->namespaceConstraint()->setVariety(XsdWildcard::NamespaceConstraint::Enumeration); + intersectionWildcard->namespaceConstraint()->setNamespaces(set); + + return intersectionWildcard; + } + + // 3 + if ((otherConstraint->variety() == XsdWildcard::NamespaceConstraint::Not) && + (constraint->variety() == XsdWildcard::NamespaceConstraint::Enumeration)) { + + QSet<QString> set = constraint->namespaces(); + set.subtract(otherConstraint->namespaces()); + set.remove(XsdWildcard::absentNamespace()); + + intersectionWildcard->namespaceConstraint()->setVariety(XsdWildcard::NamespaceConstraint::Enumeration); + intersectionWildcard->namespaceConstraint()->setNamespaces(set); + + return intersectionWildcard; + } + + // 4 + if ((constraint->variety() == XsdWildcard::NamespaceConstraint::Enumeration) && + (otherConstraint->variety() == XsdWildcard::NamespaceConstraint::Enumeration)) { + + QSet<QString> set = constraint->namespaces(); + set.intersect(otherConstraint->namespaces()); + + intersectionWildcard->namespaceConstraint()->setVariety(XsdWildcard::NamespaceConstraint::Enumeration); + intersectionWildcard->namespaceConstraint()->setNamespaces(set); + + return intersectionWildcard; + } + + // 6 + if ((constraint->variety() == XsdWildcard::NamespaceConstraint::Not) && + (otherConstraint->variety() == XsdWildcard::NamespaceConstraint::Not)) { + if (!(constraint->namespaces().contains(XsdWildcard::absentNamespace())) && otherConstraint->namespaces().contains(XsdWildcard::absentNamespace())) { + return wildcard; + } + if (constraint->namespaces().contains(XsdWildcard::absentNamespace()) && !(otherConstraint->namespaces().contains(XsdWildcard::absentNamespace()))) { + return otherWildcard; + } + } + + // 5 as not expressible return empty wildcard + return XsdWildcard::Ptr(); +} + +static SchemaType::DerivationConstraints convertBlockingConstraints(const NamedSchemaComponent::BlockingConstraints &constraints) +{ + SchemaType::DerivationConstraints result = 0; + + if (constraints & NamedSchemaComponent::RestrictionConstraint) + result |= SchemaType::RestrictionConstraint; + if (constraints & NamedSchemaComponent::ExtensionConstraint) + result |= SchemaType::ExtensionConstraint; + + return result; +} + +bool XsdSchemaHelper::isValidlySubstitutable(const SchemaType::Ptr &type, const SchemaType::Ptr &otherType, const SchemaType::DerivationConstraints &constraints) +{ + // @see http://www.w3.org/TR/xmlschema11-1/#key-val-sub-type + + // 1 + if (type->isComplexType() && otherType->isComplexType()) { + SchemaType::DerivationConstraints keywords = constraints; + if (otherType->isDefinedBySchema()) + keywords |= convertBlockingConstraints(XsdComplexType::Ptr(otherType)->prohibitedSubstitutions()); + + return isComplexDerivationOk(type, otherType, keywords); + } + + // 2 + if (type->isComplexType() && otherType->isSimpleType()) { + return isComplexDerivationOk(type, otherType, constraints); + } + + // 3 + if (type->isSimpleType() && otherType->isSimpleType()) { + return isSimpleDerivationOk(type, otherType, constraints); + } + + return false; +} + +bool XsdSchemaHelper::isSimpleDerivationOk(const SchemaType::Ptr &derivedType, const SchemaType::Ptr &baseType, const SchemaType::DerivationConstraints &constraints) +{ + // @see http://www.w3.org/TR/xmlschema11-1/#cos-st-derived-ok + + // 1 + if (derivedType == baseType) + return true; + + // 2.1 + if ((constraints & SchemaType::RestrictionConstraint) || derivedType->wxsSuperType()->derivationConstraints() & SchemaType::RestrictionConstraint) { + return false; + } + + // 2.2.1 + if (derivedType->wxsSuperType() == baseType) + return true; + + // 2.2.2 + if (derivedType->wxsSuperType() != BuiltinTypes::xsAnyType) { + if (isSimpleDerivationOk(derivedType->wxsSuperType(), baseType, constraints)) + return true; + } + + // 2.2.3 + if (derivedType->category() == SchemaType::SimpleTypeList || derivedType->category() == SchemaType::SimpleTypeUnion) { + if (baseType == BuiltinTypes::xsAnySimpleType) + return true; + } + + // 2.2.4 + if (baseType->category() == SchemaType::SimpleTypeUnion && baseType->isDefinedBySchema()) { // 2.2.4.1 + const AnySimpleType::List memberTypes = XsdSimpleType::Ptr(baseType)->memberTypes(); + for (int i = 0; i < memberTypes.count(); ++i) { + if (isSimpleDerivationOk(derivedType, memberTypes.at(i), constraints)) { // 2.2.4.2 + if (XsdSimpleType::Ptr(baseType)->facets().isEmpty()) { // 2.2.4.3 + return true; + } + } + } + } + + return false; +} + +bool XsdSchemaHelper::isComplexDerivationOk(const SchemaType::Ptr &derivedType, const SchemaType::Ptr &baseType, const SchemaType::DerivationConstraints &constraints) +{ + if (!derivedType) + return false; + + // @see http://www.w3.org/TR/xmlschema11-1/#cos-ct-derived-ok + + // 1 + if (derivedType != baseType) { + if ((derivedType->derivationMethod() == SchemaType::DerivationRestriction) && (constraints & SchemaType::RestrictionConstraint)) + return false; + if ((derivedType->derivationMethod() == SchemaType::DerivationExtension) && (constraints & SchemaType::ExtensionConstraint)) + return false; + } + + // 2.1 + if (derivedType == baseType) + return true; + + // 2.2 + if (derivedType->wxsSuperType() == baseType) + return true; + + // 2.3 + bool isOk = true; + if (derivedType->wxsSuperType() == BuiltinTypes::xsAnyType) { // 2.3.1 + isOk = false; + } else { // 2.3.2 + if (!derivedType->wxsSuperType()) + return false; + + if (derivedType->wxsSuperType()->isComplexType()) { // 2.3.2.1 + isOk = isComplexDerivationOk(derivedType->wxsSuperType(), baseType, constraints); + } else { // 2.3.2.2 + isOk = isSimpleDerivationOk(derivedType->wxsSuperType(), baseType, constraints); + } + } + if (isOk) + return true; + + return false; +} + +bool XsdSchemaHelper::constructAndCompare(const DerivedString<TypeString>::Ptr &operand1, + const AtomicComparator::Operator op, + const DerivedString<TypeString>::Ptr &operand2, + const SchemaType::Ptr &type, + const ReportContext::Ptr &context, + const SourceLocationReflection *const sourceLocationReflection) +{ + Q_ASSERT_X(type->category() == SchemaType::SimpleTypeAtomic, Q_FUNC_INFO, + "We can only compare atomic values."); + + // we can not cast a xs:String to a xs:QName, so lets go the safe way + if (type->name(context->namePool()) == BuiltinTypes::xsQName->name(context->namePool())) + return false; + + const AtomicValue::Ptr value1 = ValueFactory::fromLexical(operand1->stringValue(), type, context, sourceLocationReflection); + if (value1->hasError()) + return false; + + const AtomicValue::Ptr value2 = ValueFactory::fromLexical(operand2->stringValue(), type, context, sourceLocationReflection); + if (value2->hasError()) + return false; + + return ComparisonFactory::compare(value1, op, value2, type, context, sourceLocationReflection); +} + +bool XsdSchemaHelper::checkWildcardProcessContents(const XsdWildcard::Ptr &baseWildcard, const XsdWildcard::Ptr &derivedWildcard) +{ + if (baseWildcard->processContents() == XsdWildcard::Strict) { + if (derivedWildcard->processContents() == XsdWildcard::Lax || derivedWildcard->processContents() == XsdWildcard::Skip) { + return false; + } + } else if (baseWildcard->processContents() == XsdWildcard::Lax) { + if (derivedWildcard->processContents() == XsdWildcard::Skip) + return false; + } + + return true; +} + +bool XsdSchemaHelper::foundSubstitutionGroupTransitive(const XsdElement::Ptr &head, const XsdElement::Ptr &member, QSet<XsdElement::Ptr> &visitedElements) +{ + if (visitedElements.contains(member)) + return false; + else + visitedElements.insert(member); + + if (member->substitutionGroupAffiliations().isEmpty()) + return false; + + if (member->substitutionGroupAffiliations().contains(head)) { + return true; + } else { + const XsdElement::List affiliations = member->substitutionGroupAffiliations(); + for (int i = 0; i < affiliations.count(); ++i) { + if (foundSubstitutionGroupTransitive(head, affiliations.at(i), visitedElements)) + return true; + } + + return false; + } +} + +void XsdSchemaHelper::foundSubstitutionGroupTypeInheritance(const SchemaType::Ptr &headType, const SchemaType::Ptr &memberType, + QSet<SchemaType::DerivationMethod> &derivationSet, NamedSchemaComponent::BlockingConstraints &blockSet) +{ + if (!memberType) + return; + + if (memberType == headType) + return; + + derivationSet.insert(memberType->derivationMethod()); + + if (memberType->isComplexType()) { + const XsdComplexType::Ptr complexType(memberType); + blockSet |= complexType->prohibitedSubstitutions(); + } + + foundSubstitutionGroupTypeInheritance(headType, memberType->wxsSuperType(), derivationSet, blockSet); +} + +bool XsdSchemaHelper::substitutionGroupOkTransitive(const XsdElement::Ptr &head, const XsdElement::Ptr &member, const NamePool::Ptr &namePool) +{ + // @see http://www.w3.org/TR/xmlschema11-1/#cos-equiv-derived-ok-rec + + // 1 + if ((member->name(namePool) == head->name(namePool)) && (member->type() == head->type())) + return true; + + // 2.1 + if (head->disallowedSubstitutions() & NamedSchemaComponent::SubstitutionConstraint) + return false; + + // 2.2 + { + QSet<XsdElement::Ptr> visitedElements; + if (!foundSubstitutionGroupTransitive(head, member, visitedElements)) + return false; + } + + // 2.3 + { + QSet<SchemaType::DerivationMethod> derivationSet; + NamedSchemaComponent::BlockingConstraints blockSet; + + foundSubstitutionGroupTypeInheritance(head->type(), member->type(), derivationSet, blockSet); + + NamedSchemaComponent::BlockingConstraints checkSet(blockSet); + checkSet |= head->disallowedSubstitutions(); + if (head->type()->isComplexType()) { + const XsdComplexType::Ptr complexType(head->type()); + checkSet |= complexType->prohibitedSubstitutions(); + } + + if ((checkSet & NamedSchemaComponent::RestrictionConstraint) && derivationSet.contains(SchemaType::DerivationRestriction)) + return false; + if ((checkSet & NamedSchemaComponent::ExtensionConstraint) && derivationSet.contains(SchemaType::DerivationExtension)) + return false; + if (checkSet & NamedSchemaComponent::SubstitutionConstraint) + return false; + } + + return true; +} + +bool XsdSchemaHelper::isValidAttributeGroupRestriction(const XsdAttributeGroup::Ptr &derivedAttributeGroup, const XsdAttributeGroup::Ptr &attributeGroup, const XsdSchemaContext::Ptr &context, QString &errorMsg) +{ + // @see http://www.w3.org/TR/xmlschema-1/#derivation-ok-restriction + + const XsdAttributeUse::List derivedAttributeUses = derivedAttributeGroup->attributeUses(); + const XsdAttributeUse::List baseAttributeUses = attributeGroup->attributeUses(); + + return isValidAttributeUsesRestriction(derivedAttributeUses, baseAttributeUses, + derivedAttributeGroup->wildcard(), attributeGroup->wildcard(), context, errorMsg); +} + +bool XsdSchemaHelper::isValidAttributeUsesRestriction(const XsdAttributeUse::List &derivedAttributeUses, const XsdAttributeUse::List &baseAttributeUses, + const XsdWildcard::Ptr &derivedWildcard, const XsdWildcard::Ptr &wildcard, const XsdSchemaContext::Ptr &context, QString &errorMsg) +{ + const NamePool::Ptr namePool(context->namePool()); + + QHash<QXmlName, XsdAttributeUse::Ptr> baseAttributeUsesLookup; + for (int i = 0; i < baseAttributeUses.count(); ++i) + baseAttributeUsesLookup.insert(baseAttributeUses.at(i)->attribute()->name(namePool), baseAttributeUses.at(i)); + + QHash<QXmlName, XsdAttributeUse::Ptr> derivedAttributeUsesLookup; + for (int i = 0; i < derivedAttributeUses.count(); ++i) + derivedAttributeUsesLookup.insert(derivedAttributeUses.at(i)->attribute()->name(namePool), derivedAttributeUses.at(i)); + + // 2 + for (int i = 0; i < derivedAttributeUses.count(); ++i) { + const XsdAttributeUse::Ptr derivedAttributeUse = derivedAttributeUses.at(i); + + // prohibited attributes are no real attributes, so skip them in that test here + if (derivedAttributeUse->useType() == XsdAttributeUse::ProhibitedUse) + continue; + + if (baseAttributeUsesLookup.contains(derivedAttributeUse->attribute()->name(namePool))) { + const XsdAttributeUse::Ptr baseAttributeUse(baseAttributeUsesLookup.value(derivedAttributeUse->attribute()->name(namePool))); + + // 2.1.1 + if (baseAttributeUse->isRequired() == true && derivedAttributeUse->isRequired() == false) { + errorMsg = QtXmlPatterns::tr("base attribute %1 is required but derived attribute is not").arg(formatAttribute(baseAttributeUse->attribute()->displayName(namePool))); + return false; + } + + // 2.1.2 + if (!isSimpleDerivationOk(derivedAttributeUse->attribute()->type(), baseAttributeUse->attribute()->type(), SchemaType::DerivationConstraints())) { + errorMsg = QtXmlPatterns::tr("type of derived attribute %1 cannot be validly derived from type of base attribute").arg(formatAttribute(derivedAttributeUse->attribute()->displayName(namePool))); + return false; + } + + // 2.1.3 + XsdAttributeUse::ValueConstraint::Ptr derivedConstraint; + if (derivedAttributeUse->valueConstraint()) + derivedConstraint = derivedAttributeUse->valueConstraint(); + else if (derivedAttributeUse->attribute()->valueConstraint()) + derivedConstraint = XsdAttributeUse::ValueConstraint::fromAttributeValueConstraint(derivedAttributeUse->attribute()->valueConstraint()); + + XsdAttributeUse::ValueConstraint::Ptr baseConstraint; + if (baseAttributeUse->valueConstraint()) + baseConstraint = baseAttributeUse->valueConstraint(); + else if (baseAttributeUse->attribute()->valueConstraint()) + baseConstraint = XsdAttributeUse::ValueConstraint::fromAttributeValueConstraint(baseAttributeUse->attribute()->valueConstraint()); + + bool ok = false; + if (!baseConstraint || baseConstraint->variety() == XsdAttributeUse::ValueConstraint::Default) + ok = true; + + if (derivedConstraint && baseConstraint) { + const XsdTypeChecker checker(context, QVector<QXmlName>(), QSourceLocation(QUrl(QLatin1String("http://dummy.org")), 1, 1)); + if (derivedConstraint->variety() == XsdAttributeUse::ValueConstraint::Fixed && checker.valuesAreEqual(derivedConstraint->value(), baseConstraint->value(), baseAttributeUse->attribute()->type())) + ok = true; + } + + if (!ok) { + errorMsg = QtXmlPatterns::tr("value constraint of derived attribute %1 does not match value constraint of base attribute").arg(formatAttribute(derivedAttributeUse->attribute()->displayName(namePool))); + return false; + } + } else { + if (!wildcard) { + errorMsg = QtXmlPatterns::tr("derived attribute %1 does not exists in the base definition").arg(formatAttribute(derivedAttributeUse->attribute()->displayName(namePool))); + return false; + } + + QXmlName name = derivedAttributeUse->attribute()->name(namePool); + + // wildcards using XsdWildcard::absentNamespace, so we have to fix that here + if (name.namespaceURI() == StandardNamespaces::empty) + name.setNamespaceURI(namePool->allocateNamespace(XsdWildcard::absentNamespace())); + + if (!wildcardAllowsExpandedName(name, wildcard, namePool)) { + errorMsg = QtXmlPatterns::tr("derived attribute %1 does not match the wildcard in the base definition").arg(formatAttribute(derivedAttributeUse->attribute()->displayName(namePool))); + return false; + } + } + } + + // 3 + for (int i = 0; i < baseAttributeUses.count(); ++i) { + const XsdAttributeUse::Ptr baseAttributeUse = baseAttributeUses.at(i); + + if (baseAttributeUse->isRequired()) { + if (derivedAttributeUsesLookup.contains(baseAttributeUse->attribute()->name(namePool))) { + if (!derivedAttributeUsesLookup.value(baseAttributeUse->attribute()->name(namePool))->isRequired()) { + errorMsg = QtXmlPatterns::tr("base attribute %1 is required but derived attribute is not").arg(formatAttribute(baseAttributeUse->attribute()->displayName(namePool))); + return false; + } + } else { + errorMsg = QtXmlPatterns::tr("base attribute %1 is required but missing in derived definition").arg(formatAttribute(baseAttributeUse->attribute()->displayName(namePool))); + return false; + } + } + } + + // 4 + if (derivedWildcard) { + if (!wildcard) { + errorMsg = QtXmlPatterns::tr("derived definition contains an %1 element that does not exists in the base definition").arg(formatElement("anyAttribute")); + return false; + } + + if (!isWildcardSubset(derivedWildcard, wildcard)) { + errorMsg = QtXmlPatterns::tr("derived wildcard is not a subset of the base wildcard"); + return false; + } + + if (!checkWildcardProcessContents(wildcard, derivedWildcard)) { + errorMsg = QtXmlPatterns::tr("%1 of derived wildcard is not a valid restriction of %2 of base wildcard").arg(formatKeyword("processContents")).arg(formatKeyword("processContents")); + return false; + } + } + + return true; +} + +bool XsdSchemaHelper::isValidAttributeUsesExtension(const XsdAttributeUse::List &derivedAttributeUses, const XsdAttributeUse::List &attributeUses, + const XsdWildcard::Ptr &derivedWildcard, const XsdWildcard::Ptr &wildcard, const XsdSchemaContext::Ptr &context, QString &errorMsg) +{ + // @see http://www.w3.org/TR/xmlschema11-1/#cos-ct-extends + + const NamePool::Ptr namePool(context->namePool()); + + // 1.2 + QHash<QXmlName, XsdAttribute::Ptr> lookupHash; + for (int i = 0; i < derivedAttributeUses.count(); ++i) + lookupHash.insert(derivedAttributeUses.at(i)->attribute()->name(namePool), derivedAttributeUses.at(i)->attribute()); + + for (int i = 0; i < attributeUses.count(); ++i) { + const QXmlName attributeName = attributeUses.at(i)->attribute()->name(namePool); + if (!lookupHash.contains(attributeName)) { + errorMsg = QtXmlPatterns::tr("attribute %1 from base type is missing in derived type").arg(formatKeyword(namePool->displayName(attributeName))); + return false; + } + + if (lookupHash.value(attributeName)->type() != attributeUses.at(i)->attribute()->type()) { + errorMsg = QtXmlPatterns::tr("type of derived attribute %1 differs from type of base attribute").arg(formatKeyword(namePool->displayName(attributeName))); + return false; + } + } + + // 1.3 + if (wildcard) { + if (!derivedWildcard) { + errorMsg = QtXmlPatterns::tr("base definition contains an %1 element that is missing in the derived definition").arg(formatElement("anyAttribute")); + return false; + } + } + + return true; +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/schema/qxsdschemahelper_p.h b/src/xmlpatterns/schema/qxsdschemahelper_p.h new file mode 100644 index 0000000..71fdfe7 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdschemahelper_p.h @@ -0,0 +1,217 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_XsdSchemaHelper_H +#define Patternist_XsdSchemaHelper_H + +#include "qcomparisonfactory_p.h" +#include "qschematype_p.h" +#include "qxsdattributegroup_p.h" +#include "qxsdelement_p.h" +#include "qxsdparticle_p.h" +#include "qxsdschemacontext_p.h" +#include "qxsdwildcard_p.h" + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +namespace QPatternist +{ + + /** + * @short Contains helper methods that are used by XsdSchemaParser, XsdSchemaResolver and XsdSchemaChecker. + * + * @ingroup Patternist_schema + * @author Tobias Koenig <tobias.koenig@trolltech.com> + */ + class XsdSchemaHelper + { + public: + /** + * Checks whether the given @p particle is emptiable as defined by the + * algorithm in the schema spec. + */ + static bool isParticleEmptiable(const XsdParticle::Ptr &particle); + + /** + * Checks whether the given @p nameSpace is allowed by the given namespace @p constraint. + */ + static bool wildcardAllowsNamespaceName(const QString &nameSpace, + const XsdWildcard::NamespaceConstraint::Ptr &constraint); + + /** + * Checks whether the given @p name is allowed by the namespace constraint of the given @p wildcard. + */ + static bool wildcardAllowsExpandedName(const QXmlName &name, + const XsdWildcard::Ptr &wildcard, + const NamePool::Ptr &namePool); + + /** + * Checks whether the @p wildcard is a subset of @p otherWildcard. + */ + static bool isWildcardSubset(const XsdWildcard::Ptr &wildcard, const XsdWildcard::Ptr &otherWildcard); + + /** + * Returns the union of the given @p wildcard and @p otherWildcard. + */ + static XsdWildcard::Ptr wildcardUnion(const XsdWildcard::Ptr &wildcard, const XsdWildcard::Ptr &otherWildcard); + + /** + * Returns the intersection of the given @p wildcard and @p otherWildcard. + */ + static XsdWildcard::Ptr wildcardIntersection(const XsdWildcard::Ptr &wildcard, + const XsdWildcard::Ptr &otherWildcard); + + /** + * Returns whether the given @p type is validly substitutable for an @p otherType + * under the given @p constraints. + */ + static bool isValidlySubstitutable(const SchemaType::Ptr &type, + const SchemaType::Ptr &otherType, + const SchemaType::DerivationConstraints &constraints); + + /** + * Returns whether the simple @p derivedType can be derived from the simple @p baseType + * under the given @p constraints. + */ + static bool isSimpleDerivationOk(const SchemaType::Ptr &derivedType, + const SchemaType::Ptr &baseType, + const SchemaType::DerivationConstraints &constraints); + + /** + * Returns whether the complex @p derivedType can be derived from the complex @p baseType + * under the given @p constraints. + */ + static bool isComplexDerivationOk(const SchemaType::Ptr &derivedType, + const SchemaType::Ptr &baseType, + const SchemaType::DerivationConstraints &constraints); + + /** + * This method takes the two string based operands @p operand1 and @p operand2 and converts them to instances of type @p type. + * If the conversion fails, @c false is returned, otherwise the instances are compared by the given operator @p op and the + * result of the comparison is returned. + */ + static bool constructAndCompare(const DerivedString<TypeString>::Ptr &operand1, + const AtomicComparator::Operator op, + const DerivedString<TypeString>::Ptr &operand2, + const SchemaType::Ptr &type, + const ReportContext::Ptr &context, + const SourceLocationReflection *const sourceLocationReflection); + + /** + * Returns whether the process content property of the @p derivedWildcard is valid + * according to the process content property of its @p baseWildcard. + */ + static bool checkWildcardProcessContents(const XsdWildcard::Ptr &baseWildcard, + const XsdWildcard::Ptr &derivedWildcard); + + /** + * Checks whether @[ member is a member of the substitution group with the given @p head. + */ + static bool foundSubstitutionGroupTransitive(const XsdElement::Ptr &head, + const XsdElement::Ptr &member, + QSet<XsdElement::Ptr> &visitedElements); + + /** + * A helper method that iterates over the type hierarchy from @p memberType up to @p headType and collects all + * @p derivationSet and @p blockSet constraints that exists on the way there. + */ + static void foundSubstitutionGroupTypeInheritance(const SchemaType::Ptr &headType, + const SchemaType::Ptr &memberType, + QSet<SchemaType::DerivationMethod> &derivationSet, + NamedSchemaComponent::BlockingConstraints &blockSet); + + /** + * Checks if the @p member is transitive to @p head. + */ + static bool substitutionGroupOkTransitive(const XsdElement::Ptr &head, + const XsdElement::Ptr &member, + const NamePool::Ptr &namePool); + + /** + * Checks if @p derivedAttributeGroup is a valid restriction for @p attributeGroup. + */ + static bool isValidAttributeGroupRestriction(const XsdAttributeGroup::Ptr &derivedAttributeGroup, + const XsdAttributeGroup::Ptr &attributeGroup, + const XsdSchemaContext::Ptr &context, + QString &errorMsg); + + /** + * Checks if @p derivedAttributeUses are a valid restriction for @p attributeUses. + */ + static bool isValidAttributeUsesRestriction(const XsdAttributeUse::List &derivedAttributeUses, + const XsdAttributeUse::List &attributeUses, + const XsdWildcard::Ptr &derivedWildcard, + const XsdWildcard::Ptr &wildcard, + const XsdSchemaContext::Ptr &context, + QString &errorMsg); + + /** + * Checks if @p derivedAttributeUses are a valid extension for @p attributeUses. + */ + static bool isValidAttributeUsesExtension(const XsdAttributeUse::List &derivedAttributeUses, + const XsdAttributeUse::List &attributeUses, + const XsdWildcard::Ptr &derivedWildcard, + const XsdWildcard::Ptr &wildcard, + const XsdSchemaContext::Ptr &context, + QString &errorMsg); + + private: + Q_DISABLE_COPY(XsdSchemaHelper) + }; +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/schema/qxsdschemamerger.cpp b/src/xmlpatterns/schema/qxsdschemamerger.cpp new file mode 100644 index 0000000..1714068 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdschemamerger.cpp @@ -0,0 +1,157 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxsdschemamerger_p.h" + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +XsdSchemaMerger::XsdSchemaMerger(const XsdSchema::Ptr &schema, const XsdSchema::Ptr &otherSchema) +{ + merge(schema, otherSchema); +} + +XsdSchema::Ptr XsdSchemaMerger::mergedSchema() const +{ + return m_mergedSchema; +} + +void XsdSchemaMerger::merge(const XsdSchema::Ptr &schema, const XsdSchema::Ptr &otherSchema) +{ + m_mergedSchema = XsdSchema::Ptr(new XsdSchema(otherSchema->namePool())); + + // first fill the merged schema with the values from schema + if (schema) { + const XsdElement::List elements = schema->elements(); + for (int i = 0; i < elements.count(); ++i) { + m_mergedSchema->addElement(elements.at(i)); + } + + const XsdAttribute::List attributes = schema->attributes(); + for (int i = 0; i < attributes.count(); ++i) { + m_mergedSchema->addAttribute(attributes.at(i)); + } + + const SchemaType::List types = schema->types(); + for (int i = 0; i < types.count(); ++i) { + m_mergedSchema->addType(types.at(i)); + } + + const SchemaType::List anonymousTypes = schema->anonymousTypes(); + for (int i = 0; i < anonymousTypes.count(); ++i) { + m_mergedSchema->addAnonymousType(anonymousTypes.at(i)); + } + + const XsdModelGroup::List elementGroups = schema->elementGroups(); + for (int i = 0; i < elementGroups.count(); ++i) { + m_mergedSchema->addElementGroup(elementGroups.at(i)); + } + + const XsdAttributeGroup::List attributeGroups = schema->attributeGroups(); + for (int i = 0; i < attributeGroups.count(); ++i) { + m_mergedSchema->addAttributeGroup(attributeGroups.at(i)); + } + + const XsdNotation::List notations = schema->notations(); + for (int i = 0; i < notations.count(); ++i) { + m_mergedSchema->addNotation(notations.at(i)); + } + + const XsdIdentityConstraint::List identityConstraints = schema->identityConstraints(); + for (int i = 0; i < identityConstraints.count(); ++i) { + m_mergedSchema->addIdentityConstraint(identityConstraints.at(i)); + } + } + + // then merge in the values from the otherSchema + { + const XsdElement::List elements = otherSchema->elements(); + for (int i = 0; i < elements.count(); ++i) { + if (!m_mergedSchema->element(elements.at(i)->name(otherSchema->namePool()))) + m_mergedSchema->addElement(elements.at(i)); + } + + const XsdAttribute::List attributes = otherSchema->attributes(); + for (int i = 0; i < attributes.count(); ++i) { + if (!m_mergedSchema->attribute(attributes.at(i)->name(otherSchema->namePool()))) + m_mergedSchema->addAttribute(attributes.at(i)); + } + + const SchemaType::List types = otherSchema->types(); + for (int i = 0; i < types.count(); ++i) { + if (!m_mergedSchema->type(types.at(i)->name(otherSchema->namePool()))) + m_mergedSchema->addType(types.at(i)); + } + + const SchemaType::List anonymousTypes = otherSchema->anonymousTypes(); + for (int i = 0; i < anonymousTypes.count(); ++i) { + // add anonymous type as they are + m_mergedSchema->addAnonymousType(anonymousTypes.at(i)); + } + + const XsdModelGroup::List elementGroups = otherSchema->elementGroups(); + for (int i = 0; i < elementGroups.count(); ++i) { + if (!m_mergedSchema->elementGroup(elementGroups.at(i)->name(otherSchema->namePool()))) + m_mergedSchema->addElementGroup(elementGroups.at(i)); + } + + const XsdAttributeGroup::List attributeGroups = otherSchema->attributeGroups(); + for (int i = 0; i < attributeGroups.count(); ++i) { + if (!m_mergedSchema->attributeGroup(attributeGroups.at(i)->name(otherSchema->namePool()))) + m_mergedSchema->addAttributeGroup(attributeGroups.at(i)); + } + + const XsdNotation::List notations = otherSchema->notations(); + for (int i = 0; i < notations.count(); ++i) { + if (!m_mergedSchema->notation(notations.at(i)->name(otherSchema->namePool()))) + m_mergedSchema->addNotation(notations.at(i)); + } + + const XsdIdentityConstraint::List identityConstraints = otherSchema->identityConstraints(); + for (int i = 0; i < identityConstraints.count(); ++i) { + if (!m_mergedSchema->identityConstraint(identityConstraints.at(i)->name(otherSchema->namePool()))) + m_mergedSchema->addIdentityConstraint(identityConstraints.at(i)); + } + } +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/schema/qxsdschemamerger_p.h b/src/xmlpatterns/schema/qxsdschemamerger_p.h new file mode 100644 index 0000000..8b522c5 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdschemamerger_p.h @@ -0,0 +1,99 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_XsdSchemaMerger_H +#define Patternist_XsdSchemaMerger_H + +#include "qxsdschema_p.h" + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +namespace QPatternist +{ + /** + * @short A helper class that merges two schemas into one. + * + * This class is used in XsdValidatingInstanceReader to merge the schema + * given in the constructor with a schema defined in the instance document + * via xsi:schemaLocation or xsi:noNamespaceSchema location. + * + * @ingroup Patternist_schema + * @author Tobias Koenig <tobias.koenig@trolltech.com> + */ + class XsdSchemaMerger : public QSharedData + { + public: + typedef QExplicitlySharedDataPointer<XsdSchemaMerger> Ptr; + + /** + * Creates a new schema merger object that merges @p schema with @p otherSchema. + */ + XsdSchemaMerger(const XsdSchema::Ptr &schema, const XsdSchema::Ptr &otherSchema); + + /** + * Returns the merged schema. + */ + XsdSchema::Ptr mergedSchema() const; + + private: + void merge(const XsdSchema::Ptr &schema, const XsdSchema::Ptr &otherSchema); + + XsdSchema::Ptr m_mergedSchema; + }; +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/schema/qxsdschemaparser.cpp b/src/xmlpatterns/schema/qxsdschemaparser.cpp new file mode 100644 index 0000000..4e6a643 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdschemaparser.cpp @@ -0,0 +1,6078 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxsdschemaparser_p.h" + +#include "private/qxmlutils_p.h" +#include "qacceltreeresourceloader_p.h" +#include "qautoptr_p.h" +#include "qboolean_p.h" +#include "qcommonnamespaces_p.h" +#include "qderivedinteger_p.h" +#include "qderivedstring_p.h" +#include "qqnamevalue_p.h" +#include "qxmlquery_p.h" +#include "qxpathhelper_p.h" +#include "qxsdattributereference_p.h" +#include "qxsdreference_p.h" +#include "qxsdschematoken_p.h" + +#include <QtCore/QFile> +#include <QtXmlPatterns/QXmlQuery> + +QT_BEGIN_NAMESPACE + +/** + * @page schema_overview Overview + * @section structure_and_components Structure and Components + * + * The schema validator code consists of 4 major components + * + * <dl> + * <dt>The schema parser (QPatternist::XsdSchemaParser)</dt> + * <dd>This component parses a XML document that is supplied via a QIODevice. It creates + * a so called (incomplete) 'compiled schema', which is a representation of the XML Schema + * structure as C++ objects. + * As the parser is a streaming parser, it can't resolve references to types or elements/attributes + * in place, therefor it creates resolver tasks which are passed to the schema resolver component + * for resolving at a later point in time. + * The parser does furthermore the basic XML structure constraint checking, e.g. if all required + * attributes are available or the order of the elements is correct.</dd> + * + * <dt>The schema resolver (QPatternist::XsdSchemaResolver)</dt> + * <dd>This component is activated after the schema parser component has been finished the parsing + * of all schemas. The resolver has been supplied with resolve tasks by the schema parser that + * it will resolve in this step now. Between working on the single resolver tasks, the resolver + * calls check methods from the schema checker component to make sure that some assertions are + * valid (e.g. no circular inheritance of types), so that the resolver can work without hassle. + * During resoving references to attribute or element groups it also checks for circular references + * of these groups. + * At the end of that phase we have a compiled schema that is fully resolved (not necessarily valid though).</dd> + * + * <dt>The schema checker (QPatternist::XsdSchemaChecker)</dt> + * <dd>This component does all the schema constraint checking as given by the Schema specification. + * At the end of that phase we have fully resolved and valid compiled schema that can be used for validation + * of instance documents.</dd> + * + * <dt>The validator (QPatternist::XsdValidatingInstanceReader)</dt> + * <dd>This component is responsible for validating a XML instance document, provided via a QIODevice, against + * a valid compiled schema.</dd> + * </dl> + * + * @ingroup Patternist_schema + */ + +using namespace QPatternist; + +namespace QPatternist +{ + +/** + * @short A helper class for automatically handling namespace scopes of elements. + * + * This class should be instantiated at the beginning of each parse XYZ method. + */ +class ElementNamespaceHandler +{ + public: + /** + * Creates a new element namespace handler object. + * + * It checks whether the @p parser is on the right @p tag and it creates a new namespace + * context that contains the inherited and local namespace declarations. + */ + ElementNamespaceHandler(const XsdSchemaToken::NodeName &tag, XsdSchemaParser *parser) + : m_parser(parser) + { + Q_ASSERT(m_parser->isStartElement() && (XsdSchemaToken::toToken(m_parser->name()) == tag) && (XsdSchemaToken::toToken(m_parser->namespaceUri()) == XsdSchemaToken::XML_NS_SCHEMA_URI)); + m_parser->m_namespaceSupport.pushContext(); + m_parser->m_namespaceSupport.setPrefixes(m_parser->namespaceDeclarations()); + } + + /** + * Destroys the element namespace handler object. + * + * It destroys the local namespace context. + */ + ~ElementNamespaceHandler() + { + m_parser->m_namespaceSupport.popContext(); + } + + private: + XsdSchemaParser *m_parser; +}; + +/** + * A helper class that checks for the right occurrence of + * xml tags with the help of a DFA. + */ +class TagValidationHandler +{ + public: + TagValidationHandler(XsdTagScope::Type tag, XsdSchemaParser *parser, const NamePool::Ptr &namePool) + : m_parser(parser), m_machine(namePool) + { + Q_ASSERT(m_parser->m_stateMachines.contains(tag)); + + m_machine = m_parser->m_stateMachines.value(tag); + m_machine.reset(); + } + + void validate(XsdSchemaToken::NodeName token) + { + if (token == XsdSchemaToken::NoKeyword) { + const QList<XsdSchemaToken::NodeName> tokens = m_machine.possibleTransitions(); + + QStringList elementNames; + for (int i = 0; i < tokens.count(); ++i) + elementNames.append(formatElement(XsdSchemaToken::toString(tokens.at(i)))); + + m_parser->error(QtXmlPatterns::tr("can not process unknown element %1, expected elements are: %2") + .arg(formatElement(m_parser->name().toString())) + .arg(elementNames.join(QLatin1String(", ")))); + return; + } + + if (!m_machine.proceed(token)) { + const QList<XsdSchemaToken::NodeName> tokens = m_machine.possibleTransitions(); + + QStringList elementNames; + for (int i = 0; i < tokens.count(); ++i) + elementNames.append(formatElement(XsdSchemaToken::toString(tokens.at(i)))); + + m_parser->error(QtXmlPatterns::tr("element %1 is not allowed in this scope, possible elements are: %2") + .arg(formatElement(XsdSchemaToken::toString(token))) + .arg(elementNames.join(QLatin1String(", ")))); + return; + } + } + + void finalize() const + { + if (!m_machine.inEndState()) { + const QList<XsdSchemaToken::NodeName> tokens = m_machine.possibleTransitions(); + + QStringList elementNames; + for (int i = 0; i < tokens.count(); ++i) + elementNames.append(formatElement(XsdSchemaToken::toString(tokens.at(i)))); + + m_parser->error(QtXmlPatterns::tr("child element is missing in that scope, possible child elements are: %1") + .arg(elementNames.join(QLatin1String(", ")))); + } + } + + private: + XsdSchemaParser *m_parser; + XsdStateMachine<XsdSchemaToken::NodeName> m_machine; +}; + +} + +/** + * Returns a list of all particles with group references that appear at any level of + * the given unresolved @p group. + */ +static XsdParticle::List collectGroupRef(const XsdModelGroup::Ptr &group) +{ + XsdParticle::List refParticles; + + XsdParticle::List particles = group->particles(); + for (int i = 0; i < particles.count(); ++i) { + if (particles.at(i)->term()->isReference()) { + const XsdReference::Ptr reference(particles.at(i)->term()); + if (reference->type() == XsdReference::ModelGroup) + refParticles.append(particles.at(i)); + } + if (particles.at(i)->term()->isModelGroup()) { + refParticles << collectGroupRef(XsdModelGroup::Ptr(particles.at(i)->term())); + } + } + + return refParticles; +} + +/** + * Helper function that works around the limited facilities of + * QUrl/AnyURI::fromLexical to detect invalid URIs + */ +inline static bool isValidUri(const QString &string) +{ + // an empty URI points to the current document as defined in RFC 2396 (4.2) + if (string.isEmpty()) + return true; + + // explicit check as that is not checked by the code below + if (string.startsWith(QLatin1String("##"))) + return false; + + const AnyURI::Ptr uri = AnyURI::fromLexical(string); + return (!(uri->hasError())); +} + +XsdSchemaParser::XsdSchemaParser(const XsdSchemaContext::Ptr &context, const XsdSchemaParserContext::Ptr &parserContext, QIODevice *device) + : MaintainingReader<XsdSchemaToken, XsdTagScope::Type>(parserContext->elementDescriptions(), QSet<XsdSchemaToken::NodeName>(), context, device) + , m_context(context) + , m_parserContext(parserContext) + , m_namePool(m_parserContext->namePool()) + , m_namespaceSupport(m_namePool) +{ + m_schema = m_parserContext->schema(); + m_schemaResolver = m_parserContext->resolver(); + m_idCache = XsdIdCache::Ptr(new XsdIdCache()); + + setupStateMachines(); + setupBuiltinTypeNames(); +} + +void XsdSchemaParser::setIncludedSchemas(const NamespaceSet &schemas) +{ + m_includedSchemas = schemas; +} + +void XsdSchemaParser::setImportedSchemas(const NamespaceSet &schemas) +{ + m_importedSchemas = schemas; +} + +void XsdSchemaParser::setRedefinedSchemas(const NamespaceSet &schemas) +{ + m_redefinedSchemas = schemas; +} + +void XsdSchemaParser::setTargetNamespace(const QString &targetNamespace) +{ + m_targetNamespace = targetNamespace; +} + +void XsdSchemaParser::setTargetNamespaceExtended(const QString &targetNamespace) +{ + m_targetNamespace = targetNamespace; + m_namespaceSupport.setTargetNamespace(m_namePool->allocateNamespace(m_targetNamespace)); +} + +void XsdSchemaParser::setDocumentURI(const QUrl &uri) +{ + m_documentURI = uri; + + // prevent to get included/imported/redefined twice + m_includedSchemas.insert(uri); + m_importedSchemas.insert(uri); +} + +QUrl XsdSchemaParser::documentURI() const +{ + return m_documentURI; +} + +bool XsdSchemaParser::isAnyAttributeAllowed() const +{ + return false; +} + +bool XsdSchemaParser::parse(ParserType parserType) +{ + m_componentLocationHash.clear(); + + while (!atEnd()) { + readNext(); + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + if (isSchemaTag(XsdSchemaToken::Schema, token, namespaceToken)) { + parseSchema(parserType); + } else { + error(QtXmlPatterns::tr("document is not a XML schema")); + } + } + } + + m_schemaResolver->addComponentLocationHash(m_componentLocationHash); + m_schemaResolver->setDefaultOpenContent(m_defaultOpenContent, m_defaultOpenContentAppliesToEmpty); + + if (QXmlStreamReader::error() != QXmlStreamReader::NoError) + error(errorString()); + + return true; +} + +void XsdSchemaParser::error(const QString &msg) +{ + MaintainingReader<XsdSchemaToken, XsdTagScope::Type>::error(msg, XsdSchemaContext::XSDError); +} + +void XsdSchemaParser::attributeContentError(const char *attributeName, const char *elementName, const QString &value, const SchemaType::Ptr &type) +{ + if (type) { + error(QtXmlPatterns::tr("%1 attribute of %2 element contains invalid content: {%3} is not a value of type %4") + .arg(formatAttribute(attributeName)) + .arg(formatElement(elementName)) + .arg(formatData(value)) + .arg(formatType(m_namePool, type))); + } else { + error(QtXmlPatterns::tr("%1 attribute of %2 element contains invalid content: {%3}") + .arg(formatAttribute(attributeName)) + .arg(formatElement(elementName)) + .arg(formatData(value))); + } +} + +void XsdSchemaParser::parseSchema(ParserType parserType) +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::Schema, this); + + validateElement(XsdTagScope::Schema); + + // parse attributes + + if (parserType == TopLevelParser) { + if (hasAttribute(QString::fromLatin1("targetNamespace"))) { + m_targetNamespace = readNamespaceAttribute(QString::fromLatin1("targetNamespace"), "schema"); + } + } else if (parserType == IncludeParser) { + // m_targetNamespace is set to the target namespace of the including schema at this point + + if (hasAttribute(QString::fromLatin1("targetNamespace"))) { + const QString targetNamespace = readNamespaceAttribute(QString::fromLatin1("targetNamespace"), "schema"); + + if (m_targetNamespace != targetNamespace) { + error(QtXmlPatterns::tr("target namespace %1 of included schema is different from the target namespace %2 as defined by the including schema") + .arg(formatURI(targetNamespace)).arg(formatURI(m_targetNamespace))); + return; + } + } + } else if (parserType == ImportParser) { + // m_targetNamespace is set to the target namespace from the namespace attribute of the <import> tag at this point + + QString targetNamespace; + if (hasAttribute(QString::fromLatin1("targetNamespace"))) { + targetNamespace = readNamespaceAttribute(QString::fromLatin1("targetNamespace"), "schema"); + } + + if (m_targetNamespace != targetNamespace) { + error(QtXmlPatterns::tr("target namespace %1 of imported schema is different from the target namespace %2 as defined by the importing schema") + .arg(formatURI(targetNamespace)).arg(formatURI(m_targetNamespace))); + return; + } + } else if (parserType == RedefineParser) { + // m_targetNamespace is set to the target namespace of the redefining schema at this point + + if (hasAttribute(QString::fromLatin1("targetNamespace"))) { + const QString targetNamespace = readNamespaceAttribute(QString::fromLatin1("targetNamespace"), "schema"); + + if (m_targetNamespace != targetNamespace) { + error(QtXmlPatterns::tr("target namespace %1 of imported schema is different from the target namespace %2 as defined by the importing schema") + .arg(formatURI(targetNamespace)).arg(formatURI(m_targetNamespace))); + return; + } + } + } + + if (hasAttribute(QString::fromLatin1("attributeFormDefault"))) { + const QString value = readAttribute(QString::fromLatin1("attributeFormDefault")); + if (value != QString::fromLatin1("qualified") && value != QString::fromLatin1("unqualified")) { + attributeContentError("attributeFormDefault", "schema", value); + return; + } + + m_attributeFormDefault = value; + } else { + m_attributeFormDefault = QString::fromLatin1("unqualified"); + } + + if (hasAttribute(QString::fromLatin1("elementFormDefault"))) { + const QString value = readAttribute(QString::fromLatin1("elementFormDefault")); + if (value != QString::fromLatin1("qualified") && value != QString::fromLatin1("unqualified")) { + attributeContentError("elementFormDefault", "schema", value); + return; + } + + m_elementFormDefault = value; + } else { + m_elementFormDefault = QString::fromLatin1("unqualified"); + } + + if (hasAttribute(QString::fromLatin1("blockDefault"))) { + const QString blockDefault = readAttribute(QString::fromLatin1("blockDefault")); + const QStringList blockDefaultList = blockDefault.split(QLatin1Char(' '), QString::SkipEmptyParts); + for (int i = 0; i < blockDefaultList.count(); ++i) { + const QString value = blockDefaultList.at(i); + if (value != QString::fromLatin1("#all") && + value != QString::fromLatin1("extension") && + value != QString::fromLatin1("restriction") && + value != QString::fromLatin1("substitution")) { + attributeContentError("blockDefault", "schema", value); + return; + } + } + + m_blockDefault = blockDefault; + } + + if (hasAttribute(QString::fromLatin1("finalDefault"))) { + const QString finalDefault = readAttribute(QString::fromLatin1("finalDefault")); + const QStringList finalDefaultList = finalDefault.split(QLatin1Char(' '), QString::SkipEmptyParts); + for (int i = 0; i < finalDefaultList.count(); ++i) { + const QString value = finalDefaultList.at(i); + if (value != QString::fromLatin1("#all") && + value != QString::fromLatin1("extension") && + value != QString::fromLatin1("restriction") && + value != QString::fromLatin1("list") && + value != QString::fromLatin1("union")) { + attributeContentError("finalDefault", "schema", value); + return; + } + } + + m_finalDefault = finalDefault; + } + + if (hasAttribute(QString::fromLatin1("xpathDefaultNamespace"))) { + const QString xpathDefaultNamespace = readAttribute(QString::fromLatin1("xpathDefaultNamespace")); + if (xpathDefaultNamespace != QString::fromLatin1("##defaultNamespace") && + xpathDefaultNamespace != QString::fromLatin1("##targetNamespace") && + xpathDefaultNamespace != QString::fromLatin1("##local")) { + if (!isValidUri(xpathDefaultNamespace)) { + attributeContentError("xpathDefaultNamespace", "schema", xpathDefaultNamespace); + return; + } + } + m_xpathDefaultNamespace = xpathDefaultNamespace; + } else { + m_xpathDefaultNamespace = QString::fromLatin1("##local"); + } + + if (hasAttribute(QString::fromLatin1("defaultAttributes"))) { + const QString attrGroupName = readQNameAttribute(QString::fromLatin1("defaultAttributes"), "schema"); + convertName(attrGroupName, NamespaceSupport::ElementName, m_defaultAttributes); // translate qualified name into QXmlName + } + + if (hasAttribute(QString::fromLatin1("version"))) { + const QString version = readAttribute(QString::fromLatin1("version")); + } + + if (hasAttribute(CommonNamespaces::XML, QString::fromLatin1("lang"))) { + const QString value = readAttribute(QString::fromLatin1("lang"), CommonNamespaces::XML); + + const QRegExp exp(QString::fromLatin1("[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*")); + if (!exp.exactMatch(value)) { + attributeContentError("xml:lang", "schema", value); + return; + } + } + + validateIdAttribute("schema"); + + TagValidationHandler tagValidator(XsdTagScope::Schema, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Include, token, namespaceToken)) { + parseInclude(); + } else if (isSchemaTag(XsdSchemaToken::Import, token, namespaceToken)) { + parseImport(); + } else if (isSchemaTag(XsdSchemaToken::Redefine, token, namespaceToken)) { + parseRedefine(); + } else if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + m_schema->addAnnotation(annotation); + } else if (isSchemaTag(XsdSchemaToken::DefaultOpenContent, token, namespaceToken)) { + parseDefaultOpenContent(); + } else if (isSchemaTag(XsdSchemaToken::SimpleType, token, namespaceToken)) { + const XsdSimpleType::Ptr type = parseGlobalSimpleType(); + addType(type); + } else if (isSchemaTag(XsdSchemaToken::ComplexType, token, namespaceToken)) { + const XsdComplexType::Ptr type = parseGlobalComplexType(); + addType(type); + } else if (isSchemaTag(XsdSchemaToken::Group, token, namespaceToken)) { + const XsdModelGroup::Ptr group = parseNamedGroup(); + addElementGroup(group); + } else if (isSchemaTag(XsdSchemaToken::AttributeGroup, token, namespaceToken)) { + XsdAttributeGroup::Ptr attributeGroup = parseNamedAttributeGroup(); + addAttributeGroup(attributeGroup); + } else if (isSchemaTag(XsdSchemaToken::Element, token, namespaceToken)) { + const XsdElement::Ptr element = parseGlobalElement(); + addElement(element); + } else if (isSchemaTag(XsdSchemaToken::Attribute, token, namespaceToken)) { + const XsdAttribute::Ptr attribute = parseGlobalAttribute(); + addAttribute(attribute); + } else if (isSchemaTag(XsdSchemaToken::Notation, token, namespaceToken)) { + const XsdNotation::Ptr notation = parseNotation(); + addNotation(notation); + } else { + parseUnknown(); + } + } + } + + tagValidator.finalize(); + + m_schema->setTargetNamespace(m_targetNamespace); +} + +void XsdSchemaParser::parseInclude() +{ + Q_ASSERT(isStartElement() && XsdSchemaToken::toToken(name()) == XsdSchemaToken::Include && + XsdSchemaToken::toToken(namespaceUri()) == XsdSchemaToken::XML_NS_SCHEMA_URI); + + validateElement(XsdTagScope::Include); + + // parse attributes + const QString schemaLocation = readAttribute(QString::fromLatin1("schemaLocation")); + + QUrl url(schemaLocation); + if (url.isRelative()) { + Q_ASSERT(m_documentURI.isValid()); + + url = m_documentURI.resolved(url); + } + + if (m_includedSchemas.contains(url)) { + // we have included that file already, according to the schema spec we are + // allowed to silently skip it. + } else { + m_includedSchemas.insert(url); + + const AutoPtr<QNetworkReply> reply(AccelTreeResourceLoader::load(url, m_context->networkAccessManager(), + m_context, AccelTreeResourceLoader::ContinueOnError)); + if (reply) { + // parse the included schema by a different parser but with the same context + XsdSchemaParser parser(m_context, m_parserContext, reply.data()); + parser.setDocumentURI(url); + parser.setTargetNamespaceExtended(m_targetNamespace); + parser.setIncludedSchemas(m_includedSchemas); + parser.setImportedSchemas(m_importedSchemas); + parser.setRedefinedSchemas(m_redefinedSchemas); + if (!parser.parse(XsdSchemaParser::IncludeParser)) + return; + } + } + + validateIdAttribute("include"); + + TagValidationHandler tagValidator(XsdTagScope::Include, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + m_schema->addAnnotation(annotation); + } else { + parseUnknown(); + } + } + } + + tagValidator.finalize(); +} + +void XsdSchemaParser::parseImport() +{ + Q_ASSERT(isStartElement() && XsdSchemaToken::toToken(name()) == XsdSchemaToken::Import && + XsdSchemaToken::toToken(namespaceUri()) == XsdSchemaToken::XML_NS_SCHEMA_URI); + + validateElement(XsdTagScope::Import); + + // parse attributes + QString importNamespace; + if (hasAttribute(QString::fromLatin1("namespace"))) { + importNamespace = readAttribute(QString::fromLatin1("namespace")); + if (importNamespace == m_targetNamespace) { + error(QtXmlPatterns::tr("%1 element is not allowed to have the same %2 attribute value as the target namespace %3") + .arg(formatElement("import")) + .arg(formatAttribute("namespace")) + .arg(formatURI(m_targetNamespace))); + return; + } + } else { + if (m_targetNamespace.isEmpty()) { + error(QtXmlPatterns::tr("%1 element without %2 attribute is not allowed inside schema without target namespace") + .arg(formatElement("import")) + .arg(formatAttribute("namespace"))); + return; + } + } + + if (hasAttribute(QString::fromLatin1("schemaLocation"))) { + const QString schemaLocation = readAttribute(QString::fromLatin1("schemaLocation")); + + QUrl url(schemaLocation); + if (url.isRelative()) { + Q_ASSERT(m_documentURI.isValid()); + + url = m_documentURI.resolved(url); + } + + if (m_importedSchemas.contains(url)) { + // we have imported that file already, according to the schema spec we are + // allowed to silently skip it. + } else { + m_importedSchemas.insert(url); + + // as it is possible that well known schemas (e.g. XSD for XML) are only referenced by + // namespace we should add it as well + m_importedSchemas.insert(importNamespace); + + AutoPtr<QNetworkReply> reply(AccelTreeResourceLoader::load(url, m_context->networkAccessManager(), + m_context, AccelTreeResourceLoader::ContinueOnError)); + if (reply) { + // parse the included schema by a different parser but with the same context + XsdSchemaParser parser(m_context, m_parserContext, reply.data()); + parser.setDocumentURI(url); + parser.setTargetNamespace(importNamespace); + parser.setIncludedSchemas(m_includedSchemas); + parser.setImportedSchemas(m_importedSchemas); + parser.setRedefinedSchemas(m_redefinedSchemas); + if (!parser.parse(XsdSchemaParser::ImportParser)) + return; + } + } + } else { + // check whether it is a known namespace we have a builtin schema for + if (!importNamespace.isEmpty()) { + if (!m_importedSchemas.contains(importNamespace)) { + m_importedSchemas.insert(importNamespace); + + QFile file(QString::fromLatin1(":") + importNamespace); + if (file.open(QIODevice::ReadOnly)) { + XsdSchemaParser parser(m_context, m_parserContext, &file); + parser.setDocumentURI(importNamespace); + parser.setTargetNamespace(importNamespace); + parser.setIncludedSchemas(m_includedSchemas); + parser.setImportedSchemas(m_importedSchemas); + parser.setRedefinedSchemas(m_redefinedSchemas); + if (!parser.parse(XsdSchemaParser::ImportParser)) + return; + } + } + } else { + // we don't import anything... that is valid according to the schema + } + } + + validateIdAttribute("import"); + + TagValidationHandler tagValidator(XsdTagScope::Import, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + m_schema->addAnnotation(annotation); + } else { + parseUnknown(); + } + } + } + + tagValidator.finalize(); +} + +void XsdSchemaParser::parseRedefine() +{ + Q_ASSERT(isStartElement() && XsdSchemaToken::toToken(name()) == XsdSchemaToken::Redefine && + XsdSchemaToken::toToken(namespaceUri()) == XsdSchemaToken::XML_NS_SCHEMA_URI); + + validateElement(XsdTagScope::Redefine); + + // parse attributes + validateIdAttribute("redefine"); + + const QString schemaLocation = readAttribute(QString::fromLatin1("schemaLocation")); + + TagValidationHandler tagValidator(XsdTagScope::Redefine, this, m_namePool); + + XsdSimpleType::List redefinedSimpleTypes; + XsdComplexType::List redefinedComplexTypes; + XsdModelGroup::List redefinedGroups; + XsdAttributeGroup::List redefinedAttributeGroups; + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + m_schema->addAnnotation(annotation); + } else if (isSchemaTag(XsdSchemaToken::SimpleType, token, namespaceToken)) { + const XsdSimpleType::Ptr type = parseGlobalSimpleType(); + redefinedSimpleTypes.append(type); + + const QXmlName baseTypeName = m_parserContext->resolver()->baseTypeNameOfType(type); + if (baseTypeName != type->name(m_namePool)) { + error(QString::fromLatin1("redefined simple type %1 must have itself as base type").arg(formatType(m_namePool, type))); + return; + } + } else if (isSchemaTag(XsdSchemaToken::ComplexType, token, namespaceToken)) { + const XsdComplexType::Ptr type = parseGlobalComplexType(); + redefinedComplexTypes.append(type); + + // @see http://www.w3.org/TR/xmlschema11-1/#src-redefine + + // 5 + const QXmlName baseTypeName = m_parserContext->resolver()->baseTypeNameOfType(type); + if (baseTypeName != type->name(m_namePool)) { + error(QString::fromLatin1("redefined complex type %1 must have itself as base type").arg(formatType(m_namePool, type))); + return; + } + } else if (isSchemaTag(XsdSchemaToken::Group, token, namespaceToken)) { + const XsdModelGroup::Ptr group = parseNamedGroup(); + redefinedGroups.append(group); + } else if (isSchemaTag(XsdSchemaToken::AttributeGroup, token, namespaceToken)) { + const XsdAttributeGroup::Ptr group = parseNamedAttributeGroup(); + redefinedAttributeGroups.append(group); + + } else { + parseUnknown(); + } + } + } + + bool locationMustResolve = false; + if (!redefinedSimpleTypes.isEmpty() || !redefinedComplexTypes.isEmpty() || + !redefinedGroups.isEmpty() || !redefinedAttributeGroups.isEmpty()) { + locationMustResolve = true; + } + + QUrl url(schemaLocation); + if (url.isRelative()) { + Q_ASSERT(m_documentURI.isValid()); + + url = m_documentURI.resolved(url); + } + + // we parse the schema given in the redefine tag into its own context + const XsdSchemaParserContext::Ptr redefinedContext(new XsdSchemaParserContext(m_namePool, m_context)); + + if (m_redefinedSchemas.contains(url)) { + // we have redefined that file already, according to the schema spec we are + // allowed to silently skip it. + } else { + m_redefinedSchemas.insert(url); + QNetworkReply *reply = AccelTreeResourceLoader::load(url, m_context->networkAccessManager(), + m_context, + (locationMustResolve ? AccelTreeResourceLoader::FailOnError : AccelTreeResourceLoader::ContinueOnError)); + if (reply) { + // parse the included schema by a different parser but with the same context + XsdSchemaParser parser(m_context, redefinedContext, reply); + parser.setDocumentURI(url); + parser.setTargetNamespaceExtended(m_targetNamespace); + parser.setIncludedSchemas(m_includedSchemas); + parser.setImportedSchemas(m_importedSchemas); + parser.setRedefinedSchemas(m_redefinedSchemas); + if (!parser.parse(XsdSchemaParser::RedefineParser)) + return; + + delete reply; + } + } + + XsdSimpleType::List contextSimpleTypes = redefinedContext->schema()->simpleTypes(); + XsdComplexType::List contextComplexTypes = redefinedContext->schema()->complexTypes(); + XsdModelGroup::List contextGroups = redefinedContext->schema()->elementGroups(); + XsdAttributeGroup::List contextAttributeGroups = redefinedContext->schema()->attributeGroups(); + + // now we do the actual redefinition: + + // iterate over all redefined simple types + for (int i = 0; i < redefinedSimpleTypes.count(); ++i) { + XsdSimpleType::Ptr redefinedType = redefinedSimpleTypes.at(i); + + //TODONEXT: validation + + // search the definition they override in the context types + bool found = false; + for (int j = 0; j < contextSimpleTypes.count(); ++j) { + XsdSimpleType::Ptr contextType = contextSimpleTypes.at(j); + + if (redefinedType->name(m_namePool) == contextType->name(m_namePool)) { // we found the right type + found = true; + + // 1) set name of context type to empty name + contextType->setName(m_parserContext->createAnonymousName(QString())); + + // 2) set the context type as base type for the redefined type + redefinedType->setWxsSuperType(contextType); + + // 3) remove the base type resolving job from the resolver as + // we have set the base type here explicitely + m_parserContext->resolver()->removeSimpleRestrictionBase(redefinedType); + + // 4) add the redefined type to the schema + addType(redefinedType); + + // 5) add the context type as anonymous type, so the resolver + // can resolve it further. + addAnonymousType(contextType); + + // 6) remove the context type from the list + contextSimpleTypes.removeAt(j); + + break; + } + } + + if (!found) { + error(QString::fromLatin1("no matching type found to redefine simple type %1").arg(formatType(m_namePool, redefinedType))); + return; + } + } + + // add all remaining context simple types to the schema + for (int i = 0; i < contextSimpleTypes.count(); ++i) { + addType(contextSimpleTypes.at(i)); + } + + // iterate over all redefined complex types + for (int i = 0; i < redefinedComplexTypes.count(); ++i) { + XsdComplexType::Ptr redefinedType = redefinedComplexTypes.at(i); + + //TODONEXT: validation + + // search the definition they override in the context types + bool found = false; + for (int j = 0; j < contextComplexTypes.count(); ++j) { + XsdComplexType::Ptr contextType = contextComplexTypes.at(j); + + if (redefinedType->name(m_namePool) == contextType->name(m_namePool)) { // we found the right type + found = true; + + // 1) set name of context type to empty name + contextType->setName(m_parserContext->createAnonymousName(QString())); + + // 2) set the context type as base type for the redefined type + redefinedType->setWxsSuperType(contextType); + + // 3) remove the base type resolving job from the resolver as + // we have set the base type here explicitely + m_parserContext->resolver()->removeComplexBaseType(redefinedType); + + // 4) add the redefined type to the schema + addType(redefinedType); + + // 5) add the context type as anonymous type, so the resolver + // can resolve its attribute uses etc. + addAnonymousType(contextType); + + // 6) remove the context type from the list + contextComplexTypes.removeAt(j); + + break; + } + } + + if (!found) { + error(QString::fromLatin1("no matching type found to redefine complex type %1").arg(formatType(m_namePool, redefinedType))); + return; + } + } + + // iterate over all redefined element groups + for (int i = 0; i < redefinedGroups.count(); ++i) { + const XsdModelGroup::Ptr group(redefinedGroups.at(i)); + + // @see http://www.w3.org/TR/xmlschema11-1/#src-redefine + + // 6 + const XsdParticle::List particles = collectGroupRef(group); + XsdParticle::Ptr referencedParticle; + int sameNameCounter = 0; + for (int i = 0; i < particles.count(); ++i) { + const XsdReference::Ptr ref(particles.at(i)->term()); + if (ref->referenceName() == group->name(m_namePool)) { + referencedParticle = particles.at(i); + + if (referencedParticle->minimumOccurs() != 1 || referencedParticle->maximumOccurs() != 1 || referencedParticle->maximumOccursUnbounded()) { // 6.1.2 + error(QString::fromLatin1("redefined group %1 can not contain reference to itself with minOccurs or maxOccurs != 1").arg(formatKeyword(group->displayName(m_namePool)))); + return; + } + sameNameCounter++; + } + } + + // 6.1.1 + if (sameNameCounter > 1) { + error(QString::fromLatin1("redefined group %1 can not contain multiple references to itself").arg(formatKeyword(group->displayName(m_namePool)))); + return; + } + + // search the group definition in the included schema (S2) + XsdModelGroup::Ptr contextGroup; + for (int j = 0; j < contextGroups.count(); ++j) { + if (group->name(m_namePool) == contextGroups.at(j)->name(m_namePool)) { + contextGroup = contextGroups.at(j); + break; + } + } + + if (!contextGroup) { // 6.2.1 + error(QString::fromLatin1("redefined group %1 has no occurrence in included schema").arg(formatKeyword(group->displayName(m_namePool)))); + return; + } + + if (sameNameCounter == 1) { + // there was a self reference in the redefined group, so use the + // group from the included schema + + // set a anonymous name to the group of the included schema + contextGroup->setName(m_parserContext->createAnonymousName(m_namePool->stringForNamespace(contextGroup->name(m_namePool).namespaceURI()))); + + // replace the self-reference with the group from the included schema + referencedParticle->setTerm(contextGroup); + + addElementGroup(group); + + addElementGroup(contextGroup); + contextGroups.removeAll(contextGroup); + } else { + // there was no self reference in the redefined group + + // just add the redefined group... + addElementGroup(group); + + // we have to add them, otherwise it is not resolved and we can't validate it later + contextGroup->setName(m_parserContext->createAnonymousName(m_namePool->stringForNamespace(contextGroup->name(m_namePool).namespaceURI()))); + addElementGroup(contextGroup); + + m_schemaResolver->addRedefinedGroups(group, contextGroup); + + // ...and forget about the group from the included schema + contextGroups.removeAll(contextGroup); + } + } + + // iterate over all redefined attribute groups + for (int i = 0; i < redefinedAttributeGroups.count(); ++i) { + const XsdAttributeGroup::Ptr group(redefinedAttributeGroups.at(i)); + + // @see http://www.w3.org/TR/xmlschema11-1/#src-redefine + + // 7 + + // 7.1 + int sameNameCounter = 0; + for (int j = 0; j < group->attributeUses().count(); ++j) { + const XsdAttributeUse::Ptr attributeUse(group->attributeUses().at(j)); + if (attributeUse->isReference()) { + const XsdAttributeReference::Ptr reference(attributeUse); + if (reference->type() == XsdAttributeReference::AttributeGroup) { + if (group->name(m_namePool) == reference->referenceName()) + sameNameCounter++; + } + } + } + if (sameNameCounter > 1) { + error(QString::fromLatin1("redefined attribute group %1 can not contain multiple references to itself").arg(formatKeyword(group->displayName(m_namePool)))); + return; + } + + // search the attribute group definition in the included schema (S2) + XsdAttributeGroup::Ptr baseGroup; + for (int j = 0; j < contextAttributeGroups.count(); ++j) { + const XsdAttributeGroup::Ptr contextGroup(contextAttributeGroups.at(j)); + if (group->name(m_namePool) == contextGroup->name(m_namePool)) { + baseGroup = contextGroup; + break; + } + } + + if (!baseGroup) { // 7.2.1 + error(QString::fromLatin1("redefined attribute group %1 has no occurrence in included schema").arg(formatKeyword(group->displayName(m_namePool)))); + return; + } + + if (sameNameCounter == 1) { + + // first set an anonymous name to the attribute group from the included + // schema + baseGroup->setName(m_parserContext->createAnonymousName(m_namePool->stringForNamespace(baseGroup->name(m_namePool).namespaceURI()))); + + // iterate over the attribute uses of the redefined attribute group + // and replace the self-reference with the attribute group from the + // included schema + for (int j = 0; j < group->attributeUses().count(); ++j) { + const XsdAttributeUse::Ptr attributeUse(group->attributeUses().at(j)); + if (attributeUse->isReference()) { + const XsdAttributeReference::Ptr reference(attributeUse); + if (reference->type() == XsdAttributeReference::AttributeGroup) { + if (group->name(m_namePool) == reference->referenceName()) { + reference->setReferenceName(baseGroup->name(m_namePool)); + break; + } + } + } + } + + // add both groups to the target schema + addAttributeGroup(baseGroup); + addAttributeGroup(group); + + contextAttributeGroups.removeAll(baseGroup); + } + + if (sameNameCounter == 0) { // 7.2 + + // we have to add them, otherwise it is not resolved and we can't validate it later + baseGroup->setName(m_parserContext->createAnonymousName(m_namePool->stringForNamespace(baseGroup->name(m_namePool).namespaceURI()))); + addAttributeGroup(baseGroup); + + m_schemaResolver->addRedefinedAttributeGroups(group, baseGroup); + + // just add the redefined attribute group to the target schema... + addAttributeGroup(group); + + // ... and forget about the one from the included schema + contextAttributeGroups.removeAll(baseGroup); + } + } + + // add all remaining context complex types to the schema + for (int i = 0; i < contextComplexTypes.count(); ++i) { + addType(contextComplexTypes.at(i)); + } + + // add all remaining context element groups to the schema + for (int i = 0; i < contextGroups.count(); ++i) { + addElementGroup(contextGroups.at(i)); + } + + // add all remaining context attribute groups to the schema + for (int i = 0; i < contextAttributeGroups.count(); ++i) { + addAttributeGroup(contextAttributeGroups.at(i)); + } + + // copy all elements, attributes and notations + const XsdElement::List contextElements = redefinedContext->schema()->elements(); + for (int i = 0; i < contextElements.count(); ++i) { + addElement(contextElements.at(i)); + } + + const XsdAttribute::List contextAttributes = redefinedContext->schema()->attributes(); + for (int i = 0; i < contextAttributes.count(); ++i) { + addAttribute(contextAttributes.at(i)); + } + + const XsdNotation::List contextNotations = redefinedContext->schema()->notations(); + for (int i = 0; i < contextNotations.count(); ++i) { + addNotation(contextNotations.at(i)); + } + + // push all data to resolve from the context resolver to our resolver + redefinedContext->resolver()->copyDataTo(m_parserContext->resolver()); + + tagValidator.finalize(); +} + +XsdAnnotation::Ptr XsdSchemaParser::parseAnnotation() +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::Annotation, this); + + validateElement(XsdTagScope::Annotation); + + // parse attributes + validateIdAttribute("annotation"); + + TagValidationHandler tagValidator(XsdTagScope::Annotation, this, m_namePool); + + const XsdAnnotation::Ptr annotation(new XsdAnnotation()); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Appinfo, token, namespaceToken)) { + const XsdApplicationInformation::Ptr info = parseAppInfo(); + annotation->addApplicationInformation(info); + } else if (isSchemaTag(XsdSchemaToken::Documentation, token, namespaceToken)) { + const XsdDocumentation::Ptr documentation = parseDocumentation(); + annotation->addDocumentation(documentation); + } else { + parseUnknown(); + } + } + } + + tagValidator.finalize(); + + return annotation; +} + +XsdApplicationInformation::Ptr XsdSchemaParser::parseAppInfo() +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::Appinfo, this); + + validateElement(XsdTagScope::AppInfo); + + const XsdApplicationInformation::Ptr info(new XsdApplicationInformation()); + + // parse attributes + if (hasAttribute(QString::fromLatin1("source"))) { + const QString value = readAttribute(QString::fromLatin1("source")); + + if (!isValidUri(value)) { + attributeContentError("source", "appinfo", value, BuiltinTypes::xsAnyURI); + return info; + } + + if (!value.isEmpty()) { + const AnyURI::Ptr source = AnyURI::fromLexical(value); + info->setSource(source); + } + } + + while (!atEnd()) { //EVAL: can be anything... what to do? + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) + parseUnknownDocumentation(); + } + + return info; +} + +XsdDocumentation::Ptr XsdSchemaParser::parseDocumentation() +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::Documentation, this); + + validateElement(XsdTagScope::Documentation); + + const XsdDocumentation::Ptr documentation(new XsdDocumentation()); + + // parse attributes + if (hasAttribute(QString::fromLatin1("source"))) { + const QString value = readAttribute(QString::fromLatin1("source")); + + if (!isValidUri(value)) { + attributeContentError("source", "documentation", value, BuiltinTypes::xsAnyURI); + return documentation; + } + + if (!value.isEmpty()) { + const AnyURI::Ptr source = AnyURI::fromLexical(value); + documentation->setSource(source); + } + } + + if (hasAttribute(CommonNamespaces::XML, QString::fromLatin1("lang"))) { + const QString value = readAttribute(QString::fromLatin1("lang"), CommonNamespaces::XML); + + const QRegExp exp(QString::fromLatin1("[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*")); + if (!exp.exactMatch(value)) { + attributeContentError("xml:lang", "documentation", value); + return documentation; + } + } + + while (!atEnd()) { //EVAL: can by any... what to do? + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) + parseUnknownDocumentation(); + } + + return documentation; +} + +void XsdSchemaParser::parseDefaultOpenContent() +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::DefaultOpenContent, this); + + validateElement(XsdTagScope::DefaultOpenContent); + + m_defaultOpenContent = XsdComplexType::OpenContent::Ptr(new XsdComplexType::OpenContent()); + + if (hasAttribute(QString::fromLatin1("appliesToEmpty"))) { + const QString value = readAttribute(QString::fromLatin1("appliesToEmpty")); + const Boolean::Ptr appliesToEmpty = Boolean::fromLexical(value); + if (appliesToEmpty->hasError()) { + attributeContentError("appliesToEmpty", "defaultOpenContent", value, BuiltinTypes::xsBoolean); + return; + } + + m_defaultOpenContentAppliesToEmpty = appliesToEmpty->as<Boolean>()->value(); + } else { + m_defaultOpenContentAppliesToEmpty = false; + } + + if (hasAttribute(QString::fromLatin1("mode"))) { + const QString mode = readAttribute(QString::fromLatin1("mode")); + + if (mode == QString::fromLatin1("interleave")) { + m_defaultOpenContent->setMode(XsdComplexType::OpenContent::Interleave); + } else if (mode == QString::fromLatin1("suffix")) { + m_defaultOpenContent->setMode(XsdComplexType::OpenContent::Suffix); + } else { + attributeContentError("mode", "defaultOpenContent", mode); + return; + } + } else { + m_defaultOpenContent->setMode(XsdComplexType::OpenContent::Interleave); + } + + validateIdAttribute("defaultOpenContent"); + + TagValidationHandler tagValidator(XsdTagScope::DefaultOpenContent, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + m_defaultOpenContent->addAnnotation(annotation); + } else if (isSchemaTag(XsdSchemaToken::Any, token, namespaceToken)) { + const XsdParticle::Ptr particle; + const XsdWildcard::Ptr wildcard = parseAny(particle); + m_defaultOpenContent->setWildcard(wildcard); + } else { + parseUnknown(); + } + } + } + + tagValidator.finalize(); +} + +XsdSimpleType::Ptr XsdSchemaParser::parseGlobalSimpleType() +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::SimpleType, this); + + validateElement(XsdTagScope::GlobalSimpleType); + + const XsdSimpleType::Ptr simpleType(new XsdSimpleType()); + simpleType->setCategory(XsdSimpleType::SimpleTypeAtomic); // just to make sure it's not invalid + + // parse attributes + const SchemaType::DerivationConstraints allowedConstraints(SchemaType::ExtensionConstraint | SchemaType::RestrictionConstraint | SchemaType::ListConstraint | SchemaType::UnionConstraint); + simpleType->setDerivationConstraints(readDerivationConstraintAttribute(allowedConstraints, "simpleType")); + + const QXmlName objectName = m_namePool->allocateQName(m_targetNamespace, readNameAttribute("simpleType")); + simpleType->setName(objectName); + + validateIdAttribute("simpleType"); + + TagValidationHandler tagValidator(XsdTagScope::GlobalSimpleType, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + simpleType->addAnnotation(annotation); + } else if (isSchemaTag(XsdSchemaToken::Restriction, token, namespaceToken)) { + parseSimpleRestriction(simpleType); + } else if (isSchemaTag(XsdSchemaToken::List, token, namespaceToken)) { + parseList(simpleType); + } else if (isSchemaTag(XsdSchemaToken::Union, token, namespaceToken)) { + parseUnion(simpleType); + } else { + parseUnknown(); + } + } + } + + tagValidator.finalize(); + + return simpleType; +} + +XsdSimpleType::Ptr XsdSchemaParser::parseLocalSimpleType() +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::SimpleType, this); + + validateElement(XsdTagScope::LocalSimpleType); + + const XsdSimpleType::Ptr simpleType(new XsdSimpleType()); + simpleType->setCategory(XsdSimpleType::SimpleTypeAtomic); // just to make sure it's not invalid + simpleType->setName(m_parserContext->createAnonymousName(m_targetNamespace)); + + validateIdAttribute("simpleType"); + + TagValidationHandler tagValidator(XsdTagScope::LocalSimpleType, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + simpleType->addAnnotation(annotation); + } else if (isSchemaTag(XsdSchemaToken::Restriction, token, namespaceToken)) { + parseSimpleRestriction(simpleType); + } else if (isSchemaTag(XsdSchemaToken::List, token, namespaceToken)) { + parseList(simpleType); + } else if (isSchemaTag(XsdSchemaToken::Union, token, namespaceToken)) { + parseUnion(simpleType); + } else { + parseUnknown(); + } + } + } + + tagValidator.finalize(); + + return simpleType; +} + +void XsdSchemaParser::parseSimpleRestriction(const XsdSimpleType::Ptr &ptr) +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::Restriction, this); + + validateElement(XsdTagScope::SimpleRestriction); + + ptr->setDerivationMethod(XsdSimpleType::DerivationRestriction); + + // The base attribute and simpleType member are mutually exclusive, + // so we keep track of that + bool hasBaseAttribute = false; + bool hasBaseTypeSpecified = false; + + QXmlName baseName; + if (hasAttribute(QString::fromLatin1("base"))) { + const QString base = readQNameAttribute(QString::fromLatin1("base"), "restriction"); + convertName(base, NamespaceSupport::ElementName, baseName); // translate qualified name into QXmlName + m_schemaResolver->addSimpleRestrictionBase(ptr, baseName, currentSourceLocation()); // add to resolver + + hasBaseAttribute = true; + hasBaseTypeSpecified = true; + } + validateIdAttribute("restriction"); + + XsdFacet::Hash facets; + QList<XsdFacet::Ptr> patternFacets; + QList<XsdFacet::Ptr> enumerationFacets; + QList<XsdFacet::Ptr> assertionFacets; + + TagValidationHandler tagValidator(XsdTagScope::SimpleRestriction, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + ptr->addAnnotation(annotation); + } else if (isSchemaTag(XsdSchemaToken::SimpleType, token, namespaceToken)) { + if (hasBaseAttribute) { + error(QtXmlPatterns::tr("%1 element is not allowed inside %2 element if %3 attribute is present") + .arg(formatElement("simpleType")) + .arg(formatElement("restriction")) + .arg(formatAttribute("base"))); + return; + } + + const XsdSimpleType::Ptr type = parseLocalSimpleType(); + type->setContext(ptr); + ptr->setWxsSuperType(type); + ptr->setCategory(type->category()); + hasBaseTypeSpecified = true; + + // add it to list of anonymous types as well + addAnonymousType(type); + } else if (isSchemaTag(XsdSchemaToken::MinExclusive, token, namespaceToken)) { + const XsdFacet::Ptr facet = parseMinExclusiveFacet(); + addFacet(facet, facets, ptr); + } else if (isSchemaTag(XsdSchemaToken::MinInclusive, token, namespaceToken)) { + const XsdFacet::Ptr facet = parseMinInclusiveFacet(); + addFacet(facet, facets, ptr); + } else if (isSchemaTag(XsdSchemaToken::MaxExclusive, token, namespaceToken)) { + const XsdFacet::Ptr facet = parseMaxExclusiveFacet(); + addFacet(facet, facets, ptr); + } else if (isSchemaTag(XsdSchemaToken::MaxInclusive, token, namespaceToken)) { + const XsdFacet::Ptr facet = parseMaxInclusiveFacet(); + addFacet(facet, facets, ptr); + } else if (isSchemaTag(XsdSchemaToken::TotalDigits, token, namespaceToken)) { + const XsdFacet::Ptr facet = parseTotalDigitsFacet(); + addFacet(facet, facets, ptr); + } else if (isSchemaTag(XsdSchemaToken::FractionDigits, token, namespaceToken)) { + const XsdFacet::Ptr facet = parseFractionDigitsFacet(); + addFacet(facet, facets, ptr); + } else if (isSchemaTag(XsdSchemaToken::Length, token, namespaceToken)) { + const XsdFacet::Ptr facet = parseLengthFacet(); + addFacet(facet, facets, ptr); + } else if (isSchemaTag(XsdSchemaToken::MinLength, token, namespaceToken)) { + const XsdFacet::Ptr facet = parseMinLengthFacet(); + addFacet(facet, facets, ptr); + } else if (isSchemaTag(XsdSchemaToken::MaxLength, token, namespaceToken)) { + const XsdFacet::Ptr facet = parseMaxLengthFacet(); + addFacet(facet, facets, ptr); + } else if (isSchemaTag(XsdSchemaToken::Enumeration, token, namespaceToken)) { + const XsdFacet::Ptr facet = parseEnumerationFacet(); + enumerationFacets.append(facet); + } else if (isSchemaTag(XsdSchemaToken::WhiteSpace, token, namespaceToken)) { + const XsdFacet::Ptr facet = parseWhiteSpaceFacet(); + addFacet(facet, facets, ptr); + } else if (isSchemaTag(XsdSchemaToken::Pattern, token, namespaceToken)) { + const XsdFacet::Ptr facet = parsePatternFacet(); + patternFacets.append(facet); + } else if (isSchemaTag(XsdSchemaToken::Assertion, token, namespaceToken)) { + const XsdFacet::Ptr facet = parseAssertionFacet(); + assertionFacets.append(facet); + } else { + parseUnknown(); + } + } + } + + if (!hasBaseTypeSpecified) { + error(QtXmlPatterns::tr("%1 element has neither %2 attribute nor %3 child element") + .arg(formatElement("restriction")) + .arg(formatAttribute("base")) + .arg(formatElement("simpleType"))); + return; + } + + // merge all pattern facets into one multi value facet + if (!patternFacets.isEmpty()) { + const XsdFacet::Ptr patternFacet(new XsdFacet()); + patternFacet->setType(XsdFacet::Pattern); + + AtomicValue::List multiValue; + for (int i = 0; i < patternFacets.count(); ++i) + multiValue << patternFacets.at(i)->multiValue(); + + patternFacet->setMultiValue(multiValue); + addFacet(patternFacet, facets, ptr); + } + + // merge all enumeration facets into one multi value facet + if (!enumerationFacets.isEmpty()) { + const XsdFacet::Ptr enumerationFacet(new XsdFacet()); + enumerationFacet->setType(XsdFacet::Enumeration); + + AtomicValue::List multiValue; + for (int i = 0; i < enumerationFacets.count(); ++i) + multiValue << enumerationFacets.at(i)->multiValue(); + + enumerationFacet->setMultiValue(multiValue); + addFacet(enumerationFacet, facets, ptr); + } + + // merge all assertion facets into one facet + if (!assertionFacets.isEmpty()) { + const XsdFacet::Ptr assertionFacet(new XsdFacet()); + assertionFacet->setType(XsdFacet::Assertion); + + XsdAssertion::List assertions; + for (int i = 0; i < assertionFacets.count(); ++i) + assertions << assertionFacets.at(i)->assertions(); + + assertionFacet->setAssertions(assertions); + addFacet(assertionFacet, facets, ptr); + } + + ptr->setFacets(facets); + + tagValidator.finalize(); +} + +void XsdSchemaParser::parseList(const XsdSimpleType::Ptr &ptr) +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::List, this); + + validateElement(XsdTagScope::List); + + ptr->setCategory(XsdSimpleType::SimpleTypeList); + ptr->setDerivationMethod(XsdSimpleType::DerivationList); + ptr->setWxsSuperType(BuiltinTypes::xsAnySimpleType); + + // The itemType attribute and simpleType member are mutually exclusive, + // so we keep track of that + bool hasItemTypeAttribute = false; + bool hasItemTypeSpecified = false; + + if (hasAttribute(QString::fromLatin1("itemType"))) { + const QString itemType = readQNameAttribute(QString::fromLatin1("itemType"), "list"); + QXmlName typeName; + convertName(itemType, NamespaceSupport::ElementName, typeName); // translate qualified name into QXmlName + m_schemaResolver->addSimpleListType(ptr, typeName, currentSourceLocation()); // add to resolver + + hasItemTypeAttribute = true; + hasItemTypeSpecified = true; + } + + validateIdAttribute("list"); + + TagValidationHandler tagValidator(XsdTagScope::List, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + ptr->addAnnotation(annotation); + } else if (isSchemaTag(XsdSchemaToken::SimpleType, token, namespaceToken)) { + if (hasItemTypeAttribute) { + error(QtXmlPatterns::tr("%1 element is not allowed inside %2 element if %3 attribute is present") + .arg(formatElement("simpleType")) + .arg(formatElement("list")) + .arg(formatAttribute("itemType"))); + return; + } + + const XsdSimpleType::Ptr type = parseLocalSimpleType(); + type->setContext(ptr); + ptr->setItemType(type); + + hasItemTypeSpecified = true; + + // add it to list of anonymous types as well + addAnonymousType(type); + } else { + parseUnknown(); + } + } + } + + if (!hasItemTypeSpecified) { + error(QtXmlPatterns::tr("%1 element has neither %2 attribute nor %3 child element") + .arg(formatElement("list")) + .arg(formatAttribute("itemType")) + .arg(formatElement("simpleType"))); + return; + } + + tagValidator.finalize(); + + // add the default white space facet that every simple type with list derivation has + const XsdFacet::Ptr defaultFacet(new XsdFacet()); + defaultFacet->setType(XsdFacet::WhiteSpace); + defaultFacet->setFixed(true); + defaultFacet->setValue(DerivedString<TypeString>::fromLexical(m_namePool, XsdSchemaToken::toString(XsdSchemaToken::Collapse))); + XsdFacet::Hash facets; + facets.insert(defaultFacet->type(), defaultFacet); + ptr->setFacets(facets); +} + +void XsdSchemaParser::parseUnion(const XsdSimpleType::Ptr &ptr) +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::Union, this); + + validateElement(XsdTagScope::Union); + + ptr->setCategory(XsdSimpleType::SimpleTypeUnion); + ptr->setDerivationMethod(XsdSimpleType::DerivationUnion); + ptr->setWxsSuperType(BuiltinTypes::xsAnySimpleType); + + // The memberTypes attribute is not allowed to be empty, + // so we keep track of that + bool hasMemberTypesAttribute = false; + bool hasMemberTypesSpecified = false; + + if (hasAttribute(QString::fromLatin1("memberTypes"))) { + hasMemberTypesAttribute = true; + + const QStringList memberTypes = readAttribute(QString::fromLatin1("memberTypes")).split(QLatin1Char(' '), QString::SkipEmptyParts); + QList<QXmlName> typeNames; + + for (int i = 0; i < memberTypes.count(); ++i) { + QXmlName typeName; + convertName(memberTypes.at(i), NamespaceSupport::ElementName, typeName); // translate qualified name into QXmlName + typeNames.append(typeName); + } + + if (!typeNames.isEmpty()) { + m_schemaResolver->addSimpleUnionTypes(ptr, typeNames, currentSourceLocation()); // add to resolver + hasMemberTypesSpecified = true; + } + } + + validateIdAttribute("union"); + + AnySimpleType::List memberTypes; + + TagValidationHandler tagValidator(XsdTagScope::Union, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + ptr->addAnnotation(annotation); + } else if (isSchemaTag(XsdSchemaToken::SimpleType, token, namespaceToken)) { + const XsdSimpleType::Ptr type = parseLocalSimpleType(); + type->setContext(ptr); + memberTypes.append(type); + + // add it to list of anonymous types as well + addAnonymousType(type); + } else { + parseUnknown(); + } + } + } + + if (!memberTypes.isEmpty()) { + ptr->setMemberTypes(memberTypes); + hasMemberTypesSpecified = true; + } + + if (!hasMemberTypesSpecified) { + error(QtXmlPatterns::tr("%1 element has neither %2 attribute nor %3 child element") + .arg(formatElement("union")) + .arg(formatAttribute("memberTypes")) + .arg(formatElement("simpleType"))); + return; + } + + tagValidator.finalize(); +} + +XsdFacet::Ptr XsdSchemaParser::parseMinExclusiveFacet() +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::MinExclusive, this); + + validateElement(XsdTagScope::MinExclusiveFacet); + + const XsdFacet::Ptr facet = XsdFacet::Ptr(new XsdFacet()); + facet->setType(XsdFacet::MinimumExclusive); + + // parse attributes + if (hasAttribute(QString::fromLatin1("fixed"))) { + const QString value = readAttribute(QString::fromLatin1("fixed")); + const Boolean::Ptr fixed = Boolean::fromLexical(value); + if (fixed->hasError()) { + attributeContentError("fixed", "minExclusive", value, BuiltinTypes::xsBoolean); + return facet; + } + + facet->setFixed(fixed->as<Boolean>()->value()); + } else { + facet->setFixed(false); // the default value + } + + // as minExclusive can have a value of type anySimpleType, we just read + // the string here and store it for later intepretation + const QString value = readAttribute(QString::fromLatin1("value")); + DerivedString<TypeString>::Ptr string = DerivedString<TypeString>::fromLexical(m_namePool, value); + if (string->hasError()) { + attributeContentError("value", "minExclusive", value, BuiltinTypes::xsAnySimpleType); + return facet; + } else { + facet->setValue(string); + } + + validateIdAttribute("minExclusive"); + + TagValidationHandler tagValidator(XsdTagScope::MinExclusiveFacet, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + facet->addAnnotation(annotation); + } else { + parseUnknown(); + } + } + } + + tagValidator.finalize(); + + return facet; +} + +XsdFacet::Ptr XsdSchemaParser::parseMinInclusiveFacet() +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::MinInclusive, this); + + validateElement(XsdTagScope::MinInclusiveFacet); + + const XsdFacet::Ptr facet = XsdFacet::Ptr(new XsdFacet()); + facet->setType(XsdFacet::MinimumInclusive); + + // parse attributes + if (hasAttribute(QString::fromLatin1("fixed"))) { + const QString value = readAttribute(QString::fromLatin1("fixed")); + const Boolean::Ptr fixed = Boolean::fromLexical(value); + if (fixed->hasError()) { + attributeContentError("fixed", "minInclusive", value, BuiltinTypes::xsBoolean); + return facet; + } + + facet->setFixed(fixed->as<Boolean>()->value()); + } else { + facet->setFixed(false); // the default value + } + + // as minInclusive can have a value of type anySimpleType, we just read + // the string here and store it for later intepretation + const QString value = readAttribute(QString::fromLatin1("value")); + DerivedString<TypeString>::Ptr string = DerivedString<TypeString>::fromLexical(m_namePool, value); + if (string->hasError()) { + attributeContentError("value", "minInclusive", value, BuiltinTypes::xsAnySimpleType); + return facet; + } else { + facet->setValue(string); + } + + validateIdAttribute("minInclusive"); + + TagValidationHandler tagValidator(XsdTagScope::MinInclusiveFacet, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + facet->addAnnotation(annotation); + } else { + parseUnknown(); + } + } + } + + tagValidator.finalize(); + + return facet; +} + +XsdFacet::Ptr XsdSchemaParser::parseMaxExclusiveFacet() +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::MaxExclusive, this); + + validateElement(XsdTagScope::MaxExclusiveFacet); + + const XsdFacet::Ptr facet = XsdFacet::Ptr(new XsdFacet()); + facet->setType(XsdFacet::MaximumExclusive); + + // parse attributes + if (hasAttribute(QString::fromLatin1("fixed"))) { + const QString value = readAttribute(QString::fromLatin1("fixed")); + const Boolean::Ptr fixed = Boolean::fromLexical(value); + if (fixed->hasError()) { + attributeContentError("fixed", "maxExclusive", value, BuiltinTypes::xsBoolean); + return facet; + } + + facet->setFixed(fixed->as<Boolean>()->value()); + } else { + facet->setFixed(false); // the default value + } + + // as maxExclusive can have a value of type anySimpleType, we just read + // the string here and store it for later intepretation + const QString value = readAttribute(QString::fromLatin1("value")); + DerivedString<TypeString>::Ptr string = DerivedString<TypeString>::fromLexical(m_namePool, value); + if (string->hasError()) { + attributeContentError("value", "maxExclusive", value, BuiltinTypes::xsAnySimpleType); + return facet; + } else { + facet->setValue(string); + } + + validateIdAttribute("maxExclusive"); + + TagValidationHandler tagValidator(XsdTagScope::MaxExclusiveFacet, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + facet->addAnnotation(annotation); + } else { + parseUnknown(); + } + } + } + + tagValidator.finalize(); + + return facet; +} + +XsdFacet::Ptr XsdSchemaParser::parseMaxInclusiveFacet() +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::MaxInclusive, this); + + validateElement(XsdTagScope::MaxInclusiveFacet); + + const XsdFacet::Ptr facet = XsdFacet::Ptr(new XsdFacet()); + facet->setType(XsdFacet::MaximumInclusive); + + // parse attributes + if (hasAttribute(QString::fromLatin1("fixed"))) { + const QString value = readAttribute(QString::fromLatin1("fixed")); + const Boolean::Ptr fixed = Boolean::fromLexical(value); + if (fixed->hasError()) { + attributeContentError("fixed", "maxInclusive", value, BuiltinTypes::xsBoolean); + return facet; + } + + facet->setFixed(fixed->as<Boolean>()->value()); + } else { + facet->setFixed(false); // the default value + } + + // as maxInclusive can have a value of type anySimpleType, we just read + // the string here and store it for later intepretation + const QString value = readAttribute(QString::fromLatin1("value")); + DerivedString<TypeString>::Ptr string = DerivedString<TypeString>::fromLexical(m_namePool, value); + if (string->hasError()) { + attributeContentError("value", "maxInclusive", value, BuiltinTypes::xsAnySimpleType); + return facet; + } else { + facet->setValue(string); + } + + validateIdAttribute("maxInclusive"); + + TagValidationHandler tagValidator(XsdTagScope::MaxInclusiveFacet, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + facet->addAnnotation(annotation); + } else { + parseUnknown(); + } + } + } + + tagValidator.finalize(); + + return facet; +} + +XsdFacet::Ptr XsdSchemaParser::parseTotalDigitsFacet() +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::TotalDigits, this); + + validateElement(XsdTagScope::TotalDigitsFacet); + + const XsdFacet::Ptr facet = XsdFacet::Ptr(new XsdFacet()); + facet->setType(XsdFacet::TotalDigits); + + // parse attributes + if (hasAttribute(QString::fromLatin1("fixed"))) { + const QString value = readAttribute(QString::fromLatin1("fixed")); + const Boolean::Ptr fixed = Boolean::fromLexical(value); + if (fixed->hasError()) { + attributeContentError("fixed", "totalDigits", value, BuiltinTypes::xsBoolean); + return facet; + } + + facet->setFixed(fixed->as<Boolean>()->value()); + } else { + facet->setFixed(false); // the default value + } + + const QString value = readAttribute(QString::fromLatin1("value")); + DerivedInteger<TypePositiveInteger>::Ptr integer = DerivedInteger<TypePositiveInteger>::fromLexical(m_namePool, value); + if (integer->hasError()) { + attributeContentError("value", "totalDigits", value, BuiltinTypes::xsPositiveInteger); + return facet; + } else { + facet->setValue(integer); + } + + validateIdAttribute("totalDigits"); + + TagValidationHandler tagValidator(XsdTagScope::TotalDigitsFacet, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + facet->addAnnotation(annotation); + } else { + parseUnknown(); + } + } + } + + tagValidator.finalize(); + + return facet; +} + +XsdFacet::Ptr XsdSchemaParser::parseFractionDigitsFacet() +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::FractionDigits, this); + + validateElement(XsdTagScope::FractionDigitsFacet); + + const XsdFacet::Ptr facet = XsdFacet::Ptr(new XsdFacet()); + facet->setType(XsdFacet::FractionDigits); + + // parse attributes + if (hasAttribute(QString::fromLatin1("fixed"))) { + const QString value = readAttribute(QString::fromLatin1("fixed")); + const Boolean::Ptr fixed = Boolean::fromLexical(value); + if (fixed->hasError()) { + attributeContentError("fixed", "fractionDigits", value, BuiltinTypes::xsBoolean); + return facet; + } + + facet->setFixed(fixed->as<Boolean>()->value()); + } else { + facet->setFixed(false); // the default value + } + + const QString value = readAttribute(QString::fromLatin1("value")); + DerivedInteger<TypeNonNegativeInteger>::Ptr integer = DerivedInteger<TypeNonNegativeInteger>::fromLexical(m_namePool, value); + if (integer->hasError()) { + attributeContentError("value", "fractionDigits", value, BuiltinTypes::xsNonNegativeInteger); + return facet; + } else { + facet->setValue(integer); + } + + validateIdAttribute("fractionDigits"); + + TagValidationHandler tagValidator(XsdTagScope::FractionDigitsFacet, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + facet->addAnnotation(annotation); + } else { + parseUnknown(); + } + } + } + + tagValidator.finalize(); + + return facet; +} + +XsdFacet::Ptr XsdSchemaParser::parseLengthFacet() +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::Length, this); + + validateElement(XsdTagScope::LengthFacet); + + const XsdFacet::Ptr facet = XsdFacet::Ptr(new XsdFacet()); + facet->setType(XsdFacet::Length); + + // parse attributes + if (hasAttribute(QString::fromLatin1("fixed"))) { + const QString value = readAttribute(QString::fromLatin1("fixed")); + const Boolean::Ptr fixed = Boolean::fromLexical(value); + if (fixed->hasError()) { + attributeContentError("fixed", "length", value, BuiltinTypes::xsBoolean); + return facet; + } + + facet->setFixed(fixed->as<Boolean>()->value()); + } else { + facet->setFixed(false); // the default value + } + + const QString value = readAttribute(QString::fromLatin1("value")); + DerivedInteger<TypeNonNegativeInteger>::Ptr integer = DerivedInteger<TypeNonNegativeInteger>::fromLexical(m_namePool, value); + if (integer->hasError()) { + attributeContentError("value", "length", value, BuiltinTypes::xsNonNegativeInteger); + return facet; + } else { + facet->setValue(integer); + } + + validateIdAttribute("length"); + + TagValidationHandler tagValidator(XsdTagScope::LengthFacet, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + facet->addAnnotation(annotation); + } else { + parseUnknown(); + } + } + } + + tagValidator.finalize(); + + return facet; +} + +XsdFacet::Ptr XsdSchemaParser::parseMinLengthFacet() +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::MinLength, this); + + validateElement(XsdTagScope::MinLengthFacet); + + const XsdFacet::Ptr facet = XsdFacet::Ptr(new XsdFacet()); + facet->setType(XsdFacet::MinimumLength); + + // parse attributes + if (hasAttribute(QString::fromLatin1("fixed"))) { + const QString value = readAttribute(QString::fromLatin1("fixed")); + const Boolean::Ptr fixed = Boolean::fromLexical(value); + if (fixed->hasError()) { + attributeContentError("fixed", "minLength", value, BuiltinTypes::xsBoolean); + return facet; + } + + facet->setFixed(fixed->as<Boolean>()->value()); + } else { + facet->setFixed(false); // the default value + } + + const QString value = readAttribute(QString::fromLatin1("value")); + DerivedInteger<TypeNonNegativeInteger>::Ptr integer = DerivedInteger<TypeNonNegativeInteger>::fromLexical(m_namePool, value); + if (integer->hasError()) { + attributeContentError("value", "minLength", value, BuiltinTypes::xsNonNegativeInteger); + return facet; + } else { + facet->setValue(integer); + } + + validateIdAttribute("minLength"); + + TagValidationHandler tagValidator(XsdTagScope::MinLengthFacet, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + facet->addAnnotation(annotation); + } else { + parseUnknown(); + } + } + } + + tagValidator.finalize(); + + return facet; +} + +XsdFacet::Ptr XsdSchemaParser::parseMaxLengthFacet() +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::MaxLength, this); + + validateElement(XsdTagScope::MaxLengthFacet); + + const XsdFacet::Ptr facet = XsdFacet::Ptr(new XsdFacet()); + facet->setType(XsdFacet::MaximumLength); + + // parse attributes + if (hasAttribute(QString::fromLatin1("fixed"))) { + const QString value = readAttribute(QString::fromLatin1("fixed")); + const Boolean::Ptr fixed = Boolean::fromLexical(value); + if (fixed->hasError()) { + attributeContentError("fixed", "maxLength", value, BuiltinTypes::xsBoolean); + return facet; + } + + facet->setFixed(fixed->as<Boolean>()->value()); + } else { + facet->setFixed(false); // the default value + } + + const QString value = readAttribute(QString::fromLatin1("value")); + DerivedInteger<TypeNonNegativeInteger>::Ptr integer = DerivedInteger<TypeNonNegativeInteger>::fromLexical(m_namePool, value); + if (integer->hasError()) { + attributeContentError("value", "maxLength", value, BuiltinTypes::xsNonNegativeInteger); + return facet; + } else { + facet->setValue(integer); + } + + validateIdAttribute("maxLength"); + + TagValidationHandler tagValidator(XsdTagScope::MaxLengthFacet, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + facet->addAnnotation(annotation); + } else { + parseUnknown(); + } + } + } + + tagValidator.finalize(); + + return facet; +} + +XsdFacet::Ptr XsdSchemaParser::parseEnumerationFacet() +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::Enumeration, this); + + validateElement(XsdTagScope::EnumerationFacet); + + const XsdFacet::Ptr facet = XsdFacet::Ptr(new XsdFacet()); + facet->setType(XsdFacet::Enumeration); + + // parse attributes + facet->setFixed(false); // not defined in schema, but can't hurt + + const QString value = readAttribute(QString::fromLatin1("value")); + + // as enumeration can have a value of type anySimpleType, we just read + // the string here and store it for later intepretation + DerivedString<TypeString>::Ptr string = DerivedString<TypeString>::fromLexical(m_namePool, value); + if (string->hasError()) { + attributeContentError("value", "enumeration", value); + return facet; + } else { + AtomicValue::List multiValue; + multiValue << string; + facet->setMultiValue(multiValue); + } + m_schemaResolver->addEnumerationFacetValue(string, m_namespaceSupport); + + validateIdAttribute("enumeration"); + + TagValidationHandler tagValidator(XsdTagScope::EnumerationFacet, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + facet->addAnnotation(annotation); + } else { + parseUnknown(); + } + } + } + + tagValidator.finalize(); + + return facet; +} + +XsdFacet::Ptr XsdSchemaParser::parseWhiteSpaceFacet() +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::WhiteSpace, this); + + validateElement(XsdTagScope::WhiteSpaceFacet); + + const XsdFacet::Ptr facet = XsdFacet::Ptr(new XsdFacet()); + facet->setType(XsdFacet::WhiteSpace); + + // parse attributes + if (hasAttribute(QString::fromLatin1("fixed"))) { + const QString value = readAttribute(QString::fromLatin1("fixed")); + const Boolean::Ptr fixed = Boolean::fromLexical(value); + if (fixed->hasError()) { + attributeContentError("fixed", "whiteSpace", value, BuiltinTypes::xsBoolean); + return facet; + } + + facet->setFixed(fixed->as<Boolean>()->value()); + } else { + facet->setFixed(false); // the default value + } + + const QString value = readAttribute(QString::fromLatin1("value")); + if (value != XsdSchemaToken::toString(XsdSchemaToken::Collapse) && + value != XsdSchemaToken::toString(XsdSchemaToken::Preserve) && + value != XsdSchemaToken::toString(XsdSchemaToken::Replace)) { + attributeContentError("value", "whiteSpace", value); + return facet; + } else { + DerivedString<TypeString>::Ptr string = DerivedString<TypeString>::fromLexical(m_namePool, value); + if (string->hasError()) { + attributeContentError("value", "whiteSpace", value); + return facet; + } else { + facet->setValue(string); + } + } + + validateIdAttribute("whiteSpace"); + + TagValidationHandler tagValidator(XsdTagScope::WhiteSpaceFacet, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + facet->addAnnotation(annotation); + } else { + parseUnknown(); + } + } + } + + tagValidator.finalize(); + + return facet; +} + +XsdFacet::Ptr XsdSchemaParser::parsePatternFacet() +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::Pattern, this); + + validateElement(XsdTagScope::PatternFacet); + + const XsdFacet::Ptr facet = XsdFacet::Ptr(new XsdFacet()); + facet->setType(XsdFacet::Pattern); + + // parse attributes + + // as pattern can have a value of type anySimpleType, we just read + // the string here and store it for later intepretation + const QString value = readAttribute(QString::fromLatin1("value")); + DerivedString<TypeString>::Ptr string = DerivedString<TypeString>::fromLexical(m_namePool, value); + if (string->hasError()) { + attributeContentError("value", "pattern", value); + return facet; + } else { + AtomicValue::List multiValue; + multiValue << string; + facet->setMultiValue(multiValue); + } + + validateIdAttribute("pattern"); + + TagValidationHandler tagValidator(XsdTagScope::PatternFacet, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + facet->addAnnotation(annotation); + } else { + parseUnknown(); + } + } + } + + tagValidator.finalize(); + + return facet; +} + +XsdFacet::Ptr XsdSchemaParser::parseAssertionFacet() +{ + // this is just a wrapper function around the parseAssertion() method + + const XsdAssertion::Ptr assertion = parseAssertion(XsdSchemaToken::Assertion, XsdTagScope::Assertion); + + const XsdFacet::Ptr facet = XsdFacet::Ptr(new XsdFacet()); + facet->setType(XsdFacet::Assertion); + facet->setAssertions(XsdAssertion::List() << assertion); + + return facet; +} + +XsdComplexType::Ptr XsdSchemaParser::parseGlobalComplexType() +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::ComplexType, this); + + validateElement(XsdTagScope::GlobalComplexType); + + bool hasTypeSpecified = false; + bool hasComplexContent = false; + + const XsdComplexType::Ptr complexType(new XsdComplexType()); + + // parse attributes + if (hasAttribute(QString::fromLatin1("abstract"))) { + const QString abstract = readAttribute(QString::fromLatin1("abstract")); + + const Boolean::Ptr value = Boolean::fromLexical(abstract); + if (value->hasError()) { + attributeContentError("abstract", "complexType", abstract, BuiltinTypes::xsBoolean); + return complexType; + } + + complexType->setIsAbstract(value->as<Boolean>()->value()); + } else { + complexType->setIsAbstract(false); // default value + } + + complexType->setProhibitedSubstitutions(readBlockingConstraintAttribute(NamedSchemaComponent::ExtensionConstraint | NamedSchemaComponent::RestrictionConstraint, "complexType")); + complexType->setDerivationConstraints(readDerivationConstraintAttribute(SchemaType::ExtensionConstraint | SchemaType::RestrictionConstraint, "complexType")); + + const QXmlName objectName = m_namePool->allocateQName(m_targetNamespace, readNameAttribute("complexType")); + complexType->setName(objectName); + + bool effectiveMixed = false; + if (hasAttribute(QString::fromLatin1("mixed"))) { + const QString mixed = readAttribute(QString::fromLatin1("mixed")); + + const Boolean::Ptr value = Boolean::fromLexical(mixed); + if (value->hasError()) { + attributeContentError("mixed", "complexType", mixed, BuiltinTypes::xsBoolean); + return complexType; + } + + effectiveMixed = value->as<Boolean>()->value(); + } + + validateIdAttribute("complexType"); + + TagValidationHandler tagValidator(XsdTagScope::GlobalComplexType, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + complexType->addAnnotation(annotation); + } else if (isSchemaTag(XsdSchemaToken::SimpleContent, token, namespaceToken)) { + if (effectiveMixed) { + error(QtXmlPatterns::tr("%1 element with %2 child element must not have a %3 attribute") + .arg(formatElement("complexType")) + .arg(formatElement("simpleContent")) + .arg(formatAttribute("mixed"))); + return complexType; + } + + parseSimpleContent(complexType); + hasTypeSpecified = true; + } else if (isSchemaTag(XsdSchemaToken::ComplexContent, token, namespaceToken)) { + bool mixed; + parseComplexContent(complexType, &mixed); + hasTypeSpecified = true; + + effectiveMixed = (effectiveMixed || mixed); + hasComplexContent = true; + } else if (isSchemaTag(XsdSchemaToken::OpenContent, token, namespaceToken)) { + const XsdComplexType::OpenContent::Ptr openContent = parseOpenContent(); + complexType->contentType()->setOpenContent(openContent); + hasComplexContent = true; + } else if (isSchemaTag(XsdSchemaToken::Group, token, namespaceToken)) { + const XsdParticle::Ptr particle(new XsdParticle()); + const XsdTerm::Ptr term = parseReferredGroup(particle); + particle->setTerm(term); + complexType->contentType()->setParticle(particle); + + complexType->setWxsSuperType(BuiltinTypes::xsAnyType); + complexType->contentType()->setVariety(XsdComplexType::ContentType::ElementOnly); + complexType->setDerivationMethod(XsdComplexType::DerivationRestriction); + hasComplexContent = true; + } else if (isSchemaTag(XsdSchemaToken::All, token, namespaceToken)) { + const XsdParticle::Ptr particle(new XsdParticle()); + const XsdTerm::Ptr term = parseLocalAll(particle, complexType); + particle->setTerm(term); + complexType->contentType()->setParticle(particle); + + complexType->setWxsSuperType(BuiltinTypes::xsAnyType); + complexType->contentType()->setVariety(XsdComplexType::ContentType::ElementOnly); + complexType->setDerivationMethod(XsdComplexType::DerivationRestriction); + hasComplexContent = true; + } else if (isSchemaTag(XsdSchemaToken::Choice, token, namespaceToken)) { + const XsdParticle::Ptr particle(new XsdParticle()); + const XsdTerm::Ptr term = parseLocalChoice(particle, complexType); + particle->setTerm(term); + complexType->contentType()->setParticle(particle); + + complexType->setWxsSuperType(BuiltinTypes::xsAnyType); + complexType->contentType()->setVariety(XsdComplexType::ContentType::ElementOnly); + complexType->setDerivationMethod(XsdComplexType::DerivationRestriction); + hasComplexContent = true; + } else if (isSchemaTag(XsdSchemaToken::Sequence, token, namespaceToken)) { + const XsdParticle::Ptr particle(new XsdParticle()); + const XsdTerm::Ptr term = parseLocalSequence(particle, complexType); + particle->setTerm(term); + complexType->contentType()->setParticle(particle); + + complexType->setWxsSuperType(BuiltinTypes::xsAnyType); + complexType->contentType()->setVariety(XsdComplexType::ContentType::ElementOnly); + complexType->setDerivationMethod(XsdComplexType::DerivationRestriction); + hasComplexContent = true; + } else if (isSchemaTag(XsdSchemaToken::Attribute, token, namespaceToken)) { + const XsdAttributeUse::Ptr attributeUse = parseLocalAttribute(complexType); + complexType->addAttributeUse(attributeUse); + + complexType->setWxsSuperType(BuiltinTypes::xsAnyType); + complexType->contentType()->setVariety(XsdComplexType::ContentType::ElementOnly); + complexType->setDerivationMethod(XsdComplexType::DerivationRestriction); + hasComplexContent = true; + } else if (isSchemaTag(XsdSchemaToken::AttributeGroup, token, namespaceToken)) { + const XsdAttributeUse::Ptr attributeUse = parseReferredAttributeGroup(); + complexType->addAttributeUse(attributeUse); + + complexType->setWxsSuperType(BuiltinTypes::xsAnyType); + complexType->contentType()->setVariety(XsdComplexType::ContentType::ElementOnly); + complexType->setDerivationMethod(XsdComplexType::DerivationRestriction); + hasComplexContent = true; + } else if (isSchemaTag(XsdSchemaToken::AnyAttribute, token, namespaceToken)) { + const XsdWildcard::Ptr wildcard = parseAnyAttribute(); + complexType->setAttributeWildcard(wildcard); + + complexType->setWxsSuperType(BuiltinTypes::xsAnyType); + complexType->contentType()->setVariety(XsdComplexType::ContentType::ElementOnly); + complexType->setDerivationMethod(XsdComplexType::DerivationRestriction); + hasComplexContent = true; + } else if (isSchemaTag(XsdSchemaToken::Assert, token, namespaceToken)) { + const XsdAssertion::Ptr assertion = parseAssertion(XsdSchemaToken::Assert, XsdTagScope::Assert); + complexType->addAssertion(assertion); + } else { + parseUnknown(); + } + } + } + + tagValidator.finalize(); + + if (!hasTypeSpecified) { + complexType->setWxsSuperType(BuiltinTypes::xsAnyType); + complexType->setDerivationMethod(XsdComplexType::DerivationRestriction); + hasComplexContent = true; + } + + if (hasComplexContent == true) { + resolveComplexContentType(complexType, effectiveMixed); + } + + return complexType; +} + +XsdComplexType::Ptr XsdSchemaParser::parseLocalComplexType() +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::ComplexType, this); + + validateElement(XsdTagScope::LocalComplexType); + + bool hasTypeSpecified = false; + bool hasComplexContent = true; + + const XsdComplexType::Ptr complexType(new XsdComplexType()); + complexType->setName(m_parserContext->createAnonymousName(m_targetNamespace)); + + // parse attributes + bool effectiveMixed = false; + if (hasAttribute(QString::fromLatin1("mixed"))) { + const QString mixed = readAttribute(QString::fromLatin1("mixed")); + + const Boolean::Ptr value = Boolean::fromLexical(mixed); + if (value->hasError()) { + attributeContentError("mixed", "complexType", mixed, BuiltinTypes::xsBoolean); + return complexType; + } + + effectiveMixed = value->as<Boolean>()->value(); + } + + validateIdAttribute("complexType"); + + TagValidationHandler tagValidator(XsdTagScope::LocalComplexType, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + complexType->addAnnotation(annotation); + } else if (isSchemaTag(XsdSchemaToken::SimpleContent, token, namespaceToken)) { + parseSimpleContent(complexType); + hasTypeSpecified = true; + } else if (isSchemaTag(XsdSchemaToken::ComplexContent, token, namespaceToken)) { + bool mixed; + parseComplexContent(complexType, &mixed); + hasTypeSpecified = true; + + effectiveMixed = (effectiveMixed || mixed); + hasComplexContent = true; + } else if (isSchemaTag(XsdSchemaToken::OpenContent, token, namespaceToken)) { + const XsdComplexType::OpenContent::Ptr openContent = parseOpenContent(); + complexType->contentType()->setOpenContent(openContent); + hasComplexContent = true; + } else if (isSchemaTag(XsdSchemaToken::Group, token, namespaceToken)) { + const XsdParticle::Ptr particle(new XsdParticle()); + const XsdTerm::Ptr term = parseReferredGroup(particle); + particle->setTerm(term); + complexType->contentType()->setParticle(particle); + + complexType->setWxsSuperType(BuiltinTypes::xsAnyType); + complexType->contentType()->setVariety(XsdComplexType::ContentType::ElementOnly); + complexType->setDerivationMethod(XsdComplexType::DerivationRestriction); + hasComplexContent = true; + } else if (isSchemaTag(XsdSchemaToken::All, token, namespaceToken)) { + const XsdParticle::Ptr particle(new XsdParticle()); + const XsdTerm::Ptr term = parseLocalAll(particle, complexType); + particle->setTerm(term); + complexType->contentType()->setParticle(particle); + + complexType->setWxsSuperType(BuiltinTypes::xsAnyType); + complexType->contentType()->setVariety(XsdComplexType::ContentType::ElementOnly); + complexType->setDerivationMethod(XsdComplexType::DerivationRestriction); + hasComplexContent = true; + } else if (isSchemaTag(XsdSchemaToken::Choice, token, namespaceToken)) { + const XsdParticle::Ptr particle(new XsdParticle()); + const XsdTerm::Ptr term = parseLocalChoice(particle, complexType); + particle->setTerm(term); + complexType->contentType()->setParticle(particle); + + complexType->setWxsSuperType(BuiltinTypes::xsAnyType); + complexType->contentType()->setVariety(XsdComplexType::ContentType::ElementOnly); + complexType->setDerivationMethod(XsdComplexType::DerivationRestriction); + hasComplexContent = true; + } else if (isSchemaTag(XsdSchemaToken::Sequence, token, namespaceToken)) { + const XsdParticle::Ptr particle(new XsdParticle()); + const XsdTerm::Ptr term = parseLocalSequence(particle, complexType); + particle->setTerm(term); + complexType->contentType()->setParticle(particle); + + complexType->setWxsSuperType(BuiltinTypes::xsAnyType); + complexType->contentType()->setVariety(XsdComplexType::ContentType::ElementOnly); + complexType->setDerivationMethod(XsdComplexType::DerivationRestriction); + hasComplexContent = true; + } else if (isSchemaTag(XsdSchemaToken::Attribute, token, namespaceToken)) { + const XsdAttributeUse::Ptr attributeUse = parseLocalAttribute(complexType); + complexType->addAttributeUse(attributeUse); + + complexType->setWxsSuperType(BuiltinTypes::xsAnyType); + complexType->contentType()->setVariety(XsdComplexType::ContentType::ElementOnly); + complexType->setDerivationMethod(XsdComplexType::DerivationRestriction); + hasComplexContent = true; + } else if (isSchemaTag(XsdSchemaToken::AttributeGroup, token, namespaceToken)) { + const XsdAttributeUse::Ptr attributeUse = parseReferredAttributeGroup(); + complexType->addAttributeUse(attributeUse); + + complexType->setWxsSuperType(BuiltinTypes::xsAnyType); + complexType->contentType()->setVariety(XsdComplexType::ContentType::ElementOnly); + complexType->setDerivationMethod(XsdComplexType::DerivationRestriction); + hasComplexContent = true; + } else if (isSchemaTag(XsdSchemaToken::AnyAttribute, token, namespaceToken)) { + const XsdWildcard::Ptr wildcard = parseAnyAttribute(); + complexType->setAttributeWildcard(wildcard); + + complexType->setWxsSuperType(BuiltinTypes::xsAnyType); + complexType->contentType()->setVariety(XsdComplexType::ContentType::ElementOnly); + complexType->setDerivationMethod(XsdComplexType::DerivationRestriction); + hasComplexContent = true; + } else if (isSchemaTag(XsdSchemaToken::Assert, token, namespaceToken)) { + const XsdAssertion::Ptr assertion = parseAssertion(XsdSchemaToken::Assert, XsdTagScope::Assert); + complexType->addAssertion(assertion); + } else { + parseUnknown(); + } + } + } + + tagValidator.finalize(); + + if (!hasTypeSpecified) { + complexType->setWxsSuperType(BuiltinTypes::xsAnyType); + complexType->setDerivationMethod(XsdComplexType::DerivationRestriction); + hasComplexContent = true; + } + + if (hasComplexContent == true) { + resolveComplexContentType(complexType, effectiveMixed); + } + + return complexType; +} + +void XsdSchemaParser::resolveComplexContentType(const XsdComplexType::Ptr &complexType, bool effectiveMixed) +{ + // @see http://www.w3.org/TR/xmlschema11-1/#dcl.ctd.ctcc.common + + // 1 + // the effectiveMixed contains the effective mixed value + + // 2 + bool hasEmptyContent = false; + if (!complexType->contentType()->particle()) { + hasEmptyContent = true; // 2.1.1 + } else { + if (complexType->contentType()->particle()->term()->isModelGroup()) { + const XsdModelGroup::Ptr group = complexType->contentType()->particle()->term(); + if (group->compositor() == XsdModelGroup::SequenceCompositor || group->compositor() == XsdModelGroup::AllCompositor) { + if (group->particles().isEmpty()) + hasEmptyContent = true; // 2.1.2 + } else if (group->compositor() == XsdModelGroup::ChoiceCompositor) { + if ((complexType->contentType()->particle()->minimumOccurs() == 0) && group->particles().isEmpty()) + hasEmptyContent = true; // 2.1.3 + } + + if ((complexType->contentType()->particle()->maximumOccursUnbounded() == false) && (complexType->contentType()->particle()->maximumOccurs() == 0)) + hasEmptyContent = true; // 2.1.4 + } + } + + const XsdParticle::Ptr explicitContent = (hasEmptyContent ? XsdParticle::Ptr() : complexType->contentType()->particle()); + + // do all the other work (3, 4, 5 and 6) in the resolver, as they need access to the base type object + m_schemaResolver->addComplexContentType(complexType, explicitContent, effectiveMixed); +} + +void XsdSchemaParser::parseSimpleContent(const XsdComplexType::Ptr &complexType) +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::SimpleContent, this); + + validateElement(XsdTagScope::SimpleContent); + + complexType->contentType()->setVariety(XsdComplexType::ContentType::Simple); + + // parse attributes + validateIdAttribute("simpleContent"); + + TagValidationHandler tagValidator(XsdTagScope::SimpleContent, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + complexType->addAnnotation(annotation); + } else if (isSchemaTag(XsdSchemaToken::Restriction, token, namespaceToken)) { + parseSimpleContentRestriction(complexType); + } else if (isSchemaTag(XsdSchemaToken::Extension, token, namespaceToken)) { + parseSimpleContentExtension(complexType); + } else { + parseUnknown(); + } + } + } + + tagValidator.finalize(); +} + +void XsdSchemaParser::parseSimpleContentRestriction(const XsdComplexType::Ptr &complexType) +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::Restriction, this); + + validateElement(XsdTagScope::SimpleContentRestriction); + + complexType->setDerivationMethod(XsdComplexType::DerivationRestriction); + + // parse attributes + const QString baseType = readQNameAttribute(QString::fromLatin1("base"), "restriction"); + QXmlName typeName; + convertName(baseType, NamespaceSupport::ElementName, typeName); // translate qualified name into QXmlName + + validateIdAttribute("restriction"); + + XsdFacet::Hash facets; + QList<XsdFacet::Ptr> patternFacets; + QList<XsdFacet::Ptr> enumerationFacets; + QList<XsdFacet::Ptr> assertionFacets; + + TagValidationHandler tagValidator(XsdTagScope::SimpleContentRestriction, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + complexType->addAnnotation(annotation); + } else if (isSchemaTag(XsdSchemaToken::SimpleType, token, namespaceToken)) { + const XsdSimpleType::Ptr type = parseLocalSimpleType(); + type->setContext(complexType); //TODO: investigate what the schema spec really wants here?!? + complexType->contentType()->setSimpleType(type); + + // add it to list of anonymous types as well + addAnonymousType(type); + } else if (isSchemaTag(XsdSchemaToken::MinExclusive, token, namespaceToken)) { + const XsdFacet::Ptr facet = parseMinExclusiveFacet(); + addFacet(facet, facets, complexType); + } else if (isSchemaTag(XsdSchemaToken::MinInclusive, token, namespaceToken)) { + const XsdFacet::Ptr facet = parseMinInclusiveFacet(); + addFacet(facet, facets, complexType); + } else if (isSchemaTag(XsdSchemaToken::MaxExclusive, token, namespaceToken)) { + const XsdFacet::Ptr facet = parseMaxExclusiveFacet(); + addFacet(facet, facets, complexType); + } else if (isSchemaTag(XsdSchemaToken::MaxInclusive, token, namespaceToken)) { + const XsdFacet::Ptr facet = parseMaxInclusiveFacet(); + addFacet(facet, facets, complexType); + } else if (isSchemaTag(XsdSchemaToken::TotalDigits, token, namespaceToken)) { + const XsdFacet::Ptr facet = parseTotalDigitsFacet(); + addFacet(facet, facets, complexType); + } else if (isSchemaTag(XsdSchemaToken::FractionDigits, token, namespaceToken)) { + const XsdFacet::Ptr facet = parseFractionDigitsFacet(); + addFacet(facet, facets, complexType); + } else if (isSchemaTag(XsdSchemaToken::Length, token, namespaceToken)) { + const XsdFacet::Ptr facet = parseLengthFacet(); + addFacet(facet, facets, complexType); + } else if (isSchemaTag(XsdSchemaToken::MinLength, token, namespaceToken)) { + const XsdFacet::Ptr facet = parseMinLengthFacet(); + addFacet(facet, facets, complexType); + } else if (isSchemaTag(XsdSchemaToken::MaxLength, token, namespaceToken)) { + const XsdFacet::Ptr facet = parseMaxLengthFacet(); + addFacet(facet, facets, complexType); + } else if (isSchemaTag(XsdSchemaToken::Enumeration, token, namespaceToken)) { + const XsdFacet::Ptr facet = parseEnumerationFacet(); + enumerationFacets.append(facet); + } else if (isSchemaTag(XsdSchemaToken::WhiteSpace, token, namespaceToken)) { + const XsdFacet::Ptr facet = parseWhiteSpaceFacet(); + addFacet(facet, facets, complexType); + } else if (isSchemaTag(XsdSchemaToken::Pattern, token, namespaceToken)) { + const XsdFacet::Ptr facet = parsePatternFacet(); + patternFacets.append(facet); + } else if (isSchemaTag(XsdSchemaToken::Assertion, token, namespaceToken)) { + const XsdFacet::Ptr facet = parseAssertionFacet(); + assertionFacets.append(facet); + } else if (isSchemaTag(XsdSchemaToken::Attribute, token, namespaceToken)) { + const XsdAttributeUse::Ptr attributeUse = parseLocalAttribute(complexType); + complexType->addAttributeUse(attributeUse); + } else if (isSchemaTag(XsdSchemaToken::AttributeGroup, token, namespaceToken)) { + const XsdAttributeUse::Ptr attributeUse = parseReferredAttributeGroup(); + complexType->addAttributeUse(attributeUse); + } else if (isSchemaTag(XsdSchemaToken::AnyAttribute, token, namespaceToken)) { + const XsdWildcard::Ptr wildcard = parseAnyAttribute(); + complexType->setAttributeWildcard(wildcard); + } else if (isSchemaTag(XsdSchemaToken::Assert, token, namespaceToken)) { + const XsdAssertion::Ptr assertion = parseAssertion(XsdSchemaToken::Assert, XsdTagScope::Assert); + complexType->addAssertion(assertion); + } else { + parseUnknown(); + } + } + } + + tagValidator.finalize(); + + // merge all pattern facets into one multi value facet + if (!patternFacets.isEmpty()) { + const XsdFacet::Ptr patternFacet(new XsdFacet()); + patternFacet->setType(XsdFacet::Pattern); + + AtomicValue::List multiValue; + for (int i = 0; i < patternFacets.count(); ++i) + multiValue << patternFacets.at(i)->multiValue(); + + patternFacet->setMultiValue(multiValue); + addFacet(patternFacet, facets, complexType); + } + + // merge all enumeration facets into one multi value facet + if (!enumerationFacets.isEmpty()) { + const XsdFacet::Ptr enumerationFacet(new XsdFacet()); + enumerationFacet->setType(XsdFacet::Enumeration); + + AtomicValue::List multiValue; + for (int i = 0; i < enumerationFacets.count(); ++i) + multiValue << enumerationFacets.at(i)->multiValue(); + + enumerationFacet->setMultiValue(multiValue); + addFacet(enumerationFacet, facets, complexType); + } + + // merge all assertion facets into one facet + if (!assertionFacets.isEmpty()) { + const XsdFacet::Ptr assertionFacet(new XsdFacet()); + assertionFacet->setType(XsdFacet::Assertion); + + XsdAssertion::List assertions; + for (int i = 0; i < assertionFacets.count(); ++i) + assertions << assertionFacets.at(i)->assertions(); + + assertionFacet->setAssertions(assertions); + addFacet(assertionFacet, facets, complexType); + } + + m_schemaResolver->addComplexBaseType(complexType, typeName, currentSourceLocation(), facets); // add to resolver +} + +void XsdSchemaParser::parseSimpleContentExtension(const XsdComplexType::Ptr &complexType) +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::Extension, this); + + validateElement(XsdTagScope::SimpleContentExtension); + + complexType->setDerivationMethod(XsdComplexType::DerivationExtension); + + // parse attributes + const QString baseType = readQNameAttribute(QString::fromLatin1("base"), "extension"); + QXmlName typeName; + convertName(baseType, NamespaceSupport::ElementName, typeName); // translate qualified name into QXmlName + m_schemaResolver->addComplexBaseType(complexType, typeName, currentSourceLocation()); // add to resolver + + validateIdAttribute("extension"); + + TagValidationHandler tagValidator(XsdTagScope::SimpleContentExtension, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + complexType->addAnnotation(annotation); + } else if (isSchemaTag(XsdSchemaToken::Attribute, token, namespaceToken)) { + const XsdAttributeUse::Ptr attributeUse = parseLocalAttribute(complexType); + complexType->addAttributeUse(attributeUse); + } else if (isSchemaTag(XsdSchemaToken::AttributeGroup, token, namespaceToken)) { + const XsdAttributeUse::Ptr attributeUse = parseReferredAttributeGroup(); + complexType->addAttributeUse(attributeUse); + } else if (isSchemaTag(XsdSchemaToken::AnyAttribute, token, namespaceToken)) { + const XsdWildcard::Ptr wildcard = parseAnyAttribute(); + complexType->setAttributeWildcard(wildcard); + } else if (isSchemaTag(XsdSchemaToken::Assert, token, namespaceToken)) { + const XsdAssertion::Ptr assertion = parseAssertion(XsdSchemaToken::Assert, XsdTagScope::Assert); + complexType->addAssertion(assertion); + } else { + parseUnknown(); + } + } + } + + tagValidator.finalize(); +} + +void XsdSchemaParser::parseComplexContent(const XsdComplexType::Ptr &complexType, bool *mixed) +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::ComplexContent, this); + + validateElement(XsdTagScope::ComplexContent); + + complexType->contentType()->setVariety(XsdComplexType::ContentType::ElementOnly); + + // parse attributes + if (hasAttribute(QString::fromLatin1("mixed"))) { + const QString mixedStr = readAttribute(QString::fromLatin1("mixed")); + + const Boolean::Ptr value = Boolean::fromLexical(mixedStr); + if (value->hasError()) { + attributeContentError("mixed", "complexType", mixedStr, BuiltinTypes::xsBoolean); + return; + } + + *mixed = value->as<Boolean>()->value(); + } else { + *mixed = false; + } + + validateIdAttribute("complexContent"); + + TagValidationHandler tagValidator(XsdTagScope::ComplexContent, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + complexType->addAnnotation(annotation); + } else if (isSchemaTag(XsdSchemaToken::Restriction, token, namespaceToken)) { + parseComplexContentRestriction(complexType); + } else if (isSchemaTag(XsdSchemaToken::Extension, token, namespaceToken)) { + parseComplexContentExtension(complexType); + } else { + parseUnknown(); + } + } + } + + tagValidator.finalize(); +} + +void XsdSchemaParser::parseComplexContentRestriction(const XsdComplexType::Ptr &complexType) +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::Restriction, this); + + validateElement(XsdTagScope::ComplexContentRestriction); + + complexType->setDerivationMethod(XsdComplexType::DerivationRestriction); + + // parse attributes + const QString baseType = readQNameAttribute(QString::fromLatin1("base"), "restriction"); + QXmlName typeName; + convertName(baseType, NamespaceSupport::ElementName, typeName); // translate qualified name into QXmlName + m_schemaResolver->addComplexBaseType(complexType, typeName, currentSourceLocation()); // add to resolver + + validateIdAttribute("restriction"); + + TagValidationHandler tagValidator(XsdTagScope::ComplexContentRestriction, this, m_namePool); + + bool hasContent = false; + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + complexType->addAnnotation(annotation); + } else if (isSchemaTag(XsdSchemaToken::OpenContent, token, namespaceToken)) { + const XsdComplexType::OpenContent::Ptr openContent = parseOpenContent(); + complexType->contentType()->setOpenContent(openContent); + hasContent = true; + } else if (isSchemaTag(XsdSchemaToken::Group, token, namespaceToken)) { + const XsdParticle::Ptr particle(new XsdParticle()); + const XsdTerm::Ptr term = parseReferredGroup(particle); + particle->setTerm(term); + complexType->contentType()->setParticle(particle); + hasContent = true; + } else if (isSchemaTag(XsdSchemaToken::All, token, namespaceToken)) { + const XsdParticle::Ptr particle(new XsdParticle()); + const XsdTerm::Ptr term = parseLocalAll(particle, complexType); + particle->setTerm(term); + complexType->contentType()->setParticle(particle); + hasContent = true; + } else if (isSchemaTag(XsdSchemaToken::Choice, token, namespaceToken)) { + const XsdParticle::Ptr particle(new XsdParticle()); + const XsdTerm::Ptr term = parseLocalChoice(particle, complexType); + particle->setTerm(term); + complexType->contentType()->setParticle(particle); + hasContent = true; + } else if (isSchemaTag(XsdSchemaToken::Sequence, token, namespaceToken)) { + const XsdParticle::Ptr particle(new XsdParticle()); + const XsdTerm::Ptr term = parseLocalSequence(particle, complexType); + particle->setTerm(term); + complexType->contentType()->setParticle(particle); + hasContent = true; + } else if (isSchemaTag(XsdSchemaToken::Attribute, token, namespaceToken)) { + const XsdAttributeUse::Ptr attributeUse = parseLocalAttribute(complexType); + complexType->addAttributeUse(attributeUse); + } else if (isSchemaTag(XsdSchemaToken::AttributeGroup, token, namespaceToken)) { + const XsdAttributeUse::Ptr attributeUse = parseReferredAttributeGroup(); + complexType->addAttributeUse(attributeUse); + } else if (isSchemaTag(XsdSchemaToken::AnyAttribute, token, namespaceToken)) { + const XsdWildcard::Ptr wildcard = parseAnyAttribute(); + complexType->setAttributeWildcard(wildcard); + } else if (isSchemaTag(XsdSchemaToken::Assert, token, namespaceToken)) { + const XsdAssertion::Ptr assertion = parseAssertion(XsdSchemaToken::Assert, XsdTagScope::Assert); + complexType->addAssertion(assertion); + } else { + parseUnknown(); + } + } + } + + if (!hasContent) + complexType->contentType()->setVariety(XsdComplexType::ContentType::Empty); + + tagValidator.finalize(); +} + +void XsdSchemaParser::parseComplexContentExtension(const XsdComplexType::Ptr &complexType) +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::Extension, this); + + validateElement(XsdTagScope::ComplexContentExtension); + + complexType->setDerivationMethod(XsdComplexType::DerivationExtension); + + // parse attributes + const QString baseType = readQNameAttribute(QString::fromLatin1("base"), "extension"); + QXmlName typeName; + convertName(baseType, NamespaceSupport::ElementName, typeName); // translate qualified name into QXmlName + m_schemaResolver->addComplexBaseType(complexType, typeName, currentSourceLocation()); // add to resolver + + validateIdAttribute("extension"); + + TagValidationHandler tagValidator(XsdTagScope::ComplexContentExtension, this, m_namePool); + + bool hasContent = false; + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + complexType->addAnnotation(annotation); + } else if (isSchemaTag(XsdSchemaToken::OpenContent, token, namespaceToken)) { + const XsdComplexType::OpenContent::Ptr openContent = parseOpenContent(); + complexType->contentType()->setOpenContent(openContent); + hasContent = true; + } else if (isSchemaTag(XsdSchemaToken::Group, token, namespaceToken)) { + const XsdParticle::Ptr particle(new XsdParticle()); + const XsdTerm::Ptr term = parseReferredGroup(particle); + particle->setTerm(term); + complexType->contentType()->setParticle(particle); + hasContent = true; + } else if (isSchemaTag(XsdSchemaToken::All, token, namespaceToken)) { + const XsdParticle::Ptr particle(new XsdParticle()); + const XsdTerm::Ptr term = parseLocalAll(particle, complexType); + particle->setTerm(term); + complexType->contentType()->setParticle(particle); + hasContent = true; + } else if (isSchemaTag(XsdSchemaToken::Choice, token, namespaceToken)) { + const XsdParticle::Ptr particle(new XsdParticle()); + const XsdTerm::Ptr term = parseLocalChoice(particle, complexType); + particle->setTerm(term); + complexType->contentType()->setParticle(particle); + hasContent = true; + } else if (isSchemaTag(XsdSchemaToken::Sequence, token, namespaceToken)) { + const XsdParticle::Ptr particle(new XsdParticle()); + const XsdTerm::Ptr term = parseLocalSequence(particle, complexType); + particle->setTerm(term); + complexType->contentType()->setParticle(particle); + hasContent = true; + } else if (isSchemaTag(XsdSchemaToken::Attribute, token, namespaceToken)) { + const XsdAttributeUse::Ptr attributeUse = parseLocalAttribute(complexType); + complexType->addAttributeUse(attributeUse); + } else if (isSchemaTag(XsdSchemaToken::AttributeGroup, token, namespaceToken)) { + const XsdAttributeUse::Ptr attributeUse = parseReferredAttributeGroup(); + complexType->addAttributeUse(attributeUse); + } else if (isSchemaTag(XsdSchemaToken::AnyAttribute, token, namespaceToken)) { + const XsdWildcard::Ptr wildcard = parseAnyAttribute(); + complexType->setAttributeWildcard(wildcard); + } else if (isSchemaTag(XsdSchemaToken::Assert, token, namespaceToken)) { + const XsdAssertion::Ptr assertion = parseAssertion(XsdSchemaToken::Assert, XsdTagScope::Assert); + complexType->addAssertion(assertion); + } else { + parseUnknown(); + } + } + } + + if (!hasContent) + complexType->contentType()->setVariety(XsdComplexType::ContentType::Empty); + + tagValidator.finalize(); +} + + +XsdAssertion::Ptr XsdSchemaParser::parseAssertion(const XsdSchemaToken::NodeName &nodeName, const XsdTagScope::Type &tag) +{ + const ElementNamespaceHandler namespaceHandler(nodeName, this); + + validateElement(tag); + + const XsdAssertion::Ptr assertion(new XsdAssertion()); + + // parse attributes + + const XsdXPathExpression::Ptr expression = readXPathExpression("assertion"); + assertion->setTest(expression); + + const QString test = readXPathAttribute(QString::fromLatin1("test"), XPath20, "assertion"); + expression->setExpression(test); + + validateIdAttribute("assertion"); + + TagValidationHandler tagValidator(tag, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + assertion->addAnnotation(annotation); + } else { + parseUnknown(); + } + } + } + + tagValidator.finalize(); + + return assertion; +} + +XsdComplexType::OpenContent::Ptr XsdSchemaParser::parseOpenContent() +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::OpenContent, this); + + validateElement(XsdTagScope::OpenContent); + + const XsdComplexType::OpenContent::Ptr openContent(new XsdComplexType::OpenContent()); + + if (hasAttribute(QString::fromLatin1("mode"))) { + const QString mode = readAttribute(QString::fromLatin1("mode")); + + if (mode == QString::fromLatin1("none")) { + m_defaultOpenContent->setMode(XsdComplexType::OpenContent::None); + } else if (mode == QString::fromLatin1("interleave")) { + m_defaultOpenContent->setMode(XsdComplexType::OpenContent::Interleave); + } else if (mode == QString::fromLatin1("suffix")) { + m_defaultOpenContent->setMode(XsdComplexType::OpenContent::Suffix); + } else { + attributeContentError("mode", "openContent", mode); + return openContent; + } + } else { + openContent->setMode(XsdComplexType::OpenContent::Interleave); + } + + validateIdAttribute("openContent"); + + TagValidationHandler tagValidator(XsdTagScope::OpenContent, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + openContent->addAnnotation(annotation); + } else if (isSchemaTag(XsdSchemaToken::Any, token, namespaceToken)) { + const XsdParticle::Ptr particle; + const XsdWildcard::Ptr wildcard = parseAny(particle); + openContent->setWildcard(wildcard); + } else { + parseUnknown(); + } + } + } + + tagValidator.finalize(); + + return openContent; +} + +XsdModelGroup::Ptr XsdSchemaParser::parseNamedGroup() +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::Group, this); + + validateElement(XsdTagScope::NamedGroup); + + const XsdModelGroup::Ptr modelGroup(new XsdModelGroup()); + XsdModelGroup::Ptr group; + + QXmlName objectName; + if (hasAttribute(QString::fromLatin1("name"))) { + objectName = m_namePool->allocateQName(m_targetNamespace, readNameAttribute("group")); + } + + validateIdAttribute("group"); + + TagValidationHandler tagValidator(XsdTagScope::NamedGroup, this, m_namePool); + + XsdAnnotation::Ptr annotation; + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + annotation = parseAnnotation(); + } else if (isSchemaTag(XsdSchemaToken::All, token, namespaceToken)) { + group = parseAll(modelGroup); + } else if (isSchemaTag(XsdSchemaToken::Choice, token, namespaceToken)) { + group = parseChoice(modelGroup); + } else if (isSchemaTag(XsdSchemaToken::Sequence, token, namespaceToken)) { + group = parseSequence(modelGroup); + } else { + parseUnknown(); + } + } + } + + tagValidator.finalize(); + + group->setName(objectName); + + if (annotation) + group->addAnnotation(annotation); + + return group; +} + +XsdTerm::Ptr XsdSchemaParser::parseReferredGroup(const XsdParticle::Ptr &particle) +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::Group, this); + + validateElement(XsdTagScope::ReferredGroup); + + const XsdReference::Ptr reference(new XsdReference()); + reference->setType(XsdReference::ModelGroup); + reference->setSourceLocation(currentSourceLocation()); + + // parse attributes + if (!parseMinMaxConstraint(particle, "group")) { + return reference; + } + + const QString value = readQNameAttribute(QString::fromLatin1("ref"), "group"); + QXmlName referenceName; + convertName(value, NamespaceSupport::ElementName, referenceName); // translate qualified name into QXmlName + reference->setReferenceName(referenceName); + + validateIdAttribute("group"); + + TagValidationHandler tagValidator(XsdTagScope::ReferredGroup, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + reference->addAnnotation(annotation); + } else { + parseUnknown(); + } + } + } + + tagValidator.finalize(); + + return reference; +} + +XsdModelGroup::Ptr XsdSchemaParser::parseAll(const NamedSchemaComponent::Ptr &parent) +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::All, this); + + validateElement(XsdTagScope::All); + + const XsdModelGroup::Ptr modelGroup(new XsdModelGroup()); + modelGroup->setCompositor(XsdModelGroup::AllCompositor); + + validateIdAttribute("all"); + + TagValidationHandler tagValidator(XsdTagScope::All, this, m_namePool); + + XsdParticle::List particles; + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + modelGroup->addAnnotation(annotation); + } else if (isSchemaTag(XsdSchemaToken::Element, token, namespaceToken)) { + const XsdParticle::Ptr particle(new XsdParticle()); + const XsdTerm::Ptr term = parseLocalElement(particle, parent); + particle->setTerm(term); + + if (particle->maximumOccursUnbounded() || particle->maximumOccurs() > 1) { + error(QtXmlPatterns::tr("%1 attribute of %2 element must be %3 or %4") + .arg(formatAttribute("maxOccurs")) + .arg(formatElement("all")) + .arg(formatData("0")) + .arg(formatData("1"))); + return modelGroup; + } + + particles.append(particle); + } else { + parseUnknown(); + } + } + } + + modelGroup->setParticles(particles); + + tagValidator.finalize(); + + return modelGroup; +} + +XsdModelGroup::Ptr XsdSchemaParser::parseLocalAll(const XsdParticle::Ptr &particle, const NamedSchemaComponent::Ptr &parent) +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::All, this); + + validateElement(XsdTagScope::LocalAll); + + const XsdModelGroup::Ptr modelGroup(new XsdModelGroup()); + modelGroup->setCompositor(XsdModelGroup::AllCompositor); + + // parse attributes + if (!parseMinMaxConstraint(particle, "all")) { + return modelGroup; + } + if (particle->maximumOccursUnbounded() || particle->maximumOccurs() != 1) { + error(QtXmlPatterns::tr("%1 attribute of %2 element must have a value of %3") + .arg(formatAttribute("maxOccurs")) + .arg(formatElement("all")) + .arg(formatData("1"))); + return modelGroup; + } + if (particle->minimumOccurs() != 0 && particle->minimumOccurs() != 1) { + error(QtXmlPatterns::tr("%1 attribute of %2 element must have a value of %3 or %4") + .arg(formatAttribute("minOccurs")) + .arg(formatElement("all")) + .arg(formatData("0")) + .arg(formatData("1"))); + return modelGroup; + } + + validateIdAttribute("all"); + + TagValidationHandler tagValidator(XsdTagScope::LocalAll, this, m_namePool); + + XsdParticle::List particles; + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + modelGroup->addAnnotation(annotation); + } else if (isSchemaTag(XsdSchemaToken::Element, token, namespaceToken)) { + const XsdParticle::Ptr particle(new XsdParticle()); + const XsdTerm::Ptr term = parseLocalElement(particle, parent); + particle->setTerm(term); + + if (particle->maximumOccursUnbounded() || particle->maximumOccurs() > 1) { + error(QtXmlPatterns::tr("%1 attribute of %2 element must have a value of %3 or %4") + .arg(formatAttribute("maxOccurs")) + .arg(formatElement("all")) + .arg(formatData("0")) + .arg(formatData("1"))); + return modelGroup; + } + + particles.append(particle); + } else { + parseUnknown(); + } + } + } + + modelGroup->setParticles(particles); + + tagValidator.finalize(); + + return modelGroup; +} + +XsdModelGroup::Ptr XsdSchemaParser::parseChoice(const NamedSchemaComponent::Ptr &parent) +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::Choice, this); + + validateElement(XsdTagScope::Choice); + + const XsdModelGroup::Ptr modelGroup(new XsdModelGroup()); + modelGroup->setCompositor(XsdModelGroup::ChoiceCompositor); + + validateIdAttribute("choice"); + + XsdParticle::List particles; + + TagValidationHandler tagValidator(XsdTagScope::Choice, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + modelGroup->addAnnotation(annotation); + } else if (isSchemaTag(XsdSchemaToken::Element, token, namespaceToken)) { + const XsdParticle::Ptr particle(new XsdParticle()); + const XsdTerm::Ptr term = parseLocalElement(particle, parent); + particle->setTerm(term); + particles.append(particle); + } else if (isSchemaTag(XsdSchemaToken::Group, token, namespaceToken)) { + const XsdParticle::Ptr particle(new XsdParticle()); + const XsdTerm::Ptr term = parseReferredGroup(particle); + m_schemaResolver->addAllGroupCheck(term); + particle->setTerm(term); + particles.append(particle); + } else if (isSchemaTag(XsdSchemaToken::Choice, token, namespaceToken)) { + const XsdParticle::Ptr particle(new XsdParticle()); + const XsdTerm::Ptr term = parseLocalChoice(particle, parent); + particle->setTerm(term); + particles.append(particle); + } else if (isSchemaTag(XsdSchemaToken::Sequence, token, namespaceToken)) { + const XsdParticle::Ptr particle(new XsdParticle()); + const XsdTerm::Ptr term = parseLocalSequence(particle, parent); + particle->setTerm(term); + particles.append(particle); + } else if (isSchemaTag(XsdSchemaToken::Any, token, namespaceToken)) { + const XsdParticle::Ptr particle(new XsdParticle()); + const XsdTerm::Ptr term = parseAny(particle); + particle->setTerm(term); + particles.append(particle); + } else { + parseUnknown(); + } + } + } + + modelGroup->setParticles(particles); + + tagValidator.finalize(); + + return modelGroup; +} + +XsdModelGroup::Ptr XsdSchemaParser::parseLocalChoice(const XsdParticle::Ptr &particle, const NamedSchemaComponent::Ptr &parent) +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::Choice, this); + + validateElement(XsdTagScope::LocalChoice); + + const XsdModelGroup::Ptr modelGroup(new XsdModelGroup()); + modelGroup->setCompositor(XsdModelGroup::ChoiceCompositor); + + // parse attributes + if (!parseMinMaxConstraint(particle, "choice")) { + return modelGroup; + } + + validateIdAttribute("choice"); + + XsdParticle::List particles; + + TagValidationHandler tagValidator(XsdTagScope::LocalChoice, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + modelGroup->addAnnotation(annotation); + } else if (isSchemaTag(XsdSchemaToken::Element, token, namespaceToken)) { + const XsdParticle::Ptr particle(new XsdParticle()); + const XsdTerm::Ptr term = parseLocalElement(particle, parent); + particle->setTerm(term); + particles.append(particle); + } else if (isSchemaTag(XsdSchemaToken::Group, token, namespaceToken)) { + const XsdParticle::Ptr particle(new XsdParticle()); + const XsdTerm::Ptr term = parseReferredGroup(particle); + m_schemaResolver->addAllGroupCheck(term); + particle->setTerm(term); + particles.append(particle); + } else if (isSchemaTag(XsdSchemaToken::Choice, token, namespaceToken)) { + const XsdParticle::Ptr particle(new XsdParticle()); + const XsdTerm::Ptr term = parseLocalChoice(particle, parent); + particle->setTerm(term); + particles.append(particle); + } else if (isSchemaTag(XsdSchemaToken::Sequence, token, namespaceToken)) { + const XsdParticle::Ptr particle(new XsdParticle()); + const XsdTerm::Ptr term = parseLocalSequence(particle, parent); + particle->setTerm(term); + particles.append(particle); + } else if (isSchemaTag(XsdSchemaToken::Any, token, namespaceToken)) { + const XsdParticle::Ptr particle(new XsdParticle()); + const XsdTerm::Ptr term = parseAny(particle); + particle->setTerm(term); + particles.append(particle); + } else { + parseUnknown(); + } + } + } + + modelGroup->setParticles(particles); + + tagValidator.finalize(); + + return modelGroup; +} + +XsdModelGroup::Ptr XsdSchemaParser::parseSequence(const NamedSchemaComponent::Ptr &parent) +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::Sequence, this); + + validateElement(XsdTagScope::Sequence); + + const XsdModelGroup::Ptr modelGroup(new XsdModelGroup()); + modelGroup->setCompositor(XsdModelGroup::SequenceCompositor); + + validateIdAttribute("sequence"); + + XsdParticle::List particles; + + TagValidationHandler tagValidator(XsdTagScope::Sequence, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + modelGroup->addAnnotation(annotation); + } else if (isSchemaTag(XsdSchemaToken::Element, token, namespaceToken)) { + const XsdParticle::Ptr particle(new XsdParticle()); + const XsdTerm::Ptr term = parseLocalElement(particle, parent); + particle->setTerm(term); + particles.append(particle); + } else if (isSchemaTag(XsdSchemaToken::Group, token, namespaceToken)) { + const XsdParticle::Ptr particle(new XsdParticle()); + const XsdTerm::Ptr term = parseReferredGroup(particle); + m_schemaResolver->addAllGroupCheck(term); + particle->setTerm(term); + particles.append(particle); + } else if (isSchemaTag(XsdSchemaToken::Choice, token, namespaceToken)) { + const XsdParticle::Ptr particle(new XsdParticle()); + const XsdTerm::Ptr term = parseLocalChoice(particle, parent); + particle->setTerm(term); + particles.append(particle); + } else if (isSchemaTag(XsdSchemaToken::Sequence, token, namespaceToken)) { + const XsdParticle::Ptr particle(new XsdParticle()); + const XsdTerm::Ptr term = parseLocalSequence(particle, parent); + particle->setTerm(term); + particles.append(particle); + } else if (isSchemaTag(XsdSchemaToken::Any, token, namespaceToken)) { + const XsdParticle::Ptr particle(new XsdParticle()); + const XsdTerm::Ptr term = parseAny(particle); + particle->setTerm(term); + particles.append(particle); + } else { + parseUnknown(); + } + } + } + + modelGroup->setParticles(particles); + + tagValidator.finalize(); + + return modelGroup; +} + +XsdModelGroup::Ptr XsdSchemaParser::parseLocalSequence(const XsdParticle::Ptr &particle, const NamedSchemaComponent::Ptr &parent) +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::Sequence, this); + + validateElement(XsdTagScope::LocalSequence); + + const XsdModelGroup::Ptr modelGroup(new XsdModelGroup()); + modelGroup->setCompositor(XsdModelGroup::SequenceCompositor); + + // parse attributes + if (!parseMinMaxConstraint(particle, "sequence")) { + return modelGroup; + } + + validateIdAttribute("sequence"); + + XsdParticle::List particles; + + TagValidationHandler tagValidator(XsdTagScope::LocalSequence, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + modelGroup->addAnnotation(annotation); + } else if (isSchemaTag(XsdSchemaToken::Element, token, namespaceToken)) { + const XsdParticle::Ptr particle(new XsdParticle()); + const XsdTerm::Ptr term = parseLocalElement(particle, parent); + particle->setTerm(term); + particles.append(particle); + } else if (isSchemaTag(XsdSchemaToken::Group, token, namespaceToken)) { + const XsdParticle::Ptr particle(new XsdParticle()); + const XsdTerm::Ptr term = parseReferredGroup(particle); + m_schemaResolver->addAllGroupCheck(term); + particle->setTerm(term); + particles.append(particle); + } else if (isSchemaTag(XsdSchemaToken::Choice, token, namespaceToken)) { + const XsdParticle::Ptr particle(new XsdParticle()); + const XsdTerm::Ptr term = parseLocalChoice(particle, parent); + particle->setTerm(term); + particles.append(particle); + } else if (isSchemaTag(XsdSchemaToken::Sequence, token, namespaceToken)) { + const XsdParticle::Ptr particle(new XsdParticle()); + const XsdTerm::Ptr term = parseLocalSequence(particle, parent); + particle->setTerm(term); + particles.append(particle); + } else if (isSchemaTag(XsdSchemaToken::Any, token, namespaceToken)) { + const XsdParticle::Ptr particle(new XsdParticle()); + const XsdTerm::Ptr term = parseAny(particle); + particle->setTerm(term); + particles.append(particle); + } else { + parseUnknown(); + } + } + } + + modelGroup->setParticles(particles); + + tagValidator.finalize(); + + return modelGroup; +} + +XsdAttribute::Ptr XsdSchemaParser::parseGlobalAttribute() +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::Attribute, this); + + validateElement(XsdTagScope::GlobalAttribute); + + const XsdAttribute::Ptr attribute(new XsdAttribute()); + attribute->setScope(XsdAttribute::Scope::Ptr(new XsdAttribute::Scope())); + attribute->scope()->setVariety(XsdAttribute::Scope::Global); + + if (hasAttribute(QString::fromLatin1("default")) && hasAttribute(QString::fromLatin1("fixed"))) { + error(QtXmlPatterns::tr("%1 element must not have %2 and %3 attribute together") + .arg(formatElement("attribute")) + .arg(formatAttribute("default")) + .arg(formatAttribute("fixed"))); + return attribute; + } + + // parse attributes + if (hasAttribute(QString::fromLatin1("default"))) { + const QString value = readAttribute(QString::fromLatin1("default")); + attribute->setValueConstraint(XsdAttribute::ValueConstraint::Ptr(new XsdAttribute::ValueConstraint())); + attribute->valueConstraint()->setVariety(XsdAttribute::ValueConstraint::Default); + attribute->valueConstraint()->setValue(value); + } else if (hasAttribute(QString::fromLatin1("fixed"))) { + const QString value = readAttribute(QString::fromLatin1("fixed")); + attribute->setValueConstraint(XsdAttribute::ValueConstraint::Ptr(new XsdAttribute::ValueConstraint())); + attribute->valueConstraint()->setVariety(XsdAttribute::ValueConstraint::Fixed); + attribute->valueConstraint()->setValue(value); + } + + const QXmlName objectName = m_namePool->allocateQName(m_targetNamespace, readNameAttribute("attribute")); + if ((objectName.namespaceURI() == StandardNamespaces::xsi) && + (m_namePool->stringForLocalName(objectName.localName()) != QString::fromLatin1("type")) && + (m_namePool->stringForLocalName(objectName.localName()) != QString::fromLatin1("nil")) && + (m_namePool->stringForLocalName(objectName.localName()) != QString::fromLatin1("schemaLocation")) && + (m_namePool->stringForLocalName(objectName.localName()) != QString::fromLatin1("noNamespaceSchemaLocation"))) { + + error(QtXmlPatterns::tr("content of %1 attribute of %2 element must not be from namespace %3") + .arg(formatAttribute("name")) + .arg(formatElement("attribute")) + .arg(formatURI(CommonNamespaces::XSI))); + return attribute; + } + if (m_namePool->stringForLocalName(objectName.localName()) == QString::fromLatin1("xmlns")) { + error(QtXmlPatterns::tr("%1 attribute of %2 element must not be %3") + .arg(formatAttribute("name")) + .arg(formatElement("attribute")) + .arg(formatData("xmlns"))); + return attribute; + } + attribute->setName(objectName); + + bool hasTypeAttribute = false; + bool hasTypeSpecified = false; + + if (hasAttribute(QString::fromLatin1("type"))) { + hasTypeAttribute = true; + + const QString type = readQNameAttribute(QString::fromLatin1("type"), "attribute"); + QXmlName typeName; + convertName(type, NamespaceSupport::ElementName, typeName); // translate qualified name into QXmlName + m_schemaResolver->addAttributeType(attribute, typeName, currentSourceLocation()); // add to resolver + hasTypeSpecified = true; + } + + validateIdAttribute("attribute"); + + TagValidationHandler tagValidator(XsdTagScope::GlobalAttribute, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + attribute->addAnnotation(annotation); + } else if (isSchemaTag(XsdSchemaToken::SimpleType, token, namespaceToken)) { + if (hasTypeAttribute) { + error(QtXmlPatterns::tr("%1 element with %2 child element must not have a %3 attribute") + .arg(formatElement("attribute")) + .arg(formatElement("simpleType")) + .arg(formatAttribute("type"))); + break; + } + + const XsdSimpleType::Ptr type = parseLocalSimpleType(); + type->setContext(attribute); + attribute->setType(type); + hasTypeSpecified = true; + + // add it to list of anonymous types as well + addAnonymousType(type); + } else { + parseUnknown(); + } + } + } + + if (!hasTypeSpecified) { + attribute->setType(BuiltinTypes::xsAnySimpleType); // default value + return attribute; + } + + tagValidator.finalize(); + + return attribute; +} + +XsdAttributeUse::Ptr XsdSchemaParser::parseLocalAttribute(const NamedSchemaComponent::Ptr &parent) +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::Attribute, this); + + validateElement(XsdTagScope::LocalAttribute); + + bool hasRefAttribute = false; + bool hasTypeAttribute = false; + bool hasTypeSpecified = false; + + XsdAttributeUse::Ptr attributeUse; + if (hasAttribute(QString::fromLatin1("ref"))) { + const XsdAttributeReference::Ptr reference = XsdAttributeReference::Ptr(new XsdAttributeReference()); + reference->setType(XsdAttributeReference::AttributeUse); + reference->setSourceLocation(currentSourceLocation()); + + attributeUse = reference; + hasRefAttribute = true; + } else { + attributeUse = XsdAttributeUse::Ptr(new XsdAttributeUse()); + } + + if (hasAttribute(QString::fromLatin1("default")) && hasAttribute(QString::fromLatin1("fixed"))) { + error(QtXmlPatterns::tr("%1 element must not have %2 and %3 attribute together") + .arg(formatElement("attribute")) + .arg(formatAttribute("default")) + .arg(formatAttribute("fixed"))); + return attributeUse; + } + + if (hasRefAttribute) { + if (hasAttribute(QString::fromLatin1("form"))) { + error(QtXmlPatterns::tr("%1 element must not have %2 and %3 attribute together") + .arg(formatElement("attribute")) + .arg(formatAttribute("ref")) + .arg(formatAttribute("form"))); + return attributeUse; + } + if (hasAttribute(QString::fromLatin1("name"))) { + error(QtXmlPatterns::tr("%1 element must not have %2 and %3 attribute together") + .arg(formatElement("attribute")) + .arg(formatAttribute("ref")) + .arg(formatAttribute("name"))); + return attributeUse; + } + if (hasAttribute(QString::fromLatin1("type"))) { + error(QtXmlPatterns::tr("%1 element must not have %2 and %3 attribute together") + .arg(formatElement("attribute")) + .arg(formatAttribute("ref")) + .arg(formatAttribute("type"))); + return attributeUse; + } + } + + // parse attributes + + // default, fixed and use are handled by both, attribute use and attribute reference + if (hasAttribute(QString::fromLatin1("default"))) { + const QString value = readAttribute(QString::fromLatin1("default")); + attributeUse->setValueConstraint(XsdAttributeUse::ValueConstraint::Ptr(new XsdAttributeUse::ValueConstraint())); + attributeUse->valueConstraint()->setVariety(XsdAttributeUse::ValueConstraint::Default); + attributeUse->valueConstraint()->setValue(value); + } else if (hasAttribute(QString::fromLatin1("fixed"))) { + const QString value = readAttribute(QString::fromLatin1("fixed")); + attributeUse->setValueConstraint(XsdAttributeUse::ValueConstraint::Ptr(new XsdAttributeUse::ValueConstraint())); + attributeUse->valueConstraint()->setVariety(XsdAttributeUse::ValueConstraint::Fixed); + attributeUse->valueConstraint()->setValue(value); + } + + if (hasAttribute(QString::fromLatin1("use"))) { + const QString value = readAttribute(QString::fromLatin1("use")); + if (value != QString::fromLatin1("optional") && + value != QString::fromLatin1("prohibited") && + value != QString::fromLatin1("required")) { + attributeContentError("use", "attribute", value); + return attributeUse; + } + + if (value == QString::fromLatin1("optional")) + attributeUse->setUseType(XsdAttributeUse::OptionalUse); + else if (value == QString::fromLatin1("prohibited")) + attributeUse->setUseType(XsdAttributeUse::ProhibitedUse); + else if (value == QString::fromLatin1("required")) + attributeUse->setUseType(XsdAttributeUse::RequiredUse); + + if (attributeUse->valueConstraint() && attributeUse->valueConstraint()->variety() == XsdAttributeUse::ValueConstraint::Default && value != QString::fromLatin1("optional")) { + error(QtXmlPatterns::tr("%1 attribute of %2 element must have the value %3 because the %4 attribute is set") + .arg(formatAttribute("use")) + .arg(formatElement("attribute")) + .arg(formatData("optional")) + .arg(formatElement("default"))); + return attributeUse; + } + } + + const XsdAttribute::Ptr attribute(new XsdAttribute()); + + attributeUse->setAttribute(attribute); + m_componentLocationHash.insert(attribute, currentSourceLocation()); + + attribute->setScope(XsdAttribute::Scope::Ptr(new XsdAttribute::Scope())); + attribute->scope()->setVariety(XsdAttribute::Scope::Local); + attribute->scope()->setParent(parent); + + // now make a difference between attribute reference and attribute use + if (hasRefAttribute) { + const QString reference = readQNameAttribute(QString::fromLatin1("ref"), "attribute"); + QXmlName referenceName; + convertName(reference, NamespaceSupport::ElementName, referenceName); // translate qualified name into QXmlName + + const XsdAttributeReference::Ptr attributeReference = attributeUse; + attributeReference->setReferenceName(referenceName); + } else { + if (hasAttribute(QString::fromLatin1("name"))) { + const QString attributeName = readNameAttribute("attribute"); + + QXmlName objectName; + if (hasAttribute(QString::fromLatin1("form"))) { + const QString value = readAttribute(QString::fromLatin1("form")); + if (value != QString::fromLatin1("qualified") && value != QString::fromLatin1("unqualified")) { + attributeContentError("form", "attribute", value); + return attributeUse; + } + + if (value == QString::fromLatin1("qualified")) { + objectName = m_namePool->allocateQName(m_targetNamespace, attributeName); + } else { + objectName = m_namePool->allocateQName(QString(), attributeName); + } + } else { + if (m_attributeFormDefault == QString::fromLatin1("qualified")) { + objectName = m_namePool->allocateQName(m_targetNamespace, attributeName); + } else { + objectName = m_namePool->allocateQName(QString(), attributeName); + } + } + + if ((objectName.namespaceURI() == StandardNamespaces::xsi) && + (m_namePool->stringForLocalName(objectName.localName()) != QString::fromLatin1("type")) && + (m_namePool->stringForLocalName(objectName.localName()) != QString::fromLatin1("nil")) && + (m_namePool->stringForLocalName(objectName.localName()) != QString::fromLatin1("schemaLocation")) && + (m_namePool->stringForLocalName(objectName.localName()) != QString::fromLatin1("noNamespaceSchemaLocation"))) { + + error(QtXmlPatterns::tr("content of %1 attribute of %2 element must not be from namespace %3") + .arg(formatAttribute("name")) + .arg(formatElement("attribute")) + .arg(formatURI(CommonNamespaces::XSI))); + return attributeUse; + } + if (m_namePool->stringForLocalName(objectName.localName()) == QString::fromLatin1("xmlns")) { + error(QtXmlPatterns::tr("%1 attribute of %2 element must not be %3") + .arg(formatAttribute("name")) + .arg(formatElement("attribute")) + .arg(formatData("xmlns"))); + return attributeUse; + } + + attribute->setName(objectName); + } + + if (hasAttribute(QString::fromLatin1("type"))) { + hasTypeAttribute = true; + + const QString type = readQNameAttribute(QString::fromLatin1("type"), "attribute"); + QXmlName typeName; + convertName(type, NamespaceSupport::ElementName, typeName); // translate qualified name into QXmlName + m_schemaResolver->addAttributeType(attribute, typeName, currentSourceLocation()); // add to resolver + hasTypeSpecified = true; + } + + if (attributeUse->valueConstraint()) { + //TODO: check whether assigning the value constraint of the attribute use to the attribute is correct + if (!attribute->valueConstraint()) + attribute->setValueConstraint(XsdAttribute::ValueConstraint::Ptr(new XsdAttribute::ValueConstraint())); + + attribute->valueConstraint()->setVariety((XsdAttribute::ValueConstraint::Variety)attributeUse->valueConstraint()->variety()); + attribute->valueConstraint()->setValue(attributeUse->valueConstraint()->value()); + attribute->valueConstraint()->setLexicalForm(attributeUse->valueConstraint()->lexicalForm()); + } + } + + validateIdAttribute("attribute"); + + TagValidationHandler tagValidator(XsdTagScope::LocalAttribute, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + attribute->addAnnotation(annotation); + } else if (isSchemaTag(XsdSchemaToken::SimpleType, token, namespaceToken)) { + if (hasTypeAttribute) { + error(QtXmlPatterns::tr("%1 element with %2 child element must not have a %3 attribute") + .arg(formatElement("attribute")) + .arg(formatElement("simpleType")) + .arg(formatAttribute("type"))); + break; + } + if (hasRefAttribute) { + error(QtXmlPatterns::tr("%1 element with %2 child element must not have a %3 attribute") + .arg(formatElement("attribute")) + .arg(formatElement("simpleType")) + .arg(formatAttribute("ref"))); + break; + } + + const XsdSimpleType::Ptr type = parseLocalSimpleType(); + type->setContext(attribute); + attribute->setType(type); + hasTypeSpecified = true; + + // add it to list of anonymous types as well + addAnonymousType(type); + } else { + parseUnknown(); + } + } + } + + if (!hasTypeSpecified) { + attribute->setType(BuiltinTypes::xsAnySimpleType); // default value + } + + tagValidator.finalize(); + + return attributeUse; +} + +XsdAttributeGroup::Ptr XsdSchemaParser::parseNamedAttributeGroup() +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::AttributeGroup, this); + + validateElement(XsdTagScope::NamedAttributeGroup); + + const XsdAttributeGroup::Ptr attributeGroup(new XsdAttributeGroup()); + + // parse attributes + const QXmlName objectName = m_namePool->allocateQName(m_targetNamespace, readNameAttribute("attributeGroup")); + attributeGroup->setName(objectName); + + validateIdAttribute("attributeGroup"); + + TagValidationHandler tagValidator(XsdTagScope::NamedAttributeGroup, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + attributeGroup->addAnnotation(annotation); + } else if (isSchemaTag(XsdSchemaToken::Attribute, token, namespaceToken)) { + const XsdAttributeUse::Ptr attributeUse = parseLocalAttribute(attributeGroup); + + if (attributeUse->useType() == XsdAttributeUse::ProhibitedUse) { + warning(QtXmlPatterns::tr("specifying use='prohibited' inside an attribute group has no effect")); + } else { + attributeGroup->addAttributeUse(attributeUse); + } + } else if (isSchemaTag(XsdSchemaToken::AttributeGroup, token, namespaceToken)) { + const XsdAttributeUse::Ptr attributeUse = parseReferredAttributeGroup(); + attributeGroup->addAttributeUse(attributeUse); + } else if (isSchemaTag(XsdSchemaToken::AnyAttribute, token, namespaceToken)) { + const XsdWildcard::Ptr wildcard = parseAnyAttribute(); + attributeGroup->setWildcard(wildcard); + } else { + parseUnknown(); + } + } + } + + tagValidator.finalize(); + + return attributeGroup; +} + +XsdAttributeUse::Ptr XsdSchemaParser::parseReferredAttributeGroup() +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::AttributeGroup, this); + + validateElement(XsdTagScope::ReferredAttributeGroup); + + const XsdAttributeReference::Ptr attributeReference(new XsdAttributeReference()); + attributeReference->setType(XsdAttributeReference::AttributeGroup); + attributeReference->setSourceLocation(currentSourceLocation()); + + // parse attributes + const QString reference = readQNameAttribute(QString::fromLatin1("ref"), "attributeGroup"); + QXmlName referenceName; + convertName(reference, NamespaceSupport::ElementName, referenceName); // translate qualified name into QXmlName + attributeReference->setReferenceName(referenceName); + + validateIdAttribute("attributeGroup"); + + TagValidationHandler tagValidator(XsdTagScope::ReferredAttributeGroup, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + attributeReference->addAnnotation(annotation); + } else { + parseUnknown(); + } + } + } + + tagValidator.finalize(); + + return attributeReference; +} + +XsdElement::Ptr XsdSchemaParser::parseGlobalElement() +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::Element, this); + + validateElement(XsdTagScope::GlobalElement); + + const XsdElement::Ptr element(new XsdElement()); + element->setScope(XsdElement::Scope::Ptr(new XsdElement::Scope())); + element->scope()->setVariety(XsdElement::Scope::Global); + + bool hasTypeAttribute = false; + bool hasTypeSpecified = false; + bool hasSubstitutionGroup = false; + + // parse attributes + const QXmlName objectName = m_namePool->allocateQName(m_targetNamespace, readNameAttribute("element")); + element->setName(objectName); + + if (hasAttribute(QString::fromLatin1("abstract"))) { + const QString abstract = readAttribute(QString::fromLatin1("abstract")); + + const Boolean::Ptr value = Boolean::fromLexical(abstract); + if (value->hasError()) { + attributeContentError("abstract", "element", abstract, BuiltinTypes::xsBoolean); + return element; + } + + element->setIsAbstract(value->as<Boolean>()->value()); + } else { + element->setIsAbstract(false); // the default value + } + + if (hasAttribute(QString::fromLatin1("default")) && hasAttribute(QString::fromLatin1("fixed"))) { + error(QtXmlPatterns::tr("%1 element must not have %2 and %3 attribute together") + .arg(formatElement("element")) + .arg(formatAttribute("default")) + .arg(formatAttribute("fixed"))); + return element; + } + + if (hasAttribute(QString::fromLatin1("default"))) { + const QString value = readAttribute(QString::fromLatin1("default")); + element->setValueConstraint(XsdElement::ValueConstraint::Ptr(new XsdElement::ValueConstraint())); + element->valueConstraint()->setVariety(XsdElement::ValueConstraint::Default); + element->valueConstraint()->setValue(value); + } else if (hasAttribute(QString::fromLatin1("fixed"))) { + const QString value = readAttribute(QString::fromLatin1("fixed")); + element->setValueConstraint(XsdElement::ValueConstraint::Ptr(new XsdElement::ValueConstraint())); + element->valueConstraint()->setVariety(XsdElement::ValueConstraint::Fixed); + element->valueConstraint()->setValue(value); + } + + element->setDisallowedSubstitutions(readBlockingConstraintAttribute(NamedSchemaComponent::ExtensionConstraint | NamedSchemaComponent::RestrictionConstraint | NamedSchemaComponent::SubstitutionConstraint, "element")); + element->setSubstitutionGroupExclusions(readDerivationConstraintAttribute(SchemaType::ExtensionConstraint | SchemaType::RestrictionConstraint, "element")); + + if (hasAttribute(QString::fromLatin1("nillable"))) { + const QString nillable = readAttribute(QString::fromLatin1("nillable")); + + const Boolean::Ptr value = Boolean::fromLexical(nillable); + if (value->hasError()) { + attributeContentError("nillable", "element", nillable, BuiltinTypes::xsBoolean); + return element; + } + + element->setIsNillable(value->as<Boolean>()->value()); + } else { + element->setIsNillable(false); // the default value + } + + if (hasAttribute(QString::fromLatin1("type"))) { + const QString type = readQNameAttribute(QString::fromLatin1("type"), "element"); + QXmlName typeName; + convertName(type, NamespaceSupport::ElementName, typeName); // translate qualified name into QXmlName + m_schemaResolver->addElementType(element, typeName, currentSourceLocation()); // add to resolver + + hasTypeAttribute = true; + hasTypeSpecified = true; + } + + if (hasAttribute(QString::fromLatin1("substitutionGroup"))) { + QList<QXmlName> elementNames; + + const QString value = readAttribute(QString::fromLatin1("substitutionGroup")); + const QStringList substitutionGroups = value.split(QLatin1Char(' '), QString::SkipEmptyParts); + if (substitutionGroups.isEmpty()) { + attributeContentError("substitutionGroup", "element", value, BuiltinTypes::xsQName); + return element; + } + + for (int i = 0; i < substitutionGroups.count(); ++i) { + const QString value = substitutionGroups.at(i).simplified(); + if (!XPathHelper::isQName(value)) { + attributeContentError("substitutionGroup", "element", value, BuiltinTypes::xsQName); + return element; + } + + QXmlName elementName; + convertName(value, NamespaceSupport::ElementName, elementName); // translate qualified name into QXmlName + elementNames.append(elementName); + } + + m_schemaResolver->addSubstitutionGroupAffiliation(element, elementNames, currentSourceLocation()); // add to resolver + + hasSubstitutionGroup = true; + } + + validateIdAttribute("element"); + + XsdAlternative::List alternatives; + + TagValidationHandler tagValidator(XsdTagScope::GlobalElement, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + element->addAnnotation(annotation); + } else if (isSchemaTag(XsdSchemaToken::SimpleType, token, namespaceToken)) { + if (hasTypeAttribute) { + error(QtXmlPatterns::tr("%1 element with %2 child element must not have a %3 attribute") + .arg(formatElement("element")) + .arg(formatElement("simpleType")) + .arg(formatAttribute("type"))); + return element; + } + + const XsdSimpleType::Ptr type = parseLocalSimpleType(); + type->setContext(element); + element->setType(type); + + // add it to list of anonymous types as well + addAnonymousType(type); + + hasTypeSpecified = true; + } else if (isSchemaTag(XsdSchemaToken::ComplexType, token, namespaceToken)) { + if (hasTypeAttribute) { + error(QtXmlPatterns::tr("%1 element with %2 child element must not have a %3 attribute") + .arg(formatElement("element")) + .arg(formatElement("complexType")) + .arg(formatAttribute("type"))); + return element; + } + + const XsdComplexType::Ptr type = parseLocalComplexType(); + type->setContext(element); + element->setType(type); + + // add it to list of anonymous types as well + addAnonymousType(type); + + hasTypeSpecified = true; + } else if (isSchemaTag(XsdSchemaToken::Alternative, token, namespaceToken)) { + const XsdAlternative::Ptr alternative = parseAlternative(); + alternatives.append(alternative); + } else if (isSchemaTag(XsdSchemaToken::Unique, token, namespaceToken)) { + const XsdIdentityConstraint::Ptr constraint = parseUnique(); + element->addIdentityConstraint(constraint); + } else if (isSchemaTag(XsdSchemaToken::Key, token, namespaceToken)) { + const XsdIdentityConstraint::Ptr constraint = parseKey(); + element->addIdentityConstraint(constraint); + } else if (isSchemaTag(XsdSchemaToken::Keyref, token, namespaceToken)) { + const XsdIdentityConstraint::Ptr constraint = parseKeyRef(element); + element->addIdentityConstraint(constraint); + } else { + parseUnknown(); + } + } + } + + tagValidator.finalize(); + + if (!hasTypeSpecified) { + if (hasSubstitutionGroup) + m_schemaResolver->addSubstitutionGroupType(element); + else + element->setType(BuiltinTypes::xsAnyType); + } + + if (!alternatives.isEmpty()) { + element->setTypeTable(XsdElement::TypeTable::Ptr(new XsdElement::TypeTable())); + + for (int i = 0; i < alternatives.count(); ++i) { + if (alternatives.at(i)->test()) + element->typeTable()->addAlternative(alternatives.at(i)); + + if (i == (alternatives.count() - 1)) { // the final one + if (!alternatives.at(i)->test()) { + element->typeTable()->setDefaultTypeDefinition(alternatives.at(i)); + } else { + const XsdAlternative::Ptr alternative(new XsdAlternative()); + if (element->type()) + alternative->setType(element->type()); + else + m_schemaResolver->addAlternativeType(alternative, element); // add to resolver + + element->typeTable()->setDefaultTypeDefinition(alternative); + } + } + } + } + + return element; +} + +XsdTerm::Ptr XsdSchemaParser::parseLocalElement(const XsdParticle::Ptr &particle, const NamedSchemaComponent::Ptr &parent) +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::Element, this); + + validateElement(XsdTagScope::LocalElement); + + bool hasRefAttribute = false; + bool hasTypeAttribute = false; + bool hasTypeSpecified = false; + + XsdTerm::Ptr term; + XsdElement::Ptr element; + if (hasAttribute(QString::fromLatin1("ref"))) { + term = XsdReference::Ptr(new XsdReference()); + hasRefAttribute = true; + } else { + term = XsdElement::Ptr(new XsdElement()); + element = term; + } + + if (hasRefAttribute) { + if (hasAttribute(QString::fromLatin1("name"))) { + error(QtXmlPatterns::tr("%1 element must not have %2 and %3 attribute together") + .arg(formatElement("element")) + .arg(formatAttribute("ref")) + .arg(formatAttribute("name"))); + return term; + } else if (hasAttribute(QString::fromLatin1("block"))) { + error(QtXmlPatterns::tr("%1 element must not have %2 and %3 attribute together") + .arg(formatElement("element")) + .arg(formatAttribute("ref")) + .arg(formatAttribute("block"))); + return term; + } else if (hasAttribute(QString::fromLatin1("nillable"))) { + error(QtXmlPatterns::tr("%1 element must not have %2 and %3 attribute together") + .arg(formatElement("element")) + .arg(formatAttribute("ref")) + .arg(formatAttribute("nillable"))); + return term; + } else if (hasAttribute(QString::fromLatin1("default"))) { + error(QtXmlPatterns::tr("%1 element must not have %2 and %3 attribute together") + .arg(formatElement("element")) + .arg(formatAttribute("ref")) + .arg(formatAttribute("default"))); + return term; + } else if (hasAttribute(QString::fromLatin1("fixed"))) { + error(QtXmlPatterns::tr("%1 element must not have %2 and %3 attribute together") + .arg(formatElement("element")) + .arg(formatAttribute("ref")) + .arg(formatAttribute("fixed"))); + return term; + } else if (hasAttribute(QString::fromLatin1("form"))) { + error(QtXmlPatterns::tr("%1 element must not have %2 and %3 attribute together") + .arg(formatElement("element")) + .arg(formatAttribute("ref")) + .arg(formatAttribute("form"))); + return term; + } else if (hasAttribute(QString::fromLatin1("type"))) { + error(QtXmlPatterns::tr("%1 element must not have %2 and %3 attribute together") + .arg(formatElement("element")) + .arg(formatAttribute("ref")) + .arg(formatAttribute("type"))); + return term; + } + } + + // parse attributes + if (!parseMinMaxConstraint(particle, "element")) { + return element; + } + + if (!hasAttribute(QString::fromLatin1("name")) && !hasAttribute(QString::fromLatin1("ref"))) { + error(QtXmlPatterns::tr("%1 element must have either %2 or %3 attribute") + .arg(formatElement("element")) + .arg(formatAttribute("name")) + .arg(formatAttribute("ref"))); + return element; + } + + if (hasRefAttribute) { + const QString ref = readQNameAttribute(QString::fromLatin1("ref"), "element"); + QXmlName referenceName; + convertName(ref, NamespaceSupport::ElementName, referenceName); // translate qualified name into QXmlName + + const XsdReference::Ptr reference = term; + reference->setReferenceName(referenceName); + reference->setType(XsdReference::Element); + reference->setSourceLocation(currentSourceLocation()); + } else { + element->setScope(XsdElement::Scope::Ptr(new XsdElement::Scope())); + element->scope()->setVariety(XsdElement::Scope::Local); + element->scope()->setParent(parent); + + if (hasAttribute(QString::fromLatin1("name"))) { + const QString elementName = readNameAttribute("element"); + + QXmlName objectName; + if (hasAttribute(QString::fromLatin1("form"))) { + const QString value = readAttribute(QString::fromLatin1("form")); + if (value != QString::fromLatin1("qualified") && value != QString::fromLatin1("unqualified")) { + attributeContentError("form", "element", value); + return element; + } + + if (value == QString::fromLatin1("qualified")) { + objectName = m_namePool->allocateQName(m_targetNamespace, elementName); + } else { + objectName = m_namePool->allocateQName(QString(), elementName); + } + } else { + if (m_elementFormDefault == QString::fromLatin1("qualified")) { + objectName = m_namePool->allocateQName(m_targetNamespace, elementName); + } else { + objectName = m_namePool->allocateQName(QString(), elementName); + } + } + + element->setName(objectName); + } + + if (hasAttribute(QString::fromLatin1("nillable"))) { + const QString nillable = readAttribute(QString::fromLatin1("nillable")); + + const Boolean::Ptr value = Boolean::fromLexical(nillable); + if (value->hasError()) { + attributeContentError("nillable", "element", nillable, BuiltinTypes::xsBoolean); + return term; + } + + element->setIsNillable(value->as<Boolean>()->value()); + } else { + element->setIsNillable(false); // the default value + } + + if (hasAttribute(QString::fromLatin1("default")) && hasAttribute(QString::fromLatin1("fixed"))) { + error(QtXmlPatterns::tr("%1 element must not have %2 and %3 attribute together") + .arg(formatElement("element")) + .arg(formatAttribute("default")) + .arg(formatAttribute("fixed"))); + return element; + } + + if (hasAttribute(QString::fromLatin1("default"))) { + const QString value = readAttribute(QString::fromLatin1("default")); + element->setValueConstraint(XsdElement::ValueConstraint::Ptr(new XsdElement::ValueConstraint())); + element->valueConstraint()->setVariety(XsdElement::ValueConstraint::Default); + element->valueConstraint()->setValue(value); + } else if (hasAttribute(QString::fromLatin1("fixed"))) { + const QString value = readAttribute(QString::fromLatin1("fixed")); + element->setValueConstraint(XsdElement::ValueConstraint::Ptr(new XsdElement::ValueConstraint())); + element->valueConstraint()->setVariety(XsdElement::ValueConstraint::Fixed); + element->valueConstraint()->setValue(value); + } + + if (hasAttribute(QString::fromLatin1("type"))) { + const QString type = readQNameAttribute(QString::fromLatin1("type"), "element"); + QXmlName typeName; + convertName(type, NamespaceSupport::ElementName, typeName); // translate qualified name into QXmlName + m_schemaResolver->addElementType(element, typeName, currentSourceLocation()); // add to resolver + + hasTypeAttribute = true; + hasTypeSpecified = true; + } + + element->setDisallowedSubstitutions(readBlockingConstraintAttribute(NamedSchemaComponent::ExtensionConstraint | NamedSchemaComponent::RestrictionConstraint | NamedSchemaComponent::SubstitutionConstraint, "element")); + } + + validateIdAttribute("element"); + + XsdAlternative::List alternatives; + + TagValidationHandler tagValidator(XsdTagScope::LocalElement, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + element->addAnnotation(annotation); + } else if (isSchemaTag(XsdSchemaToken::SimpleType, token, namespaceToken)) { + if (hasRefAttribute) { + error(QtXmlPatterns::tr("%1 element with %2 child element must not have a %3 attribute") + .arg(formatElement("element")) + .arg(formatElement("simpleType")) + .arg(formatAttribute("ref"))); + return term; + } else if (hasTypeAttribute) { + error(QtXmlPatterns::tr("%1 element with %2 child element must not have a %3 attribute") + .arg(formatElement("element")) + .arg(formatElement("simpleType")) + .arg(formatAttribute("type"))); + return term; + } + + const XsdSimpleType::Ptr type = parseLocalSimpleType(); + type->setContext(element); + element->setType(type); + + // add it to list of anonymous types as well + addAnonymousType(type); + + hasTypeSpecified = true; + } else if (isSchemaTag(XsdSchemaToken::ComplexType, token, namespaceToken)) { + if (hasRefAttribute) { + error(QtXmlPatterns::tr("%1 element with %2 child element must not have a %3 attribute") + .arg(formatElement("element")) + .arg(formatElement("complexType")) + .arg(formatAttribute("ref"))); + return term; + } else if (hasTypeAttribute) { + error(QtXmlPatterns::tr("%1 element with %2 child element must not have a %3 attribute") + .arg(formatElement("element")) + .arg(formatElement("complexType")) + .arg(formatAttribute("type"))); + return term; + } + + const XsdComplexType::Ptr type = parseLocalComplexType(); + type->setContext(element); + element->setType(type); + + // add it to list of anonymous types as well + addAnonymousType(type); + + hasTypeSpecified = true; + } else if (isSchemaTag(XsdSchemaToken::Alternative, token, namespaceToken)) { + if (hasRefAttribute) { + error(QtXmlPatterns::tr("%1 element with %2 child element must not have a %3 attribute") + .arg(formatElement("element")) + .arg(formatElement("alternative")) + .arg(formatAttribute("ref"))); + return term; + } + + const XsdAlternative::Ptr alternative = parseAlternative(); + alternatives.append(alternative); + } else if (isSchemaTag(XsdSchemaToken::Unique, token, namespaceToken)) { + if (hasRefAttribute) { + error(QtXmlPatterns::tr("%1 element with %2 child element must not have a %3 attribute") + .arg(formatElement("element")) + .arg(formatElement("unique")) + .arg(formatAttribute("ref"))); + return term; + } + + const XsdIdentityConstraint::Ptr constraint = parseUnique(); + element->addIdentityConstraint(constraint); + } else if (isSchemaTag(XsdSchemaToken::Key, token, namespaceToken)) { + if (hasRefAttribute) { + error(QtXmlPatterns::tr("%1 element with %2 child element must not have a %3 attribute") + .arg(formatElement("element")) + .arg(formatElement("key")) + .arg(formatAttribute("ref"))); + return term; + } + + const XsdIdentityConstraint::Ptr constraint = parseKey(); + element->addIdentityConstraint(constraint); + } else if (isSchemaTag(XsdSchemaToken::Keyref, token, namespaceToken)) { + if (hasRefAttribute) { + error(QtXmlPatterns::tr("%1 element with %2 child element must not have a %3 attribute") + .arg(formatElement("element")) + .arg(formatElement("keyref")) + .arg(formatAttribute("ref"))); + return term; + } + + const XsdIdentityConstraint::Ptr constraint = parseKeyRef(element); + element->addIdentityConstraint(constraint); + } else { + parseUnknown(); + } + } + } + + tagValidator.finalize(); + + if (!hasTypeSpecified && !hasRefAttribute) + element->setType(BuiltinTypes::xsAnyType); + + if (!hasRefAttribute && !alternatives.isEmpty()) { + element->setTypeTable(XsdElement::TypeTable::Ptr(new XsdElement::TypeTable())); + + for (int i = 0; i < alternatives.count(); ++i) { + if (alternatives.at(i)->test()) + element->typeTable()->addAlternative(alternatives.at(i)); + + if (i == (alternatives.count() - 1)) { // the final one + if (!alternatives.at(i)->test()) { + element->typeTable()->setDefaultTypeDefinition(alternatives.at(i)); + } else { + const XsdAlternative::Ptr alternative(new XsdAlternative()); + if (element->type()) + alternative->setType(element->type()); + else + m_schemaResolver->addAlternativeType(alternative, element); // add to resolver + + element->typeTable()->setDefaultTypeDefinition(alternative); + } + } + } + } + + return term; +} + +XsdIdentityConstraint::Ptr XsdSchemaParser::parseUnique() +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::Unique, this); + + validateElement(XsdTagScope::Unique); + + const XsdIdentityConstraint::Ptr constraint(new XsdIdentityConstraint()); + constraint->setCategory(XsdIdentityConstraint::Unique); + + // parse attributes + const QXmlName objectName = m_namePool->allocateQName(m_targetNamespace, readNameAttribute("unique")); + constraint->setName(objectName); + + validateIdAttribute("unique"); + + TagValidationHandler tagValidator(XsdTagScope::Unique, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + constraint->addAnnotation(annotation); + } else if (isSchemaTag(XsdSchemaToken::Selector, token, namespaceToken)) { + parseSelector(constraint); + } else if (isSchemaTag(XsdSchemaToken::Field, token, namespaceToken)) { + parseField(constraint); + } else { + parseUnknown(); + } + } + } + + // add constraint to schema for further checking + addIdentityConstraint(constraint); + + tagValidator.finalize(); + + return constraint; +} + +XsdIdentityConstraint::Ptr XsdSchemaParser::parseKey() +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::Key, this); + + validateElement(XsdTagScope::Key); + + const XsdIdentityConstraint::Ptr constraint(new XsdIdentityConstraint()); + constraint->setCategory(XsdIdentityConstraint::Key); + + // parse attributes + const QXmlName objectName = m_namePool->allocateQName(m_targetNamespace, readNameAttribute("key")); + constraint->setName(objectName); + + validateIdAttribute("key"); + + TagValidationHandler tagValidator(XsdTagScope::Key, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + constraint->addAnnotation(annotation); + } else if (isSchemaTag(XsdSchemaToken::Selector, token, namespaceToken)) { + parseSelector(constraint); + } else if (isSchemaTag(XsdSchemaToken::Field, token, namespaceToken)) { + parseField(constraint); + } else { + parseUnknown(); + } + } + } + + // add constraint to schema for further checking + addIdentityConstraint(constraint); + + tagValidator.finalize(); + + return constraint; +} + +XsdIdentityConstraint::Ptr XsdSchemaParser::parseKeyRef(const XsdElement::Ptr &element) +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::Keyref, this); + + validateElement(XsdTagScope::KeyRef); + + const XsdIdentityConstraint::Ptr constraint(new XsdIdentityConstraint()); + constraint->setCategory(XsdIdentityConstraint::KeyReference); + + // parse attributes + const QXmlName objectName = m_namePool->allocateQName(m_targetNamespace, readNameAttribute("keyref")); + constraint->setName(objectName); + + const QString refer = readQNameAttribute(QString::fromLatin1("refer"), "keyref"); + QXmlName referenceName; + convertName(refer, NamespaceSupport::ElementName, referenceName); // translate qualified name into QXmlName + m_schemaResolver->addKeyReference(element, constraint, referenceName, currentSourceLocation()); // add to resolver + + validateIdAttribute("keyref"); + + TagValidationHandler tagValidator(XsdTagScope::KeyRef, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + constraint->addAnnotation(annotation); + } else if (isSchemaTag(XsdSchemaToken::Selector, token, namespaceToken)) { + parseSelector(constraint); + } else if (isSchemaTag(XsdSchemaToken::Field, token, namespaceToken)) { + parseField(constraint); + } else { + parseUnknown(); + } + } + } + + // add constraint to schema for further checking + addIdentityConstraint(constraint); + + tagValidator.finalize(); + + return constraint; +} + +void XsdSchemaParser::parseSelector(const XsdIdentityConstraint::Ptr &ptr) +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::Selector, this); + + validateElement(XsdTagScope::Selector); + + // parse attributes + const XsdXPathExpression::Ptr expression = readXPathExpression("selector"); + + const QString xpath = readXPathAttribute(QString::fromLatin1("xpath"), XPathSelector, "selector"); + expression->setExpression(xpath); + + ptr->setSelector(expression); + + validateIdAttribute("selector"); + + TagValidationHandler tagValidator(XsdTagScope::Selector, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + expression->addAnnotation(annotation); + } else { + parseUnknown(); + } + } + } + + tagValidator.finalize(); +} + +void XsdSchemaParser::parseField(const XsdIdentityConstraint::Ptr &ptr) +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::Field, this); + + validateElement(XsdTagScope::Field); + + // parse attributes + const XsdXPathExpression::Ptr expression = readXPathExpression("field"); + + const QString xpath = readXPathAttribute(QString::fromLatin1("xpath"), XPathField, "field"); + expression->setExpression(xpath); + + ptr->addField(expression); + + validateIdAttribute("field"); + + TagValidationHandler tagValidator(XsdTagScope::Field, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + expression->addAnnotation(annotation); + } else { + parseUnknown(); + } + } + } + + tagValidator.finalize(); +} + +XsdAlternative::Ptr XsdSchemaParser::parseAlternative() +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::Alternative, this); + + validateElement(XsdTagScope::Alternative); + + const XsdAlternative::Ptr alternative(new XsdAlternative()); + + bool hasTypeSpecified = false; + + if (hasAttribute(QString::fromLatin1("test"))) { + const XsdXPathExpression::Ptr expression = readXPathExpression("alternative"); + + const QString test = readXPathAttribute(QString::fromLatin1("test"), XPath20, "alternative"); + expression->setExpression(test); + + alternative->setTest(expression); + } + + if (hasAttribute(QString::fromLatin1("type"))) { + const QString type = readQNameAttribute(QString::fromLatin1("type"), "alternative"); + QXmlName typeName; + convertName(type, NamespaceSupport::ElementName, typeName); // translate qualified name into QXmlName + m_schemaResolver->addAlternativeType(alternative, typeName, currentSourceLocation()); // add to resolver + + hasTypeSpecified = true; + } + + validateIdAttribute("alternative"); + + TagValidationHandler tagValidator(XsdTagScope::Alternative, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + alternative->addAnnotation(annotation); + } else if (isSchemaTag(XsdSchemaToken::SimpleType, token, namespaceToken)) { + const XsdSimpleType::Ptr type = parseLocalSimpleType(); + alternative->setType(type); + + // add it to list of anonymous types as well + addAnonymousType(type); + + hasTypeSpecified = true; + } else if (isSchemaTag(XsdSchemaToken::ComplexType, token, namespaceToken)) { + const XsdComplexType::Ptr type = parseLocalComplexType(); + alternative->setType(type); + + // add it to list of anonymous types as well + addAnonymousType(type); + + hasTypeSpecified = true; + } else { + parseUnknown(); + } + } + } + + tagValidator.finalize(); + + if (!hasTypeSpecified) { + error(QtXmlPatterns::tr("%1 element must have either %2 attribute or %3 or %4 as child element") + .arg(formatElement("alternative")) + .arg(formatAttribute("type")) + .arg(formatElement("simpleType")) + .arg(formatElement("complexType"))); + return alternative; + } + + return alternative; +} + +XsdNotation::Ptr XsdSchemaParser::parseNotation() +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::Notation, this); + + validateElement(XsdTagScope::Notation); + + const XsdNotation::Ptr notation(new XsdNotation()); + + // parse attributes + const QXmlName objectName = m_namePool->allocateQName(m_targetNamespace, readNameAttribute("notation")); + notation->setName(objectName); + + bool hasOptionalAttribute = false; + + if (hasAttribute(QString::fromLatin1("public"))) { + const QString value = readAttribute(QString::fromLatin1("public")); + if (!value.isEmpty()) { + const DerivedString<TypeToken>::Ptr publicId = DerivedString<TypeToken>::fromLexical(m_namePool, value); + if (publicId->hasError()) { + attributeContentError("public", "notation", value, BuiltinTypes::xsToken); + return notation; + } + notation->setPublicId(publicId); + } + + hasOptionalAttribute = true; + } + + if (hasAttribute(QString::fromLatin1("system"))) { + const QString value = readAttribute(QString::fromLatin1("system")); + if (!isValidUri(value)) { + attributeContentError("system", "notation", value, BuiltinTypes::xsAnyURI); + return notation; + } + + if (!value.isEmpty()) { + const AnyURI::Ptr systemId = AnyURI::fromLexical(value); + notation->setSystemId(systemId); + } + + hasOptionalAttribute = true; + } + + if (!hasOptionalAttribute) { + error(QtXmlPatterns::tr("%1 element requires either %2 or %3 attribute") + .arg(formatElement("notation")) + .arg(formatAttribute("public")) + .arg(formatAttribute("system"))); + return notation; + } + + validateIdAttribute("notation"); + + TagValidationHandler tagValidator(XsdTagScope::Notation, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isCharacters() || isEntityReference()) { + if (!text().toString().trimmed().isEmpty()) { + error(QtXmlPatterns::tr("text or entity references not allowed inside %1 element").arg(formatElement("notation"))); + return notation; + } + } + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + notation->addAnnotation(annotation); + } else { + parseUnknown(); + } + } + } + + tagValidator.finalize(); + + return notation; +} + +XsdWildcard::Ptr XsdSchemaParser::parseAny(const XsdParticle::Ptr &particle) +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::Any, this); + + validateElement(XsdTagScope::Any); + + const XsdWildcard::Ptr wildcard(new XsdWildcard()); + + // parse attributes + if (!parseMinMaxConstraint(particle, "any")) { + return wildcard; + } + + if (hasAttribute(QString::fromLatin1("namespace"))) { + const QSet<QString> values = readAttribute(QString::fromLatin1("namespace")).split(QLatin1Char(' '), QString::SkipEmptyParts).toSet(); + if ((values.contains(QString::fromLatin1("##any")) || values.contains(QString::fromLatin1("##other"))) && values.count() != 1) { + error(QtXmlPatterns::tr("%1 attribute of %2 element must contain %3, %4 or a list of URIs") + .arg(formatAttribute("namespace")) + .arg(formatElement("any")) + .arg(formatData("##any")) + .arg(formatData("##other"))); + return wildcard; + } + + if (values.contains(QString::fromLatin1("##any"))) { + wildcard->namespaceConstraint()->setVariety(XsdWildcard::NamespaceConstraint::Any); + } else if (values.contains(QString::fromLatin1("##other"))) { + wildcard->namespaceConstraint()->setVariety(XsdWildcard::NamespaceConstraint::Not); + if (!m_targetNamespace.isEmpty()) + wildcard->namespaceConstraint()->setNamespaces(QSet<QString>() << m_targetNamespace); + else + wildcard->namespaceConstraint()->setNamespaces(QSet<QString>() << XsdWildcard::absentNamespace()); + } else { + wildcard->namespaceConstraint()->setVariety(XsdWildcard::NamespaceConstraint::Enumeration); + QStringList newValues = values.toList(); + + // replace the ##targetNamespace entry + for (int i = 0; i < newValues.count(); ++i) { + if (newValues.at(i) == QString::fromLatin1("##targetNamespace")) { + if (!m_targetNamespace.isEmpty()) + newValues[i] = m_targetNamespace; + else + newValues[i] = XsdWildcard::absentNamespace(); + } else if (newValues.at(i) == QString::fromLatin1("##local")) { + newValues[i] = XsdWildcard::absentNamespace(); + } + } + + // check for invalid URIs + for (int i = 0; i < newValues.count(); ++i) { + const QString stringValue = newValues.at(i); + if (stringValue == XsdWildcard::absentNamespace()) + continue; + + if (!isValidUri(stringValue)) { + attributeContentError("namespace", "any", stringValue, BuiltinTypes::xsAnyURI); + return wildcard; + } + } + + wildcard->namespaceConstraint()->setNamespaces(newValues.toSet()); + } + } else { + wildcard->namespaceConstraint()->setVariety(XsdWildcard::NamespaceConstraint::Any); + } + + if (hasAttribute(QString::fromLatin1("processContents"))) { + const QString value = readAttribute(QString::fromLatin1("processContents")); + if (value != QString::fromLatin1("lax") && + value != QString::fromLatin1("skip") && + value != QString::fromLatin1("strict")) { + attributeContentError("processContents", "any", value); + return wildcard; + } + + if (value == QString::fromLatin1("lax")) { + wildcard->setProcessContents(XsdWildcard::Lax); + } else if (value == QString::fromLatin1("skip")) { + wildcard->setProcessContents(XsdWildcard::Skip); + } else if (value == QString::fromLatin1("strict")) { + wildcard->setProcessContents(XsdWildcard::Strict); + } + } else { + wildcard->setProcessContents(XsdWildcard::Strict); + } + + validateIdAttribute("any"); + + TagValidationHandler tagValidator(XsdTagScope::Any, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + wildcard->addAnnotation(annotation); + } else { + parseUnknown(); + } + } + } + + tagValidator.finalize(); + + return wildcard; +} + +XsdWildcard::Ptr XsdSchemaParser::parseAnyAttribute() +{ + const ElementNamespaceHandler namespaceHandler(XsdSchemaToken::AnyAttribute, this); + + validateElement(XsdTagScope::AnyAttribute); + + const XsdWildcard::Ptr wildcard(new XsdWildcard()); + + // parse attributes + if (hasAttribute(QString::fromLatin1("namespace"))) { + const QSet<QString> values = readAttribute(QString::fromLatin1("namespace")).split(QLatin1Char(' '), QString::SkipEmptyParts).toSet(); + if ((values.contains(QString::fromLatin1("##any")) || values.contains(QString::fromLatin1("##other"))) && values.count() != 1) { + error(QtXmlPatterns::tr("%1 attribute of %2 element must contain %3, %4 or a list of URIs") + .arg(formatAttribute("namespace")) + .arg(formatElement("anyAttribute")) + .arg(formatData("##any")) + .arg(formatData("##other"))); + return wildcard; + } + + if (values.contains(QString::fromLatin1("##any"))) { + wildcard->namespaceConstraint()->setVariety(XsdWildcard::NamespaceConstraint::Any); + } else if (values.contains(QString::fromLatin1("##other"))) { + wildcard->namespaceConstraint()->setVariety(XsdWildcard::NamespaceConstraint::Not); + if (!m_targetNamespace.isEmpty()) + wildcard->namespaceConstraint()->setNamespaces(QSet<QString>() << m_targetNamespace); + else + wildcard->namespaceConstraint()->setNamespaces(QSet<QString>() << XsdWildcard::absentNamespace()); + } else { + wildcard->namespaceConstraint()->setVariety(XsdWildcard::NamespaceConstraint::Enumeration); + QStringList newValues = values.toList(); + + // replace the ##targetNamespace entry + for (int i = 0; i < newValues.count(); ++i) { + if (newValues.at(i) == QString::fromLatin1("##targetNamespace")) { + if (!m_targetNamespace.isEmpty()) + newValues[i] = m_targetNamespace; + else + newValues[i] = XsdWildcard::absentNamespace(); + } else if (newValues.at(i) == QString::fromLatin1("##local")) { + newValues[i] = XsdWildcard::absentNamespace(); + } + } + + // check for invalid URIs + for (int i = 0; i < newValues.count(); ++i) { + const QString stringValue = newValues.at(i); + if (stringValue == XsdWildcard::absentNamespace()) + continue; + + if (!isValidUri(stringValue)) { + attributeContentError("namespace", "anyAttribute", stringValue, BuiltinTypes::xsAnyURI); + return wildcard; + } + } + + wildcard->namespaceConstraint()->setNamespaces(newValues.toSet()); + } + } else { + wildcard->namespaceConstraint()->setVariety(XsdWildcard::NamespaceConstraint::Any); + } + + if (hasAttribute(QString::fromLatin1("processContents"))) { + const QString value = readAttribute(QString::fromLatin1("processContents")); + if (value != QString::fromLatin1("lax") && + value != QString::fromLatin1("skip") && + value != QString::fromLatin1("strict")) { + attributeContentError("processContents", "anyAttribute", value); + return wildcard; + } + + if (value == QString::fromLatin1("lax")) { + wildcard->setProcessContents(XsdWildcard::Lax); + } else if (value == QString::fromLatin1("skip")) { + wildcard->setProcessContents(XsdWildcard::Skip); + } else if (value == QString::fromLatin1("strict")) { + wildcard->setProcessContents(XsdWildcard::Strict); + } + } else { + wildcard->setProcessContents(XsdWildcard::Strict); + } + + validateIdAttribute("anyAttribute"); + + TagValidationHandler tagValidator(XsdTagScope::AnyAttribute, this, m_namePool); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) { + const XsdSchemaToken::NodeName token = XsdSchemaToken::toToken(name()); + const XsdSchemaToken::NodeName namespaceToken = XsdSchemaToken::toToken(namespaceUri()); + + tagValidator.validate(token); + + if (isSchemaTag(XsdSchemaToken::Annotation, token, namespaceToken)) { + const XsdAnnotation::Ptr annotation = parseAnnotation(); + wildcard->addAnnotation(annotation); + } else { + parseUnknown(); + } + } + } + + tagValidator.finalize(); + + return wildcard; +} + + +void XsdSchemaParser::parseUnknownDocumentation() +{ + Q_ASSERT(isStartElement()); + m_namespaceSupport.pushContext(); + m_namespaceSupport.setPrefixes(namespaceDeclarations()); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) + parseUnknownDocumentation(); + } + + m_namespaceSupport.popContext(); +} + +void XsdSchemaParser::parseUnknown() +{ + Q_ASSERT(isStartElement()); + m_namespaceSupport.pushContext(); + m_namespaceSupport.setPrefixes(namespaceDeclarations()); + + error(QtXmlPatterns::tr("%1 element is not allowed in this context").arg(formatElement(name().toString()))); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) + parseUnknown(); + } + + m_namespaceSupport.popContext(); +} + +bool XsdSchemaParser::parseMinMaxConstraint(const XsdParticle::Ptr &particle, const char *elementName) +{ + if (hasAttribute(QString::fromLatin1("minOccurs"))) { + const QString value = readAttribute(QString::fromLatin1("minOccurs")); + + DerivedInteger<TypeNonNegativeInteger>::Ptr integer = DerivedInteger<TypeNonNegativeInteger>::fromLexical(m_namePool, value); + if (integer->hasError()) { + attributeContentError("minOccurs", elementName, value, BuiltinTypes::xsNonNegativeInteger); + return false; + } else { + particle->setMinimumOccurs(integer->as< DerivedInteger<TypeNonNegativeInteger> >()->storedValue()); + } + } else { + particle->setMinimumOccurs(1); + } + + if (hasAttribute(QString::fromLatin1("maxOccurs"))) { + const QString value = readAttribute(QString::fromLatin1("maxOccurs")); + + if (value == QString::fromLatin1("unbounded")) { + particle->setMaximumOccursUnbounded(true); + } else { + particle->setMaximumOccursUnbounded(false); + DerivedInteger<TypeNonNegativeInteger>::Ptr integer = DerivedInteger<TypeNonNegativeInteger>::fromLexical(m_namePool, value); + if (integer->hasError()) { + attributeContentError("maxOccurs", elementName, value, BuiltinTypes::xsNonNegativeInteger); + return false; + } else { + particle->setMaximumOccurs(integer->as< DerivedInteger<TypeNonNegativeInteger> >()->storedValue()); + } + } + } else { + particle->setMaximumOccursUnbounded(false); + particle->setMaximumOccurs(1); + } + + if (!particle->maximumOccursUnbounded()) { + if (particle->maximumOccurs() < particle->minimumOccurs()) { + error(QtXmlPatterns::tr("%1 attribute of %2 element has larger value than %3 attribute") + .arg(formatAttribute("minOccurs")) + .arg(formatElement(elementName)) + .arg(formatAttribute("maxOccurs"))); + return false; + } + } + + return true; +} + +QSourceLocation XsdSchemaParser::currentSourceLocation() const +{ + QSourceLocation location; + location.setLine(lineNumber()); + location.setColumn(columnNumber()); + location.setUri(m_documentURI); + + return location; +} + +void XsdSchemaParser::convertName(const QString &qualifiedName, NamespaceSupport::NameType type, QXmlName &name) +{ + bool result = m_namespaceSupport.processName(qualifiedName, type, name); + if (!result) { + error(QtXmlPatterns::tr("prefix of qualified name %1 is not defined").arg(formatKeyword(qualifiedName))); + } +} + +QString XsdSchemaParser::readNameAttribute(const char *elementName) +{ + const QString value = readAttribute(QString::fromLatin1("name")).simplified(); + if (!QXmlUtils::isNCName(value)) { + attributeContentError("name", elementName, value, BuiltinTypes::xsNCName); + return QString(); + } else { + return value; + } +} + +QString XsdSchemaParser::readQNameAttribute(const QString &typeAttribute, const char *elementName) +{ + const QString value = readAttribute(typeAttribute).simplified(); + if (!XPathHelper::isQName(value)) { + attributeContentError(typeAttribute.toLatin1(), elementName, value, BuiltinTypes::xsQName); + return QString(); + } else { + return value; + } +} + +QString XsdSchemaParser::readNamespaceAttribute(const QString &attributeName, const char *elementName) +{ + const QString value = readAttribute(attributeName); + if (value.isEmpty()) { + attributeContentError(attributeName.toLatin1(), elementName, value, BuiltinTypes::xsAnyURI); + return QString(); + } + + return value; +} + +SchemaType::DerivationConstraints XsdSchemaParser::readDerivationConstraintAttribute(const SchemaType::DerivationConstraints &allowedConstraints, const char *elementName) +{ + // first convert the flags into strings for easier comparision + QSet<QString> allowedContent; + if (allowedConstraints & SchemaType::RestrictionConstraint) + allowedContent.insert(QString::fromLatin1("restriction")); + if (allowedConstraints & SchemaType::ExtensionConstraint) + allowedContent.insert(QString::fromLatin1("extension")); + if (allowedConstraints & SchemaType::ListConstraint) + allowedContent.insert(QString::fromLatin1("list")); + if (allowedConstraints & SchemaType::UnionConstraint) + allowedContent.insert(QString::fromLatin1("union")); + + // read content from the attribute if available, otherwise use the default definitions from the schema tag + QString content; + if (hasAttribute(QString::fromLatin1("final"))) { + content = readAttribute(QString::fromLatin1("final")); + + // split string into list to validate the content of the attribute + const QStringList values = content.split(QLatin1Char(' '), QString::SkipEmptyParts); + for (int i = 0; i < values.count(); i++) { + const QString value = values.at(i); + if (!allowedContent.contains(value) && (value != QString::fromLatin1("#all"))) { + attributeContentError("final", elementName, value); + return SchemaType::DerivationConstraints(); + } + + if ((value == QString::fromLatin1("#all")) && values.count() != 1) { + error(QtXmlPatterns::tr("%1 attribute of %2 element must either contain %3 or the other values") + .arg(formatAttribute("final")) + .arg(formatElement(elementName)) + .arg(formatData("#all"))); + return SchemaType::DerivationConstraints(); + } + } + } else { + // content of the default value has been validated in parseSchema already + content = m_finalDefault; + } + + QSet<QString> contentSet = content.split(QLatin1Char(' '), QString::SkipEmptyParts).toSet(); + + // if the '#all' tag is defined, we return all allowed values + if (contentSet.contains(QString::fromLatin1("#all"))) { + return allowedConstraints; + } else { // return the values from content set that intersects with the allowed values + contentSet.intersect(allowedContent); + + SchemaType::DerivationConstraints constraints; + + if (contentSet.contains(QString::fromLatin1("restriction"))) + constraints |= SchemaType::RestrictionConstraint; + if (contentSet.contains(QString::fromLatin1("extension"))) + constraints |= SchemaType::ExtensionConstraint; + if (contentSet.contains(QString::fromLatin1("list"))) + constraints |= SchemaType::ListConstraint; + if (contentSet.contains(QString::fromLatin1("union"))) + constraints |= SchemaType::UnionConstraint; + + return constraints; + } +} + +NamedSchemaComponent::BlockingConstraints XsdSchemaParser::readBlockingConstraintAttribute(const NamedSchemaComponent::BlockingConstraints &allowedConstraints, const char *elementName) +{ + // first convert the flags into strings for easier comparision + QSet<QString> allowedContent; + if (allowedConstraints & NamedSchemaComponent::RestrictionConstraint) + allowedContent.insert(QString::fromLatin1("restriction")); + if (allowedConstraints & NamedSchemaComponent::ExtensionConstraint) + allowedContent.insert(QString::fromLatin1("extension")); + if (allowedConstraints & NamedSchemaComponent::SubstitutionConstraint) + allowedContent.insert(QString::fromLatin1("substitution")); + + // read content from the attribute if available, otherwise use the default definitions from the schema tag + QString content; + if (hasAttribute(QString::fromLatin1("block"))) { + content = readAttribute(QString::fromLatin1("block")); + + // split string into list to validate the content of the attribute + const QStringList values = content.split(QLatin1Char(' '), QString::SkipEmptyParts); + for (int i = 0; i < values.count(); i++) { + const QString value = values.at(i); + if (!allowedContent.contains(value) && (value != QString::fromLatin1("#all"))) { + attributeContentError("block", elementName, value); + return NamedSchemaComponent::BlockingConstraints(); + } + + if ((value == QString::fromLatin1("#all")) && values.count() != 1) { + error(QtXmlPatterns::tr("%1 attribute of %2 element must either contain %3 or the other values") + .arg(formatAttribute("block")) + .arg(formatElement(elementName)) + .arg(formatData("#all"))); + return NamedSchemaComponent::BlockingConstraints(); + } + } + } else { + // content of the default value has been validated in parseSchema already + content = m_blockDefault; + } + + QSet<QString> contentSet = content.split(QLatin1Char(' '), QString::SkipEmptyParts).toSet(); + + // if the '#all' tag is defined, we return all allowed values + if (contentSet.contains(QString::fromLatin1("#all"))) { + return allowedConstraints; + } else { // return the values from content set that intersects with the allowed values + contentSet.intersect(allowedContent); + + NamedSchemaComponent::BlockingConstraints constraints; + + if (contentSet.contains(QString::fromLatin1("restriction"))) + constraints |= NamedSchemaComponent::RestrictionConstraint; + if (contentSet.contains(QString::fromLatin1("extension"))) + constraints |= NamedSchemaComponent::ExtensionConstraint; + if (contentSet.contains(QString::fromLatin1("substitution"))) + constraints |= NamedSchemaComponent::SubstitutionConstraint; + + return constraints; + } +} + +XsdXPathExpression::Ptr XsdSchemaParser::readXPathExpression(const char *elementName) +{ + const XsdXPathExpression::Ptr expression(new XsdXPathExpression()); + + const QList<QXmlName> namespaceBindings = m_namespaceSupport.namespaceBindings(); + QXmlName emptyName; + for (int i = 0; i < namespaceBindings.count(); ++i) { + if (namespaceBindings.at(i).prefix() == StandardPrefixes::empty) + emptyName = namespaceBindings.at(i); + } + + expression->setNamespaceBindings(namespaceBindings); + + QString xpathDefaultNamespace; + if (hasAttribute(QString::fromLatin1("xpathDefaultNamespace"))) { + xpathDefaultNamespace = readAttribute(QString::fromLatin1("xpathDefaultNamespace")); + if (xpathDefaultNamespace != QString::fromLatin1("##defaultNamespace") && + xpathDefaultNamespace != QString::fromLatin1("##targetNamespace") && + xpathDefaultNamespace != QString::fromLatin1("##local")) { + if (!isValidUri(xpathDefaultNamespace)) { + attributeContentError("xpathDefaultNamespace", elementName, xpathDefaultNamespace, BuiltinTypes::xsAnyURI); + return expression; + } + } + } else { + xpathDefaultNamespace = m_xpathDefaultNamespace; + } + + AnyURI::Ptr namespaceURI; + if (xpathDefaultNamespace == QString::fromLatin1("##defaultNamespace")) { + if (!emptyName.isNull()) + namespaceURI = AnyURI::fromLexical(m_namePool->stringForNamespace(emptyName.namespaceURI())); + } else if (xpathDefaultNamespace == QString::fromLatin1("##targetNamespace")) { + if (!m_targetNamespace.isEmpty()) + namespaceURI = AnyURI::fromLexical(m_targetNamespace); + } else if (xpathDefaultNamespace == QString::fromLatin1("##local")) { + // it is absent + } else { + namespaceURI = AnyURI::fromLexical(xpathDefaultNamespace); + } + if (namespaceURI) { + if (namespaceURI->hasError()) { + attributeContentError("xpathDefaultNamespace", elementName, xpathDefaultNamespace, BuiltinTypes::xsAnyURI); + return expression; + } + + expression->setDefaultNamespace(namespaceURI); + } + + //TODO: read the base uri if qmaintaining reader support it + + return expression; +} + +QString XsdSchemaParser::readXPathAttribute(const QString &attributeName, XPathType type, const char *elementName) +{ + const QString value = readAttribute(attributeName); + if (value.isEmpty() || value.startsWith(QLatin1Char('/'))) { + attributeContentError(attributeName.toLatin1(), elementName, value); + return QString(); + } + + QXmlNamePool namePool(m_namePool.data()); + + QXmlQuery::QueryLanguage language = QXmlQuery::XPath20; + switch (type) { + case XPath20: language = QXmlQuery::XPath20; break; + case XPathSelector: language = QXmlQuery::XmlSchema11IdentityConstraintSelector; break; + case XPathField: language = QXmlQuery::XmlSchema11IdentityConstraintField; break; + }; + + QXmlQuery query(language, namePool); + QXmlQueryPrivate *queryPrivate = query.d; + + const QList<QXmlName> namespaceBindings = m_namespaceSupport.namespaceBindings(); + for (int i = 0; i < namespaceBindings.count(); ++i) { + if (!namespaceBindings.at(i).prefix() == StandardPrefixes::empty) + queryPrivate->addAdditionalNamespaceBinding(namespaceBindings.at(i)); + } + + query.setQuery(value, m_documentURI); + if (!query.isValid()) { + attributeContentError(attributeName.toLatin1(), elementName, value); + return QString(); + } + + return value; +} + +void XsdSchemaParser::validateIdAttribute(const char *elementName) +{ + if (hasAttribute(QString::fromLatin1("id"))) { + const QString value = readAttribute(QString::fromLatin1("id")); + DerivedString<TypeID>::Ptr id = DerivedString<TypeID>::fromLexical(m_namePool, value); + if (id->hasError()) { + attributeContentError("id", elementName, value, BuiltinTypes::xsID); + } else { + if (m_idCache->hasId(value)) { + error(QtXmlPatterns::tr("component with id %1 has been defined previously").arg(formatData(value))); + } else { + m_idCache->addId(value); + } + } + } +} + +bool XsdSchemaParser::isSchemaTag(XsdSchemaToken::NodeName tag, XsdSchemaToken::NodeName token, XsdSchemaToken::NodeName namespaceToken) const +{ + return ((tag == token) && (namespaceToken == XsdSchemaToken::XML_NS_SCHEMA_URI)); +} + +void XsdSchemaParser::addElement(const XsdElement::Ptr &element) +{ + const QXmlName objectName = element->name(m_namePool); + if (m_schema->element(objectName)) { + error(QtXmlPatterns::tr("element %1 already defined").arg(formatElement(m_namePool->displayName(objectName)))); + } else { + m_schema->addElement(element); + m_componentLocationHash.insert(element, currentSourceLocation()); + } +} + +void XsdSchemaParser::addAttribute(const XsdAttribute::Ptr &attribute) +{ + const QXmlName objectName = attribute->name(m_namePool); + if (m_schema->attribute(objectName)) { + error(QtXmlPatterns::tr("attribute %1 already defined").arg(formatAttribute(m_namePool->displayName(objectName)))); + } else { + m_schema->addAttribute(attribute); + m_componentLocationHash.insert(attribute, currentSourceLocation()); + } +} + +void XsdSchemaParser::addType(const SchemaType::Ptr &type) +{ + // we don't import redefinitions of builtin types, that just causes problems + if (m_builtinTypeNames.contains(type->name(m_namePool))) + return; + + const QXmlName objectName = type->name(m_namePool); + if (m_schema->type(objectName)) { + error(QtXmlPatterns::tr("type %1 already defined").arg(formatType(m_namePool, objectName))); + } else { + m_schema->addType(type); + if (type->isSimpleType()) + m_componentLocationHash.insert(XsdSimpleType::Ptr(type), currentSourceLocation()); + else + m_componentLocationHash.insert(XsdComplexType::Ptr(type), currentSourceLocation()); + } +} + +void XsdSchemaParser::addAnonymousType(const SchemaType::Ptr &type) +{ + m_schema->addAnonymousType(type); + if (type->isSimpleType()) + m_componentLocationHash.insert(XsdSimpleType::Ptr(type), currentSourceLocation()); + else + m_componentLocationHash.insert(XsdComplexType::Ptr(type), currentSourceLocation()); +} + +void XsdSchemaParser::addAttributeGroup(const XsdAttributeGroup::Ptr &group) +{ + const QXmlName objectName = group->name(m_namePool); + if (m_schema->attributeGroup(objectName)) { + error(QtXmlPatterns::tr("attribute group %1 already defined").arg(formatKeyword(m_namePool, objectName))); + } else { + m_schema->addAttributeGroup(group); + m_componentLocationHash.insert(group, currentSourceLocation()); + } +} + +void XsdSchemaParser::addElementGroup(const XsdModelGroup::Ptr &group) +{ + const QXmlName objectName = group->name(m_namePool); + if (m_schema->elementGroup(objectName)) { + error(QtXmlPatterns::tr("element group %1 already defined").arg(formatKeyword(m_namePool, objectName))); + } else { + m_schema->addElementGroup(group); + m_componentLocationHash.insert(group, currentSourceLocation()); + } +} + +void XsdSchemaParser::addNotation(const XsdNotation::Ptr ¬ation) +{ + const QXmlName objectName = notation->name(m_namePool); + if (m_schema->notation(objectName)) { + error(QtXmlPatterns::tr("notation %1 already defined").arg(formatKeyword(m_namePool, objectName))); + } else { + m_schema->addNotation(notation); + m_componentLocationHash.insert(notation, currentSourceLocation()); + } +} + +void XsdSchemaParser::addIdentityConstraint(const XsdIdentityConstraint::Ptr &constraint) +{ + const QXmlName objectName = constraint->name(m_namePool); + if (m_schema->identityConstraint(objectName)) { + error(QtXmlPatterns::tr("identity constraint %1 already defined").arg(formatKeyword(m_namePool, objectName))); + } else { + m_schema->addIdentityConstraint(constraint); + m_componentLocationHash.insert(constraint, currentSourceLocation()); + } +} + +void XsdSchemaParser::addFacet(const XsdFacet::Ptr &facet, XsdFacet::Hash &facets, const SchemaType::Ptr &type) +{ + // @see http://www.w3.org/TR/xmlschema-2/#src-single-facet-value + if (facets.contains(facet->type())) { + error(QtXmlPatterns::tr("duplicated facets in simple type %1").arg(formatType(m_namePool, type))); + return; + } + + facets.insert(facet->type(), facet); +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/schema/qxsdschemaparser_p.h b/src/xmlpatterns/schema/qxsdschemaparser_p.h new file mode 100644 index 0000000..51a8e3d --- /dev/null +++ b/src/xmlpatterns/schema/qxsdschemaparser_p.h @@ -0,0 +1,721 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_XsdSchemaParser_H +#define Patternist_XsdSchemaParser_H + +#include "qnamespacesupport_p.h" +#include "qxsdalternative_p.h" +#include "qxsdattribute_p.h" +#include "qxsdattributegroup_p.h" +#include "qxsdattributeterm_p.h" +#include "qxsdcomplextype_p.h" +#include "qxsdelement_p.h" +#include "qxsdidcache_p.h" +#include "qxsdmodelgroup_p.h" +#include "qxsdnotation_p.h" +#include "qxsdsimpletype_p.h" +#include "qxsdschemacontext_p.h" +#include "qxsdschemaparsercontext_p.h" +#include "qxsdstatemachine_p.h" + +#include <QtCore/QHash> +#include <QtCore/QSet> +#include <QtCore/QUrl> +#include <QtXml/QXmlStreamReader> +#include <QtXmlPatterns/QXmlNamePool> + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +namespace QPatternist +{ + /** + * @short Implements the parsing of XML schema file. + * + * This class parses a XML schema in XML presentation from an QIODevice + * and returns object representation as XsdSchema. + * + * @ingroup Patternist_schema + * @author Tobias Koenig <tobias.koenig@trolltech.com> + */ + class XsdSchemaParser : public MaintainingReader<XsdSchemaToken, XsdTagScope::Type> + { + friend class ElementNamespaceHandler; + friend class TagValidationHandler; + + public: + enum ParserType + { + TopLevelParser, + IncludeParser, + ImportParser, + RedefineParser + }; + + /** + * Creates a new schema parser object. + */ + XsdSchemaParser(const XsdSchemaContext::Ptr &context, const XsdSchemaParserContext::Ptr &parserContext, QIODevice *device); + + /** + * Parses the XML schema file. + * + * @return @c true on success, @c false if the schema is somehow invalid. + */ + bool parse(ParserType parserType = TopLevelParser); + + /** + * Describes a set of namespace URIs + */ + typedef QSet<QUrl> NamespaceSet; + + /** + * Sets which @p schemas have been included already, so the parser + * can detect circular includes. + */ + void setIncludedSchemas(const NamespaceSet &schemas); + + /** + * Sets which @p schemas have been imported already, so the parser + * can detect circular imports. + */ + void setImportedSchemas(const NamespaceSet &schemas); + + /** + * Sets which @p schemas have been redefined already, so the parser + * can detect circular redefines. + */ + void setRedefinedSchemas(const NamespaceSet &schemas); + + /** + * Sets the target namespace of the schema to parse. + */ + void setTargetNamespace(const QString &targetNamespace); + + /** + * Sets the document URI of the schema to parse. + */ + void setDocumentURI(const QUrl &uri); + + /** + * Returns the document URI of the schema to parse. + */ + QUrl documentURI() const; + + /** + * Reimplemented from MaintainingReader, always returns @c false. + */ + bool isAnyAttributeAllowed() const; + + private: + /** + * Used internally to report any kind of parsing error or + * schema inconsistency. + */ + virtual void error(const QString &msg); + + void attributeContentError(const char *attributeName, const char *elementName, const QString &value, const SchemaType::Ptr &type = SchemaType::Ptr()); + + /** + * Sets the target namespace of the schema to parse. + */ + void setTargetNamespaceExtended(const QString &targetNamespace); + + /** + * This method is called for parsing the top-level <em>schema</em> object. + */ + void parseSchema(ParserType parserType); + + /** + * This method is called for parsing any top-level <em>include</em> object. + */ + void parseInclude(); + + /** + * This method is called for parsing any top-level <em>import</em> object. + */ + void parseImport(); + + /** + * This method is called for parsing any top-level <em>redefine</em> object. + */ + void parseRedefine(); + + /** + * This method is called for parsing any <em>annotation</em> object everywhere + * in the schema. + */ + XsdAnnotation::Ptr parseAnnotation(); + + /** + * This method is called for parsing an <em>appinfo</em> object as child of + * an <em>annotation</em> object. + */ + XsdApplicationInformation::Ptr parseAppInfo(); + + /** + * This method is called for parsing a <em>documentation</em> object as child of + * an <em>annotation</em> object. + */ + XsdDocumentation::Ptr parseDocumentation(); + + /** + * This method is called for parsing a <em>defaultOpenContent</em> object. + */ + void parseDefaultOpenContent(); + + /** + * This method is called for parsing any top-level <em>simpleType</em> object. + */ + XsdSimpleType::Ptr parseGlobalSimpleType(); + + /** + * This method is called for parsing any <em>simpleType</em> object as descendant + * of an <em>element</em> or <em>complexType</em> object. + */ + XsdSimpleType::Ptr parseLocalSimpleType(); + + /** + * This method is called for parsing a <em>restriction</em> object as child + * of a <em>simpleType</em> object. + */ + void parseSimpleRestriction(const XsdSimpleType::Ptr &ptr); + + /** + * This method is called for parsing a <em>list</em> object as child + * of a <em>simpleType</em> object. + */ + void parseList(const XsdSimpleType::Ptr &ptr); + + /** + * This method is called for parsing a <em>union</em> object as child + * of a <em>simpleType</em> object. + */ + void parseUnion(const XsdSimpleType::Ptr &ptr); + + /** + * This method is called for parsing a <em>minExclusive</em> object as child + * of a <em>restriction</em> object. + */ + XsdFacet::Ptr parseMinExclusiveFacet(); + + /** + * This method is called for parsing a <em>minInclusive</em> object as child + * of a <em>restriction</em> object. + */ + XsdFacet::Ptr parseMinInclusiveFacet(); + + /** + * This method is called for parsing a <em>maxExclusive</em> object as child + * of a <em>restriction</em> object. + */ + XsdFacet::Ptr parseMaxExclusiveFacet(); + + /** + * This method is called for parsing a <em>maxInclusive</em> object as child + * of a <em>restriction</em> object. + */ + XsdFacet::Ptr parseMaxInclusiveFacet(); + + /** + * This method is called for parsing a <em>totalDigits</em> object as child + * of a <em>restriction</em> object. + */ + XsdFacet::Ptr parseTotalDigitsFacet(); + + /** + * This method is called for parsing a <em>fractionDigits</em> object as child + * of a <em>restriction</em> object. + */ + XsdFacet::Ptr parseFractionDigitsFacet(); + + /** + * This method is called for parsing a <em>length</em> object as child + * of a <em>restriction</em> object. + */ + XsdFacet::Ptr parseLengthFacet(); + + /** + * This method is called for parsing a <em>minLength</em> object as child + * of a <em>restriction</em> object. + */ + XsdFacet::Ptr parseMinLengthFacet(); + + /** + * This method is called for parsing a <em>maxLength</em> object as child + * of a <em>restriction</em> object. + */ + XsdFacet::Ptr parseMaxLengthFacet(); + + /** + * This method is called for parsing an <em>enumeration</em> object as child + * of a <em>restriction</em> object. + */ + XsdFacet::Ptr parseEnumerationFacet(); + + /** + * This method is called for parsing a <em>whiteSpace</em> object as child + * of a <em>restriction</em> object. + */ + XsdFacet::Ptr parseWhiteSpaceFacet(); + + /** + * This method is called for parsing a <em>pattern</em> object as child + * of a <em>restriction</em> object. + */ + XsdFacet::Ptr parsePatternFacet(); + + /** + * This method is called for parsing an <em>assertion</em> object as child + * of a <em>restriction</em> object. + */ + XsdFacet::Ptr parseAssertionFacet(); + + /** + * This method is called for parsing any top-level <em>complexType</em> object. + */ + XsdComplexType::Ptr parseGlobalComplexType(); + + /** + * This method is called for parsing any <em>complexType</em> object as descendant + * of an <em>element</em> object. + */ + XsdComplexType::Ptr parseLocalComplexType(); + + /** + * This method resolves the content type of the @p complexType for the given + * @p effectiveMixed value. + */ + void resolveComplexContentType(const XsdComplexType::Ptr &complexType, bool effectiveMixed); + + /** + * This method is called for parsing a <em>simpleContent</em> object as child + * of a <em>complexType</em> object. + */ + void parseSimpleContent(const XsdComplexType::Ptr &complexType); + + /** + * This method is called for parsing a <em>restriction</em> object as child + * of a <em>simpleContent</em> object. + */ + void parseSimpleContentRestriction(const XsdComplexType::Ptr &complexType); + + /** + * This method is called for parsing an <em>extension</em> object as child + * of a <em>simpleContent</em> object. + */ + void parseSimpleContentExtension(const XsdComplexType::Ptr &complexType); + + /** + * This method is called for parsing a <em>complexContent</em> object as child + * of a <em>complexType</em> object. + * + * @param complexType The complex type the complex content belongs to. + * @param mixed The output parameter for the mixed value. + */ + void parseComplexContent(const XsdComplexType::Ptr &complexType, bool *mixed); + + /** + * This method is called for parsing a <em>restriction</em> object as child + * of a <em>complexContent</em> object. + */ + void parseComplexContentRestriction(const XsdComplexType::Ptr &complexType); + + /** + * This method is called for parsing an <em>extension</em> object as child + * of a <em>complexContent</em> object. + */ + void parseComplexContentExtension(const XsdComplexType::Ptr &complexType); + + /** + * This method is called for parsing an <em>assert</em> object as child + * of a <em>complexType</em> or parsing a <em>assertion</em> facet object as + * child of a <em>simpleType</em>. + * + * @param nodeName Either XsdSchemaToken::Assert or XsdSchemaToken::Assertion. + * @param tag Either XsdTagScope::Assert or XsdTagScope::Assertion. + */ + XsdAssertion::Ptr parseAssertion(const XsdSchemaToken::NodeName &nodeName, const XsdTagScope::Type &tag); + + /** + * This method is called for parsing an <em>openContent</em> object. + */ + XsdComplexType::OpenContent::Ptr parseOpenContent(); + + /** + * This method is called for parsing a top-level <em>group</em> object. + */ + XsdModelGroup::Ptr parseNamedGroup(); + + /** + * This method is called for parsing a non-top-level <em>group</em> object + * that contains a <em>ref</em> attribute. + */ + XsdTerm::Ptr parseReferredGroup(const XsdParticle::Ptr &particle); + + /** + * This method is called for parsing an <em>all</em> object as child + * of a top-level <em>group</em> object. + * + * @param parent The schema component the <em>all</em> object is part of. + */ + XsdModelGroup::Ptr parseAll(const NamedSchemaComponent::Ptr &parent); + + /** + * This method is called for parsing an <em>all</em> object as descendant + * of a <em>complexType</em> object. + * + * @param particle The particle the <em>all</em> object belongs to. + * @param parent The schema component the <em>all</em> object is part of. + */ + XsdModelGroup::Ptr parseLocalAll(const XsdParticle::Ptr &particle, const NamedSchemaComponent::Ptr &parent); + + /** + * This method is called for parsing a <em>choice</em> object as child + * of a top-level <em>group</em> object. + * + * @param parent The schema component the <em>choice</em> object is part of. + */ + XsdModelGroup::Ptr parseChoice(const NamedSchemaComponent::Ptr &parent); + + /** + * This method is called for parsing a <em>choice</em> object as descendant + * of a <em>complexType</em> object or a <em>choice</em> object. + * + * @param particle The particle the <em>choice</em> object belongs to. + * @param parent The schema component the <em>choice</em> object is part of. + */ + XsdModelGroup::Ptr parseLocalChoice(const XsdParticle::Ptr &particle, const NamedSchemaComponent::Ptr &parent); + + /** + * This method is called for parsing a <em>sequence</em> object as child + * of a top-level <em>group</em> object. + * + * @param parent The schema component the <em>sequence</em> object is part of. + */ + XsdModelGroup::Ptr parseSequence(const NamedSchemaComponent::Ptr &parent); + + /** + * This method is called for parsing a <em>sequence</em> object as descendant + * of a <em>complexType</em> object or a <em>sequence</em> object. + * + * @param particle The particle the <em>sequence</em> object belongs to. + * @param parent The schema component the <em>sequence</em> object is part of. + */ + XsdModelGroup::Ptr parseLocalSequence(const XsdParticle::Ptr &particle, const NamedSchemaComponent::Ptr &parent); + + /** + * A helper method that parses the minOccurs and maxOccurs constraints for + * the given @p particle that has the given @p tagName. + */ + bool parseMinMaxConstraint(const XsdParticle::Ptr &particle, const char* tagName); + + /** + * This method is called for parsing any top-level <em>attribute</em> object. + */ + XsdAttribute::Ptr parseGlobalAttribute(); + + /** + * This method is called for parsing any non-top-level <em>attribute</em> object as a + * descendant of a <em>complexType</em> object or an <em>attributeGroup</em> object. + * + * @param parent The parent component the <em>attribute</em> object is part of. + */ + XsdAttributeUse::Ptr parseLocalAttribute(const NamedSchemaComponent::Ptr &parent); + + /** + * This method is called for parsing a top-level <em>attributeGroup</em> object. + */ + XsdAttributeGroup::Ptr parseNamedAttributeGroup(); + + /** + * This method is called for parsing a non-top-level <em>attributeGroup</em> object + * that contains a <em>ref</em> attribute. + */ + XsdAttributeUse::Ptr parseReferredAttributeGroup(); + + /** + * This method is called for parsing any top-level <em>element</em> object. + */ + XsdElement::Ptr parseGlobalElement(); + + /** + * This method is called for parsing any non-top-level <em>element</em> object as a + * descendant of a <em>complexType</em> object or a <em>group</em> object. + * + * @param particle The particle the <em>element</em> object belongs to. + * @param parent The parent component the <em>element</em> object is part of. + */ + XsdTerm::Ptr parseLocalElement(const XsdParticle::Ptr &particle, const NamedSchemaComponent::Ptr &parent); + + /** + * This method is called for parsing a <em>unique</em> object as child of an <em>element</em> object. + */ + XsdIdentityConstraint::Ptr parseUnique(); + + /** + * This method is called for parsing a <em>key</em> object as child of an <em>element</em> object. + */ + XsdIdentityConstraint::Ptr parseKey(); + + /** + * This method is called for parsing a <em>keyref</em> object as child of an <em>element</em> object. + */ + XsdIdentityConstraint::Ptr parseKeyRef(const XsdElement::Ptr &element); + + /** + * This method is called for parsing a <em>selector</em> object as child of an <em>unique</em> object, + * <em>key</em> object or <em>keyref</em> object, + * + * @param ptr The identity constraint it belongs to. + */ + void parseSelector(const XsdIdentityConstraint::Ptr &ptr); + + /** + * This method is called for parsing a <em>field</em> object as child of an <em>unique</em> object, + * <em>key</em> object or <em>keyref</em> object, + * + * @param ptr The identity constraint it belongs to. + */ + void parseField(const XsdIdentityConstraint::Ptr &ptr); + + /** + * This method is called for parsing an <em>alternative</em> object inside an <em>element</em> object. + */ + XsdAlternative::Ptr parseAlternative(); + + /** + * This method is called for parsing a top-level <em>notation</em> object. + */ + XsdNotation::Ptr parseNotation(); + + /** + * This method is called for parsing an <em>any</em> object somewhere in + * the schema. + * + * @param particle The particle the <em>any</em> object belongs to. + */ + XsdWildcard::Ptr parseAny(const XsdParticle::Ptr &particle); + + /** + * This method is called for parsing an <em>anyAttribute</em> object somewhere in + * the schema. + */ + XsdWildcard::Ptr parseAnyAttribute(); + + /** + * This method is called for parsing unknown object as descendant of the <em>annotation</em> object. + */ + void parseUnknownDocumentation(); + + /** + * This method is called for parsing unknown object in the schema. + */ + void parseUnknown(); + + /** + * Returnes an source location for the current position. + */ + QSourceLocation currentSourceLocation() const; + + /** + * Converts a @p qualified name into a QXmlName @p name and does some error handling. + */ + void convertName(const QString &qualified, NamespaceSupport::NameType type, QXmlName &name); + + /** + * A helper method that reads in a 'name' attribute and checks it for syntactic errors. + */ + inline QString readNameAttribute(const char *elementName); + + /** + * A helper method that reads in an attribute that contains an QName and + * checks it for syntactic errors. + */ + inline QString readQNameAttribute(const QString &typeAttribute, const char *elementName); + + /** + * A helper method that reads in a namespace attribute and checks for syntactic errors. + */ + inline QString readNamespaceAttribute(const QString &attributeName, const char *elementName); + + /** + * A helper method that reads the final attribute and does correct handling of schema default definitions. + */ + inline SchemaType::DerivationConstraints readDerivationConstraintAttribute(const SchemaType::DerivationConstraints &allowedConstraints, const char *elementName); + + /** + * A helper method that reads the block attribute and does correct handling of schema default definitions. + */ + inline NamedSchemaComponent::BlockingConstraints readBlockingConstraintAttribute(const NamedSchemaComponent::BlockingConstraints &allowedConstraints, const char *elementName); + + /** + * A helper method that reads all components for a xpath expression for the current scope. + */ + XsdXPathExpression::Ptr readXPathExpression(const char *elementName); + + /** + * Describes the type of XPath that is allowed by the readXPathAttribute method. + */ + enum XPathType { + XPath20, + XPathSelector, + XPathField + }; + + /** + * A helper method that reads an attribute that represents a xpath query and does basic + * validation. + */ + QString readXPathAttribute(const QString &attributeName, XPathType type, const char *elementName); + + /** + * A helper method that reads in an "id" attribute, checks it for syntactic errors + * and tests whether a component with the same id has already been parsed. + */ + inline void validateIdAttribute(const char *elementName); + + /** + * Adds an @p element to the schema and checks for duplicated entries. + */ + void addElement(const XsdElement::Ptr &element); + + /** + * Adds an @p attribute to the schema and checks for duplicated entries. + */ + void addAttribute(const XsdAttribute::Ptr &attribute); + + /** + * Adds a @p type to the schema and checks for duplicated entries. + */ + void addType(const SchemaType::Ptr &type); + + /** + * Adds an anonymous @p type to the schema and checks for duplicated entries. + */ + void addAnonymousType(const SchemaType::Ptr &type); + + /** + * Adds an attribute @p group to the schema and checks for duplicated entries. + */ + void addAttributeGroup(const XsdAttributeGroup::Ptr &group); + + /** + * Adds an element @p group to the schema and checks for duplicated entries. + */ + void addElementGroup(const XsdModelGroup::Ptr &group); + + /** + * Adds a @p notation to the schema and checks for duplicated entries. + */ + void addNotation(const XsdNotation::Ptr ¬ation); + + /** + * Adds an identity @p constraint to the schema and checks for duplicated entries. + */ + void addIdentityConstraint(const XsdIdentityConstraint::Ptr &constraint); + + /** + * Adds the @p facet to the list of @p facets for @p type and checks for duplicates. + */ + void addFacet(const XsdFacet::Ptr &facet, XsdFacet::Hash &facets, const SchemaType::Ptr &type); + + /** + * Sets up the state machines for validating the right occurrence of xml elements. + */ + void setupStateMachines(); + + /** + * Sets up a list of names of known builtin types. + */ + void setupBuiltinTypeNames(); + + /** + * Checks whether the given @p tag is equal to the given @p token and + * the given @p namespaceToken is the XML Schema namespace. + */ + inline bool isSchemaTag(XsdSchemaToken::NodeName tag, XsdSchemaToken::NodeName token, XsdSchemaToken::NodeName namespaceToken) const; + + XsdSchemaContext::Ptr m_context; + XsdSchemaParserContext::Ptr m_parserContext; + NamePool::Ptr m_namePool; + NamespaceSupport m_namespaceSupport; + XsdSchemaResolver::Ptr m_schemaResolver; + XsdSchema::Ptr m_schema; + + QString m_targetNamespace; + QString m_attributeFormDefault; + QString m_elementFormDefault; + QString m_blockDefault; + QString m_finalDefault; + QString m_xpathDefaultNamespace; + QXmlName m_defaultAttributes; + XsdComplexType::OpenContent::Ptr m_defaultOpenContent; + bool m_defaultOpenContentAppliesToEmpty; + + NamespaceSet m_includedSchemas; + NamespaceSet m_importedSchemas; + NamespaceSet m_redefinedSchemas; + QUrl m_documentURI; + XsdIdCache::Ptr m_idCache; + QHash<XsdTagScope::Type, XsdStateMachine<XsdSchemaToken::NodeName> > m_stateMachines; + ComponentLocationHash m_componentLocationHash; + QSet<QXmlName> m_builtinTypeNames; + }; +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/schema/qxsdschemaparser_setup.cpp b/src/xmlpatterns/schema/qxsdschemaparser_setup.cpp new file mode 100644 index 0000000..abd6262 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdschemaparser_setup.cpp @@ -0,0 +1,1110 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxsdschemaparser_p.h" + +#include "qbuiltintypes_p.h" + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +/** + * @page using_dfa_for_schema Using DFA for validation of correct XML tag occurrence + * + * This page describes how to use DFAs for validating that the XML child tags of an + * XML parent tag occur in the right order. + * + * To validate the occurence of XML tags one need a regular expression that describes + * which tags can appear how often in what context. For example the regular expression + * of the global <em>attribute</em> tag in XML Schema is (annotation?, simpleType?). + * That means the <em>attribute</em> tag can contain an <em>annotation</em> tag followed + * by a <em>simpleType</em> tag, or just one <em>simpleType</em> tag and even no child + * tag at all. + * So the regular expression describes some kind of language and all the various occurrences + * of the child tags can be seen as words of that language. + * We can create a DFA now, that accepts all words (and only these words) of that language + * and whenever we want to check if a sequence of child tags belongs to the language, + * we test if the sequence passes the DFA successfully. + * + * The following example shows how to create the DFA for the regular expression method + * above. + * + * \dotfile GlobalAttribute_diagram.dot + * + * At first we need a start state (1), that's the state the DFA is before it + * starts running. As our regular expression allows that there are no child tags, the + * start state is an end state as well (marked by the double circle). + * Now we fetch the first token from the XML file (let's assume it is an <em>annotation</em> tag) + * and check if there is an edge labled with the tag name leaving the current state of the DFA. + * If there is no such edge, the input doesn't fullfill the rules of the regular expression, + * so we throw an error. Otherwise we follow that edge and the DFA is set to the new state (2) the + * edge points to. Now we fetch the next token from the XML file and do the previous steps again. + * If there is no further input from the XML file, we check whether the DFA is in an end state and + * throw an error if not. + * + * So the algorithm for checking is quite simple, the whole logic is encoded in the DFA and creating + * one for a regular expression is sometimes not easy, however the ones for XML Schema are straight + * forward. + * + * <h2>Legend:</h2> + * \dotfile legend.dot + * <br> + * + * <h2>DFA for <em>all</em> tag</h2> + * \dotfile All_diagram.dot + * <br> + * <h2>DFA for <em>alternative</em> tag</h2> + * \dotfile Alternative_diagram.dot + * <br> + * <h2>DFA for <em>annotation</em> tag</h2> + * \dotfile Annotation_diagram.dot + * <br> + * <h2>DFA for <em>anyAttribute</em> tag</h2> + * \dotfile AnyAttribute_diagram.dot + * <br> + * <h2>DFA for <em>any</em> tag</h2> + * \dotfile Any_diagram.dot + * <br> + * <h2>DFA for <em>assert</em> tag</h2> + * \dotfile Assert_diagram.dot + * <br> + * <h2>DFA for <em>choice</em> tag</h2> + * \dotfile Choice_diagram.dot + * <br> + * <h2>DFA for <em>complexContent</em> tag</h2> + * \dotfile ComplexContent_diagram.dot + * <br> + * <h2>DFA for <em>extension</em> tag inside a <em>complexContent</em> tag</h2> + * \dotfile ComplexContentExtension_diagram.dot + * <br> + * <h2>DFA for <em>restriction</em> tag inside a <em>complexContent</em> tag</h2> + * \dotfile ComplexContentRestriction_diagram.dot + * <br> + * <h2>DFA for <em>defaultOpenContent</em> tag</h2> + * \dotfile DefaultOpenContent_diagram.dot + * <br> + * <h2>DFA for <em>enumeration</em> tag</h2> + * \dotfile EnumerationFacet_diagram.dot + * <br> + * <h2>DFA for <em>field</em> tag</h2> + * \dotfile Field_diagram.dot + * <br> + * <h2>DFA for <em>fractionDigits</em> tag</h2> + * \dotfile FractionDigitsFacet_diagram.dot + * <br> + * <h2>DFA for <em>attribute</em> tag</h2> + * \dotfile GlobalAttribute_diagram.dot + * <br> + * <h2>DFA for <em>complexType</em> tag</h2> + * \dotfile GlobalComplexType_diagram.dot + * <br> + * <h2>DFA for <em>element</em> tag</h2> + * \dotfile GlobalElement_diagram.dot + * <br> + * <h2>DFA for <em>simpleType</em> tag</h2> + * \dotfile GlobalSimpleType_diagram.dot + * <br> + * <h2>DFA for <em>import</em> tag</h2> + * \dotfile Import_diagram.dot + * <br> + * <h2>DFA for <em>include</em> tag</h2> + * \dotfile Include_diagram.dot + * <br> + * <h2>DFA for <em>key</em> tag</h2> + * \dotfile Key_diagram.dot + * <br> + * <h2>DFA for <em>keyref</em> tag</h2> + * \dotfile KeyRef_diagram.dot + * <br> + * <h2>DFA for <em>length</em> tag</h2> + * \dotfile LengthFacet_diagram.dot + * <br> + * <h2>DFA for <em>list</em> tag</h2> + * \dotfile List_diagram.dot + * <br> + * <h2>DFA for <em>all</em> tag</h2> + * \dotfile LocalAll_diagram.dot + * <br> + * <h2>DFA for <em>attribute</em> tag</h2> + * \dotfile LocalAttribute_diagram.dot + * <br> + * <h2>DFA for <em>choice</em> tag</h2> + * \dotfile LocalChoice_diagram.dot + * <br> + * <h2>DFA for <em>complexType</em> tag</h2> + * \dotfile LocalComplexType_diagram.dot + * <br> + * <h2>DFA for <em>element</em> tag</h2> + * \dotfile LocalElement_diagram.dot + * <br> + * <h2>DFA for <em>sequence</em> tag</h2> + * \dotfile LocalSequence_diagram.dot + * <br> + * <h2>DFA for <em>simpleType</em> tag that </h2> + * \dotfile LocalSimpleType_diagram.dot + * <br> + * <h2>DFA for <em>maxExclusive</em> tag</h2> + * \dotfile MaxExclusiveFacet_diagram.dot + * <br> + * <h2>DFA for <em>maxInclusive</em> tag</h2> + * \dotfile MaxInclusiveFacet_diagram.dot + * <br> + * <h2>DFA for <em>maxLength</em> tag</h2> + * \dotfile MaxLengthFacet_diagram.dot + * <br> + * <h2>DFA for <em>minExclusive</em> tag</h2> + * \dotfile MinExclusiveFacet_diagram.dot + * <br> + * <h2>DFA for <em>minInclusive</em> tag</h2> + * \dotfile MinInclusiveFacet_diagram.dot + * <br> + * <h2>DFA for <em>minLength</em> tag</h2> + * \dotfile MinLengthFacet_diagram.dot + * <br> + * <h2>DFA for <em>attributeGroup</em> tag without <em>ref</em> attribute</h2> + * \dotfile NamedAttributeGroup_diagram.dot + * <br> + * <h2>DFA for <em>group</em> tag without <em>ref</em> attribute</h2> + * \dotfile NamedGroup_diagram.dot + * <br> + * <h2>DFA for <em>notation</em> tag</h2> + * \dotfile Notation_diagram.dot + * <br> + * <h2>DFA for <em>override</em> tag</h2> + * \dotfile Override_diagram.dot + * <br> + * <h2>DFA for <em>pattern</em> tag</h2> + * \dotfile PatternFacet_diagram.dot + * <br> + * <h2>DFA for <em>redefine</em> tag</h2> + * \dotfile Redefine_diagram.dot + * <br> + * <h2>DFA for <em>attributeGroup</em> tag with <em>ref</em> attribute</h2> + * \dotfile ReferredAttributeGroup_diagram.dot + * <br> + * <h2>DFA for <em>group</em> tag with <em>ref</em> attribute</h2> + * \dotfile ReferredGroup_diagram.dot + * <br> + * <h2>DFA for <em>schema</em> tag</h2> + * \dotfile Schema_diagram.dot + * <br> + * <h2>DFA for <em>selector</em> tag</h2> + * \dotfile Selector_diagram.dot + * <br> + * <h2>DFA for <em>sequence</em> tag</h2> + * \dotfile Sequence_diagram.dot + * <br> + * <h2>DFA for <em>simpleContent</em> tag</h2> + * \dotfile SimpleContent_diagram.dot + * <br> + * <h2>DFA for <em>extension</em> tag inside a <em>simpleContent</em> tag</h2> + * \dotfile SimpleContentExtension_diagram.dot + * <br> + * <h2>DFA for <em>restriction</em> tag inside a <em>simpleContent</em> tag</h2> + * \dotfile SimpleContentRestriction_diagram.dot + * <br> + * <h2>DFA for <em>restriction</em> tag inside a <em>simpleType</em> tag</h2> + * \dotfile SimpleRestriction_diagram.dot + * <br> + * <h2>DFA for <em>totalDigits</em> tag</h2> + * \dotfile TotalDigitsFacet_diagram.dot + * <br> + * <h2>DFA for <em>union</em> tag</h2> + * \dotfile Union_diagram.dot + * <br> + * <h2>DFA for <em>unique</em> tag</h2> + * \dotfile Unique_diagram.dot + * <br> + * <h2>DFA for <em>whiteSpace</em> tag</h2> + * \dotfile WhiteSpaceFacet_diagram.dot + */ + +void XsdSchemaParser::setupStateMachines() +{ + { + XsdStateMachine<XsdSchemaToken::NodeName> machine(m_namePool); + + // setup state machine for (annotation?, simpleType?) : attribute + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + + machine.addTransition(startState, XsdSchemaToken::Annotation, s1); + machine.addTransition(startState, XsdSchemaToken::SimpleType, s2); + machine.addTransition(s1, XsdSchemaToken::SimpleType, s2); + + m_stateMachines.insert(XsdTagScope::GlobalAttribute, machine); + m_stateMachines.insert(XsdTagScope::LocalAttribute, machine); + } + + { + XsdStateMachine<XsdSchemaToken::NodeName> machine(m_namePool); + + // setup state machine for (annotation?, ((simpleType | complexType)?, alternative*, (unique | key | keyref)*)) : element + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s3 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s4 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + + machine.addTransition(startState, XsdSchemaToken::Annotation, s1); + machine.addTransition(startState, XsdSchemaToken::SimpleType, s2); + machine.addTransition(startState, XsdSchemaToken::ComplexType, s2); + machine.addTransition(startState, XsdSchemaToken::Alternative, s3); + machine.addTransition(startState, XsdSchemaToken::Unique, s4); + machine.addTransition(startState, XsdSchemaToken::Key, s4); + machine.addTransition(startState, XsdSchemaToken::Keyref, s4); + + machine.addTransition(s1, XsdSchemaToken::SimpleType, s2); + machine.addTransition(s1, XsdSchemaToken::ComplexType, s2); + machine.addTransition(s1, XsdSchemaToken::Alternative, s3); + machine.addTransition(s1, XsdSchemaToken::Unique, s4); + machine.addTransition(s1, XsdSchemaToken::Key, s4); + machine.addTransition(s1, XsdSchemaToken::Keyref, s4); + + machine.addTransition(s2, XsdSchemaToken::Alternative, s3); + machine.addTransition(s2, XsdSchemaToken::Unique, s4); + machine.addTransition(s2, XsdSchemaToken::Key, s4); + machine.addTransition(s2, XsdSchemaToken::Keyref, s4); + + machine.addTransition(s3, XsdSchemaToken::Alternative, s3); + machine.addTransition(s3, XsdSchemaToken::Unique, s4); + machine.addTransition(s3, XsdSchemaToken::Key, s4); + machine.addTransition(s3, XsdSchemaToken::Keyref, s4); + + machine.addTransition(s4, XsdSchemaToken::Unique, s4); + machine.addTransition(s4, XsdSchemaToken::Key, s4); + machine.addTransition(s4, XsdSchemaToken::Keyref, s4); + + m_stateMachines.insert(XsdTagScope::GlobalElement, machine); + m_stateMachines.insert(XsdTagScope::LocalElement, machine); + } + + { + XsdStateMachine<XsdSchemaToken::NodeName> machine(m_namePool); + + // setup state machine for (annotation?, (simpleContent | complexContent | (openContent?, (group | all | choice | sequence)?, ((attribute | attributeGroup)*, anyAttribute?), assert*))) : complexType + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s3 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s4 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s5 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s6 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s7 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + + machine.addTransition(startState, XsdSchemaToken::Annotation, s1); + machine.addTransition(startState, XsdSchemaToken::SimpleContent, s2); + machine.addTransition(startState, XsdSchemaToken::ComplexContent, s2); + machine.addTransition(startState, XsdSchemaToken::OpenContent, s3); + machine.addTransition(startState, XsdSchemaToken::Group, s4); + machine.addTransition(startState, XsdSchemaToken::All, s4); + machine.addTransition(startState, XsdSchemaToken::Choice, s4); + machine.addTransition(startState, XsdSchemaToken::Sequence, s4); + machine.addTransition(startState, XsdSchemaToken::Attribute, s5); + machine.addTransition(startState, XsdSchemaToken::AttributeGroup, s5); + machine.addTransition(startState, XsdSchemaToken::AnyAttribute, s6); + machine.addTransition(startState, XsdSchemaToken::Assert, s7); + + machine.addTransition(s1, XsdSchemaToken::SimpleContent, s2); + machine.addTransition(s1, XsdSchemaToken::ComplexContent, s2); + machine.addTransition(s1, XsdSchemaToken::OpenContent, s3); + machine.addTransition(s1, XsdSchemaToken::Group, s4); + machine.addTransition(s1, XsdSchemaToken::All, s4); + machine.addTransition(s1, XsdSchemaToken::Choice, s4); + machine.addTransition(s1, XsdSchemaToken::Sequence, s4); + machine.addTransition(s1, XsdSchemaToken::Attribute, s5); + machine.addTransition(s1, XsdSchemaToken::AttributeGroup, s5); + machine.addTransition(s1, XsdSchemaToken::AnyAttribute, s6); + machine.addTransition(s1, XsdSchemaToken::Assert, s7); + + machine.addTransition(s3, XsdSchemaToken::Group, s4); + machine.addTransition(s3, XsdSchemaToken::All, s4); + machine.addTransition(s3, XsdSchemaToken::Choice, s4); + machine.addTransition(s3, XsdSchemaToken::Sequence, s4); + machine.addTransition(s3, XsdSchemaToken::Attribute, s5); + machine.addTransition(s3, XsdSchemaToken::AttributeGroup, s5); + machine.addTransition(s3, XsdSchemaToken::AnyAttribute, s6); + machine.addTransition(s3, XsdSchemaToken::Assert, s7); + + machine.addTransition(s4, XsdSchemaToken::Attribute, s5); + machine.addTransition(s4, XsdSchemaToken::AttributeGroup, s5); + machine.addTransition(s4, XsdSchemaToken::AnyAttribute, s6); + machine.addTransition(s4, XsdSchemaToken::Assert, s7); + + machine.addTransition(s5, XsdSchemaToken::Attribute, s5); + machine.addTransition(s5, XsdSchemaToken::AttributeGroup, s5); + machine.addTransition(s5, XsdSchemaToken::AnyAttribute, s6); + machine.addTransition(s5, XsdSchemaToken::Assert, s7); + + machine.addTransition(s6, XsdSchemaToken::Assert, s7); + + machine.addTransition(s7, XsdSchemaToken::Assert, s7); + + m_stateMachines.insert(XsdTagScope::GlobalComplexType, machine); + m_stateMachines.insert(XsdTagScope::LocalComplexType, machine); + } + + { + XsdStateMachine<XsdSchemaToken::NodeName> machine(m_namePool); + + // setup state machine for (annotation?, (restriction | extension)) : simpleContent/complexContent + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::InternalState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + + machine.addTransition(startState, XsdSchemaToken::Annotation, s1); + machine.addTransition(startState, XsdSchemaToken::Restriction, s2); + machine.addTransition(startState, XsdSchemaToken::Extension, s2); + + machine.addTransition(s1, XsdSchemaToken::Restriction, s2); + machine.addTransition(s1, XsdSchemaToken::Extension, s2); + + m_stateMachines.insert(XsdTagScope::SimpleContent, machine); + m_stateMachines.insert(XsdTagScope::ComplexContent, machine); + } + + { + XsdStateMachine<XsdSchemaToken::NodeName> machine(m_namePool); + + // setup state machine for (annotation?, (simpleType?, (minExclusive | minInclusive | maxExclusive | maxInclusive | totalDigits | fractionDigits | length | minLength | maxLength | enumeration | whiteSpace | pattern | assertion)*)?, ((attribute | attributeGroup)*, anyAttribute?), assert*) : simpleContent restriction + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s3 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s4 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s5 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s6 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + + machine.addTransition(startState, XsdSchemaToken::Annotation, s1); + machine.addTransition(startState, XsdSchemaToken::SimpleType, s2); + machine.addTransition(startState, XsdSchemaToken::MinExclusive, s3); + machine.addTransition(startState, XsdSchemaToken::MinInclusive, s3); + machine.addTransition(startState, XsdSchemaToken::MaxExclusive, s3); + machine.addTransition(startState, XsdSchemaToken::MaxInclusive, s3); + machine.addTransition(startState, XsdSchemaToken::TotalDigits, s3); + machine.addTransition(startState, XsdSchemaToken::FractionDigits, s3); + machine.addTransition(startState, XsdSchemaToken::Length, s3); + machine.addTransition(startState, XsdSchemaToken::MinLength, s3); + machine.addTransition(startState, XsdSchemaToken::MaxLength, s3); + machine.addTransition(startState, XsdSchemaToken::Enumeration, s3); + machine.addTransition(startState, XsdSchemaToken::WhiteSpace, s3); + machine.addTransition(startState, XsdSchemaToken::Pattern, s3); + machine.addTransition(startState, XsdSchemaToken::Assertion, s3); + machine.addTransition(startState, XsdSchemaToken::Attribute, s4); + machine.addTransition(startState, XsdSchemaToken::AttributeGroup, s4); + machine.addTransition(startState, XsdSchemaToken::AnyAttribute, s5); + machine.addTransition(startState, XsdSchemaToken::Assert, s6); + + machine.addTransition(s1, XsdSchemaToken::SimpleType, s2); + machine.addTransition(s1, XsdSchemaToken::MinExclusive, s3); + machine.addTransition(s1, XsdSchemaToken::MinInclusive, s3); + machine.addTransition(s1, XsdSchemaToken::MaxExclusive, s3); + machine.addTransition(s1, XsdSchemaToken::MaxInclusive, s3); + machine.addTransition(s1, XsdSchemaToken::TotalDigits, s3); + machine.addTransition(s1, XsdSchemaToken::FractionDigits, s3); + machine.addTransition(s1, XsdSchemaToken::Length, s3); + machine.addTransition(s1, XsdSchemaToken::MinLength, s3); + machine.addTransition(s1, XsdSchemaToken::MaxLength, s3); + machine.addTransition(s1, XsdSchemaToken::Enumeration, s3); + machine.addTransition(s1, XsdSchemaToken::WhiteSpace, s3); + machine.addTransition(s1, XsdSchemaToken::Pattern, s3); + machine.addTransition(s1, XsdSchemaToken::Assertion, s3); + machine.addTransition(s1, XsdSchemaToken::Attribute, s4); + machine.addTransition(s1, XsdSchemaToken::AttributeGroup, s4); + machine.addTransition(s1, XsdSchemaToken::AnyAttribute, s5); + machine.addTransition(s1, XsdSchemaToken::Assert, s6); + + machine.addTransition(s2, XsdSchemaToken::MinExclusive, s3); + machine.addTransition(s2, XsdSchemaToken::MinInclusive, s3); + machine.addTransition(s2, XsdSchemaToken::MaxExclusive, s3); + machine.addTransition(s2, XsdSchemaToken::MaxInclusive, s3); + machine.addTransition(s2, XsdSchemaToken::TotalDigits, s3); + machine.addTransition(s2, XsdSchemaToken::FractionDigits, s3); + machine.addTransition(s2, XsdSchemaToken::Length, s3); + machine.addTransition(s2, XsdSchemaToken::MinLength, s3); + machine.addTransition(s2, XsdSchemaToken::MaxLength, s3); + machine.addTransition(s2, XsdSchemaToken::Enumeration, s3); + machine.addTransition(s2, XsdSchemaToken::WhiteSpace, s3); + machine.addTransition(s2, XsdSchemaToken::Pattern, s3); + machine.addTransition(s2, XsdSchemaToken::Assertion, s3); + machine.addTransition(s2, XsdSchemaToken::Attribute, s4); + machine.addTransition(s2, XsdSchemaToken::AttributeGroup, s4); + machine.addTransition(s2, XsdSchemaToken::AnyAttribute, s5); + machine.addTransition(s2, XsdSchemaToken::Assert, s6); + + machine.addTransition(s3, XsdSchemaToken::MinExclusive, s3); + machine.addTransition(s3, XsdSchemaToken::MinInclusive, s3); + machine.addTransition(s3, XsdSchemaToken::MaxExclusive, s3); + machine.addTransition(s3, XsdSchemaToken::MaxInclusive, s3); + machine.addTransition(s3, XsdSchemaToken::TotalDigits, s3); + machine.addTransition(s3, XsdSchemaToken::FractionDigits, s3); + machine.addTransition(s3, XsdSchemaToken::Length, s3); + machine.addTransition(s3, XsdSchemaToken::MinLength, s3); + machine.addTransition(s3, XsdSchemaToken::MaxLength, s3); + machine.addTransition(s3, XsdSchemaToken::Enumeration, s3); + machine.addTransition(s3, XsdSchemaToken::WhiteSpace, s3); + machine.addTransition(s3, XsdSchemaToken::Pattern, s3); + machine.addTransition(s3, XsdSchemaToken::Assertion, s3); + machine.addTransition(s3, XsdSchemaToken::Attribute, s4); + machine.addTransition(s3, XsdSchemaToken::AttributeGroup, s4); + machine.addTransition(s3, XsdSchemaToken::AnyAttribute, s5); + machine.addTransition(s3, XsdSchemaToken::Assert, s6); + + machine.addTransition(s4, XsdSchemaToken::Attribute, s4); + machine.addTransition(s4, XsdSchemaToken::AttributeGroup, s4); + machine.addTransition(s4, XsdSchemaToken::AnyAttribute, s5); + machine.addTransition(s4, XsdSchemaToken::Assert, s6); + + machine.addTransition(s5, XsdSchemaToken::Assert, s6); + + machine.addTransition(s6, XsdSchemaToken::Assert, s6); + + m_stateMachines.insert(XsdTagScope::SimpleContentRestriction, machine); + } + + { + XsdStateMachine<XsdSchemaToken::NodeName> machine(m_namePool); + + // setup state machine for (annotation?, ((attribute | attributeGroup)*, anyAttribute?), assert*) : simple content extension + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s3 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s4 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + + machine.addTransition(startState, XsdSchemaToken::Annotation, s1); + machine.addTransition(startState, XsdSchemaToken::Attribute, s2); + machine.addTransition(startState, XsdSchemaToken::AttributeGroup, s2); + machine.addTransition(startState, XsdSchemaToken::AnyAttribute, s3); + machine.addTransition(startState, XsdSchemaToken::Assert, s4); + + machine.addTransition(s1, XsdSchemaToken::Attribute, s2); + machine.addTransition(s1, XsdSchemaToken::AttributeGroup, s2); + machine.addTransition(s1, XsdSchemaToken::AnyAttribute, s3); + machine.addTransition(s1, XsdSchemaToken::Assert, s4); + + machine.addTransition(s2, XsdSchemaToken::Attribute, s2); + machine.addTransition(s2, XsdSchemaToken::AttributeGroup, s2); + machine.addTransition(s2, XsdSchemaToken::AnyAttribute, s3); + machine.addTransition(s2, XsdSchemaToken::Assert, s4); + + machine.addTransition(s3, XsdSchemaToken::Assert, s4); + + machine.addTransition(s4, XsdSchemaToken::Assert, s4); + + m_stateMachines.insert(XsdTagScope::SimpleContentExtension, machine); + } + + { + XsdStateMachine<XsdSchemaToken::NodeName> machine(m_namePool); + + // setup state machine for (annotation?, openContent?, ((group | all | choice | sequence)?, ((attribute | attributeGroup)*, anyAttribute?), assert*)) : complex content restriction/complex content extension + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s3 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s4 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s5 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s6 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + + machine.addTransition(startState, XsdSchemaToken::Annotation, s1); + machine.addTransition(startState, XsdSchemaToken::OpenContent, s2); + machine.addTransition(startState, XsdSchemaToken::Group, s3); + machine.addTransition(startState, XsdSchemaToken::All, s3); + machine.addTransition(startState, XsdSchemaToken::Choice, s3); + machine.addTransition(startState, XsdSchemaToken::Sequence, s3); + machine.addTransition(startState, XsdSchemaToken::Attribute, s4); + machine.addTransition(startState, XsdSchemaToken::AttributeGroup, s4); + machine.addTransition(startState, XsdSchemaToken::AnyAttribute, s5); + machine.addTransition(startState, XsdSchemaToken::Assert, s6); + + machine.addTransition(s1, XsdSchemaToken::OpenContent, s2); + machine.addTransition(s1, XsdSchemaToken::Group, s3); + machine.addTransition(s1, XsdSchemaToken::All, s3); + machine.addTransition(s1, XsdSchemaToken::Choice, s3); + machine.addTransition(s1, XsdSchemaToken::Sequence, s3); + machine.addTransition(s1, XsdSchemaToken::Attribute, s4); + machine.addTransition(s1, XsdSchemaToken::AttributeGroup, s4); + machine.addTransition(s1, XsdSchemaToken::AnyAttribute, s5); + machine.addTransition(s1, XsdSchemaToken::Assert, s6); + + machine.addTransition(s2, XsdSchemaToken::Group, s3); + machine.addTransition(s2, XsdSchemaToken::All, s3); + machine.addTransition(s2, XsdSchemaToken::Choice, s3); + machine.addTransition(s2, XsdSchemaToken::Sequence, s3); + machine.addTransition(s2, XsdSchemaToken::Attribute, s4); + machine.addTransition(s2, XsdSchemaToken::AttributeGroup, s4); + machine.addTransition(s2, XsdSchemaToken::AnyAttribute, s5); + machine.addTransition(s2, XsdSchemaToken::Assert, s6); + + machine.addTransition(s3, XsdSchemaToken::Attribute, s4); + machine.addTransition(s3, XsdSchemaToken::AttributeGroup, s4); + machine.addTransition(s3, XsdSchemaToken::AnyAttribute, s5); + machine.addTransition(s3, XsdSchemaToken::Assert, s6); + + machine.addTransition(s4, XsdSchemaToken::Attribute, s4); + machine.addTransition(s4, XsdSchemaToken::AttributeGroup, s4); + machine.addTransition(s4, XsdSchemaToken::AnyAttribute, s5); + machine.addTransition(s4, XsdSchemaToken::Assert, s6); + + machine.addTransition(s5, XsdSchemaToken::Assert, s6); + + machine.addTransition(s6, XsdSchemaToken::Assert, s6); + + m_stateMachines.insert(XsdTagScope::ComplexContentRestriction, machine); + m_stateMachines.insert(XsdTagScope::ComplexContentExtension, machine); + } + + { + XsdStateMachine<XsdSchemaToken::NodeName> machine(m_namePool); + + // setup state machine for (annotation?, ((attribute | attributeGroup)*, anyAttribute?)) : named attribute group + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s3 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + + machine.addTransition(startState, XsdSchemaToken::Annotation, s1); + machine.addTransition(startState, XsdSchemaToken::Attribute, s2); + machine.addTransition(startState, XsdSchemaToken::AttributeGroup, s2); + machine.addTransition(startState, XsdSchemaToken::AnyAttribute, s3); + + machine.addTransition(s1, XsdSchemaToken::Attribute, s2); + machine.addTransition(s1, XsdSchemaToken::AttributeGroup, s2); + machine.addTransition(s1, XsdSchemaToken::AnyAttribute, s3); + + machine.addTransition(s2, XsdSchemaToken::Attribute, s2); + machine.addTransition(s2, XsdSchemaToken::AttributeGroup, s2); + machine.addTransition(s2, XsdSchemaToken::AnyAttribute, s3); + + m_stateMachines.insert(XsdTagScope::NamedAttributeGroup, machine); + } + + { + XsdStateMachine<XsdSchemaToken::NodeName> machine(m_namePool); + + // setup state machine for (annotation?, (all | choice | sequence)?) : group + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + + machine.addTransition(startState, XsdSchemaToken::Annotation, s1); + machine.addTransition(startState, XsdSchemaToken::All, s2); + machine.addTransition(startState, XsdSchemaToken::Choice, s2); + machine.addTransition(startState, XsdSchemaToken::Sequence, s2); + + machine.addTransition(s1, XsdSchemaToken::All, s2); + machine.addTransition(s1, XsdSchemaToken::Choice, s2); + machine.addTransition(s1, XsdSchemaToken::Sequence, s2); + + m_stateMachines.insert(XsdTagScope::NamedGroup, machine); + m_stateMachines.insert(XsdTagScope::ReferredGroup, machine); + } + + { + XsdStateMachine<XsdSchemaToken::NodeName> machine(m_namePool); + + // setup state machine for (annotation?, (element | any)*) : all + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + + machine.addTransition(startState, XsdSchemaToken::Annotation, s1); + machine.addTransition(startState, XsdSchemaToken::Element, s2); + machine.addTransition(startState, XsdSchemaToken::Any, s2); + + machine.addTransition(s1, XsdSchemaToken::Element, s2); + machine.addTransition(s1, XsdSchemaToken::Any, s2); + + machine.addTransition(s2, XsdSchemaToken::Element, s2); + machine.addTransition(s2, XsdSchemaToken::Any, s2); + + m_stateMachines.insert(XsdTagScope::All, machine); + m_stateMachines.insert(XsdTagScope::LocalAll, machine); + } + + { + XsdStateMachine<XsdSchemaToken::NodeName> machine(m_namePool); + + // setup state machine for (annotation?, (element | group | choice | sequence | any)*) : choice sequence + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + + machine.addTransition(startState, XsdSchemaToken::Annotation, s1); + machine.addTransition(startState, XsdSchemaToken::Element, s2); + machine.addTransition(startState, XsdSchemaToken::Group, s2); + machine.addTransition(startState, XsdSchemaToken::Choice, s2); + machine.addTransition(startState, XsdSchemaToken::Sequence, s2); + machine.addTransition(startState, XsdSchemaToken::Any, s2); + + machine.addTransition(s1, XsdSchemaToken::Element, s2); + machine.addTransition(s1, XsdSchemaToken::Group, s2); + machine.addTransition(s1, XsdSchemaToken::Choice, s2); + machine.addTransition(s1, XsdSchemaToken::Sequence, s2); + machine.addTransition(s1, XsdSchemaToken::Any, s2); + + machine.addTransition(s2, XsdSchemaToken::Element, s2); + machine.addTransition(s2, XsdSchemaToken::Group, s2); + machine.addTransition(s2, XsdSchemaToken::Choice, s2); + machine.addTransition(s2, XsdSchemaToken::Sequence, s2); + machine.addTransition(s2, XsdSchemaToken::Any, s2); + + m_stateMachines.insert(XsdTagScope::Choice, machine); + m_stateMachines.insert(XsdTagScope::LocalChoice, machine); + m_stateMachines.insert(XsdTagScope::Sequence, machine); + m_stateMachines.insert(XsdTagScope::LocalSequence, machine); + } + + { + XsdStateMachine<XsdSchemaToken::NodeName> machine(m_namePool); + + // setup state machine for (annotation?) : any/selector/field/notation/include/import/referred attribute group/anyAttribute/all facets/assert + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + + machine.addTransition(startState, XsdSchemaToken::Annotation, s1); + + m_stateMachines.insert(XsdTagScope::Any, machine); + m_stateMachines.insert(XsdTagScope::Selector, machine); + m_stateMachines.insert(XsdTagScope::Field, machine); + m_stateMachines.insert(XsdTagScope::Notation, machine); + m_stateMachines.insert(XsdTagScope::Include, machine); + m_stateMachines.insert(XsdTagScope::Import, machine); + m_stateMachines.insert(XsdTagScope::ReferredAttributeGroup, machine); + m_stateMachines.insert(XsdTagScope::AnyAttribute, machine); + m_stateMachines.insert(XsdTagScope::MinExclusiveFacet, machine); + m_stateMachines.insert(XsdTagScope::MinInclusiveFacet, machine); + m_stateMachines.insert(XsdTagScope::MaxExclusiveFacet, machine); + m_stateMachines.insert(XsdTagScope::MaxInclusiveFacet, machine); + m_stateMachines.insert(XsdTagScope::TotalDigitsFacet, machine); + m_stateMachines.insert(XsdTagScope::FractionDigitsFacet, machine); + m_stateMachines.insert(XsdTagScope::LengthFacet, machine); + m_stateMachines.insert(XsdTagScope::MinLengthFacet, machine); + m_stateMachines.insert(XsdTagScope::MaxLengthFacet, machine); + m_stateMachines.insert(XsdTagScope::EnumerationFacet, machine); + m_stateMachines.insert(XsdTagScope::WhiteSpaceFacet, machine); + m_stateMachines.insert(XsdTagScope::PatternFacet, machine); + m_stateMachines.insert(XsdTagScope::Assert, machine); + m_stateMachines.insert(XsdTagScope::Assertion, machine); + } + + { + XsdStateMachine<XsdSchemaToken::NodeName> machine(m_namePool); + + // setup state machine for (annotation?, (selector, field+)) : unique/key/keyref + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::InternalState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::InternalState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s3 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + + machine.addTransition(startState, XsdSchemaToken::Annotation, s1); + machine.addTransition(startState, XsdSchemaToken::Selector, s2); + + machine.addTransition(s1, XsdSchemaToken::Selector, s2); + machine.addTransition(s2, XsdSchemaToken::Field, s3); + machine.addTransition(s3, XsdSchemaToken::Field, s3); + + m_stateMachines.insert(XsdTagScope::Unique, machine); + m_stateMachines.insert(XsdTagScope::Key, machine); + m_stateMachines.insert(XsdTagScope::KeyRef, machine); + } + + { + XsdStateMachine<XsdSchemaToken::NodeName> machine(m_namePool); + + // setup state machine for (annotation?, (simpleType | complexType)?) : alternative + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + + machine.addTransition(startState, XsdSchemaToken::Annotation, s1); + machine.addTransition(startState, XsdSchemaToken::SimpleType, s2); + machine.addTransition(startState, XsdSchemaToken::ComplexType, s2); + + machine.addTransition(s1, XsdSchemaToken::SimpleType, s2); + machine.addTransition(s1, XsdSchemaToken::ComplexType, s2); + + m_stateMachines.insert(XsdTagScope::Alternative, machine); + } + + { + XsdStateMachine<XsdSchemaToken::NodeName> machine(m_namePool); + + // setup state machine for (appinfo | documentation)* : annotation + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + + machine.addTransition(startState, XsdSchemaToken::Appinfo, s1); + machine.addTransition(startState, XsdSchemaToken::Documentation, s1); + + machine.addTransition(s1, XsdSchemaToken::Appinfo, s1); + machine.addTransition(s1, XsdSchemaToken::Documentation, s1); + + m_stateMachines.insert(XsdTagScope::Annotation, machine); + } + + { + XsdStateMachine<XsdSchemaToken::NodeName> machine(m_namePool); + + // setup state machine for (annotation?, (restriction | list | union)) : simpleType + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::InternalState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + + machine.addTransition(startState, XsdSchemaToken::Annotation, s1); + machine.addTransition(startState, XsdSchemaToken::Restriction, s2); + machine.addTransition(startState, XsdSchemaToken::List, s2); + machine.addTransition(startState, XsdSchemaToken::Union, s2); + + machine.addTransition(s1, XsdSchemaToken::Restriction, s2); + machine.addTransition(s1, XsdSchemaToken::List, s2); + machine.addTransition(s1, XsdSchemaToken::Union, s2); + + m_stateMachines.insert(XsdTagScope::GlobalSimpleType, machine); + m_stateMachines.insert(XsdTagScope::LocalSimpleType, machine); + } + + { + XsdStateMachine<XsdSchemaToken::NodeName> machine(m_namePool); + + // setup state machine for (annotation?, (simpleType?, (minExclusive | minInclusive | maxExclusive | maxInclusive | totalDigits | fractionDigits | length | minLength | maxLength | enumeration | whiteSpace | pattern | assertion)*)) : simple type restriction + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s3 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + + machine.addTransition(startState, XsdSchemaToken::Annotation, s1); + machine.addTransition(startState, XsdSchemaToken::SimpleType, s2); + machine.addTransition(startState, XsdSchemaToken::MinExclusive, s3); + machine.addTransition(startState, XsdSchemaToken::MinInclusive, s3); + machine.addTransition(startState, XsdSchemaToken::MaxExclusive, s3); + machine.addTransition(startState, XsdSchemaToken::MaxInclusive, s3); + machine.addTransition(startState, XsdSchemaToken::TotalDigits, s3); + machine.addTransition(startState, XsdSchemaToken::FractionDigits, s3); + machine.addTransition(startState, XsdSchemaToken::Length, s3); + machine.addTransition(startState, XsdSchemaToken::MinLength, s3); + machine.addTransition(startState, XsdSchemaToken::MaxLength, s3); + machine.addTransition(startState, XsdSchemaToken::Enumeration, s3); + machine.addTransition(startState, XsdSchemaToken::WhiteSpace, s3); + machine.addTransition(startState, XsdSchemaToken::Pattern, s3); + machine.addTransition(startState, XsdSchemaToken::Assertion, s3); + + machine.addTransition(s1, XsdSchemaToken::SimpleType, s2); + machine.addTransition(s1, XsdSchemaToken::MinExclusive, s3); + machine.addTransition(s1, XsdSchemaToken::MinInclusive, s3); + machine.addTransition(s1, XsdSchemaToken::MaxExclusive, s3); + machine.addTransition(s1, XsdSchemaToken::MaxInclusive, s3); + machine.addTransition(s1, XsdSchemaToken::TotalDigits, s3); + machine.addTransition(s1, XsdSchemaToken::FractionDigits, s3); + machine.addTransition(s1, XsdSchemaToken::Length, s3); + machine.addTransition(s1, XsdSchemaToken::MinLength, s3); + machine.addTransition(s1, XsdSchemaToken::MaxLength, s3); + machine.addTransition(s1, XsdSchemaToken::Enumeration, s3); + machine.addTransition(s1, XsdSchemaToken::WhiteSpace, s3); + machine.addTransition(s1, XsdSchemaToken::Pattern, s3); + machine.addTransition(s1, XsdSchemaToken::Assertion, s3); + + machine.addTransition(s2, XsdSchemaToken::MinExclusive, s3); + machine.addTransition(s2, XsdSchemaToken::MinInclusive, s3); + machine.addTransition(s2, XsdSchemaToken::MaxExclusive, s3); + machine.addTransition(s2, XsdSchemaToken::MaxInclusive, s3); + machine.addTransition(s2, XsdSchemaToken::TotalDigits, s3); + machine.addTransition(s2, XsdSchemaToken::FractionDigits, s3); + machine.addTransition(s2, XsdSchemaToken::Length, s3); + machine.addTransition(s2, XsdSchemaToken::MinLength, s3); + machine.addTransition(s2, XsdSchemaToken::MaxLength, s3); + machine.addTransition(s2, XsdSchemaToken::Enumeration, s3); + machine.addTransition(s2, XsdSchemaToken::WhiteSpace, s3); + machine.addTransition(s2, XsdSchemaToken::Pattern, s3); + machine.addTransition(s2, XsdSchemaToken::Assertion, s3); + + machine.addTransition(s3, XsdSchemaToken::MinExclusive, s3); + machine.addTransition(s3, XsdSchemaToken::MinInclusive, s3); + machine.addTransition(s3, XsdSchemaToken::MaxExclusive, s3); + machine.addTransition(s3, XsdSchemaToken::MaxInclusive, s3); + machine.addTransition(s3, XsdSchemaToken::TotalDigits, s3); + machine.addTransition(s3, XsdSchemaToken::FractionDigits, s3); + machine.addTransition(s3, XsdSchemaToken::Length, s3); + machine.addTransition(s3, XsdSchemaToken::MinLength, s3); + machine.addTransition(s3, XsdSchemaToken::MaxLength, s3); + machine.addTransition(s3, XsdSchemaToken::Enumeration, s3); + machine.addTransition(s3, XsdSchemaToken::WhiteSpace, s3); + machine.addTransition(s3, XsdSchemaToken::Pattern, s3); + machine.addTransition(s3, XsdSchemaToken::Assertion, s3); + + m_stateMachines.insert(XsdTagScope::SimpleRestriction, machine); + } + + { + XsdStateMachine<XsdSchemaToken::NodeName> machine(m_namePool); + + // setup state machine for (annotation?, simpleType?) : list + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + + machine.addTransition(startState, XsdSchemaToken::Annotation, s1); + machine.addTransition(startState, XsdSchemaToken::SimpleType, s2); + + machine.addTransition(s1, XsdSchemaToken::SimpleType, s2); + + m_stateMachines.insert(XsdTagScope::List, machine); + } + + { + XsdStateMachine<XsdSchemaToken::NodeName> machine(m_namePool); + + // setup state machine for (annotation?, simpleType*) : union + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + + machine.addTransition(startState, XsdSchemaToken::Annotation, s1); + machine.addTransition(startState, XsdSchemaToken::SimpleType, s2); + + machine.addTransition(s1, XsdSchemaToken::SimpleType, s2); + machine.addTransition(s2, XsdSchemaToken::SimpleType, s2); + + m_stateMachines.insert(XsdTagScope::Union, machine); + } + + { + XsdStateMachine<XsdSchemaToken::NodeName> machine(m_namePool); + + // setup state machine for ((include | import | redefine |i override | annotation)*, (defaultOpenContent, annotation*)?, (((simpleType | complexType | group | attributeGroup) | element | attribute | notation), annotation*)*) : schema + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s3 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s4 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s5 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + + machine.addTransition(startState, XsdSchemaToken::Include, s1); + machine.addTransition(startState, XsdSchemaToken::Import, s1); + machine.addTransition(startState, XsdSchemaToken::Redefine, s1); + machine.addTransition(startState, XsdSchemaToken::Override, s1); + machine.addTransition(startState, XsdSchemaToken::Annotation, s1); + machine.addTransition(startState, XsdSchemaToken::DefaultOpenContent, s2); + machine.addTransition(startState, XsdSchemaToken::SimpleType, s4); + machine.addTransition(startState, XsdSchemaToken::ComplexType, s4); + machine.addTransition(startState, XsdSchemaToken::Group, s4); + machine.addTransition(startState, XsdSchemaToken::AttributeGroup, s4); + machine.addTransition(startState, XsdSchemaToken::Element, s4); + machine.addTransition(startState, XsdSchemaToken::Attribute, s4); + machine.addTransition(startState, XsdSchemaToken::Notation, s4); + + machine.addTransition(s1, XsdSchemaToken::Include, s1); + machine.addTransition(s1, XsdSchemaToken::Import, s1); + machine.addTransition(s1, XsdSchemaToken::Redefine, s1); + machine.addTransition(s1, XsdSchemaToken::Override, s1); + machine.addTransition(s1, XsdSchemaToken::Annotation, s1); + machine.addTransition(s1, XsdSchemaToken::DefaultOpenContent, s2); + machine.addTransition(s1, XsdSchemaToken::SimpleType, s4); + machine.addTransition(s1, XsdSchemaToken::ComplexType, s4); + machine.addTransition(s1, XsdSchemaToken::Group, s4); + machine.addTransition(s1, XsdSchemaToken::AttributeGroup, s4); + machine.addTransition(s1, XsdSchemaToken::Element, s4); + machine.addTransition(s1, XsdSchemaToken::Attribute, s4); + machine.addTransition(s1, XsdSchemaToken::Notation, s4); + + machine.addTransition(s2, XsdSchemaToken::Annotation, s3); + machine.addTransition(s2, XsdSchemaToken::SimpleType, s4); + machine.addTransition(s2, XsdSchemaToken::ComplexType, s4); + machine.addTransition(s2, XsdSchemaToken::Group, s4); + machine.addTransition(s2, XsdSchemaToken::AttributeGroup, s4); + machine.addTransition(s2, XsdSchemaToken::Element, s4); + machine.addTransition(s2, XsdSchemaToken::Attribute, s4); + machine.addTransition(s2, XsdSchemaToken::Notation, s4); + + machine.addTransition(s3, XsdSchemaToken::SimpleType, s4); + machine.addTransition(s3, XsdSchemaToken::ComplexType, s4); + machine.addTransition(s3, XsdSchemaToken::Group, s4); + machine.addTransition(s3, XsdSchemaToken::AttributeGroup, s4); + machine.addTransition(s3, XsdSchemaToken::Element, s4); + machine.addTransition(s3, XsdSchemaToken::Attribute, s4); + machine.addTransition(s3, XsdSchemaToken::Notation, s4); + + machine.addTransition(s4, XsdSchemaToken::SimpleType, s4); + machine.addTransition(s4, XsdSchemaToken::ComplexType, s4); + machine.addTransition(s4, XsdSchemaToken::Group, s4); + machine.addTransition(s4, XsdSchemaToken::AttributeGroup, s4); + machine.addTransition(s4, XsdSchemaToken::Element, s4); + machine.addTransition(s4, XsdSchemaToken::Attribute, s4); + machine.addTransition(s4, XsdSchemaToken::Notation, s4); + machine.addTransition(s4, XsdSchemaToken::Annotation, s5); + + machine.addTransition(s5, XsdSchemaToken::SimpleType, s4); + machine.addTransition(s5, XsdSchemaToken::ComplexType, s4); + machine.addTransition(s5, XsdSchemaToken::Group, s4); + machine.addTransition(s5, XsdSchemaToken::AttributeGroup, s4); + machine.addTransition(s5, XsdSchemaToken::Element, s4); + machine.addTransition(s5, XsdSchemaToken::Attribute, s4); + machine.addTransition(s5, XsdSchemaToken::Notation, s4); + machine.addTransition(s5, XsdSchemaToken::Annotation, s5); + + m_stateMachines.insert(XsdTagScope::Schema, machine); + } + + { + XsdStateMachine<XsdSchemaToken::NodeName> machine(m_namePool); + + // setup state machine for (annotation?, any) : defaultOpenContent + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::InternalState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + + machine.addTransition(startState, XsdSchemaToken::Annotation, s1); + machine.addTransition(startState, XsdSchemaToken::Any, s2); + + machine.addTransition(s1, XsdSchemaToken::Any, s2); + + m_stateMachines.insert(XsdTagScope::DefaultOpenContent, machine); + } + + { + XsdStateMachine<XsdSchemaToken::NodeName> machine(m_namePool); + + // setup state machine for (annotation | (simpleType | complexType | group | attributeGroup))* : redefine + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + + machine.addTransition(startState, XsdSchemaToken::Annotation, s1); + machine.addTransition(startState, XsdSchemaToken::SimpleType, s1); + machine.addTransition(startState, XsdSchemaToken::ComplexType, s1); + machine.addTransition(startState, XsdSchemaToken::Group, s1); + machine.addTransition(startState, XsdSchemaToken::AttributeGroup, s1); + + machine.addTransition(s1, XsdSchemaToken::Annotation, s1); + machine.addTransition(s1, XsdSchemaToken::SimpleType, s1); + machine.addTransition(s1, XsdSchemaToken::ComplexType, s1); + machine.addTransition(s1, XsdSchemaToken::Group, s1); + machine.addTransition(s1, XsdSchemaToken::AttributeGroup, s1); + + m_stateMachines.insert(XsdTagScope::Redefine, machine); + } + + { + XsdStateMachine<XsdSchemaToken::NodeName> machine(m_namePool); + + // setup state machine for (annotation | (simpleType | complexType | group | attributeGroup | element | attribute | notation))* : override + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + + machine.addTransition(startState, XsdSchemaToken::Annotation, s1); + machine.addTransition(startState, XsdSchemaToken::SimpleType, s1); + machine.addTransition(startState, XsdSchemaToken::ComplexType, s1); + machine.addTransition(startState, XsdSchemaToken::Group, s1); + machine.addTransition(startState, XsdSchemaToken::AttributeGroup, s1); + machine.addTransition(startState, XsdSchemaToken::Element, s1); + machine.addTransition(startState, XsdSchemaToken::Attribute, s1); + machine.addTransition(startState, XsdSchemaToken::Notation, s1); + + machine.addTransition(s1, XsdSchemaToken::Annotation, s1); + machine.addTransition(s1, XsdSchemaToken::SimpleType, s1); + machine.addTransition(s1, XsdSchemaToken::ComplexType, s1); + machine.addTransition(s1, XsdSchemaToken::Group, s1); + machine.addTransition(s1, XsdSchemaToken::AttributeGroup, s1); + machine.addTransition(s1, XsdSchemaToken::Element, s1); + machine.addTransition(s1, XsdSchemaToken::Attribute, s1); + machine.addTransition(s1, XsdSchemaToken::Notation, s1); + + m_stateMachines.insert(XsdTagScope::Override, machine); + } +} + +void XsdSchemaParser::setupBuiltinTypeNames() +{ + m_builtinTypeNames.reserve(48); + + m_builtinTypeNames.insert(BuiltinTypes::xsAnyType->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsAnySimpleType->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsUntyped->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsAnyAtomicType->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsUntypedAtomic->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsDateTime->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsDate->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsTime->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsDuration->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsYearMonthDuration->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsDayTimeDuration->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsFloat->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsDouble->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsInteger->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsDecimal->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsNonPositiveInteger->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsNegativeInteger->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsLong->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsInt->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsShort->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsByte->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsNonNegativeInteger->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsUnsignedLong->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsUnsignedInt->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsUnsignedShort->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsUnsignedByte->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsPositiveInteger->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsGYearMonth->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsGYear->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsGMonthDay->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsGDay->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsGMonth->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsBoolean->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsBase64Binary->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsHexBinary->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsAnyURI->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsQName->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsString->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsNormalizedString->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsToken->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsLanguage->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsNMTOKEN->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsName->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsNCName->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsID->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsIDREF->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsENTITY->name(m_namePool)); + m_builtinTypeNames.insert(BuiltinTypes::xsNOTATION->name(m_namePool)); +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/schema/qxsdschemaparsercontext.cpp b/src/xmlpatterns/schema/qxsdschemaparsercontext.cpp new file mode 100644 index 0000000..0f711d8 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdschemaparsercontext.cpp @@ -0,0 +1,603 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxsdschemaparsercontext_p.h" + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +XsdSchemaParserContext::XsdSchemaParserContext(const NamePool::Ptr &namePool, const XsdSchemaContext::Ptr &context) + : m_namePool(namePool) + , m_schema(new XsdSchema(m_namePool)) + , m_checker(new XsdSchemaChecker(context, this)) + , m_resolver(new XsdSchemaResolver(context, this)) + , m_elementDescriptions(setupElementDescriptions()) +{ +} + +NamePool::Ptr XsdSchemaParserContext::namePool() const +{ + return m_namePool; +} + +XsdSchemaResolver::Ptr XsdSchemaParserContext::resolver() const +{ + return m_resolver; +} + +XsdSchemaChecker::Ptr XsdSchemaParserContext::checker() const +{ + return m_checker; +} + +XsdSchema::Ptr XsdSchemaParserContext::schema() const +{ + return m_schema; +} + +ElementDescription<XsdSchemaToken, XsdTagScope::Type>::Hash XsdSchemaParserContext::elementDescriptions() const +{ + return m_elementDescriptions; +} + +QXmlName XsdSchemaParserContext::createAnonymousName(const QString &targetNamespace) const +{ + m_anonymousNameCounter.ref(); + + const QString name = QString::fromLatin1("__AnonymousClass_%1").arg((int)m_anonymousNameCounter); + + return m_namePool->allocateQName(targetNamespace, name); +} + +ElementDescription<XsdSchemaToken, XsdTagScope::Type>::Hash XsdSchemaParserContext::setupElementDescriptions() +{ + enum + { + ReservedForElements = 60 + }; + + ElementDescription<XsdSchemaToken, XsdTagScope::Type>::Hash elementDescriptions; + elementDescriptions.reserve(ReservedForElements); + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::Schema]; + description.optionalAttributes.reserve(10); + //description.tagToken = XsdSchemaToken::Schema; + description.optionalAttributes.insert(XsdSchemaToken::AttributeFormDefault); + description.optionalAttributes.insert(XsdSchemaToken::BlockDefault); + description.optionalAttributes.insert(XsdSchemaToken::DefaultAttributes); + description.optionalAttributes.insert(XsdSchemaToken::XPathDefaultNamespace); + description.optionalAttributes.insert(XsdSchemaToken::ElementFormDefault); + description.optionalAttributes.insert(XsdSchemaToken::FinalDefault); + description.optionalAttributes.insert(XsdSchemaToken::Id); + description.optionalAttributes.insert(XsdSchemaToken::TargetNamespace); + description.optionalAttributes.insert(XsdSchemaToken::Version); + description.optionalAttributes.insert(XsdSchemaToken::XmlLanguage); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::Include]; + //description.tagToken = XsdSchemaToken::Include; + description.requiredAttributes.insert(XsdSchemaToken::SchemaLocation); + description.optionalAttributes.insert(XsdSchemaToken::Id); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::Import]; + //description.tagToken = XsdSchemaToken::Import; + description.optionalAttributes.insert(XsdSchemaToken::Id); + description.optionalAttributes.insert(XsdSchemaToken::Namespace); + description.optionalAttributes.insert(XsdSchemaToken::SchemaLocation); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::Redefine]; + //description.tagToken = XsdSchemaToken::Redefine; + description.optionalAttributes.insert(XsdSchemaToken::Id); + description.requiredAttributes.insert(XsdSchemaToken::SchemaLocation); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::Override]; + //description.tagToken = XsdSchemaToken::Override; + description.optionalAttributes.insert(XsdSchemaToken::Id); + description.requiredAttributes.insert(XsdSchemaToken::SchemaLocation); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::Annotation]; + //description.tagToken = XsdSchemaToken::Annotation; + description.optionalAttributes.insert(XsdSchemaToken::Id); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::AppInfo]; + //description.tagToken = XsdSchemaToken::Appinfo; + description.optionalAttributes.insert(XsdSchemaToken::Source); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::Documentation]; + //description.tagToken = XsdSchemaToken::Documentation; + description.optionalAttributes.insert(XsdSchemaToken::Source); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::GlobalSimpleType]; + //description.tagToken = XsdSchemaToken::SimpleType; + description.optionalAttributes.insert(XsdSchemaToken::Final); + description.optionalAttributes.insert(XsdSchemaToken::Id); + description.requiredAttributes.insert(XsdSchemaToken::Name); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::LocalSimpleType]; + //description.tagToken = XsdSchemaToken::SimpleType; + description.optionalAttributes.insert(XsdSchemaToken::Id); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::SimpleRestriction]; + //description.tagToken = XsdSchemaToken::Restriction; + description.optionalAttributes.insert(XsdSchemaToken::Base); + description.optionalAttributes.insert(XsdSchemaToken::Id); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::List]; + //description.tagToken = XsdSchemaToken::List; + description.optionalAttributes.insert(XsdSchemaToken::Id); + description.optionalAttributes.insert(XsdSchemaToken::ItemType); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::Union]; + //description.tagToken = XsdSchemaToken::Union; + description.optionalAttributes.insert(XsdSchemaToken::Id); + description.optionalAttributes.insert(XsdSchemaToken::MemberTypes); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::MinExclusiveFacet]; + //description.tagToken = XsdSchemaToken::MinExclusive; + description.optionalAttributes.insert(XsdSchemaToken::Fixed); + description.optionalAttributes.insert(XsdSchemaToken::Id); + description.requiredAttributes.insert(XsdSchemaToken::Value); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::MinInclusiveFacet]; + //description.tagToken = XsdSchemaToken::MinInclusive; + description.optionalAttributes.insert(XsdSchemaToken::Fixed); + description.optionalAttributes.insert(XsdSchemaToken::Id); + description.requiredAttributes.insert(XsdSchemaToken::Value); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::MaxExclusiveFacet]; + //description.tagToken = XsdSchemaToken::MaxExclusive; + description.optionalAttributes.insert(XsdSchemaToken::Fixed); + description.optionalAttributes.insert(XsdSchemaToken::Id); + description.requiredAttributes.insert(XsdSchemaToken::Value); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::MaxInclusiveFacet]; + //description.tagToken = XsdSchemaToken::MaxInclusive; + description.optionalAttributes.insert(XsdSchemaToken::Fixed); + description.optionalAttributes.insert(XsdSchemaToken::Id); + description.requiredAttributes.insert(XsdSchemaToken::Value); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::TotalDigitsFacet]; + //description.tagToken = XsdSchemaToken::TotalDigits; + description.optionalAttributes.insert(XsdSchemaToken::Fixed); + description.optionalAttributes.insert(XsdSchemaToken::Id); + description.requiredAttributes.insert(XsdSchemaToken::Value); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::FractionDigitsFacet]; + //description.tagToken = XsdSchemaToken::FractionDigits; + description.optionalAttributes.insert(XsdSchemaToken::Fixed); + description.optionalAttributes.insert(XsdSchemaToken::Id); + description.requiredAttributes.insert(XsdSchemaToken::Value); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::LengthFacet]; + //description.tagToken = XsdSchemaToken::Length; + description.optionalAttributes.insert(XsdSchemaToken::Fixed); + description.optionalAttributes.insert(XsdSchemaToken::Id); + description.requiredAttributes.insert(XsdSchemaToken::Value); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::MinLengthFacet]; + //description.tagToken = XsdSchemaToken::MinLength; + description.optionalAttributes.insert(XsdSchemaToken::Fixed); + description.optionalAttributes.insert(XsdSchemaToken::Id); + description.requiredAttributes.insert(XsdSchemaToken::Value); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::MaxLengthFacet]; + //description.tagToken = XsdSchemaToken::MaxLength; + description.optionalAttributes.insert(XsdSchemaToken::Fixed); + description.optionalAttributes.insert(XsdSchemaToken::Id); + description.requiredAttributes.insert(XsdSchemaToken::Value); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::EnumerationFacet]; + //description.tagToken = XsdSchemaToken::Enumeration; + description.optionalAttributes.insert(XsdSchemaToken::Id); + description.requiredAttributes.insert(XsdSchemaToken::Value); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::WhiteSpaceFacet]; + //description.tagToken = XsdSchemaToken::WhiteSpace; + description.optionalAttributes.insert(XsdSchemaToken::Fixed); + description.optionalAttributes.insert(XsdSchemaToken::Id); + description.requiredAttributes.insert(XsdSchemaToken::Value); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::PatternFacet]; + //description.tagToken = XsdSchemaToken::Pattern; + description.optionalAttributes.insert(XsdSchemaToken::Id); + description.requiredAttributes.insert(XsdSchemaToken::Value); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::GlobalComplexType]; + description.optionalAttributes.reserve(7); + //description.tagToken = XsdSchemaToken::ComplexType; + description.optionalAttributes.insert(XsdSchemaToken::Abstract); + description.optionalAttributes.insert(XsdSchemaToken::Block); + description.optionalAttributes.insert(XsdSchemaToken::DefaultAttributesApply); + description.optionalAttributes.insert(XsdSchemaToken::Final); + description.optionalAttributes.insert(XsdSchemaToken::Id); + description.optionalAttributes.insert(XsdSchemaToken::Mixed); + description.requiredAttributes.insert(XsdSchemaToken::Name); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::LocalComplexType]; + //description.tagToken = XsdSchemaToken::ComplexType; + description.optionalAttributes.insert(XsdSchemaToken::Id); + description.optionalAttributes.insert(XsdSchemaToken::Mixed); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::SimpleContent]; + //description.tagToken = XsdSchemaToken::SimpleContent; + description.optionalAttributes.insert(XsdSchemaToken::Id); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::SimpleContentRestriction]; + //description.tagToken = XsdSchemaToken::Restriction; + description.requiredAttributes.insert(XsdSchemaToken::Base); + description.optionalAttributes.insert(XsdSchemaToken::Id); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::SimpleContentExtension]; + //description.tagToken = XsdSchemaToken::Extension; + description.requiredAttributes.insert(XsdSchemaToken::Base); + description.optionalAttributes.insert(XsdSchemaToken::Id); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::ComplexContent]; + //description.tagToken = XsdSchemaToken::ComplexContent; + description.optionalAttributes.insert(XsdSchemaToken::Id); + description.optionalAttributes.insert(XsdSchemaToken::Mixed); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::ComplexContentRestriction]; + //description.tagToken = XsdSchemaToken::Restriction; + description.requiredAttributes.insert(XsdSchemaToken::Base); + description.optionalAttributes.insert(XsdSchemaToken::Id); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::ComplexContentExtension]; + //description.tagToken = XsdSchemaToken::Extension; + description.requiredAttributes.insert(XsdSchemaToken::Base); + description.optionalAttributes.insert(XsdSchemaToken::Id); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::NamedGroup]; + //description.tagToken = XsdSchemaToken::Group; + description.optionalAttributes.insert(XsdSchemaToken::Id); + description.requiredAttributes.insert(XsdSchemaToken::Name); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::ReferredGroup]; + description.optionalAttributes.reserve(4); + //description.tagToken = XsdSchemaToken::Group; + description.optionalAttributes.insert(XsdSchemaToken::Id); + description.optionalAttributes.insert(XsdSchemaToken::MaxOccurs); + description.optionalAttributes.insert(XsdSchemaToken::MinOccurs); + description.requiredAttributes.insert(XsdSchemaToken::Ref); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::All]; + //description.tagToken = XsdSchemaToken::All; + description.optionalAttributes.insert(XsdSchemaToken::Id); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::LocalAll]; + //description.tagToken = XsdSchemaToken::All; + description.optionalAttributes.insert(XsdSchemaToken::Id); + description.optionalAttributes.insert(XsdSchemaToken::MaxOccurs); + description.optionalAttributes.insert(XsdSchemaToken::MinOccurs); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::Choice]; + //description.tagToken = XsdSchemaToken::Choice; + description.optionalAttributes.insert(XsdSchemaToken::Id); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::LocalChoice]; + //description.tagToken = XsdSchemaToken::Choice; + description.optionalAttributes.insert(XsdSchemaToken::Id); + description.optionalAttributes.insert(XsdSchemaToken::MaxOccurs); + description.optionalAttributes.insert(XsdSchemaToken::MinOccurs); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::Sequence]; + //description.tagToken = XsdSchemaToken::Sequence; + description.optionalAttributes.insert(XsdSchemaToken::Id); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::LocalSequence]; + //description.tagToken = XsdSchemaToken::Sequence; + description.optionalAttributes.insert(XsdSchemaToken::Id); + description.optionalAttributes.insert(XsdSchemaToken::MaxOccurs); + description.optionalAttributes.insert(XsdSchemaToken::MinOccurs); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::GlobalAttribute]; + description.optionalAttributes.reserve(5); + //description.tagToken = XsdSchemaToken::Attribute; + description.optionalAttributes.insert(XsdSchemaToken::Default); + description.optionalAttributes.insert(XsdSchemaToken::Fixed); + description.optionalAttributes.insert(XsdSchemaToken::Id); + description.requiredAttributes.insert(XsdSchemaToken::Name); + description.optionalAttributes.insert(XsdSchemaToken::Type); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::LocalAttribute]; + description.optionalAttributes.reserve(8); + //description.tagToken = XsdSchemaToken::Attribute; + description.optionalAttributes.insert(XsdSchemaToken::Default); + description.optionalAttributes.insert(XsdSchemaToken::Fixed); + description.optionalAttributes.insert(XsdSchemaToken::Form); + description.optionalAttributes.insert(XsdSchemaToken::Id); + description.optionalAttributes.insert(XsdSchemaToken::Name); + description.optionalAttributes.insert(XsdSchemaToken::Ref); + description.optionalAttributes.insert(XsdSchemaToken::Type); + description.optionalAttributes.insert(XsdSchemaToken::Use); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::NamedAttributeGroup]; + //description.tagToken = XsdSchemaToken::AttributeGroup; + description.optionalAttributes.insert(XsdSchemaToken::Id); + description.requiredAttributes.insert(XsdSchemaToken::Name); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::ReferredAttributeGroup]; + //description.tagToken = XsdSchemaToken::AttributeGroup; + description.optionalAttributes.insert(XsdSchemaToken::Id); + description.requiredAttributes.insert(XsdSchemaToken::Ref); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::LocalElement]; + description.optionalAttributes.reserve(11); + //description.tagToken = XsdSchemaToken::Element; + description.optionalAttributes.insert(XsdSchemaToken::Block); + description.optionalAttributes.insert(XsdSchemaToken::Default); + description.optionalAttributes.insert(XsdSchemaToken::Fixed); + description.optionalAttributes.insert(XsdSchemaToken::Form); + description.optionalAttributes.insert(XsdSchemaToken::Id); + description.optionalAttributes.insert(XsdSchemaToken::MinOccurs); + description.optionalAttributes.insert(XsdSchemaToken::MaxOccurs); + description.optionalAttributes.insert(XsdSchemaToken::Name); + description.optionalAttributes.insert(XsdSchemaToken::Nillable); + description.optionalAttributes.insert(XsdSchemaToken::Ref); + description.optionalAttributes.insert(XsdSchemaToken::Type); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::GlobalElement]; + description.optionalAttributes.reserve(10); + //description.tagToken = XsdSchemaToken::Element; + description.optionalAttributes.insert(XsdSchemaToken::Abstract); + description.optionalAttributes.insert(XsdSchemaToken::Block); + description.optionalAttributes.insert(XsdSchemaToken::Default); + description.optionalAttributes.insert(XsdSchemaToken::Final); + description.optionalAttributes.insert(XsdSchemaToken::Fixed); + description.optionalAttributes.insert(XsdSchemaToken::Id); + description.requiredAttributes.insert(XsdSchemaToken::Name); + description.optionalAttributes.insert(XsdSchemaToken::Nillable); + description.optionalAttributes.insert(XsdSchemaToken::SubstitutionGroup); + description.optionalAttributes.insert(XsdSchemaToken::Type); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::Unique]; + //description.tagToken = XsdSchemaToken::Unique; + description.optionalAttributes.insert(XsdSchemaToken::Id); + description.requiredAttributes.insert(XsdSchemaToken::Name); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::Key]; + //description.tagToken = XsdSchemaToken::Key; + description.optionalAttributes.insert(XsdSchemaToken::Id); + description.requiredAttributes.insert(XsdSchemaToken::Name); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::KeyRef]; + //description.tagToken = XsdSchemaToken::Keyref; + description.optionalAttributes.insert(XsdSchemaToken::Id); + description.requiredAttributes.insert(XsdSchemaToken::Name); + description.requiredAttributes.insert(XsdSchemaToken::Refer); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::Selector]; + //description.tagToken = XsdSchemaToken::Selector; + description.optionalAttributes.insert(XsdSchemaToken::Id); + description.requiredAttributes.insert(XsdSchemaToken::Xpath); + description.optionalAttributes.insert(XsdSchemaToken::XPathDefaultNamespace); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::Field]; + //description.tagToken = XsdSchemaToken::Field; + description.optionalAttributes.insert(XsdSchemaToken::Id); + description.requiredAttributes.insert(XsdSchemaToken::Xpath); + description.optionalAttributes.insert(XsdSchemaToken::XPathDefaultNamespace); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::Notation]; + description.optionalAttributes.reserve(4); + //description.tagToken = XsdSchemaToken::Notation; + description.optionalAttributes.insert(XsdSchemaToken::Id); + description.requiredAttributes.insert(XsdSchemaToken::Name); + description.optionalAttributes.insert(XsdSchemaToken::Public); + description.optionalAttributes.insert(XsdSchemaToken::System); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::Any]; + description.optionalAttributes.reserve(7); + //description.tagToken = XsdSchemaToken::Any; + description.optionalAttributes.insert(XsdSchemaToken::Id); + description.optionalAttributes.insert(XsdSchemaToken::MaxOccurs); + description.optionalAttributes.insert(XsdSchemaToken::MinOccurs); + description.optionalAttributes.insert(XsdSchemaToken::Namespace); + description.optionalAttributes.insert(XsdSchemaToken::NotNamespace); + description.optionalAttributes.insert(XsdSchemaToken::NotQName); + description.optionalAttributes.insert(XsdSchemaToken::ProcessContents); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::AnyAttribute]; + description.optionalAttributes.reserve(5); + //description.tagToken = XsdSchemaToken::AnyAttribute; + description.optionalAttributes.insert(XsdSchemaToken::Id); + description.optionalAttributes.insert(XsdSchemaToken::Namespace); + description.optionalAttributes.insert(XsdSchemaToken::NotNamespace); + description.optionalAttributes.insert(XsdSchemaToken::NotQName); + description.optionalAttributes.insert(XsdSchemaToken::ProcessContents); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::Alternative]; + //description.tagToken = XsdSchemaToken::Alternative; + description.optionalAttributes.insert(XsdSchemaToken::Id); + description.optionalAttributes.insert(XsdSchemaToken::Test); + description.optionalAttributes.insert(XsdSchemaToken::Type); + description.optionalAttributes.insert(XsdSchemaToken::XPathDefaultNamespace); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::OpenContent]; + //description.tagToken = XsdSchemaToken::OpenContent; + description.optionalAttributes.insert(XsdSchemaToken::Id); + description.optionalAttributes.insert(XsdSchemaToken::Mode); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::DefaultOpenContent]; + //description.tagToken = XsdSchemaToken::DefaultOpenContent; + description.optionalAttributes.insert(XsdSchemaToken::AppliesToEmpty); + description.optionalAttributes.insert(XsdSchemaToken::Id); + description.optionalAttributes.insert(XsdSchemaToken::Mode); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::Assert]; + //description.tagToken = XsdSchemaToken::Assert; + description.optionalAttributes.insert(XsdSchemaToken::Id); + description.requiredAttributes.insert(XsdSchemaToken::Test); + description.optionalAttributes.insert(XsdSchemaToken::XPathDefaultNamespace); + } + + { + ElementDescription<XsdSchemaToken, XsdTagScope::Type> &description = elementDescriptions[XsdTagScope::Assertion]; + //description.tagToken = XsdSchemaToken::Assertion; + description.optionalAttributes.insert(XsdSchemaToken::Id); + description.requiredAttributes.insert(XsdSchemaToken::Test); + description.optionalAttributes.insert(XsdSchemaToken::XPathDefaultNamespace); + } + + Q_ASSERT_X(elementDescriptions.count() == ReservedForElements, Q_FUNC_INFO, + qPrintable(QString::fromLatin1("Expected is %1, actual is %2.").arg(ReservedForElements).arg(elementDescriptions.count()))); + + return elementDescriptions; +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/schema/qxsdschemaparsercontext_p.h b/src/xmlpatterns/schema/qxsdschemaparsercontext_p.h new file mode 100644 index 0000000..572d5e3 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdschemaparsercontext_p.h @@ -0,0 +1,231 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_XsdSchemaParserContext_H +#define Patternist_XsdSchemaParserContext_H + +#include "qmaintainingreader_p.h" // for definition of ElementDescription +#include "qxsdschematoken_p.h" +#include "qxsdschema_p.h" +#include "qxsdschemachecker_p.h" +#include "qxsdschemacontext_p.h" +#include "qxsdschemaresolver_p.h" + +#include <QtCore/QSharedData> + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +namespace QPatternist +{ + /** + * @short A namespace class that contains identifiers for the different + * scopes a tag from the xml schema spec can appear in. + */ + class XsdTagScope + { + public: + enum Type + { + Schema, + Include, + Import, + Redefine, + Annotation, + AppInfo, + Documentation, + GlobalSimpleType, + LocalSimpleType, + SimpleRestriction, + List, + Union, + MinExclusiveFacet, + MinInclusiveFacet, + MaxExclusiveFacet, + MaxInclusiveFacet, + TotalDigitsFacet, + FractionDigitsFacet, + LengthFacet, + MinLengthFacet, + MaxLengthFacet, + EnumerationFacet, + WhiteSpaceFacet, + PatternFacet, + GlobalComplexType, + LocalComplexType, + SimpleContent, + SimpleContentRestriction, + SimpleContentExtension, + ComplexContent, + ComplexContentRestriction, + ComplexContentExtension, + NamedGroup, + ReferredGroup, + All, + LocalAll, + Choice, + LocalChoice, + Sequence, + LocalSequence, + GlobalAttribute, + LocalAttribute, + NamedAttributeGroup, + ReferredAttributeGroup, + GlobalElement, + LocalElement, + Unique, + Key, + KeyRef, + Selector, + Field, + Notation, + Any, + AnyAttribute, + Alternative, + Assert, + Assertion, + OpenContent, + DefaultOpenContent, + Override + }; + }; + + /** + * A hash that keeps the mapping between the single components that can appear + * in a schema document (e.g. elements, attributes, type definitions) and their + * source locations inside the document. + */ + typedef QHash<NamedSchemaComponent::Ptr, QSourceLocation> ComponentLocationHash; + + /** + * @short A context for schema parsing. + * + * This class provides a context for all components that are + * nedded for parsing and compiling the XML schema. + * + * @ingroup Patternist_schema + * @author Tobias Koenig <tobias.koenig@trolltech.com> + */ + class XsdSchemaParserContext : public QSharedData + { + public: + /** + * A smart pointer wrapping XsdSchemaParserContext instances. + */ + typedef QExplicitlySharedDataPointer<XsdSchemaParserContext> Ptr; + + /** + * Creates a new schema parser context object. + * + * @param namePool The name pool where all names of the schema will be stored in. + * @param context The schema context to use for error reporting etc. + */ + XsdSchemaParserContext(const NamePool::Ptr &namePool, const XsdSchemaContext::Ptr &context); + + /** + * Returns the name pool of the schema parser context. + */ + NamePool::Ptr namePool() const; + + /** + * Returns the schema resolver of the schema context. + */ + XsdSchemaResolver::Ptr resolver() const; + + /** + * Returns the schema resolver of the schema context. + */ + XsdSchemaChecker::Ptr checker() const; + + /** + * Returns the schema object of the schema context. + */ + XsdSchema::Ptr schema() const; + + /** + * Returns the element descriptions for the schema parser. + * + * The element descriptions are a fast lookup table for + * verifying whether certain attributes are allowed for + * a given element type. + */ + ElementDescription<XsdSchemaToken, XsdTagScope::Type>::Hash elementDescriptions() const; + + /** + * Returns an unique name that is used by the schema parser + * for anonymous types. + * + * @param targetNamespace The namespace of the name. + */ + QXmlName createAnonymousName(const QString &targetNamespace) const; + + private: + /** + * Fills the element description hash with the required and prohibited + * attributes. + */ + static ElementDescription<XsdSchemaToken, XsdTagScope::Type>::Hash setupElementDescriptions(); + + NamePool::Ptr m_namePool; + XsdSchema::Ptr m_schema; + XsdSchemaChecker::Ptr m_checker; + XsdSchemaResolver::Ptr m_resolver; + const ElementDescription<XsdSchemaToken, XsdTagScope::Type>::Hash m_elementDescriptions; + mutable QAtomicInt m_anonymousNameCounter; + }; +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/schema/qxsdschemaresolver.cpp b/src/xmlpatterns/schema/qxsdschemaresolver.cpp new file mode 100644 index 0000000..9290b6e --- /dev/null +++ b/src/xmlpatterns/schema/qxsdschemaresolver.cpp @@ -0,0 +1,1736 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxsdschemaresolver_p.h" + +#include "qderivedinteger_p.h" +#include "qderivedstring_p.h" +#include "qqnamevalue_p.h" +#include "qxsdattributereference_p.h" +#include "qxsdparticlechecker_p.h" +#include "qxsdreference_p.h" +#include "qxsdschemacontext_p.h" +#include "qxsdschemahelper_p.h" +#include "qxsdschemaparsercontext_p.h" +#include "qxsdschematypesfactory_p.h" + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +XsdSchemaResolver::XsdSchemaResolver(const QExplicitlySharedDataPointer<XsdSchemaContext> &context, const XsdSchemaParserContext *parserContext) + : m_context(context) + , m_checker(parserContext->checker()) + , m_namePool(parserContext->namePool()) + , m_schema(parserContext->schema()) +{ + m_keyReferences.reserve(20); + m_simpleRestrictionBases.reserve(20); + m_simpleListTypes.reserve(20); + m_simpleUnionTypes.reserve(20); + m_elementTypes.reserve(20); + m_complexBaseTypes.reserve(20); + m_attributeTypes.reserve(20); + m_alternativeTypes.reserve(20); + m_alternativeTypeElements.reserve(20); + m_substitutionGroupAffiliations.reserve(20); + + m_predefinedSchemaTypes = m_context->schemaTypeFactory()->types().values(); +} + +XsdSchemaResolver::~XsdSchemaResolver() +{ +} + +void XsdSchemaResolver::resolve() +{ + m_checker->addComponentLocationHash(m_componentLocationHash); + + // resolve the base types for all types + resolveSimpleRestrictionBaseTypes(); + resolveComplexBaseTypes(); + + // do the basic checks which depend on having a base type available + m_checker->basicCheck(); + + // resolve further types that only map a type name to a type object + resolveSimpleListType(); + resolveSimpleUnionTypes(); + resolveElementTypes(); + resolveAttributeTypes(); + resolveAlternativeTypes(); + + // resolve objects that do not need information about inheritance + resolveKeyReferences(); + resolveSubstitutionGroupAffiliations(); + + // resolve objects that do need information about inheritance + resolveSimpleRestrictions(); + resolveSimpleContentComplexTypes(); + + // resolve objects which replace place holders + resolveTermReferences(); + resolveAttributeTermReferences(); + + // resolve additional objects that do need information about inheritance + resolveAttributeInheritance(); + resolveComplexContentComplexTypes(); + resolveSubstitutionGroups(); + + resolveEnumerationFacetValues(); + + checkRedefinedGroups(); + checkRedefinedAttributeGroups(); + + // check the constraining facets before we resolve them + m_checker->checkConstrainingFacets(); + + // add it again, as we may have added new components in the meantime + m_checker->addComponentLocationHash(m_componentLocationHash); + + m_checker->check(); +} + +void XsdSchemaResolver::addKeyReference(const XsdElement::Ptr &element, const XsdIdentityConstraint::Ptr &keyRef, const QXmlName &reference, const QSourceLocation &location) +{ + KeyReference item; + item.element = element; + item.keyRef = keyRef; + item.reference = reference; + item.location = location; + + m_keyReferences.append(item); +} + +void XsdSchemaResolver::addSimpleRestrictionBase(const XsdSimpleType::Ptr &simpleType, const QXmlName &baseName, const QSourceLocation &location) +{ + SimpleRestrictionBase item; + item.simpleType = simpleType; + item.baseName = baseName; + item.location = location; + + m_simpleRestrictionBases.append(item); +} + +void XsdSchemaResolver::removeSimpleRestrictionBase(const XsdSimpleType::Ptr &type) +{ + for (int i = 0; i < m_simpleRestrictionBases.count(); ++i) { + if (m_simpleRestrictionBases.at(i).simpleType == type) { + m_simpleRestrictionBases.remove(i); + break; + } + } +} + +void XsdSchemaResolver::addSimpleListType(const XsdSimpleType::Ptr &simpleType, const QXmlName &typeName, const QSourceLocation &location) +{ + SimpleListType item; + item.simpleType = simpleType; + item.typeName = typeName; + item.location = location; + + m_simpleListTypes.append(item); +} + +void XsdSchemaResolver::addSimpleUnionTypes(const XsdSimpleType::Ptr &simpleType, const QList<QXmlName> &typeNames, const QSourceLocation &location) +{ + SimpleUnionType item; + item.simpleType = simpleType; + item.typeNames = typeNames; + item.location = location; + + m_simpleUnionTypes.append(item); +} + +void XsdSchemaResolver::addElementType(const XsdElement::Ptr &element, const QXmlName &typeName, const QSourceLocation &location) +{ + ElementType item; + item.element = element; + item.typeName = typeName; + item.location = location; + + m_elementTypes.append(item); +} + +void XsdSchemaResolver::addComplexBaseType(const XsdComplexType::Ptr &complexType, const QXmlName &baseName, const QSourceLocation &location, const XsdFacet::Hash &facets) +{ + ComplexBaseType item; + item.complexType = complexType; + item.baseName = baseName; + item.location = location; + item.facets = facets; + + m_complexBaseTypes.append(item); +} + +void XsdSchemaResolver::removeComplexBaseType(const XsdComplexType::Ptr &type) +{ + for (int i = 0; i < m_complexBaseTypes.count(); ++i) { + if (m_complexBaseTypes.at(i).complexType == type) { + m_complexBaseTypes.remove(i); + break; + } + } +} + +void XsdSchemaResolver::addComplexContentType(const XsdComplexType::Ptr &complexType, const XsdParticle::Ptr &content, bool mixed) +{ + ComplexContentType item; + item.complexType = complexType; + item.explicitContent = content; + item.effectiveMixed = mixed; + m_complexContentTypes.append(item); +} + +void XsdSchemaResolver::addAttributeType(const XsdAttribute::Ptr &attribute, const QXmlName &typeName, const QSourceLocation &location) +{ + AttributeType item; + item.attribute = attribute; + item.typeName = typeName; + item.location = location; + + m_attributeTypes.append(item); +} + +void XsdSchemaResolver::addAlternativeType(const XsdAlternative::Ptr &alternative, const QXmlName &typeName, const QSourceLocation &location) +{ + AlternativeType item; + item.alternative = alternative; + item.typeName = typeName; + item.location = location; + + m_alternativeTypes.append(item); +} + +void XsdSchemaResolver::addAlternativeType(const XsdAlternative::Ptr &alternative, const XsdElement::Ptr &element) +{ + AlternativeTypeElement item; + item.alternative = alternative; + item.element = element; + + m_alternativeTypeElements.append(item); +} + +void XsdSchemaResolver::addSubstitutionGroupAffiliation(const XsdElement::Ptr &element, const QList<QXmlName> &elementNames, const QSourceLocation &location) +{ + SubstitutionGroupAffiliation item; + item.element = element; + item.elementNames = elementNames; + item.location = location; + + m_substitutionGroupAffiliations.append(item); +} + +void XsdSchemaResolver::addSubstitutionGroupType(const XsdElement::Ptr &element) +{ + m_substitutionGroupTypes.append(element); +} + +void XsdSchemaResolver::addComponentLocationHash(const ComponentLocationHash &hash) +{ + m_componentLocationHash.unite(hash); +} + +void XsdSchemaResolver::addEnumerationFacetValue(const AtomicValue::Ptr &facetValue, const NamespaceSupport &namespaceSupport) +{ + m_enumerationFacetValues.insert(facetValue, namespaceSupport); +} + +void XsdSchemaResolver::addRedefinedGroups(const XsdModelGroup::Ptr &redefinedGroup, const XsdModelGroup::Ptr &group) +{ + RedefinedGroups item; + item.redefinedGroup = redefinedGroup; + item.group = group; + + m_redefinedGroups.append(item); +} + +void XsdSchemaResolver::addRedefinedAttributeGroups(const XsdAttributeGroup::Ptr &redefinedGroup, const XsdAttributeGroup::Ptr &group) +{ + RedefinedAttributeGroups item; + item.redefinedGroup = redefinedGroup; + item.group = group; + + m_redefinedAttributeGroups.append(item); +} + +void XsdSchemaResolver::addAllGroupCheck(const XsdReference::Ptr &reference) +{ + m_allGroups.insert(reference); +} + +void XsdSchemaResolver::copyDataTo(const XsdSchemaResolver::Ptr &other) const +{ + other->m_keyReferences << m_keyReferences; + other->m_simpleRestrictionBases << m_simpleRestrictionBases; + other->m_simpleListTypes << m_simpleListTypes; + other->m_simpleUnionTypes << m_simpleUnionTypes; + other->m_elementTypes << m_elementTypes; + other->m_complexBaseTypes << m_complexBaseTypes; + other->m_complexContentTypes << m_complexContentTypes; + other->m_attributeTypes << m_attributeTypes; + other->m_alternativeTypes << m_alternativeTypes; + other->m_alternativeTypeElements << m_alternativeTypeElements; + other->m_substitutionGroupAffiliations << m_substitutionGroupAffiliations; + other->m_substitutionGroupTypes << m_substitutionGroupTypes; +} + +QXmlName XsdSchemaResolver::baseTypeNameOfType(const SchemaType::Ptr &type) const +{ + for (int i = 0; i < m_simpleRestrictionBases.count(); ++i) { + if (m_simpleRestrictionBases.at(i).simpleType == type) + return m_simpleRestrictionBases.at(i).baseName; + } + + for (int i = 0; i < m_complexBaseTypes.count(); ++i) { + if (m_complexBaseTypes.at(i).complexType == type) + return m_complexBaseTypes.at(i).baseName; + } + + return QXmlName(); +} + +QXmlName XsdSchemaResolver::typeNameOfAttribute(const XsdAttribute::Ptr &attribute) const +{ + for (int i = 0; i < m_attributeTypes.count(); ++i) { + if (m_attributeTypes.at(i).attribute == attribute) + return m_attributeTypes.at(i).typeName; + } + + return QXmlName(); +} + +void XsdSchemaResolver::setDefaultOpenContent(const XsdComplexType::OpenContent::Ptr &openContent, bool appliesToEmpty) +{ + m_defaultOpenContent = openContent; + m_defaultOpenContentAppliesToEmpty = appliesToEmpty; +} + +void XsdSchemaResolver::resolveKeyReferences() +{ + for (int i = 0; i < m_keyReferences.count(); ++i) { + const KeyReference ref = m_keyReferences.at(i); + + const XsdIdentityConstraint::Ptr constraint = m_schema->identityConstraint(ref.reference); + if (!constraint) { + m_context->error(QtXmlPatterns::tr("%1 references unknown %2 or %3 element %4") + .arg(formatKeyword(ref.keyRef->displayName(m_namePool))) + .arg(formatElement("key")) + .arg(formatElement("unique")) + .arg(formatKeyword(m_namePool, ref.reference)), + XsdSchemaContext::XSDError, ref.location); + return; + } + + if (constraint->category() != XsdIdentityConstraint::Key && constraint->category() != XsdIdentityConstraint::Unique) { // only key and unique can be referenced + m_context->error(QtXmlPatterns::tr("%1 references identity constraint %2 that is no %3 or %4 element") + .arg(formatKeyword(ref.keyRef->displayName(m_namePool))) + .arg(formatKeyword(m_namePool, ref.reference)) + .arg(formatElement("key")) + .arg(formatElement("unique")), + XsdSchemaContext::XSDError, ref.location); + return; + } + + if (constraint->fields().count() != ref.keyRef->fields().count()) { + m_context->error(QtXmlPatterns::tr("%1 has a different number of fields from the identity constraint %2 that it references") + .arg(formatKeyword(ref.keyRef->displayName(m_namePool))) + .arg(formatKeyword(m_namePool, ref.reference)), + XsdSchemaContext::XSDError, ref.location); + return; + } + + ref.keyRef->setReferencedKey(constraint); + } +} + +void XsdSchemaResolver::resolveSimpleRestrictionBaseTypes() +{ + // iterate over all simple types that are derived by restriction + for (int i = 0; i < m_simpleRestrictionBases.count(); ++i) { + const SimpleRestrictionBase item = m_simpleRestrictionBases.at(i); + + // find the base type + SchemaType::Ptr type = m_schema->type(item.baseName); + if (!type) { + // maybe it's a basic type... + type = m_context->schemaTypeFactory()->createSchemaType(item.baseName); + if (!type) { + m_context->error(QtXmlPatterns::tr("base type %1 of %2 element cannot be resolved") + .arg(formatType(m_namePool, item.baseName)) + .arg(formatElement("restriction")), + XsdSchemaContext::XSDError, item.location); + return; + } + } + + item.simpleType->setWxsSuperType(type); + } +} + +void XsdSchemaResolver::resolveSimpleRestrictions() +{ + XsdSimpleType::List simpleTypes; + + // first collect the global simple types + const SchemaType::List types = m_schema->types(); + for (int i = 0; i < types.count(); ++i) { + if (types.at(i)->isSimpleType() && (types.at(i)->derivationMethod() == SchemaType::DerivationRestriction)) + simpleTypes.append(types.at(i)); + } + + // then collect all anonymous simple types + const SchemaType::List anonymousTypes = m_schema->anonymousTypes(); + for (int i = 0; i < anonymousTypes.count(); ++i) { + if (anonymousTypes.at(i)->isSimpleType() && (anonymousTypes.at(i)->derivationMethod() == SchemaType::DerivationRestriction)) + simpleTypes.append(anonymousTypes.at(i)); + } + + QSet<XsdSimpleType::Ptr> visitedTypes; + for (int i = 0; i < simpleTypes.count(); ++i) { + resolveSimpleRestrictions(simpleTypes.at(i), visitedTypes); + } +} + +void XsdSchemaResolver::resolveSimpleRestrictions(const XsdSimpleType::Ptr &simpleType, QSet<XsdSimpleType::Ptr> &visitedTypes) +{ + if (visitedTypes.contains(simpleType)) + return; + else + visitedTypes.insert(simpleType); + + if (simpleType->derivationMethod() != XsdSimpleType::DerivationRestriction) + return; + + // as xs:NMTOKENS, xs:ENTITIES and xs:IDREFS are provided by our XsdSchemaTypesFactory, they are + // setup correctly already and shouldn't be handled here + if (m_predefinedSchemaTypes.contains(simpleType)) + return; + + const SchemaType::Ptr baseType = simpleType->wxsSuperType(); + Q_ASSERT(baseType); + + if (baseType->isDefinedBySchema()) + resolveSimpleRestrictions(XsdSimpleType::Ptr(baseType), visitedTypes); + + simpleType->setCategory(baseType->category()); + + if (simpleType->category() == XsdSimpleType::SimpleTypeAtomic) { + QSet<AnySimpleType::Ptr> visitedPrimitiveTypes; + const AnySimpleType::Ptr primitiveType = findPrimitiveType(baseType, visitedPrimitiveTypes); + simpleType->setPrimitiveType(primitiveType); + } else if (simpleType->category() == XsdSimpleType::SimpleTypeList) { + const XsdSimpleType::Ptr simpleBaseType = baseType; + simpleType->setItemType(simpleBaseType->itemType()); + } else if (simpleType->category() == XsdSimpleType::SimpleTypeUnion) { + const XsdSimpleType::Ptr simpleBaseType = baseType; + simpleType->setMemberTypes(simpleBaseType->memberTypes()); + } +} + +void XsdSchemaResolver::resolveSimpleListType() +{ + // iterate over all simple types where the item type shall be resolved + for (int i = 0; i < m_simpleListTypes.count(); ++i) { + const SimpleListType item = m_simpleListTypes.at(i); + + // try to resolve the name + SchemaType::Ptr type = m_schema->type(item.typeName); + if (!type) { + // maybe it's a basic type... + type = m_context->schemaTypeFactory()->createSchemaType(item.typeName); + if (!type) { + m_context->error(QtXmlPatterns::tr("item type %1 of %2 element cannot be resolved") + .arg(formatType(m_namePool, item.typeName)) + .arg(formatElement("list")), + XsdSchemaContext::XSDError, item.location); + return; + } + } + + item.simpleType->setItemType(type); + } +} + +void XsdSchemaResolver::resolveSimpleUnionTypes() +{ + // iterate over all simple types where the union member types shall be resolved + for (int i = 0; i < m_simpleUnionTypes.count(); ++i) { + const SimpleUnionType item = m_simpleUnionTypes.at(i); + + AnySimpleType::List memberTypes; + + // iterate over all union member type names + const QList<QXmlName> typeNames = item.typeNames; + for (int j = 0; j < typeNames.count(); ++j) { + const QXmlName typeName = typeNames.at(j); + + // try to resolve the name + SchemaType::Ptr type = m_schema->type(typeName); + if (!type) { + // maybe it's a basic type... + type = m_context->schemaTypeFactory()->createSchemaType(typeName); + if (!type) { + m_context->error(QtXmlPatterns::tr("member type %1 of %2 element cannot be resolved") + .arg(formatType(m_namePool, typeName)) + .arg(formatElement("union")), + XsdSchemaContext::XSDError, item.location); + return; + } + } + + memberTypes.append(type); + } + + // append the types that have been defined as <simpleType> children + memberTypes << item.simpleType->memberTypes(); + + item.simpleType->setMemberTypes(memberTypes); + } +} + +void XsdSchemaResolver::resolveElementTypes() +{ + for (int i = 0; i < m_elementTypes.count(); ++i) { + const ElementType item = m_elementTypes.at(i); + + SchemaType::Ptr type = m_schema->type(item.typeName); + if (!type) { + // maybe it's a basic type... + type = m_context->schemaTypeFactory()->createSchemaType(item.typeName); + if (!type) { + m_context->error(QtXmlPatterns::tr("type %1 of %2 element cannot be resolved") + .arg(formatType(m_namePool, item.typeName)) + .arg(formatElement("element")), + XsdSchemaContext::XSDError, item.location); + return; + } + } + + item.element->setType(type); + } +} + +void XsdSchemaResolver::resolveComplexBaseTypes() +{ + for (int i = 0; i < m_complexBaseTypes.count(); ++i) { + const ComplexBaseType item = m_complexBaseTypes.at(i); + + SchemaType::Ptr type = m_schema->type(item.baseName); + if (!type) { + // maybe it's a basic type... + type = m_context->schemaTypeFactory()->createSchemaType(item.baseName); + if (!type) { + m_context->error(QtXmlPatterns::tr("base type %1 of complex type cannot be resolved").arg(formatType(m_namePool, item.baseName)), XsdSchemaContext::XSDError, item.location); + return; + } + } + + if (item.complexType->contentType()->variety() == XsdComplexType::ContentType::Simple) { + if (type->isComplexType() && type->isDefinedBySchema()) { + const XsdComplexType::Ptr baseType = type; + if (baseType->contentType()->variety() != XsdComplexType::ContentType::Simple) { + m_context->error(QtXmlPatterns::tr("%1 cannot have complex base type that has a %2") + .arg(formatElement("simpleContent")) + .arg(formatElement("complexContent")), + XsdSchemaContext::XSDError, item.location); + return; + } + } + } + + item.complexType->setWxsSuperType(type); + } +} + +void XsdSchemaResolver::resolveSimpleContentComplexTypes() +{ + XsdComplexType::List complexTypes; + + // first collect the global complex types + const SchemaType::List types = m_schema->types(); + for (int i = 0; i < types.count(); ++i) { + if (types.at(i)->isComplexType() && types.at(i)->isDefinedBySchema()) + complexTypes.append(types.at(i)); + } + + // then collect all anonymous simple types + const SchemaType::List anonymousTypes = m_schema->anonymousTypes(); + for (int i = 0; i < anonymousTypes.count(); ++i) { + if (anonymousTypes.at(i)->isComplexType() && anonymousTypes.at(i)->isDefinedBySchema()) + complexTypes.append(anonymousTypes.at(i)); + } + + QSet<XsdComplexType::Ptr> visitedTypes; + for (int i = 0; i < complexTypes.count(); ++i) { + if (XsdComplexType::Ptr(complexTypes.at(i))->contentType()->variety() == XsdComplexType::ContentType::Simple) + resolveSimpleContentComplexTypes(complexTypes.at(i), visitedTypes); + } +} + +void XsdSchemaResolver::resolveSimpleContentComplexTypes(const XsdComplexType::Ptr &complexType, QSet<XsdComplexType::Ptr> &visitedTypes) +{ + if (visitedTypes.contains(complexType)) + return; + else + visitedTypes.insert(complexType); + + const SchemaType::Ptr baseType = complexType->wxsSuperType(); + + // at this point simple types have been resolved already, so we care about + // complex types here only + + // http://www.w3.org/TR/xmlschema11-1/#dcl.ctd.ctsc + // 1 + if (baseType->isComplexType() && baseType->isDefinedBySchema()) { + const XsdComplexType::Ptr complexBaseType = baseType; + + resolveSimpleContentComplexTypes(complexBaseType, visitedTypes); + + if (complexBaseType->contentType()->variety() == XsdComplexType::ContentType::Simple) { + if (complexType->derivationMethod() == XsdComplexType::DerivationRestriction) { + if (complexType->contentType()->simpleType()) { + // 1.1 contains the content of the <simpleType> already + } else { + // 1.2 + const XsdSimpleType::Ptr anonType(new XsdSimpleType()); + anonType->setCategory(complexBaseType->contentType()->simpleType()->category()); + anonType->setDerivationMethod(XsdSimpleType::DerivationRestriction); + anonType->setWxsSuperType(complexBaseType->contentType()->simpleType()); + anonType->setFacets(complexTypeFacets(complexType)); + + QSet<AnySimpleType::Ptr> visitedPrimitiveTypes; + const AnySimpleType::Ptr primitiveType = findPrimitiveType(anonType->wxsSuperType(), visitedPrimitiveTypes); + anonType->setPrimitiveType(primitiveType); + + complexType->contentType()->setSimpleType(anonType); + + m_schema->addAnonymousType(anonType); + m_componentLocationHash.insert(anonType, m_componentLocationHash.value(complexType)); + } + } else if (complexBaseType->derivationMethod() == XsdComplexType::DerivationExtension) { // 3 + complexType->contentType()->setSimpleType(complexBaseType->contentType()->simpleType()); + } + } else if (complexBaseType->contentType()->variety() == XsdComplexType::ContentType::Mixed && + complexType->derivationMethod() == XsdComplexType::DerivationRestriction && + XsdSchemaHelper::isParticleEmptiable(complexBaseType->contentType()->particle())) { // 2 + // simple type was already set in parser + + const XsdSimpleType::Ptr anonType(new XsdSimpleType()); + anonType->setCategory(complexType->contentType()->simpleType()->category()); + anonType->setDerivationMethod(XsdSimpleType::DerivationRestriction); + anonType->setWxsSuperType(complexType->contentType()->simpleType()); + anonType->setFacets(complexTypeFacets(complexType)); + + QSet<AnySimpleType::Ptr> visitedPrimitiveTypes; + const AnySimpleType::Ptr primitiveType = findPrimitiveType(anonType->wxsSuperType(), visitedPrimitiveTypes); + anonType->setPrimitiveType(primitiveType); + + complexType->contentType()->setSimpleType(anonType); + + m_schema->addAnonymousType(anonType); + m_componentLocationHash.insert(anonType, m_componentLocationHash.value(complexType)); + } else { + complexType->contentType()->setSimpleType(BuiltinTypes::xsAnySimpleType); + } + } else if (baseType->isSimpleType()) { // 4 + complexType->contentType()->setSimpleType(baseType); + } else { // 5 + complexType->contentType()->setSimpleType(BuiltinTypes::xsAnySimpleType); + } +} + +void XsdSchemaResolver::resolveComplexContentComplexTypes() +{ + XsdComplexType::List complexTypes; + + // first collect the global complex types + const SchemaType::List types = m_schema->types(); + for (int i = 0; i < types.count(); ++i) { + if (types.at(i)->isComplexType() && types.at(i)->isDefinedBySchema()) + complexTypes.append(types.at(i)); + } + + // then collect all anonymous simple types + const SchemaType::List anonymousTypes = m_schema->anonymousTypes(); + for (int i = 0; i < anonymousTypes.count(); ++i) { + if (anonymousTypes.at(i)->isComplexType() && anonymousTypes.at(i)->isDefinedBySchema()) + complexTypes.append(anonymousTypes.at(i)); + } + + QSet<XsdComplexType::Ptr> visitedTypes; + for (int i = 0; i < complexTypes.count(); ++i) { + if (XsdComplexType::Ptr(complexTypes.at(i))->contentType()->variety() != XsdComplexType::ContentType::Simple) + resolveComplexContentComplexTypes(complexTypes.at(i), visitedTypes); + } +} + +void XsdSchemaResolver::resolveComplexContentComplexTypes(const XsdComplexType::Ptr &complexType, QSet<XsdComplexType::Ptr> &visitedTypes) +{ + if (visitedTypes.contains(complexType)) + return; + else + visitedTypes.insert(complexType); + + ComplexContentType item; + bool foundCorrespondingItem = false; + for (int i = 0; i < m_complexContentTypes.count(); ++i) { + if (m_complexContentTypes.at(i).complexType == complexType) { + item = m_complexContentTypes.at(i); + foundCorrespondingItem = true; + break; + } + } + + if (!foundCorrespondingItem) + return; + + const SchemaType::Ptr baseType = complexType->wxsSuperType(); + + // at this point simple types have been resolved already, so we care about + // complex types here only + if (baseType->isComplexType() && baseType->isDefinedBySchema()) + resolveComplexContentComplexTypes(XsdComplexType::Ptr(baseType), visitedTypes); + + + // @see http://www.w3.org/TR/xmlschema11-1/#dcl.ctd.ctcc.common + + // 3 + XsdParticle::Ptr effectiveContent; + if (!item.explicitContent) { // 3.1 + if (item.effectiveMixed == true) { // 3.1.1 + const XsdParticle::Ptr particle(new XsdParticle()); + particle->setMinimumOccurs(1); + particle->setMaximumOccurs(1); + particle->setMaximumOccursUnbounded(false); + + const XsdModelGroup::Ptr sequence(new XsdModelGroup()); + sequence->setCompositor(XsdModelGroup::SequenceCompositor); + particle->setTerm(sequence); + + effectiveContent = particle; + } else { // 3.1.2 + effectiveContent = XsdParticle::Ptr(); + } + } else { // 3.2 + effectiveContent = item.explicitContent; + } + + // 4 + XsdComplexType::ContentType::Ptr explicitContentType(new XsdComplexType::ContentType()); + if (item.complexType->derivationMethod() == XsdComplexType::DerivationRestriction) { // 4.1 + if (!effectiveContent) { // 4.1.1 + explicitContentType->setVariety(XsdComplexType::ContentType::Empty); + } else { // 4.1.2 + if (item.effectiveMixed == true) + explicitContentType->setVariety(XsdComplexType::ContentType::Mixed); + else + explicitContentType->setVariety(XsdComplexType::ContentType::ElementOnly); + + explicitContentType->setParticle(effectiveContent); + } + } else if (item.complexType->derivationMethod() == XsdComplexType::DerivationExtension) { // 4.2 + const SchemaType::Ptr baseType = item.complexType->wxsSuperType(); + if (baseType->isSimpleType() || (baseType->isComplexType() && baseType->isDefinedBySchema() && (XsdComplexType::Ptr(baseType)->contentType()->variety() == XsdComplexType::ContentType::Empty || + XsdComplexType::Ptr(baseType)->contentType()->variety() == XsdComplexType::ContentType::Simple))) { // 4.2.1 + if (!effectiveContent) { + explicitContentType->setVariety(XsdComplexType::ContentType::Empty); + } else { + if (item.effectiveMixed == true) + explicitContentType->setVariety(XsdComplexType::ContentType::Mixed); + else + explicitContentType->setVariety(XsdComplexType::ContentType::ElementOnly); + + explicitContentType->setParticle(effectiveContent); + } + } else if (baseType->isComplexType() && baseType->isDefinedBySchema() && (XsdComplexType::Ptr(baseType)->contentType()->variety() == XsdComplexType::ContentType::ElementOnly || + XsdComplexType::Ptr(baseType)->contentType()->variety() == XsdComplexType::ContentType::Mixed) && !effectiveContent) { // 4.2.2 + const XsdComplexType::Ptr complexBaseType(baseType); + + explicitContentType = complexBaseType->contentType(); + } else { // 4.2.3 + explicitContentType->setVariety(item.effectiveMixed ? XsdComplexType::ContentType::Mixed : XsdComplexType::ContentType::ElementOnly); + + XsdParticle::Ptr baseParticle; + if (baseType == BuiltinTypes::xsAnyType) { + // we need a workaround here, since the xsAnyType is no real (aka XsdComplexType) complex type... + + baseParticle = XsdParticle::Ptr(new XsdParticle()); + baseParticle->setMinimumOccurs(1); + baseParticle->setMaximumOccurs(1); + baseParticle->setMaximumOccursUnbounded(false); + + const XsdModelGroup::Ptr group(new XsdModelGroup()); + group->setCompositor(XsdModelGroup::SequenceCompositor); + + const XsdParticle::Ptr particle(new XsdParticle()); + particle->setMinimumOccurs(0); + particle->setMaximumOccursUnbounded(true); + + const XsdWildcard::Ptr wildcard(new XsdWildcard()); + wildcard->namespaceConstraint()->setVariety(XsdWildcard::NamespaceConstraint::Any); + wildcard->setProcessContents(XsdWildcard::Lax); + + particle->setTerm(wildcard); + XsdParticle::List particles; + particles.append(particle); + group->setParticles(particles); + baseParticle->setTerm(group); + } else { + const XsdComplexType::Ptr complexBaseType(baseType); + baseParticle = complexBaseType->contentType()->particle(); + } + if (baseParticle && baseParticle->term()->isModelGroup() && (XsdModelGroup::Ptr(baseParticle->term())->compositor() == XsdModelGroup::AllCompositor) && + (!item.explicitContent)) { // 4.2.3.1 + + explicitContentType->setParticle(baseParticle); + } else if (baseParticle && baseParticle->term()->isModelGroup() && (XsdModelGroup::Ptr(baseParticle->term())->compositor() == XsdModelGroup::AllCompositor) && + (effectiveContent->term()->isModelGroup() && (XsdModelGroup::Ptr(effectiveContent->term())->compositor() == XsdModelGroup::AllCompositor))) { // 4.2.3.2 + const XsdParticle::Ptr particle(new XsdParticle()); + particle->setMinimumOccurs(effectiveContent->minimumOccurs()); + particle->setMaximumOccurs(1); + particle->setMaximumOccursUnbounded(false); + + const XsdModelGroup::Ptr group(new XsdModelGroup()); + group->setCompositor(XsdModelGroup::AllCompositor); + XsdParticle::List particles = XsdModelGroup::Ptr(baseParticle->term())->particles(); + particles << XsdModelGroup::Ptr(effectiveContent->term())->particles(); + group->setParticles(particles); + particle->setTerm(group); + + explicitContentType->setParticle(particle); + } else { // 4.2.3.3 + const XsdParticle::Ptr particle(new XsdParticle()); + particle->setMinimumOccurs(1); + particle->setMaximumOccurs(1); + particle->setMaximumOccursUnbounded(false); + + const XsdModelGroup::Ptr group(new XsdModelGroup()); + group->setCompositor(XsdModelGroup::SequenceCompositor); + + if (effectiveContent && effectiveContent->term()->isModelGroup() && XsdModelGroup::Ptr(effectiveContent->term())->compositor() == XsdModelGroup::AllCompositor) { + m_context->error(QtXmlPatterns::tr("content model of complex type %1 contains %2 element so it cannot be derived by extension from a non-empty type") + .arg(formatType(m_namePool, complexType)).arg(formatKeyword("all")), XsdSchemaContext::XSDError, sourceLocation(complexType)); + return; + } + + if (baseParticle && baseParticle->term()->isModelGroup() && XsdModelGroup::Ptr(baseParticle->term())->compositor() == XsdModelGroup::AllCompositor) { + m_context->error(QtXmlPatterns::tr("complex type %1 cannot be derived by extension from %2 as the latter contains %3 element in its content model") + .arg(formatType(m_namePool, complexType)) + .arg(formatType(m_namePool, baseType)) + .arg(formatKeyword("all")), XsdSchemaContext::XSDError, sourceLocation(complexType)); + return; + } + + XsdParticle::List particles; + if (baseParticle) + particles << baseParticle; + if (effectiveContent) + particles << effectiveContent; + group->setParticles(particles); + particle->setTerm(group); + + explicitContentType->setParticle(particle); + } + + if (baseType->isDefinedBySchema()) { // xs:anyType has no open content + const XsdComplexType::Ptr complexBaseType(baseType); + explicitContentType->setOpenContent(complexBaseType->contentType()->openContent()); + } + } + } + + // 5 + XsdComplexType::OpenContent::Ptr wildcardElement; + if (item.complexType->contentType()->openContent()) { // 5.1 + wildcardElement = item.complexType->contentType()->openContent(); + } else { + if (m_defaultOpenContent) { // 5.2 + if ((explicitContentType->variety() != XsdComplexType::ContentType::Empty) || // 5.2.1 + (explicitContentType->variety() == XsdComplexType::ContentType::Empty && m_defaultOpenContentAppliesToEmpty)) { // 5.2.2 + wildcardElement = m_defaultOpenContent; + } + } + } + + // 6 + if (!wildcardElement) { // 6.1 + item.complexType->setContentType(explicitContentType); + } else { + if (wildcardElement->mode() == XsdComplexType::OpenContent::None) { // 6.2 + const XsdComplexType::ContentType::Ptr contentType(new XsdComplexType::ContentType()); + contentType->setVariety(explicitContentType->variety()); + contentType->setParticle(explicitContentType->particle()); + + item.complexType->setContentType(contentType); + } else { // 6.3 + const XsdComplexType::ContentType::Ptr contentType(new XsdComplexType::ContentType()); + + if (explicitContentType->variety() == XsdComplexType::ContentType::Empty) + contentType->setVariety(XsdComplexType::ContentType::ElementOnly); + else + contentType->setVariety(explicitContentType->variety()); + + if (explicitContentType->variety() == XsdComplexType::ContentType::Empty) { + const XsdParticle::Ptr particle(new XsdParticle()); + particle->setMinimumOccurs(1); + particle->setMaximumOccurs(1); + const XsdModelGroup::Ptr sequence(new XsdModelGroup()); + sequence->setCompositor(XsdModelGroup::SequenceCompositor); + particle->setTerm(sequence); + contentType->setParticle(particle); + } else { + contentType->setParticle(explicitContentType->particle()); + } + + const XsdComplexType::OpenContent::Ptr openContent(new XsdComplexType::OpenContent()); + if (wildcardElement) + openContent->setMode(wildcardElement->mode()); + else + openContent->setMode(XsdComplexType::OpenContent::Interleave); + + if (wildcardElement) + openContent->setWildcard(wildcardElement->wildcard()); + + item.complexType->setContentType(contentType); + } + } +} + +void XsdSchemaResolver::resolveAttributeTypes() +{ + for (int i = 0; i < m_attributeTypes.count(); ++i) { + const AttributeType item = m_attributeTypes.at(i); + + SchemaType::Ptr type = m_schema->type(item.typeName); + if (!type) { + // maybe it's a basic type... + type = m_context->schemaTypeFactory()->createSchemaType(item.typeName); + if (!type) { + m_context->error(QtXmlPatterns::tr("type %1 of %2 element cannot be resolved") + .arg(formatType(m_namePool, item.typeName)) + .arg(formatElement("attribute")), + XsdSchemaContext::XSDError, item.location); + return; + } + } + + if (!type->isSimpleType() && type->category() != SchemaType::None) { + m_context->error(QtXmlPatterns::tr("type of %1 element must be a simple type, %2 is not") + .arg(formatElement("attribute")) + .arg(formatType(m_namePool, item.typeName)), + XsdSchemaContext::XSDError, item.location); + return; + } + + item.attribute->setType(type); + } +} + +void XsdSchemaResolver::resolveAlternativeTypes() +{ + for (int i = 0; i < m_alternativeTypes.count(); ++i) { + const AlternativeType item = m_alternativeTypes.at(i); + + SchemaType::Ptr type = m_schema->type(item.typeName); + if (!type) { + // maybe it's a basic type... + type = m_context->schemaTypeFactory()->createSchemaType(item.typeName); + if (!type) { + m_context->error(QtXmlPatterns::tr("type %1 of %2 element cannot be resolved") + .arg(formatType(m_namePool, item.typeName)) + .arg(formatElement("alternative")), + XsdSchemaContext::XSDError, item.location); + return; + } + } + + item.alternative->setType(type); + } + + for (int i = 0; i < m_alternativeTypeElements.count(); ++i) { + const AlternativeTypeElement item = m_alternativeTypeElements.at(i); + item.alternative->setType(item.element->type()); + } +} + +bool hasCircularSubstitutionGroup(const XsdElement::Ptr ¤t, const XsdElement::Ptr &head, const NamePool::Ptr &namePool) +{ + if (current == head) + return true; + else { + const XsdElement::List elements = current->substitutionGroupAffiliations(); + for (int i = 0; i < elements.count(); ++i) { + if (hasCircularSubstitutionGroup(elements.at(i), head, namePool)) + return true; + } + } + + return false; +} + +void XsdSchemaResolver::resolveSubstitutionGroupAffiliations() +{ + for (int i = 0; i < m_substitutionGroupAffiliations.count(); ++i) { + const SubstitutionGroupAffiliation item = m_substitutionGroupAffiliations.at(i); + + XsdElement::List affiliations; + for (int j = 0; j < item.elementNames.count(); ++j) { + const XsdElement::Ptr element = m_schema->element(item.elementNames.at(j)); + if (!element) { + m_context->error(QtXmlPatterns::tr("substitution group %1 of %2 element cannot be resolved") + .arg(formatKeyword(m_namePool, item.elementNames.at(j))) + .arg(formatElement("element")), + XsdSchemaContext::XSDError, item.location); + return; + } + + // @see http://www.w3.org/TR/xmlschema11-1/#e-props-correct 5) + if (hasCircularSubstitutionGroup(element, item.element, m_namePool)) { + m_context->error(QtXmlPatterns::tr("substitution group %1 has circular definition").arg(formatKeyword(m_namePool, item.elementNames.at(j))), XsdSchemaContext::XSDError, item.location); + return; + } + + affiliations.append(element); + } + + item.element->setSubstitutionGroupAffiliations(affiliations); + } + + for (int i = 0; i < m_substitutionGroupTypes.count(); ++i) { + const XsdElement::Ptr element = m_substitutionGroupTypes.at(i); + element->setType(element->substitutionGroupAffiliations().first()->type()); + } +} + +bool isSubstGroupHeadOf(const XsdElement::Ptr &head, const XsdElement::Ptr &element, const NamePool::Ptr &namePool) +{ + if (head->name(namePool) == element->name(namePool)) + return true; + + const XsdElement::List affiliations = element->substitutionGroupAffiliations(); + for (int i = 0; i < affiliations.count(); ++i) { + if (isSubstGroupHeadOf(head, affiliations.at(i), namePool)) + return true; + } + + return false; +} + +void XsdSchemaResolver::resolveSubstitutionGroups() +{ + const XsdElement::List elements = m_schema->elements(); + for (int i = 0; i < elements.count(); ++i) { + const XsdElement::Ptr element = elements.at(i); + + // the element is always itself in the substitution group + element->addSubstitutionGroup(element); + + for (int j = 0; j < elements.count(); ++j) { + if (i == j) + continue; + + if (isSubstGroupHeadOf(element, elements.at(j), m_namePool)) + element->addSubstitutionGroup(elements.at(j)); + } + } +} + +void XsdSchemaResolver::resolveTermReferences() +{ + // first the global complex types + const SchemaType::List types = m_schema->types(); + for (int i = 0; i < types.count(); ++i) { + if (!(types.at(i)->isComplexType()) || !types.at(i)->isDefinedBySchema()) + continue; + + const XsdComplexType::Ptr complexType = types.at(i); + if (complexType->contentType()->variety() != XsdComplexType::ContentType::ElementOnly && complexType->contentType()->variety() != XsdComplexType::ContentType::Mixed) + continue; + + resolveTermReference(complexType->contentType()->particle(), QSet<QXmlName>()); + } + + // then all anonymous complex types + const SchemaType::List anonymousTypes = m_schema->anonymousTypes(); + for (int i = 0; i < anonymousTypes.count(); ++i) { + if (!(anonymousTypes.at(i)->isComplexType()) || !anonymousTypes.at(i)->isDefinedBySchema()) + continue; + + const XsdComplexType::Ptr complexType = anonymousTypes.at(i); + if (complexType->contentType()->variety() != XsdComplexType::ContentType::ElementOnly && complexType->contentType()->variety() != XsdComplexType::ContentType::Mixed) + continue; + + resolveTermReference(complexType->contentType()->particle(), QSet<QXmlName>()); + } + + const XsdModelGroup::List groups = m_schema->elementGroups(); + for (int i = 0; i < groups.count(); ++i) { + const XsdParticle::Ptr particle(new XsdParticle()); + particle->setTerm(groups.at(i)); + resolveTermReference(particle, QSet<QXmlName>()); + } +} + +void XsdSchemaResolver::resolveTermReference(const XsdParticle::Ptr &particle, QSet<QXmlName> visitedGroups) +{ + if (!particle) + return; + + const XsdTerm::Ptr term = particle->term(); + + // if it is a model group, we iterate over it recursive... + if (term->isModelGroup()) { + const XsdModelGroup::Ptr modelGroup = term; + const XsdParticle::List particles = modelGroup->particles(); + + for (int i = 0; i < particles.count(); ++i) { + resolveTermReference(particles.at(i), visitedGroups); + } + + // check for unique names of elements inside all compositor + if (modelGroup->compositor() != XsdModelGroup::ChoiceCompositor) { + for (int i = 0; i < particles.count(); ++i) { + const XsdParticle::Ptr particle = particles.at(i); + const XsdTerm::Ptr term = particle->term(); + + if (!(term->isElement())) + continue; + + for (int j = 0; j < particles.count(); ++j) { + const XsdParticle::Ptr otherParticle = particles.at(j); + const XsdTerm::Ptr otherTerm = otherParticle->term(); + + if (otherTerm->isElement() && i != j) { + const XsdElement::Ptr element = term; + const XsdElement::Ptr otherElement = otherTerm; + + if (element->name(m_namePool) == otherElement->name(m_namePool)) { + if (modelGroup->compositor() == XsdModelGroup::AllCompositor) { + m_context->error(QtXmlPatterns::tr("duplicated element names %1 in %2 element") + .arg(formatKeyword(element->displayName(m_namePool))) + .arg(formatElement("all")), + XsdSchemaContext::XSDError, sourceLocation(modelGroup)); + return; + } else if (modelGroup->compositor() == XsdModelGroup::SequenceCompositor) { + if (element->type() != otherElement->type()) { // not same variety + m_context->error(QtXmlPatterns::tr("duplicated element names %1 in %2 element") + .arg(formatKeyword(element->displayName(m_namePool))) + .arg(formatElement("sequence")), + XsdSchemaContext::XSDError, sourceLocation(modelGroup)); + return; + } + } + } + } + } + } + } + + return; + } + + // ...otherwise we have reached the end of recursion... + if (!term->isReference()) + return; + + // ...or we have reached a reference term that must be resolved + const XsdReference::Ptr reference = term; + switch (reference->type()) { + case XsdReference::Element: + { + const XsdElement::Ptr element = m_schema->element(reference->referenceName()); + if (element) { + particle->setTerm(element); + } else { + m_context->error(QtXmlPatterns::tr("reference %1 of %2 element cannot be resolved") + .arg(formatKeyword(m_namePool, reference->referenceName())) + .arg(formatElement("element")), + XsdSchemaContext::XSDError, reference->sourceLocation()); + return; + } + } + break; + case XsdReference::ModelGroup: + { + const XsdModelGroup::Ptr modelGroup = m_schema->elementGroup(reference->referenceName()); + if (modelGroup) { + if (visitedGroups.contains(modelGroup->name(m_namePool))) { + m_context->error(QtXmlPatterns::tr("circular group reference for %1").arg(formatKeyword(modelGroup->displayName(m_namePool))), + XsdSchemaContext::XSDError, reference->sourceLocation()); + } else { + visitedGroups.insert(modelGroup->name(m_namePool)); + } + + particle->setTerm(modelGroup); + + // start recursive iteration here as well to get all references resolved + const XsdParticle::List particles = modelGroup->particles(); + for (int i = 0; i < particles.count(); ++i) { + resolveTermReference(particles.at(i), visitedGroups); + } + + if (modelGroup->compositor() == XsdModelGroup::AllCompositor) { + if (m_allGroups.contains(reference)) { + m_context->error(QtXmlPatterns::tr("%1 element is not allowed in this scope").arg(formatElement("all")), + XsdSchemaContext::XSDError, reference->sourceLocation()); + return; + } + if (particle->maximumOccursUnbounded() || particle->maximumOccurs() != 1) { + m_context->error(QtXmlPatterns::tr("%1 element cannot have %2 attribute with value other than %3") + .arg(formatElement("all")) + .arg(formatAttribute("maxOccurs")) + .arg(formatData("1")), + XsdSchemaContext::XSDError, reference->sourceLocation()); + return; + } + if (particle->minimumOccurs() != 0 && particle->minimumOccurs() != 1) { + m_context->error(QtXmlPatterns::tr("%1 element cannot have %2 attribute with value other than %3 or %4") + .arg(formatElement("all")) + .arg(formatAttribute("minOccurs")) + .arg(formatData("0")) + .arg(formatData("1")), + XsdSchemaContext::XSDError, reference->sourceLocation()); + return; + } + } + } else { + m_context->error(QtXmlPatterns::tr("reference %1 of %2 element cannot be resolved") + .arg(formatKeyword(m_namePool, reference->referenceName())) + .arg(formatElement("group")), + XsdSchemaContext::XSDError, reference->sourceLocation()); + return; + } + } + break; + } +} + +void XsdSchemaResolver::resolveAttributeTermReferences() +{ + // first all global attribute groups + const XsdAttributeGroup::List attributeGroups = m_schema->attributeGroups(); + for (int i = 0; i < attributeGroups.count(); ++i) { + XsdWildcard::Ptr wildcard = attributeGroups.at(i)->wildcard(); + const XsdAttributeUse::List uses = resolveAttributeTermReferences(attributeGroups.at(i)->attributeUses(), wildcard, QSet<QXmlName>()); + attributeGroups.at(i)->setAttributeUses(uses); + attributeGroups.at(i)->setWildcard(wildcard); + } + + // then the global complex types + const SchemaType::List types = m_schema->types(); + for (int i = 0; i < types.count(); ++i) { + if (!(types.at(i)->isComplexType()) || !types.at(i)->isDefinedBySchema()) + continue; + + const XsdComplexType::Ptr complexType = types.at(i); + const XsdAttributeUse::List attributeUses = complexType->attributeUses(); + + XsdWildcard::Ptr wildcard = complexType->attributeWildcard(); + const XsdAttributeUse::List uses = resolveAttributeTermReferences(attributeUses, wildcard, QSet<QXmlName>()); + complexType->setAttributeUses(uses); + complexType->setAttributeWildcard(wildcard); + } + + // and afterwards all anonymous complex types + const SchemaType::List anonymousTypes = m_schema->anonymousTypes(); + for (int i = 0; i < anonymousTypes.count(); ++i) { + if (!(anonymousTypes.at(i)->isComplexType()) || !anonymousTypes.at(i)->isDefinedBySchema()) + continue; + + const XsdComplexType::Ptr complexType = anonymousTypes.at(i); + const XsdAttributeUse::List attributeUses = complexType->attributeUses(); + + XsdWildcard::Ptr wildcard = complexType->attributeWildcard(); + const XsdAttributeUse::List uses = resolveAttributeTermReferences(attributeUses, wildcard, QSet<QXmlName>()); + complexType->setAttributeUses(uses); + complexType->setAttributeWildcard(wildcard); + } +} + +XsdAttributeUse::List XsdSchemaResolver::resolveAttributeTermReferences(const XsdAttributeUse::List &attributeUses, XsdWildcard::Ptr &wildcard, QSet<QXmlName> visitedAttributeGroups) +{ + XsdAttributeUse::List resolvedAttributeUses; + + for (int i = 0; i < attributeUses.count(); ++i) { + const XsdAttributeUse::Ptr attributeUse = attributeUses.at(i); + if (attributeUse->isAttributeUse()) { + // it is a real attribute use, so no need to resolve it + resolvedAttributeUses.append(attributeUse); + } else if (attributeUse->isReference()) { + // it is just a reference, so resolve it to the real attribute use + + const XsdAttributeReference::Ptr reference = attributeUse; + if (reference->type() == XsdAttributeReference::AttributeUse) { + + // lookup the real attribute + const XsdAttribute::Ptr attribute = m_schema->attribute(reference->referenceName()); + if (!attribute) { + m_context->error(QtXmlPatterns::tr("reference %1 of %2 element cannot be resolved") + .arg(formatKeyword(m_namePool, reference->referenceName())) + .arg(formatElement("attribute")), + XsdSchemaContext::XSDError, reference->sourceLocation()); + return XsdAttributeUse::List(); + } + + // if both, reference and definition have a fixed or default value set, then they must be equal + if (attribute->valueConstraint() && attributeUse->valueConstraint()) { + if (attribute->valueConstraint()->value() != attributeUse->valueConstraint()->value()) { + m_context->error(QtXmlPatterns::tr("%1 or %2 attribute of reference %3 does not match with the attribute declaration %4") + .arg(formatAttribute("fixed")) + .arg(formatAttribute("default")) + .arg(formatKeyword(m_namePool, reference->referenceName())) + .arg(formatKeyword(attribute->displayName(m_namePool))), + XsdSchemaContext::XSDError, reference->sourceLocation()); + return XsdAttributeUse::List(); + } + } + + attributeUse->setAttribute(attribute); + if (!attributeUse->valueConstraint() && attribute->valueConstraint()) + attributeUse->setValueConstraint(XsdAttributeUse::ValueConstraint::fromAttributeValueConstraint(attribute->valueConstraint())); + + resolvedAttributeUses.append(attributeUse); + } else if (reference->type() == XsdAttributeReference::AttributeGroup) { + const XsdAttributeGroup::Ptr attributeGroup = m_schema->attributeGroup(reference->referenceName()); + if (!attributeGroup) { + m_context->error(QtXmlPatterns::tr("reference %1 of %2 element cannot be resolved") + .arg(formatKeyword(m_namePool, reference->referenceName())) + .arg(formatElement("attributeGroup")), + XsdSchemaContext::XSDError, reference->sourceLocation()); + return XsdAttributeUse::List(); + } + if (visitedAttributeGroups.contains(attributeGroup->name(m_namePool))) { + m_context->error(QtXmlPatterns::tr("attribute group %1 has circular reference").arg(formatKeyword(m_namePool, reference->referenceName())), + XsdSchemaContext::XSDError, reference->sourceLocation()); + return XsdAttributeUse::List(); + } else { + visitedAttributeGroups.insert(attributeGroup->name(m_namePool)); + } + + // resolve attribute wildcards as defined in http://www.w3.org/TR/xmlschema11-1/#declare-attributeGroup-wildcard + XsdWildcard::Ptr childWildcard; + resolvedAttributeUses << resolveAttributeTermReferences(attributeGroup->attributeUses(), childWildcard, visitedAttributeGroups); + if (!childWildcard) { + if (attributeGroup->wildcard()) { + if (wildcard) { + const XsdWildcard::ProcessContents contents = wildcard->processContents(); + wildcard = XsdSchemaHelper::wildcardIntersection(wildcard, attributeGroup->wildcard()); + wildcard->setProcessContents(contents); + } else { + wildcard = attributeGroup->wildcard(); + } + } + } else { + XsdWildcard::Ptr newWildcard; + if (attributeGroup->wildcard()) { + const XsdWildcard::ProcessContents contents = attributeGroup->wildcard()->processContents(); + newWildcard = XsdSchemaHelper::wildcardIntersection(attributeGroup->wildcard(), childWildcard); + newWildcard->setProcessContents(contents); + } else { + newWildcard = childWildcard; + } + + if (wildcard) { + const XsdWildcard::ProcessContents contents = wildcard->processContents(); + wildcard = XsdSchemaHelper::wildcardIntersection(wildcard, newWildcard); + wildcard->setProcessContents(contents); + } else { + wildcard = newWildcard; + } + } + } + } + } + + return resolvedAttributeUses; +} + +void XsdSchemaResolver::resolveAttributeInheritance() +{ + // collect the global and anonymous complex types + SchemaType::List types = m_schema->types(); + types << m_schema->anonymousTypes(); + + QSet<XsdComplexType::Ptr> visitedTypes; + for (int i = 0; i < types.count(); ++i) { + if (!(types.at(i)->isComplexType()) || !types.at(i)->isDefinedBySchema()) + continue; + + const XsdComplexType::Ptr complexType = types.at(i); + + resolveAttributeInheritance(complexType, visitedTypes); + } +} + +bool isValidWildcardRestriction(const XsdWildcard::Ptr &wildcard, const XsdWildcard::Ptr &baseWildcard) +{ + if (wildcard->namespaceConstraint()->variety() == baseWildcard->namespaceConstraint()->variety()) { + if (!XsdSchemaHelper::checkWildcardProcessContents(baseWildcard, wildcard)) + return false; + } + + if (wildcard->namespaceConstraint()->variety() == XsdWildcard::NamespaceConstraint::Any && + baseWildcard->namespaceConstraint()->variety() != XsdWildcard::NamespaceConstraint::Any ) { + return false; + } + if (baseWildcard->namespaceConstraint()->variety() == XsdWildcard::NamespaceConstraint::Not && + wildcard->namespaceConstraint()->variety() == XsdWildcard::NamespaceConstraint::Enumeration) { + if (!baseWildcard->namespaceConstraint()->namespaces().intersect(wildcard->namespaceConstraint()->namespaces()).isEmpty()) + return false; + } + if (baseWildcard->namespaceConstraint()->variety() == XsdWildcard::NamespaceConstraint::Enumeration && + wildcard->namespaceConstraint()->variety() == XsdWildcard::NamespaceConstraint::Enumeration) { + if (!wildcard->namespaceConstraint()->namespaces().subtract(baseWildcard->namespaceConstraint()->namespaces()).isEmpty()) + return false; + } + + return true; +} + +/* + * Since we inherit the attributes from our base class we have to walk up in the + * inheritance hierarchy first and resolve the attribute inheritance top-down. + */ +void XsdSchemaResolver::resolveAttributeInheritance(const XsdComplexType::Ptr &complexType, QSet<XsdComplexType::Ptr> &visitedTypes) +{ + if (visitedTypes.contains(complexType)) + return; + else + visitedTypes.insert(complexType); + + const SchemaType::Ptr baseType = complexType->wxsSuperType(); + Q_ASSERT(baseType); + + if (!(baseType->isComplexType()) || !baseType->isDefinedBySchema()) + return; + + const XsdComplexType::Ptr complexBaseType = baseType; + + resolveAttributeInheritance(complexBaseType, visitedTypes); + + // @see http://www.w3.org/TR/xmlschema11-1/#dcl.ctd.attuses + + // 1 and 2 (the attribute groups have been resolved here already) + const XsdAttributeUse::List uses = complexBaseType->attributeUses(); + + if (complexType->derivationMethod() == XsdComplexType::DerivationRestriction) { // 3.2 + const XsdAttributeUse::List currentUses = complexType->attributeUses(); + + // 3.2.1 and 3.2.2 As we also keep the prohibited attributes as objects, the algorithm below + // handles both the same way + + // add only these attribute uses of the base type that match one of the following criteria: + // 1: there is no attribute use with the same name in type + // 2: there is no attribute with the same name marked as prohibited in type + for (int j = 0; j < uses.count(); ++j) { + const XsdAttributeUse::Ptr use = uses.at(j); + bool found = false; + for (int k = 0; k < currentUses.count(); ++k) { + if (use->attribute()->name(m_namePool) == currentUses.at(k)->attribute()->name(m_namePool)) { + found = true; + + // check if prohibited usage is violated + if ((use->useType() == XsdAttributeUse::ProhibitedUse) && (currentUses.at(k)->useType() != XsdAttributeUse::ProhibitedUse)) { + m_context->error(QtXmlPatterns::tr("%1 attribute in %2 must have %3 use like in base type %4") + .arg(formatAttribute(use->attribute()->displayName(m_namePool))) + .arg(formatType(m_namePool, complexType)) + .arg(formatData("prohibited")) + .arg(formatType(m_namePool, complexBaseType)), + XsdSchemaContext::XSDError, sourceLocation(complexType)); + return; + } + + break; + } + } + + if (!found && uses.at(j)->useType() != XsdAttributeUse::ProhibitedUse) { + complexType->addAttributeUse(uses.at(j)); + } + } + } else if (complexType->derivationMethod() == XsdComplexType::DerivationExtension) { // 3.1 + QHash<QXmlName, XsdAttributeUse::Ptr> availableUses; + + // fill hash with attribute uses of current type for faster lookup + { + const XsdAttributeUse::List attributeUses = complexType->attributeUses(); + + for (int i = 0; i < attributeUses.count(); ++i) { + availableUses.insert(attributeUses.at(i)->attribute()->name(m_namePool), attributeUses.at(i)); + } + } + + // just add the attribute uses of the base type + for (int i = 0; i < uses.count(); ++i) { + const XsdAttributeUse::Ptr currentAttributeUse = uses.at(i); + + // if the base type defines the attribute as prohibited but we override it in current type, then don't copy the prohibited attribute use + if ((currentAttributeUse->useType() == XsdAttributeUse::ProhibitedUse) && availableUses.contains(currentAttributeUse->attribute()->name(m_namePool))) + continue; + + complexType->addAttributeUse(uses.at(i)); + } + } + + // handle attribute wildcards: @see http://www.w3.org/TR/xmlschema11-1/#dcl.ctd.anyatt + + // 1 + const XsdWildcard::Ptr completeWildcard(complexType->attributeWildcard()); + + if (complexType->derivationMethod() == XsdComplexType::DerivationRestriction) { + if (complexType->wxsSuperType()->isComplexType() && complexType->wxsSuperType()->isDefinedBySchema()) { + const XsdComplexType::Ptr complexBaseType(complexType->wxsSuperType()); + if (complexType->attributeWildcard()) { + if (complexBaseType->attributeWildcard()) { + if (!isValidWildcardRestriction(complexType->attributeWildcard(), complexBaseType->attributeWildcard())) { + m_context->error(QtXmlPatterns::tr("attribute wildcard of %1 is not a valid restriction of attribute wildcard of base type %2") + .arg(formatType(m_namePool, complexType)) + .arg(formatType(m_namePool, complexBaseType)), + XsdSchemaContext::XSDError, sourceLocation(complexType)); + return; + } + } else { + m_context->error(QtXmlPatterns::tr("%1 has attribute wildcard but its base type %2 has not") + .arg(formatType(m_namePool, complexType)) + .arg(formatType(m_namePool, complexBaseType)), + XsdSchemaContext::XSDError, sourceLocation(complexType)); + return; + } + } + } + complexType->setAttributeWildcard(completeWildcard); // 2.1 + } else if (complexType->derivationMethod() == XsdComplexType::DerivationExtension) { + XsdWildcard::Ptr baseWildcard; // 2.2.1 + if (complexType->wxsSuperType()->isComplexType() && complexType->wxsSuperType()->isDefinedBySchema()) + baseWildcard = XsdComplexType::Ptr(complexType->wxsSuperType())->attributeWildcard(); // 2.2.1.1 + else + baseWildcard = XsdWildcard::Ptr(); // 2.2.1.2 + + if (!baseWildcard) { + complexType->setAttributeWildcard(completeWildcard); // 2.2.2.1 + } else if (!completeWildcard) { + complexType->setAttributeWildcard(baseWildcard); // 2.2.2.2 + } else { + XsdWildcard::Ptr unionWildcard = XsdSchemaHelper::wildcardUnion(completeWildcard, baseWildcard); + if (unionWildcard) { + unionWildcard->setProcessContents(completeWildcard->processContents()); + complexType->setAttributeWildcard(unionWildcard); // 2.2.2.3 + } else { + m_context->error(QtXmlPatterns::tr("union of attribute wildcard of type %1 and attribute wildcard of its base type %2 is not expressible") + .arg(formatType(m_namePool, complexType)) + .arg(formatType(m_namePool, complexBaseType)), + XsdSchemaContext::XSDError, sourceLocation(complexType)); + return; + } + } + } +} + +void XsdSchemaResolver::resolveEnumerationFacetValues() +{ + XsdSimpleType::List simpleTypes; + + // first collect the global simple types + const SchemaType::List types = m_schema->types(); + for (int i = 0; i < types.count(); ++i) { + if (types.at(i)->isSimpleType()) + simpleTypes.append(types.at(i)); + } + + // then collect all anonymous simple types + const SchemaType::List anonymousTypes = m_schema->anonymousTypes(); + for (int i = 0; i < anonymousTypes.count(); ++i) { + if (anonymousTypes.at(i)->isSimpleType()) + simpleTypes.append(anonymousTypes.at(i)); + } + // process all simple types + for (int i = 0; i < simpleTypes.count(); ++i) { + const XsdSimpleType::Ptr simpleType = simpleTypes.at(i); + + // we resolve the enumeration values only for xs:QName and xs:NOTATION based types + if (BuiltinTypes::xsQName->wxsTypeMatches(simpleType) || + BuiltinTypes::xsNOTATION->wxsTypeMatches(simpleType)) { + const XsdFacet::Hash facets = simpleType->facets(); + if (facets.contains(XsdFacet::Enumeration)) { + AtomicValue::List newValues; + + const XsdFacet::Ptr facet = facets.value(XsdFacet::Enumeration); + const AtomicValue::List values = facet->multiValue(); + for (int j = 0; j < values.count(); ++j) { + const AtomicValue::Ptr value = values.at(j); + + Q_ASSERT(m_enumerationFacetValues.contains(value)); + const NamespaceSupport support( m_enumerationFacetValues.value(value) ); + + const QString qualifiedName = value->as<DerivedString<TypeString> >()->stringValue(); + if (!XPathHelper::isQName(qualifiedName)) { + m_context->error(QtXmlPatterns::tr("enumeration facet contains invalid content: {%1} is not a value of type %2") + .arg(formatData(qualifiedName)) + .arg(formatType(m_namePool, BuiltinTypes::xsQName)), + XsdSchemaContext::XSDError, sourceLocation(simpleType)); + return; + } + + QXmlName qNameValue; + bool result = support.processName(qualifiedName, NamespaceSupport::ElementName, qNameValue); + if (!result) { + m_context->error(QtXmlPatterns::tr("namespace prefix of qualified name %1 is not defined").arg(formatData(qualifiedName)), + XsdSchemaContext::XSDError, sourceLocation(simpleType)); + return; + } + + newValues.append(QNameValue::fromValue(m_namePool, qNameValue)); + } + facet->setMultiValue(newValues); + } + } + } +} + +QSourceLocation XsdSchemaResolver::sourceLocation(const NamedSchemaComponent::Ptr component) const +{ + if (m_componentLocationHash.contains(component)) { + return m_componentLocationHash.value(component); + } else { + QSourceLocation location; + location.setLine(1); + location.setColumn(1); + location.setUri(QString::fromLatin1("dummyUri")); + + return location; + } +} + +XsdFacet::Hash XsdSchemaResolver::complexTypeFacets(const XsdComplexType::Ptr &complexType) const +{ + for (int i = 0; i < m_complexBaseTypes.count(); ++i) { + if (m_complexBaseTypes.at(i).complexType == complexType) + return m_complexBaseTypes.at(i).facets; + } + + return XsdFacet::Hash(); +} + +void XsdSchemaResolver::checkRedefinedGroups() +{ + for (int i = 0; i < m_redefinedGroups.count(); ++i) { + const RedefinedGroups item = m_redefinedGroups.at(i); + + // create dummy particles... + const XsdParticle::Ptr redefinedParticle(new XsdParticle()); + redefinedParticle->setTerm(item.redefinedGroup); + const XsdParticle::Ptr particle(new XsdParticle()); + particle->setTerm(item.group); + + // so that we can pass them to XsdParticleChecker::subsumes() + QString errorMsg; + if (!XsdParticleChecker::subsumes(particle, redefinedParticle, m_context, errorMsg)) { + m_context->error(QtXmlPatterns::tr("%1 element %2 is not a valid restriction of the %3 element it redefines: %4") + .arg(formatElement("group")) + .arg(formatData(item.redefinedGroup->displayName(m_namePool))) + .arg(formatElement("group")) + .arg(errorMsg), + XsdSchemaContext::XSDError, sourceLocation(item.redefinedGroup)); + return; + } + } +} + +void XsdSchemaResolver::checkRedefinedAttributeGroups() +{ + for (int i = 0; i < m_redefinedAttributeGroups.count(); ++i) { + const RedefinedAttributeGroups item = m_redefinedAttributeGroups.at(i); + + QString errorMsg; + if (!XsdSchemaHelper::isValidAttributeGroupRestriction(item.redefinedGroup, item.group, m_context, errorMsg)) { + m_context->error(QtXmlPatterns::tr("%1 element %2 is not a valid restriction of the %3 element it redefines: %4") + .arg(formatElement("attributeGroup")) + .arg(formatData(item.redefinedGroup->displayName(m_namePool))) + .arg(formatElement("attributeGroup")) + .arg(errorMsg), + XsdSchemaContext::XSDError, sourceLocation(item.redefinedGroup)); + return; + } + } +} + +AnySimpleType::Ptr XsdSchemaResolver::findPrimitiveType(const AnySimpleType::Ptr &type, QSet<AnySimpleType::Ptr> &visitedTypes) +{ + if (visitedTypes.contains(type)) { + // found invalid circular reference... + return AnySimpleType::Ptr(); + } else { + visitedTypes.insert(type); + } + + const QXmlName typeName = type->name(m_namePool); + if (typeName == BuiltinTypes::xsString->name(m_namePool) || + typeName == BuiltinTypes::xsBoolean->name(m_namePool) || + typeName == BuiltinTypes::xsFloat->name(m_namePool) || + typeName == BuiltinTypes::xsDouble->name(m_namePool) || + typeName == BuiltinTypes::xsDecimal->name(m_namePool) || + typeName == BuiltinTypes::xsDuration->name(m_namePool) || + typeName == BuiltinTypes::xsDateTime->name(m_namePool) || + typeName == BuiltinTypes::xsTime->name(m_namePool) || + typeName == BuiltinTypes::xsDate->name(m_namePool) || + typeName == BuiltinTypes::xsGYearMonth->name(m_namePool) || + typeName == BuiltinTypes::xsGYear->name(m_namePool) || + typeName == BuiltinTypes::xsGMonthDay->name(m_namePool) || + typeName == BuiltinTypes::xsGDay->name(m_namePool) || + typeName == BuiltinTypes::xsGMonth->name(m_namePool) || + typeName == BuiltinTypes::xsHexBinary->name(m_namePool) || + typeName == BuiltinTypes::xsBase64Binary->name(m_namePool) || + typeName == BuiltinTypes::xsAnyURI->name(m_namePool) || + typeName == BuiltinTypes::xsQName->name(m_namePool) || + typeName == BuiltinTypes::xsNOTATION->name(m_namePool) || + typeName == BuiltinTypes::xsAnySimpleType->name(m_namePool)) + return type; + else { + if (type->wxsSuperType()) + return findPrimitiveType(type->wxsSuperType(), visitedTypes); + else { + return AnySimpleType::Ptr(); + } + } +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/schema/qxsdschemaresolver_p.h b/src/xmlpatterns/schema/qxsdschemaresolver_p.h new file mode 100644 index 0000000..60901b5 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdschemaresolver_p.h @@ -0,0 +1,578 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_XsdSchemaResolver_H +#define Patternist_XsdSchemaResolver_H + +#include "qnamespacesupport_p.h" +#include "qschematype_p.h" +#include "qschematypefactory_p.h" +#include "qxsdalternative_p.h" +#include "qxsdattribute_p.h" +#include "qxsdattributegroup_p.h" +#include "qxsdelement_p.h" +#include "qxsdmodelgroup_p.h" +#include "qxsdnotation_p.h" +#include "qxsdreference_p.h" +#include "qxsdschema_p.h" +#include "qxsdschemachecker_p.h" +#include "qxsdsimpletype_p.h" + +#include <QtCore/QExplicitlySharedDataPointer> + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +namespace QPatternist +{ + class XsdSchemaContext; + class XsdSchemaParserContext; + + /** + * @short Encapsulates the resolving of type/element references in a schema after parsing has finished. + * + * This class collects task for resolving types or element references. After the parsing has finished, + * one can start the resolve process by calling resolve(). + * + * @ingroup Patternist_schema + * @author Tobias Koenig <tobias.koenig@trolltech.com> + */ + class XsdSchemaResolver : public QSharedData + { + public: + typedef QExplicitlySharedDataPointer<XsdSchemaResolver> Ptr; + + /** + * Creates a new schema resolver. + * + * @param context The schema context used for error reporting etc.. + * @param parserContext The schema parser context where all objects to resolve belong to. + */ + XsdSchemaResolver(const QExplicitlySharedDataPointer<XsdSchemaContext> &context, const XsdSchemaParserContext *parserContext); + + /** + * Destroys the schema resolver. + */ + ~XsdSchemaResolver(); + + /** + * Starts the resolve process. + */ + void resolve(); + + /** + * Adds a resolve task for key references. + * + * The resolver will try to set the referencedKey property of @p keyRef to the <em>key</em> or <em>unique</em> object + * of @p element that has the given @p name. + */ + void addKeyReference(const XsdElement::Ptr &element, const XsdIdentityConstraint::Ptr &keyRef, const QXmlName &name, const QSourceLocation &location); + + /** + * Adds a resolve task for the base type of restriction of a simple type. + * + * The resolver will set the base type of @p simpleType to the type named by @p baseName. + */ + void addSimpleRestrictionBase(const XsdSimpleType::Ptr &simpleType, const QXmlName &baseName, const QSourceLocation &location); + + /** + * Removes the resolve task for the base type of restriction of the simple @p type. + */ + void removeSimpleRestrictionBase(const XsdSimpleType::Ptr &type); + + /** + * Adds a resolve task for the list type of a simple type. + * + * The resolver will set the itemType property of @p simpleType to the type named by @p typeName. + */ + void addSimpleListType(const XsdSimpleType::Ptr &simpleType, const QXmlName &typeName, const QSourceLocation &location); + + /** + * Adds a resolve task for the member types of a simple type. + * + * The resolver will set the memberTypes property of @p simpleType to the types named by @p typeNames. + */ + void addSimpleUnionTypes(const XsdSimpleType::Ptr &simpleType, const QList<QXmlName> &typeNames, const QSourceLocation &location); + + /** + * Adds a resolve task for the type of an element. + * + * The resolver will set the type of the @p element to the type named by @p typeName. + */ + void addElementType(const XsdElement::Ptr &element, const QXmlName &typeName, const QSourceLocation &location); + + /** + * Adds a resolve task for the base type of a complex type. + * + * The resolver will set the base type of @p complexType to the type named by @p baseName. + */ + void addComplexBaseType(const XsdComplexType::Ptr &complexType, const QXmlName &baseName, const QSourceLocation &location, const XsdFacet::Hash &facets = XsdFacet::Hash()); + + /** + * Removes the resolve task for the base type of the complex @p type. + */ + void removeComplexBaseType(const XsdComplexType::Ptr &type); + + /** + * Adds a resolve task for the content type of a complex type. + * + * The resolver will set the content type properties for @p complexType based on the + * given explicit @p content and effective @p mixed value. + */ + void addComplexContentType(const XsdComplexType::Ptr &complexType, const XsdParticle::Ptr &content, bool mixed); + + /** + * Adds a resolve task for the type of an attribute. + * + * The resolver will set the type of the @p attribute to the type named by @p typeName. + */ + void addAttributeType(const XsdAttribute::Ptr &attribute, const QXmlName &typeName, const QSourceLocation &location); + + /** + * Adds a resolve task for the type of an alternative. + * + * The resolver will set the type of the @p alternative to the type named by @p typeName. + */ + void addAlternativeType(const XsdAlternative::Ptr &alternative, const QXmlName &typeName, const QSourceLocation &location); + + /** + * Adds a resolve task for the type of an alternative. + * + * The resolver will set the type of the @p alternative to the type of the @p element after + * the type of the @p element has been resolved. + */ + void addAlternativeType(const XsdAlternative::Ptr &alternative, const XsdElement::Ptr &element); + + /** + * Adds a resolve task for the substituion group affiliations of an element. + * + * The resolver will set the substitution group affiliations of the @p element to the + * top-level element named by @p elementNames. + */ + void addSubstitutionGroupAffiliation(const XsdElement::Ptr &element, const QList<QXmlName> &elementName, const QSourceLocation &location); + + /** + * Adds a resolve task for an element that has no type specified, only a substitution group + * affiliation. + * + * The resolver will set the type of the substitution group affiliation as type for the element. + */ + void addSubstitutionGroupType(const XsdElement::Ptr &element); + + /** + * Adds the component location hash, so the resolver is able to report meaning full + * error messages. + */ + void addComponentLocationHash(const QHash<NamedSchemaComponent::Ptr, QSourceLocation> &hash); + + /** + * Add a resolve task for enumeration facet values. + * + * In case the enumeration is of type QName or NOTATION, we have to resolve the QName later, + * so we store the namespace bindings together with the facet value here and resolve it as soon as + * we have all type information available. + */ + void addEnumerationFacetValue(const AtomicValue::Ptr &facetValue, const NamespaceSupport &namespaceSupport); + + /** + * Add a check job for redefined groups. + * + * When an element group is redefined, we have to check whether the redefined group is a valid + * restriction of the group it redefines. As we need all type information for that, we keep them + * here for later checking. + */ + void addRedefinedGroups(const XsdModelGroup::Ptr &redefinedGroup, const XsdModelGroup::Ptr &group); + + /** + * Add a check job for redefined attribute groups. + * + * When an attribute group is redefined, we have to check whether the redefined group is a valid + * restriction of the group it redefines. As we need all type information for that, we keep them + * here for later checking. + */ + void addRedefinedAttributeGroups(const XsdAttributeGroup::Ptr &redefinedGroup, const XsdAttributeGroup::Ptr &group); + + /** + * Adds a check for nested <em>all</em> groups. + */ + void addAllGroupCheck(const XsdReference::Ptr &reference); + + /** + * Copies the data to resolve to an @p other resolver. + * + * @note That functionality is only used by the redefine algorithm in the XsdSchemaParser. + */ + void copyDataTo(const XsdSchemaResolver::Ptr &other) const; + + /** + * Returns the to resolve base type name for the given @p type. + * + * @note That functionality is only used by the redefine algorithm in the XsdSchemaParser. + */ + QXmlName baseTypeNameOfType(const SchemaType::Ptr &type) const; + + /** + * Returns the to resolve type name for the given @p attribute. + * + * @note That functionality is only used by the redefine algorithm in the XsdSchemaParser. + */ + QXmlName typeNameOfAttribute(const XsdAttribute::Ptr &attribute) const; + + /** + * Sets the defaultOpenContent object from the schema parser. + */ + void setDefaultOpenContent(const XsdComplexType::OpenContent::Ptr &openContent, bool appliesToEmpty); + + private: + /** + * Resolves key references. + */ + void resolveKeyReferences(); + + /** + * Resolves the base types of simple types derived by restriction. + */ + void resolveSimpleRestrictionBaseTypes(); + + /** + * Resolves the other properties except the base type + * of all simple restrictions. + */ + void resolveSimpleRestrictions(); + + /** + * Resolves the other properties except the base type + * of the given simple restriction. + * + * @param simpleType The restricted type to resolve. + * @param visitedTypes A set of already resolved types, used for termination of recursion. + */ + void resolveSimpleRestrictions(const XsdSimpleType::Ptr &simpleType, QSet<XsdSimpleType::Ptr> &visitedTypes); + + /** + * Resolves the item type property of simple types derived by list. + */ + void resolveSimpleListType(); + + /** + * Resolves the member types property of simple types derived by union. + */ + void resolveSimpleUnionTypes(); + + /** + * Resolves element types. + */ + void resolveElementTypes(); + + /** + * Resolves base type of complex types. + */ + void resolveComplexBaseTypes(); + + /** + * Resolves the simple content model of a complex type + * depending on its base type. + */ + void resolveSimpleContentComplexTypes(); + + /** + * Resolves the complex content model of a complex type + * depending on its base type. + */ + void resolveComplexContentComplexTypes(); + + /** + * Resolves the simple content model of a complex type + * depending on its base type. + * + * @param complexType The complex type to resolve. + * @param visitedTypes A set of already resolved types, used for termination of recursion. + */ + void resolveSimpleContentComplexTypes(const XsdComplexType::Ptr &complexType, QSet<XsdComplexType::Ptr> &visitedTypes); + + /** + * Resolves the complex content model of a complex type + * depending on its base type. + * + * @param complexType The complex type to resolve. + * @param visitedTypes A set of already resolved types, used for termination of recursion. + */ + void resolveComplexContentComplexTypes(const XsdComplexType::Ptr &complexType, QSet<XsdComplexType::Ptr> &visitedTypes); + + /** + * Resolves attribute types. + */ + void resolveAttributeTypes(); + + /** + * Resolves alternative types. + */ + void resolveAlternativeTypes(); + + /** + * Resolves substitution group affiliations. + */ + void resolveSubstitutionGroupAffiliations(); + + /** + * Resolves substitution groups. + */ + void resolveSubstitutionGroups(); + + /** + * Resolves all XsdReferences in the schema by their corresponding XsdElement or XsdModelGroup terms. + */ + void resolveTermReferences(); + + /** + * Resolves all XsdReferences in the @p particle recursive by their corresponding XsdElement or XsdModelGroup terms. + */ + void resolveTermReference(const XsdParticle::Ptr &particle, QSet<QXmlName> visitedGroups); + + /** + * Resolves all XsdAttributeReferences in the schema by their corresponding XsdAttributeUse objects. + */ + void resolveAttributeTermReferences(); + + /** + * Resolves all XsdAttributeReferences in the list of @p attributeUses by their corresponding XsdAttributeUse objects. + */ + XsdAttributeUse::List resolveAttributeTermReferences(const XsdAttributeUse::List &attributeUses, XsdWildcard::Ptr &wildcard, QSet<QXmlName> visitedAttributeGroups); + + /** + * Resolves the attribute inheritance of complex types. + * + * @note This method must be called after all base types have been resolved. + */ + void resolveAttributeInheritance(); + + /** + * Resolves the attribute inheritance of the given complex types. + * + * @param complexType The complex type to resolve. + * @param visitedTypes A set of already resolved types, used for termination of recursion. + * + * @note This method must be called after all base types have been resolved. + */ + void resolveAttributeInheritance(const XsdComplexType::Ptr &complexType, QSet<XsdComplexType::Ptr> &visitedTypes); + + /** + * Resolves the enumeration facet values for QName and NOTATION based facets. + */ + void resolveEnumerationFacetValues(); + + /** + * Returns the source location of the given schema @p component or a dummy + * source location if the component is not found in the component location hash. + */ + QSourceLocation sourceLocation(const NamedSchemaComponent::Ptr component) const; + + /** + * Returns the facets that are marked for the given complex @p type with a simple + * type restriction. + */ + XsdFacet::Hash complexTypeFacets(const XsdComplexType::Ptr &complexType) const; + + /** + * Finds the primitive type for the given simple @p type. + * + * The type is found by walking up the inheritance tree, until one of the builtin + * primitive type definitions is reached. + */ + AnySimpleType::Ptr findPrimitiveType(const AnySimpleType::Ptr &type, QSet<AnySimpleType::Ptr> &visitedTypes); + + /** + * Checks the redefined groups. + */ + void checkRedefinedGroups(); + + /** + * Checks the redefined attribute groups. + */ + void checkRedefinedAttributeGroups(); + + class KeyReference + { + public: + XsdElement::Ptr element; + XsdIdentityConstraint::Ptr keyRef; + QXmlName reference; + QSourceLocation location; + }; + + class SimpleRestrictionBase + { + public: + XsdSimpleType::Ptr simpleType; + QXmlName baseName; + QSourceLocation location; + }; + + class SimpleListType + { + public: + XsdSimpleType::Ptr simpleType; + QXmlName typeName; + QSourceLocation location; + }; + + class SimpleUnionType + { + public: + XsdSimpleType::Ptr simpleType; + QList<QXmlName> typeNames; + QSourceLocation location; + }; + + class ElementType + { + public: + XsdElement::Ptr element; + QXmlName typeName; + QSourceLocation location; + }; + + class ComplexBaseType + { + public: + XsdComplexType::Ptr complexType; + QXmlName baseName; + QSourceLocation location; + XsdFacet::Hash facets; + }; + + class ComplexContentType + { + public: + XsdComplexType::Ptr complexType; + XsdParticle::Ptr explicitContent; + bool effectiveMixed; + }; + + class AttributeType + { + public: + XsdAttribute::Ptr attribute; + QXmlName typeName; + QSourceLocation location; + }; + + class AlternativeType + { + public: + XsdAlternative::Ptr alternative; + QXmlName typeName; + QSourceLocation location; + }; + + class AlternativeTypeElement + { + public: + XsdAlternative::Ptr alternative; + XsdElement::Ptr element; + }; + + class SubstitutionGroupAffiliation + { + public: + XsdElement::Ptr element; + QList<QXmlName> elementNames; + QSourceLocation location; + }; + + class RedefinedGroups + { + public: + XsdModelGroup::Ptr redefinedGroup; + XsdModelGroup::Ptr group; + }; + + class RedefinedAttributeGroups + { + public: + XsdAttributeGroup::Ptr redefinedGroup; + XsdAttributeGroup::Ptr group; + }; + + QVector<KeyReference> m_keyReferences; + QVector<SimpleRestrictionBase> m_simpleRestrictionBases; + QVector<SimpleListType> m_simpleListTypes; + QVector<SimpleUnionType> m_simpleUnionTypes; + QVector<ElementType> m_elementTypes; + QVector<ComplexBaseType> m_complexBaseTypes; + QVector<ComplexContentType> m_complexContentTypes; + QVector<AttributeType> m_attributeTypes; + QVector<AlternativeType> m_alternativeTypes; + QVector<AlternativeTypeElement> m_alternativeTypeElements; + QVector<SubstitutionGroupAffiliation> m_substitutionGroupAffiliations; + QVector<XsdElement::Ptr> m_substitutionGroupTypes; + QVector<RedefinedGroups> m_redefinedGroups; + QVector<RedefinedAttributeGroups> m_redefinedAttributeGroups; + QHash<AtomicValue::Ptr, NamespaceSupport> m_enumerationFacetValues; + QSet<XsdReference::Ptr> m_allGroups; + + QExplicitlySharedDataPointer<XsdSchemaContext> m_context; + QExplicitlySharedDataPointer<XsdSchemaChecker> m_checker; + NamePool::Ptr m_namePool; + XsdSchema::Ptr m_schema; + QHash<NamedSchemaComponent::Ptr, QSourceLocation> m_componentLocationHash; + XsdComplexType::OpenContent::Ptr m_defaultOpenContent; + bool m_defaultOpenContentAppliesToEmpty; + SchemaType::List m_predefinedSchemaTypes; + }; +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/schema/qxsdschematoken.cpp b/src/xmlpatterns/schema/qxsdschematoken.cpp new file mode 100644 index 0000000..b462731 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdschematoken.cpp @@ -0,0 +1,2981 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* NOTE: This file is AUTO GENERATED by qautomaton2cpp.xsl. */ + +#include "qxsdschematoken_p.h" + +QT_BEGIN_NAMESPACE + +XsdSchemaToken::NodeName XsdSchemaToken::classifier2(const QChar *data) + + { + + static const unsigned short string[] = + { + 105, 100 + }; + if(memcmp(&data[0], &string, sizeof(QChar) * 2) == 0) + + + return Id; + + + return NoKeyword; + } + XsdSchemaToken::NodeName XsdSchemaToken::classifier3(const QChar *data) + + { + if (data[0] == 97) + + + { + if (data[1] == 108) + + + { + + if(data[2] == 108) + + + return All; + + } + + else if (data[1] == 110) + + + { + + if(data[2] == 121) + + + return Any; + + } + + + } + + else if (data[0] == 107) + + + { + + static const unsigned short string[] = + { + 101, 121 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 2) == 0) + + + return Key; + + } + + else if (data[0] == 114) + + + { + + static const unsigned short string[] = + { + 101, 102 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 2) == 0) + + + return Ref; + + } + + else if (data[0] == 117) + + + { + + static const unsigned short string[] = + { + 115, 101 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 2) == 0) + + + return Use; + + } + + + + return NoKeyword; + } + XsdSchemaToken::NodeName XsdSchemaToken::classifier4(const QChar *data) + + { + if (data[0] == 98) + + + { + + static const unsigned short string[] = + { + 97, 115, 101 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 3) == 0) + + + return Base; + + } + + else if (data[0] == 102) + + + { + + static const unsigned short string[] = + { + 111, 114, 109 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 3) == 0) + + + return Form; + + } + + else if (data[0] == 108) + + + { + + static const unsigned short string[] = + { + 105, 115, 116 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 3) == 0) + + + return List; + + } + + else if (data[0] == 109) + + + { + + static const unsigned short string[] = + { + 111, 100, 101 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 3) == 0) + + + return Mode; + + } + + else if (data[0] == 110) + + + { + + static const unsigned short string[] = + { + 97, 109, 101 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 3) == 0) + + + return Name; + + } + + else if (data[0] == 116) + + + { + if (data[1] == 101) + + + { + + static const unsigned short string[] = + { + 115, 116 + }; + if(memcmp(&data[2], &string, sizeof(QChar) * 2) == 0) + + + return Test; + + } + + else if (data[1] == 121) + + + { + + static const unsigned short string[] = + { + 112, 101 + }; + if(memcmp(&data[2], &string, sizeof(QChar) * 2) == 0) + + + return Type; + + } + + + } + + + + return NoKeyword; + } + XsdSchemaToken::NodeName XsdSchemaToken::classifier5(const QChar *data) + + { + if (data[0] == 98) + + + { + + static const unsigned short string[] = + { + 108, 111, 99, 107 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 4) == 0) + + + return Block; + + } + + else if (data[0] == 102) + + + { + if (data[1] == 105) + + + { + if (data[2] == 101) + + + { + + static const unsigned short string[] = + { + 108, 100 + }; + if(memcmp(&data[3], &string, sizeof(QChar) * 2) == 0) + + + return Field; + + } + + else if (data[2] == 110) + + + { + + static const unsigned short string[] = + { + 97, 108 + }; + if(memcmp(&data[3], &string, sizeof(QChar) * 2) == 0) + + + return Final; + + } + + else if (data[2] == 120) + + + { + + static const unsigned short string[] = + { + 101, 100 + }; + if(memcmp(&data[3], &string, sizeof(QChar) * 2) == 0) + + + return Fixed; + + } + + + } + + + } + + else if (data[0] == 103) + + + { + + static const unsigned short string[] = + { + 114, 111, 117, 112 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 4) == 0) + + + return Group; + + } + + else if (data[0] == 109) + + + { + + static const unsigned short string[] = + { + 105, 120, 101, 100 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 4) == 0) + + + return Mixed; + + } + + else if (data[0] == 114) + + + { + + static const unsigned short string[] = + { + 101, 102, 101, 114 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 4) == 0) + + + return Refer; + + } + + else if (data[0] == 117) + + + { + + static const unsigned short string[] = + { + 110, 105, 111, 110 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 4) == 0) + + + return Union; + + } + + else if (data[0] == 118) + + + { + + static const unsigned short string[] = + { + 97, 108, 117, 101 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 4) == 0) + + + return Value; + + } + + else if (data[0] == 120) + + + { + + static const unsigned short string[] = + { + 112, 97, 116, 104 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 4) == 0) + + + return Xpath; + + } + + + + return NoKeyword; + } + XsdSchemaToken::NodeName XsdSchemaToken::classifier6(const QChar *data) + + { + if (data[0] == 97) + + + { + + static const unsigned short string[] = + { + 115, 115, 101, 114, 116 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 5) == 0) + + + return Assert; + + } + + else if (data[0] == 99) + + + { + + static const unsigned short string[] = + { + 104, 111, 105, 99, 101 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 5) == 0) + + + return Choice; + + } + + else if (data[0] == 105) + + + { + + static const unsigned short string[] = + { + 109, 112, 111, 114, 116 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 5) == 0) + + + return Import; + + } + + else if (data[0] == 107) + + + { + + static const unsigned short string[] = + { + 101, 121, 114, 101, 102 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 5) == 0) + + + return Keyref; + + } + + else if (data[0] == 108) + + + { + + static const unsigned short string[] = + { + 101, 110, 103, 116, 104 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 5) == 0) + + + return Length; + + } + + else if (data[0] == 112) + + + { + + static const unsigned short string[] = + { + 117, 98, 108, 105, 99 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 5) == 0) + + + return Public; + + } + + else if (data[0] == 115) + + + { + if (data[1] == 99) + + + { + + static const unsigned short string[] = + { + 104, 101, 109, 97 + }; + if(memcmp(&data[2], &string, sizeof(QChar) * 4) == 0) + + + return Schema; + + } + + else if (data[1] == 111) + + + { + + static const unsigned short string[] = + { + 117, 114, 99, 101 + }; + if(memcmp(&data[2], &string, sizeof(QChar) * 4) == 0) + + + return Source; + + } + + else if (data[1] == 121) + + + { + + static const unsigned short string[] = + { + 115, 116, 101, 109 + }; + if(memcmp(&data[2], &string, sizeof(QChar) * 4) == 0) + + + return System; + + } + + + } + + else if (data[0] == 117) + + + { + + static const unsigned short string[] = + { + 110, 105, 113, 117, 101 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 5) == 0) + + + return Unique; + + } + + + + return NoKeyword; + } + XsdSchemaToken::NodeName XsdSchemaToken::classifier7(const QChar *data) + + { + if (data[0] == 97) + + + { + + static const unsigned short string[] = + { + 112, 112, 105, 110, 102, 111 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 6) == 0) + + + return Appinfo; + + } + + else if (data[0] == 100) + + + { + + static const unsigned short string[] = + { + 101, 102, 97, 117, 108, 116 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 6) == 0) + + + return Default; + + } + + else if (data[0] == 101) + + + { + + static const unsigned short string[] = + { + 108, 101, 109, 101, 110, 116 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 6) == 0) + + + return Element; + + } + + else if (data[0] == 105) + + + { + + static const unsigned short string[] = + { + 110, 99, 108, 117, 100, 101 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 6) == 0) + + + return Include; + + } + + else if (data[0] == 112) + + + { + + static const unsigned short string[] = + { + 97, 116, 116, 101, 114, 110 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 6) == 0) + + + return Pattern; + + } + + else if (data[0] == 114) + + + { + + static const unsigned short string[] = + { + 101, 112, 108, 97, 99, 101 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 6) == 0) + + + return Replace; + + } + + else if (data[0] == 118) + + + { + + static const unsigned short string[] = + { + 101, 114, 115, 105, 111, 110 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 6) == 0) + + + return Version; + + } + + + + return NoKeyword; + } + XsdSchemaToken::NodeName XsdSchemaToken::classifier8(const QChar *data) + + { + if (data[0] == 97) + + + { + + static const unsigned short string[] = + { + 98, 115, 116, 114, 97, 99, 116 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 7) == 0) + + + return Abstract; + + } + + else if (data[0] == 99) + + + { + + static const unsigned short string[] = + { + 111, 108, 108, 97, 112, 115, 101 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 7) == 0) + + + return Collapse; + + } + + else if (data[0] == 105) + + + { + + static const unsigned short string[] = + { + 116, 101, 109, 84, 121, 112, 101 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 7) == 0) + + + return ItemType; + + } + + else if (data[0] == 110) + + + { + if (data[1] == 105) + + + { + + static const unsigned short string[] = + { + 108, 108, 97, 98, 108, 101 + }; + if(memcmp(&data[2], &string, sizeof(QChar) * 6) == 0) + + + return Nillable; + + } + + else if (data[1] == 111) + + + { + if (data[2] == 116) + + + { + if (data[3] == 97) + + + { + + static const unsigned short string[] = + { + 116, 105, 111, 110 + }; + if(memcmp(&data[4], &string, sizeof(QChar) * 4) == 0) + + + return Notation; + + } + + else if (data[3] == 81) + + + { + + static const unsigned short string[] = + { + 78, 97, 109, 101 + }; + if(memcmp(&data[4], &string, sizeof(QChar) * 4) == 0) + + + return NotQName; + + } + + + } + + + } + + + } + + else if (data[0] == 111) + + + { + + static const unsigned short string[] = + { + 118, 101, 114, 114, 105, 100, 101 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 7) == 0) + + + return Override; + + } + + else if (data[0] == 112) + + + { + + static const unsigned short string[] = + { + 114, 101, 115, 101, 114, 118, 101 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 7) == 0) + + + return Preserve; + + } + + else if (data[0] == 114) + + + { + + static const unsigned short string[] = + { + 101, 100, 101, 102, 105, 110, 101 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 7) == 0) + + + return Redefine; + + } + + else if (data[0] == 115) + + + { + if (data[1] == 101) + + + { + if (data[2] == 108) + + + { + + static const unsigned short string[] = + { + 101, 99, 116, 111, 114 + }; + if(memcmp(&data[3], &string, sizeof(QChar) * 5) == 0) + + + return Selector; + + } + + else if (data[2] == 113) + + + { + + static const unsigned short string[] = + { + 117, 101, 110, 99, 101 + }; + if(memcmp(&data[3], &string, sizeof(QChar) * 5) == 0) + + + return Sequence; + + } + + + } + + + } + + else if (data[0] == 120) + + + { + + static const unsigned short string[] = + { + 109, 108, 58, 108, 97, 110, 103 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 7) == 0) + + + return XmlLanguage; + + } + + + + return NoKeyword; + } + XsdSchemaToken::NodeName XsdSchemaToken::classifier9(const QChar *data) + + { + if (data[0] == 97) + + + { + if (data[1] == 115) + + + { + + static const unsigned short string[] = + { + 115, 101, 114, 116, 105, 111, 110 + }; + if(memcmp(&data[2], &string, sizeof(QChar) * 7) == 0) + + + return Assertion; + + } + + else if (data[1] == 116) + + + { + + static const unsigned short string[] = + { + 116, 114, 105, 98, 117, 116, 101 + }; + if(memcmp(&data[2], &string, sizeof(QChar) * 7) == 0) + + + return Attribute; + + } + + + } + + else if (data[0] == 101) + + + { + + static const unsigned short string[] = + { + 120, 116, 101, 110, 115, 105, 111, 110 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 8) == 0) + + + return Extension; + + } + + else if (data[0] == 109) + + + { + if (data[1] == 97) + + + { + if (data[2] == 120) + + + { + if (data[3] == 76) + + + { + + static const unsigned short string[] = + { + 101, 110, 103, 116, 104 + }; + if(memcmp(&data[4], &string, sizeof(QChar) * 5) == 0) + + + return MaxLength; + + } + + else if (data[3] == 79) + + + { + + static const unsigned short string[] = + { + 99, 99, 117, 114, 115 + }; + if(memcmp(&data[4], &string, sizeof(QChar) * 5) == 0) + + + return MaxOccurs; + + } + + + } + + + } + + else if (data[1] == 105) + + + { + if (data[2] == 110) + + + { + if (data[3] == 76) + + + { + + static const unsigned short string[] = + { + 101, 110, 103, 116, 104 + }; + if(memcmp(&data[4], &string, sizeof(QChar) * 5) == 0) + + + return MinLength; + + } + + else if (data[3] == 79) + + + { + + static const unsigned short string[] = + { + 99, 99, 117, 114, 115 + }; + if(memcmp(&data[4], &string, sizeof(QChar) * 5) == 0) + + + return MinOccurs; + + } + + + } + + + } + + + } + + else if (data[0] == 110) + + + { + + static const unsigned short string[] = + { + 97, 109, 101, 115, 112, 97, 99, 101 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 8) == 0) + + + return Namespace; + + } + + + + return NoKeyword; + } + XsdSchemaToken::NodeName XsdSchemaToken::classifier10(const QChar *data) + + { + if (data[0] == 97) + + + { + + static const unsigned short string[] = + { + 110, 110, 111, 116, 97, 116, 105, 111, 110 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 9) == 0) + + + return Annotation; + + } + + else if (data[0] == 115) + + + { + + static const unsigned short string[] = + { + 105, 109, 112, 108, 101, 84, 121, 112, 101 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 9) == 0) + + + return SimpleType; + + } + + else if (data[0] == 119) + + + { + + static const unsigned short string[] = + { + 104, 105, 116, 101, 83, 112, 97, 99, 101 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 9) == 0) + + + return WhiteSpace; + + } + + + + return NoKeyword; + } + XsdSchemaToken::NodeName XsdSchemaToken::classifier11(const QChar *data) + + { + if (data[0] == 97) + + + { + + static const unsigned short string[] = + { + 108, 116, 101, 114, 110, 97, 116, 105, 118, 101 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 10) == 0) + + + return Alternative; + + } + + else if (data[0] == 99) + + + { + + static const unsigned short string[] = + { + 111, 109, 112, 108, 101, 120, 84, 121, 112, 101 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 10) == 0) + + + return ComplexType; + + } + + else if (data[0] == 101) + + + { + + static const unsigned short string[] = + { + 110, 117, 109, 101, 114, 97, 116, 105, 111, 110 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 10) == 0) + + + return Enumeration; + + } + + else if (data[0] == 109) + + + { + + static const unsigned short string[] = + { + 101, 109, 98, 101, 114, 84, 121, 112, 101, 115 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 10) == 0) + + + return MemberTypes; + + } + + else if (data[0] == 111) + + + { + + static const unsigned short string[] = + { + 112, 101, 110, 67, 111, 110, 116, 101, 110, 116 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 10) == 0) + + + return OpenContent; + + } + + else if (data[0] == 114) + + + { + + static const unsigned short string[] = + { + 101, 115, 116, 114, 105, 99, 116, 105, 111, 110 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 10) == 0) + + + return Restriction; + + } + + else if (data[0] == 116) + + + { + + static const unsigned short string[] = + { + 111, 116, 97, 108, 68, 105, 103, 105, 116, 115 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 10) == 0) + + + return TotalDigits; + + } + + + + return NoKeyword; + } + XsdSchemaToken::NodeName XsdSchemaToken::classifier12(const QChar *data) + + { + if (data[0] == 97) + + + { + + static const unsigned short string[] = + { + 110, 121, 65, 116, 116, 114, 105, 98, 117, 116, 101 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 11) == 0) + + + return AnyAttribute; + + } + + else if (data[0] == 98) + + + { + + static const unsigned short string[] = + { + 108, 111, 99, 107, 68, 101, 102, 97, 117, 108, 116 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 11) == 0) + + + return BlockDefault; + + } + + else if (data[0] == 102) + + + { + + static const unsigned short string[] = + { + 105, 110, 97, 108, 68, 101, 102, 97, 117, 108, 116 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 11) == 0) + + + return FinalDefault; + + } + + else if (data[0] == 109) + + + { + if (data[1] == 97) + + + { + if (data[2] == 120) + + + { + if (data[3] == 69) + + + { + + static const unsigned short string[] = + { + 120, 99, 108, 117, 115, 105, 118, 101 + }; + if(memcmp(&data[4], &string, sizeof(QChar) * 8) == 0) + + + return MaxExclusive; + + } + + else if (data[3] == 73) + + + { + + static const unsigned short string[] = + { + 110, 99, 108, 117, 115, 105, 118, 101 + }; + if(memcmp(&data[4], &string, sizeof(QChar) * 8) == 0) + + + return MaxInclusive; + + } + + + } + + + } + + else if (data[1] == 105) + + + { + if (data[2] == 110) + + + { + if (data[3] == 69) + + + { + + static const unsigned short string[] = + { + 120, 99, 108, 117, 115, 105, 118, 101 + }; + if(memcmp(&data[4], &string, sizeof(QChar) * 8) == 0) + + + return MinExclusive; + + } + + else if (data[3] == 73) + + + { + + static const unsigned short string[] = + { + 110, 99, 108, 117, 115, 105, 118, 101 + }; + if(memcmp(&data[4], &string, sizeof(QChar) * 8) == 0) + + + return MinInclusive; + + } + + + } + + + } + + + } + + else if (data[0] == 110) + + + { + + static const unsigned short string[] = + { + 111, 116, 78, 97, 109, 101, 115, 112, 97, 99, 101 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 11) == 0) + + + return NotNamespace; + + } + + + + return NoKeyword; + } + XsdSchemaToken::NodeName XsdSchemaToken::classifier13(const QChar *data) + + { + if (data[0] == 100) + + + { + + static const unsigned short string[] = + { + 111, 99, 117, 109, 101, 110, 116, 97, 116, 105, 111, 110 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 12) == 0) + + + return Documentation; + + } + + else if (data[0] == 115) + + + { + + static const unsigned short string[] = + { + 105, 109, 112, 108, 101, 67, 111, 110, 116, 101, 110, 116 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 12) == 0) + + + return SimpleContent; + + } + + + + return NoKeyword; + } + XsdSchemaToken::NodeName XsdSchemaToken::classifier14(const QChar *data) + + { + if (data[0] == 97) + + + { + if (data[1] == 112) + + + { + + static const unsigned short string[] = + { + 112, 108, 105, 101, 115, 84, 111, 69, 109, 112, 116, 121 + }; + if(memcmp(&data[2], &string, sizeof(QChar) * 12) == 0) + + + return AppliesToEmpty; + + } + + else if (data[1] == 116) + + + { + + static const unsigned short string[] = + { + 116, 114, 105, 98, 117, 116, 101, 71, 114, 111, 117, 112 + }; + if(memcmp(&data[2], &string, sizeof(QChar) * 12) == 0) + + + return AttributeGroup; + + } + + + } + + else if (data[0] == 99) + + + { + + static const unsigned short string[] = + { + 111, 109, 112, 108, 101, 120, 67, 111, 110, 116, 101, 110, 116 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 13) == 0) + + + return ComplexContent; + + } + + else if (data[0] == 102) + + + { + + static const unsigned short string[] = + { + 114, 97, 99, 116, 105, 111, 110, 68, 105, 103, 105, 116, 115 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 13) == 0) + + + return FractionDigits; + + } + + else if (data[0] == 115) + + + { + + static const unsigned short string[] = + { + 99, 104, 101, 109, 97, 76, 111, 99, 97, 116, 105, 111, 110 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 13) == 0) + + + return SchemaLocation; + + } + + + + return NoKeyword; + } + XsdSchemaToken::NodeName XsdSchemaToken::classifier15(const QChar *data) + + { + if (data[0] == 112) + + + { + + static const unsigned short string[] = + { + 114, 111, 99, 101, 115, 115, 67, 111, 110, 116, 101, 110, 116, 115 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 14) == 0) + + + return ProcessContents; + + } + + else if (data[0] == 116) + + + { + + static const unsigned short string[] = + { + 97, 114, 103, 101, 116, 78, 97, 109, 101, 115, 112, 97, 99, 101 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 14) == 0) + + + return TargetNamespace; + + } + + + + return NoKeyword; + } + XsdSchemaToken::NodeName XsdSchemaToken::classifier17(const QChar *data) + + { + if (data[0] == 100) + + + { + + static const unsigned short string[] = + { + 101, 102, 97, 117, 108, 116, 65, 116, 116, 114, 105, 98, 117, 116, 101, 115 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 16) == 0) + + + return DefaultAttributes; + + } + + else if (data[0] == 115) + + + { + + static const unsigned short string[] = + { + 117, 98, 115, 116, 105, 116, 117, 116, 105, 111, 110, 71, 114, 111, 117, 112 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 16) == 0) + + + return SubstitutionGroup; + + } + + + + return NoKeyword; + } + XsdSchemaToken::NodeName XsdSchemaToken::classifier18(const QChar *data) + + { + if (data[0] == 100) + + + { + + static const unsigned short string[] = + { + 101, 102, 97, 117, 108, 116, 79, 112, 101, 110, 67, 111, 110, 116, 101, 110, 116 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 17) == 0) + + + return DefaultOpenContent; + + } + + else if (data[0] == 101) + + + { + + static const unsigned short string[] = + { + 108, 101, 109, 101, 110, 116, 70, 111, 114, 109, 68, 101, 102, 97, 117, 108, 116 + }; + if(memcmp(&data[1], &string, sizeof(QChar) * 17) == 0) + + + return ElementFormDefault; + + } + + + + return NoKeyword; + } + XsdSchemaToken::NodeName XsdSchemaToken::classifier20(const QChar *data) + + { + + static const unsigned short string[] = + { + 97, 116, 116, 114, 105, 98, 117, 116, 101, 70, 111, 114, 109, 68, 101, 102, 97, 117, 108, 116 + }; + if(memcmp(&data[0], &string, sizeof(QChar) * 20) == 0) + + + return AttributeFormDefault; + + + return NoKeyword; + } + XsdSchemaToken::NodeName XsdSchemaToken::classifier21(const QChar *data) + + { + + static const unsigned short string[] = + { + 120, 112, 97, 116, 104, 68, 101, 102, 97, 117, 108, 116, 78, 97, 109, 101, 115, 112, 97, 99, 101 + }; + if(memcmp(&data[0], &string, sizeof(QChar) * 21) == 0) + + + return XPathDefaultNamespace; + + + return NoKeyword; + } + XsdSchemaToken::NodeName XsdSchemaToken::classifier22(const QChar *data) + + { + + static const unsigned short string[] = + { + 100, 101, 102, 97, 117, 108, 116, 65, 116, 116, 114, 105, 98, 117, 116, 101, 115, 65, 112, 112, 108, 121 + }; + if(memcmp(&data[0], &string, sizeof(QChar) * 22) == 0) + + + return DefaultAttributesApply; + + + return NoKeyword; + } + XsdSchemaToken::NodeName XsdSchemaToken::classifier32(const QChar *data) + + { + + static const unsigned short string[] = + { + 104, 116, 116, 112, 58, 47, 47, 119, 119, 119, 46, 119, 51, 46, 111, 114, 103, 47, 50, 48, 48, 49, 47, 88, 77, 76, 83, 99, 104, 101, 109, 97 + }; + if(memcmp(&data[0], &string, sizeof(QChar) * 32) == 0) + + + return XML_NS_SCHEMA_URI; + + + return NoKeyword; + } + XsdSchemaToken::NodeName XsdSchemaToken::toToken(const QChar *data, int length) + { + switch(length) + { + + case 2: + return classifier2(data); + + + case 3: + return classifier3(data); + + + case 4: + return classifier4(data); + + + case 5: + return classifier5(data); + + + case 6: + return classifier6(data); + + + case 7: + return classifier7(data); + + + case 8: + return classifier8(data); + + + case 9: + return classifier9(data); + + + case 10: + return classifier10(data); + + + case 11: + return classifier11(data); + + + case 12: + return classifier12(data); + + + case 13: + return classifier13(data); + + + case 14: + return classifier14(data); + + + case 15: + return classifier15(data); + + + case 17: + return classifier17(data); + + + case 18: + return classifier18(data); + + + case 20: + return classifier20(data); + + + case 21: + return classifier21(data); + + + case 22: + return classifier22(data); + + + case 32: + return classifier32(data); + + + default: + return NoKeyword; + } + } + + + QString XsdSchemaToken::toString(NodeName token) + { + const unsigned short *data = 0; + int length = 0; + + switch(token) + { + + case Abstract: + { + static const unsigned short staticallyStoredAbstract[] = + { + 97, 98, 115, 116, 114, 97, 99, 116, 0 + }; + data = staticallyStoredAbstract; + length = 8; + break; + } + + case All: + { + static const unsigned short staticallyStoredAll[] = + { + 97, 108, 108, 0 + }; + data = staticallyStoredAll; + length = 3; + break; + } + + case Alternative: + { + static const unsigned short staticallyStoredAlternative[] = + { + 97, 108, 116, 101, 114, 110, 97, 116, 105, 118, 101, 0 + }; + data = staticallyStoredAlternative; + length = 11; + break; + } + + case Annotation: + { + static const unsigned short staticallyStoredAnnotation[] = + { + 97, 110, 110, 111, 116, 97, 116, 105, 111, 110, 0 + }; + data = staticallyStoredAnnotation; + length = 10; + break; + } + + case Any: + { + static const unsigned short staticallyStoredAny[] = + { + 97, 110, 121, 0 + }; + data = staticallyStoredAny; + length = 3; + break; + } + + case AnyAttribute: + { + static const unsigned short staticallyStoredAnyAttribute[] = + { + 97, 110, 121, 65, 116, 116, 114, 105, 98, 117, 116, 101, 0 + }; + data = staticallyStoredAnyAttribute; + length = 12; + break; + } + + case Appinfo: + { + static const unsigned short staticallyStoredAppinfo[] = + { + 97, 112, 112, 105, 110, 102, 111, 0 + }; + data = staticallyStoredAppinfo; + length = 7; + break; + } + + case AppliesToEmpty: + { + static const unsigned short staticallyStoredAppliesToEmpty[] = + { + 97, 112, 112, 108, 105, 101, 115, 84, 111, 69, 109, 112, 116, 121, 0 + }; + data = staticallyStoredAppliesToEmpty; + length = 14; + break; + } + + case Assert: + { + static const unsigned short staticallyStoredAssert[] = + { + 97, 115, 115, 101, 114, 116, 0 + }; + data = staticallyStoredAssert; + length = 6; + break; + } + + case Assertion: + { + static const unsigned short staticallyStoredAssertion[] = + { + 97, 115, 115, 101, 114, 116, 105, 111, 110, 0 + }; + data = staticallyStoredAssertion; + length = 9; + break; + } + + case Attribute: + { + static const unsigned short staticallyStoredAttribute[] = + { + 97, 116, 116, 114, 105, 98, 117, 116, 101, 0 + }; + data = staticallyStoredAttribute; + length = 9; + break; + } + + case AttributeFormDefault: + { + static const unsigned short staticallyStoredAttributeFormDefault[] = + { + 97, 116, 116, 114, 105, 98, 117, 116, 101, 70, 111, 114, 109, 68, 101, 102, 97, 117, 108, 116, 0 + }; + data = staticallyStoredAttributeFormDefault; + length = 20; + break; + } + + case AttributeGroup: + { + static const unsigned short staticallyStoredAttributeGroup[] = + { + 97, 116, 116, 114, 105, 98, 117, 116, 101, 71, 114, 111, 117, 112, 0 + }; + data = staticallyStoredAttributeGroup; + length = 14; + break; + } + + case Base: + { + static const unsigned short staticallyStoredBase[] = + { + 98, 97, 115, 101, 0 + }; + data = staticallyStoredBase; + length = 4; + break; + } + + case Block: + { + static const unsigned short staticallyStoredBlock[] = + { + 98, 108, 111, 99, 107, 0 + }; + data = staticallyStoredBlock; + length = 5; + break; + } + + case BlockDefault: + { + static const unsigned short staticallyStoredBlockDefault[] = + { + 98, 108, 111, 99, 107, 68, 101, 102, 97, 117, 108, 116, 0 + }; + data = staticallyStoredBlockDefault; + length = 12; + break; + } + + case Choice: + { + static const unsigned short staticallyStoredChoice[] = + { + 99, 104, 111, 105, 99, 101, 0 + }; + data = staticallyStoredChoice; + length = 6; + break; + } + + case Collapse: + { + static const unsigned short staticallyStoredCollapse[] = + { + 99, 111, 108, 108, 97, 112, 115, 101, 0 + }; + data = staticallyStoredCollapse; + length = 8; + break; + } + + case ComplexContent: + { + static const unsigned short staticallyStoredComplexContent[] = + { + 99, 111, 109, 112, 108, 101, 120, 67, 111, 110, 116, 101, 110, 116, 0 + }; + data = staticallyStoredComplexContent; + length = 14; + break; + } + + case ComplexType: + { + static const unsigned short staticallyStoredComplexType[] = + { + 99, 111, 109, 112, 108, 101, 120, 84, 121, 112, 101, 0 + }; + data = staticallyStoredComplexType; + length = 11; + break; + } + + case Default: + { + static const unsigned short staticallyStoredDefault[] = + { + 100, 101, 102, 97, 117, 108, 116, 0 + }; + data = staticallyStoredDefault; + length = 7; + break; + } + + case DefaultAttributes: + { + static const unsigned short staticallyStoredDefaultAttributes[] = + { + 100, 101, 102, 97, 117, 108, 116, 65, 116, 116, 114, 105, 98, 117, 116, 101, 115, 0 + }; + data = staticallyStoredDefaultAttributes; + length = 17; + break; + } + + case DefaultAttributesApply: + { + static const unsigned short staticallyStoredDefaultAttributesApply[] = + { + 100, 101, 102, 97, 117, 108, 116, 65, 116, 116, 114, 105, 98, 117, 116, 101, 115, 65, 112, 112, 108, 121, 0 + }; + data = staticallyStoredDefaultAttributesApply; + length = 22; + break; + } + + case DefaultOpenContent: + { + static const unsigned short staticallyStoredDefaultOpenContent[] = + { + 100, 101, 102, 97, 117, 108, 116, 79, 112, 101, 110, 67, 111, 110, 116, 101, 110, 116, 0 + }; + data = staticallyStoredDefaultOpenContent; + length = 18; + break; + } + + case Documentation: + { + static const unsigned short staticallyStoredDocumentation[] = + { + 100, 111, 99, 117, 109, 101, 110, 116, 97, 116, 105, 111, 110, 0 + }; + data = staticallyStoredDocumentation; + length = 13; + break; + } + + case Element: + { + static const unsigned short staticallyStoredElement[] = + { + 101, 108, 101, 109, 101, 110, 116, 0 + }; + data = staticallyStoredElement; + length = 7; + break; + } + + case ElementFormDefault: + { + static const unsigned short staticallyStoredElementFormDefault[] = + { + 101, 108, 101, 109, 101, 110, 116, 70, 111, 114, 109, 68, 101, 102, 97, 117, 108, 116, 0 + }; + data = staticallyStoredElementFormDefault; + length = 18; + break; + } + + case Enumeration: + { + static const unsigned short staticallyStoredEnumeration[] = + { + 101, 110, 117, 109, 101, 114, 97, 116, 105, 111, 110, 0 + }; + data = staticallyStoredEnumeration; + length = 11; + break; + } + + case Extension: + { + static const unsigned short staticallyStoredExtension[] = + { + 101, 120, 116, 101, 110, 115, 105, 111, 110, 0 + }; + data = staticallyStoredExtension; + length = 9; + break; + } + + case Field: + { + static const unsigned short staticallyStoredField[] = + { + 102, 105, 101, 108, 100, 0 + }; + data = staticallyStoredField; + length = 5; + break; + } + + case Final: + { + static const unsigned short staticallyStoredFinal[] = + { + 102, 105, 110, 97, 108, 0 + }; + data = staticallyStoredFinal; + length = 5; + break; + } + + case FinalDefault: + { + static const unsigned short staticallyStoredFinalDefault[] = + { + 102, 105, 110, 97, 108, 68, 101, 102, 97, 117, 108, 116, 0 + }; + data = staticallyStoredFinalDefault; + length = 12; + break; + } + + case Fixed: + { + static const unsigned short staticallyStoredFixed[] = + { + 102, 105, 120, 101, 100, 0 + }; + data = staticallyStoredFixed; + length = 5; + break; + } + + case Form: + { + static const unsigned short staticallyStoredForm[] = + { + 102, 111, 114, 109, 0 + }; + data = staticallyStoredForm; + length = 4; + break; + } + + case FractionDigits: + { + static const unsigned short staticallyStoredFractionDigits[] = + { + 102, 114, 97, 99, 116, 105, 111, 110, 68, 105, 103, 105, 116, 115, 0 + }; + data = staticallyStoredFractionDigits; + length = 14; + break; + } + + case Group: + { + static const unsigned short staticallyStoredGroup[] = + { + 103, 114, 111, 117, 112, 0 + }; + data = staticallyStoredGroup; + length = 5; + break; + } + + case Id: + { + static const unsigned short staticallyStoredId[] = + { + 105, 100, 0 + }; + data = staticallyStoredId; + length = 2; + break; + } + + case Import: + { + static const unsigned short staticallyStoredImport[] = + { + 105, 109, 112, 111, 114, 116, 0 + }; + data = staticallyStoredImport; + length = 6; + break; + } + + case Include: + { + static const unsigned short staticallyStoredInclude[] = + { + 105, 110, 99, 108, 117, 100, 101, 0 + }; + data = staticallyStoredInclude; + length = 7; + break; + } + + case ItemType: + { + static const unsigned short staticallyStoredItemType[] = + { + 105, 116, 101, 109, 84, 121, 112, 101, 0 + }; + data = staticallyStoredItemType; + length = 8; + break; + } + + case Key: + { + static const unsigned short staticallyStoredKey[] = + { + 107, 101, 121, 0 + }; + data = staticallyStoredKey; + length = 3; + break; + } + + case Keyref: + { + static const unsigned short staticallyStoredKeyref[] = + { + 107, 101, 121, 114, 101, 102, 0 + }; + data = staticallyStoredKeyref; + length = 6; + break; + } + + case Length: + { + static const unsigned short staticallyStoredLength[] = + { + 108, 101, 110, 103, 116, 104, 0 + }; + data = staticallyStoredLength; + length = 6; + break; + } + + case List: + { + static const unsigned short staticallyStoredList[] = + { + 108, 105, 115, 116, 0 + }; + data = staticallyStoredList; + length = 4; + break; + } + + case MaxExclusive: + { + static const unsigned short staticallyStoredMaxExclusive[] = + { + 109, 97, 120, 69, 120, 99, 108, 117, 115, 105, 118, 101, 0 + }; + data = staticallyStoredMaxExclusive; + length = 12; + break; + } + + case MaxInclusive: + { + static const unsigned short staticallyStoredMaxInclusive[] = + { + 109, 97, 120, 73, 110, 99, 108, 117, 115, 105, 118, 101, 0 + }; + data = staticallyStoredMaxInclusive; + length = 12; + break; + } + + case MaxLength: + { + static const unsigned short staticallyStoredMaxLength[] = + { + 109, 97, 120, 76, 101, 110, 103, 116, 104, 0 + }; + data = staticallyStoredMaxLength; + length = 9; + break; + } + + case MaxOccurs: + { + static const unsigned short staticallyStoredMaxOccurs[] = + { + 109, 97, 120, 79, 99, 99, 117, 114, 115, 0 + }; + data = staticallyStoredMaxOccurs; + length = 9; + break; + } + + case MemberTypes: + { + static const unsigned short staticallyStoredMemberTypes[] = + { + 109, 101, 109, 98, 101, 114, 84, 121, 112, 101, 115, 0 + }; + data = staticallyStoredMemberTypes; + length = 11; + break; + } + + case MinExclusive: + { + static const unsigned short staticallyStoredMinExclusive[] = + { + 109, 105, 110, 69, 120, 99, 108, 117, 115, 105, 118, 101, 0 + }; + data = staticallyStoredMinExclusive; + length = 12; + break; + } + + case MinInclusive: + { + static const unsigned short staticallyStoredMinInclusive[] = + { + 109, 105, 110, 73, 110, 99, 108, 117, 115, 105, 118, 101, 0 + }; + data = staticallyStoredMinInclusive; + length = 12; + break; + } + + case MinLength: + { + static const unsigned short staticallyStoredMinLength[] = + { + 109, 105, 110, 76, 101, 110, 103, 116, 104, 0 + }; + data = staticallyStoredMinLength; + length = 9; + break; + } + + case MinOccurs: + { + static const unsigned short staticallyStoredMinOccurs[] = + { + 109, 105, 110, 79, 99, 99, 117, 114, 115, 0 + }; + data = staticallyStoredMinOccurs; + length = 9; + break; + } + + case Mixed: + { + static const unsigned short staticallyStoredMixed[] = + { + 109, 105, 120, 101, 100, 0 + }; + data = staticallyStoredMixed; + length = 5; + break; + } + + case Mode: + { + static const unsigned short staticallyStoredMode[] = + { + 109, 111, 100, 101, 0 + }; + data = staticallyStoredMode; + length = 4; + break; + } + + case Name: + { + static const unsigned short staticallyStoredName[] = + { + 110, 97, 109, 101, 0 + }; + data = staticallyStoredName; + length = 4; + break; + } + + case Namespace: + { + static const unsigned short staticallyStoredNamespace[] = + { + 110, 97, 109, 101, 115, 112, 97, 99, 101, 0 + }; + data = staticallyStoredNamespace; + length = 9; + break; + } + + case Nillable: + { + static const unsigned short staticallyStoredNillable[] = + { + 110, 105, 108, 108, 97, 98, 108, 101, 0 + }; + data = staticallyStoredNillable; + length = 8; + break; + } + + case NotNamespace: + { + static const unsigned short staticallyStoredNotNamespace[] = + { + 110, 111, 116, 78, 97, 109, 101, 115, 112, 97, 99, 101, 0 + }; + data = staticallyStoredNotNamespace; + length = 12; + break; + } + + case NotQName: + { + static const unsigned short staticallyStoredNotQName[] = + { + 110, 111, 116, 81, 78, 97, 109, 101, 0 + }; + data = staticallyStoredNotQName; + length = 8; + break; + } + + case Notation: + { + static const unsigned short staticallyStoredNotation[] = + { + 110, 111, 116, 97, 116, 105, 111, 110, 0 + }; + data = staticallyStoredNotation; + length = 8; + break; + } + + case OpenContent: + { + static const unsigned short staticallyStoredOpenContent[] = + { + 111, 112, 101, 110, 67, 111, 110, 116, 101, 110, 116, 0 + }; + data = staticallyStoredOpenContent; + length = 11; + break; + } + + case Override: + { + static const unsigned short staticallyStoredOverride[] = + { + 111, 118, 101, 114, 114, 105, 100, 101, 0 + }; + data = staticallyStoredOverride; + length = 8; + break; + } + + case Pattern: + { + static const unsigned short staticallyStoredPattern[] = + { + 112, 97, 116, 116, 101, 114, 110, 0 + }; + data = staticallyStoredPattern; + length = 7; + break; + } + + case Preserve: + { + static const unsigned short staticallyStoredPreserve[] = + { + 112, 114, 101, 115, 101, 114, 118, 101, 0 + }; + data = staticallyStoredPreserve; + length = 8; + break; + } + + case ProcessContents: + { + static const unsigned short staticallyStoredProcessContents[] = + { + 112, 114, 111, 99, 101, 115, 115, 67, 111, 110, 116, 101, 110, 116, 115, 0 + }; + data = staticallyStoredProcessContents; + length = 15; + break; + } + + case Public: + { + static const unsigned short staticallyStoredPublic[] = + { + 112, 117, 98, 108, 105, 99, 0 + }; + data = staticallyStoredPublic; + length = 6; + break; + } + + case Redefine: + { + static const unsigned short staticallyStoredRedefine[] = + { + 114, 101, 100, 101, 102, 105, 110, 101, 0 + }; + data = staticallyStoredRedefine; + length = 8; + break; + } + + case Ref: + { + static const unsigned short staticallyStoredRef[] = + { + 114, 101, 102, 0 + }; + data = staticallyStoredRef; + length = 3; + break; + } + + case Refer: + { + static const unsigned short staticallyStoredRefer[] = + { + 114, 101, 102, 101, 114, 0 + }; + data = staticallyStoredRefer; + length = 5; + break; + } + + case Replace: + { + static const unsigned short staticallyStoredReplace[] = + { + 114, 101, 112, 108, 97, 99, 101, 0 + }; + data = staticallyStoredReplace; + length = 7; + break; + } + + case Restriction: + { + static const unsigned short staticallyStoredRestriction[] = + { + 114, 101, 115, 116, 114, 105, 99, 116, 105, 111, 110, 0 + }; + data = staticallyStoredRestriction; + length = 11; + break; + } + + case Schema: + { + static const unsigned short staticallyStoredSchema[] = + { + 115, 99, 104, 101, 109, 97, 0 + }; + data = staticallyStoredSchema; + length = 6; + break; + } + + case SchemaLocation: + { + static const unsigned short staticallyStoredSchemaLocation[] = + { + 115, 99, 104, 101, 109, 97, 76, 111, 99, 97, 116, 105, 111, 110, 0 + }; + data = staticallyStoredSchemaLocation; + length = 14; + break; + } + + case Selector: + { + static const unsigned short staticallyStoredSelector[] = + { + 115, 101, 108, 101, 99, 116, 111, 114, 0 + }; + data = staticallyStoredSelector; + length = 8; + break; + } + + case Sequence: + { + static const unsigned short staticallyStoredSequence[] = + { + 115, 101, 113, 117, 101, 110, 99, 101, 0 + }; + data = staticallyStoredSequence; + length = 8; + break; + } + + case SimpleContent: + { + static const unsigned short staticallyStoredSimpleContent[] = + { + 115, 105, 109, 112, 108, 101, 67, 111, 110, 116, 101, 110, 116, 0 + }; + data = staticallyStoredSimpleContent; + length = 13; + break; + } + + case SimpleType: + { + static const unsigned short staticallyStoredSimpleType[] = + { + 115, 105, 109, 112, 108, 101, 84, 121, 112, 101, 0 + }; + data = staticallyStoredSimpleType; + length = 10; + break; + } + + case Source: + { + static const unsigned short staticallyStoredSource[] = + { + 115, 111, 117, 114, 99, 101, 0 + }; + data = staticallyStoredSource; + length = 6; + break; + } + + case SubstitutionGroup: + { + static const unsigned short staticallyStoredSubstitutionGroup[] = + { + 115, 117, 98, 115, 116, 105, 116, 117, 116, 105, 111, 110, 71, 114, 111, 117, 112, 0 + }; + data = staticallyStoredSubstitutionGroup; + length = 17; + break; + } + + case System: + { + static const unsigned short staticallyStoredSystem[] = + { + 115, 121, 115, 116, 101, 109, 0 + }; + data = staticallyStoredSystem; + length = 6; + break; + } + + case TargetNamespace: + { + static const unsigned short staticallyStoredTargetNamespace[] = + { + 116, 97, 114, 103, 101, 116, 78, 97, 109, 101, 115, 112, 97, 99, 101, 0 + }; + data = staticallyStoredTargetNamespace; + length = 15; + break; + } + + case Test: + { + static const unsigned short staticallyStoredTest[] = + { + 116, 101, 115, 116, 0 + }; + data = staticallyStoredTest; + length = 4; + break; + } + + case TotalDigits: + { + static const unsigned short staticallyStoredTotalDigits[] = + { + 116, 111, 116, 97, 108, 68, 105, 103, 105, 116, 115, 0 + }; + data = staticallyStoredTotalDigits; + length = 11; + break; + } + + case Type: + { + static const unsigned short staticallyStoredType[] = + { + 116, 121, 112, 101, 0 + }; + data = staticallyStoredType; + length = 4; + break; + } + + case Union: + { + static const unsigned short staticallyStoredUnion[] = + { + 117, 110, 105, 111, 110, 0 + }; + data = staticallyStoredUnion; + length = 5; + break; + } + + case Unique: + { + static const unsigned short staticallyStoredUnique[] = + { + 117, 110, 105, 113, 117, 101, 0 + }; + data = staticallyStoredUnique; + length = 6; + break; + } + + case Use: + { + static const unsigned short staticallyStoredUse[] = + { + 117, 115, 101, 0 + }; + data = staticallyStoredUse; + length = 3; + break; + } + + case Value: + { + static const unsigned short staticallyStoredValue[] = + { + 118, 97, 108, 117, 101, 0 + }; + data = staticallyStoredValue; + length = 5; + break; + } + + case Version: + { + static const unsigned short staticallyStoredVersion[] = + { + 118, 101, 114, 115, 105, 111, 110, 0 + }; + data = staticallyStoredVersion; + length = 7; + break; + } + + case WhiteSpace: + { + static const unsigned short staticallyStoredWhiteSpace[] = + { + 119, 104, 105, 116, 101, 83, 112, 97, 99, 101, 0 + }; + data = staticallyStoredWhiteSpace; + length = 10; + break; + } + + case XML_NS_SCHEMA_URI: + { + static const unsigned short staticallyStoredXML_NS_SCHEMA_URI[] = + { + 104, 116, 116, 112, 58, 47, 47, 119, 119, 119, 46, 119, 51, 46, 111, 114, 103, 47, 50, 48, 48, 49, 47, 88, 77, 76, 83, 99, 104, 101, 109, 97, 0 + }; + data = staticallyStoredXML_NS_SCHEMA_URI; + length = 32; + break; + } + + case XPathDefaultNamespace: + { + static const unsigned short staticallyStoredXPathDefaultNamespace[] = + { + 120, 112, 97, 116, 104, 68, 101, 102, 97, 117, 108, 116, 78, 97, 109, 101, 115, 112, 97, 99, 101, 0 + }; + data = staticallyStoredXPathDefaultNamespace; + length = 21; + break; + } + + case XmlLanguage: + { + static const unsigned short staticallyStoredXmlLanguage[] = + { + 120, 109, 108, 58, 108, 97, 110, 103, 0 + }; + data = staticallyStoredXmlLanguage; + length = 8; + break; + } + + case Xpath: + { + static const unsigned short staticallyStoredXpath[] = + { + 120, 112, 97, 116, 104, 0 + }; + data = staticallyStoredXpath; + length = 5; + break; + } + + default: + /* It's either the default token, or an undefined enum + * value. We silence a compiler warning, and return the + * empty string. */ + ; + } + + union + { + const unsigned short *data; + const QChar *asQChar; + } converter; + converter.data = data; + + return QString::fromRawData(converter.asQChar, length); + } + +QT_END_NAMESPACE + diff --git a/src/xmlpatterns/schema/qxsdschematoken_p.h b/src/xmlpatterns/schema/qxsdschematoken_p.h new file mode 100644 index 0000000..f54f633 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdschematoken_p.h @@ -0,0 +1,209 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +/* NOTE: This file is AUTO GENERATED by qautomaton2cpp.xsl. */ + +#ifndef QPatternist_XsdSchemaToken_h +#define QPatternist_XsdSchemaToken_h + +#include <QtCore/QString> + +QT_BEGIN_NAMESPACE + +class XsdSchemaToken + { + public: + enum NodeName + + { + NoKeyword, +Abstract, +All, +Alternative, +Annotation, +Any, +AnyAttribute, +Appinfo, +AppliesToEmpty, +Assert, +Assertion, +Attribute, +AttributeFormDefault, +AttributeGroup, +Base, +Block, +BlockDefault, +Choice, +Collapse, +ComplexContent, +ComplexType, +Default, +DefaultAttributes, +DefaultAttributesApply, +DefaultOpenContent, +Documentation, +Element, +ElementFormDefault, +Enumeration, +Extension, +Field, +Final, +FinalDefault, +Fixed, +Form, +FractionDigits, +Group, +Id, +Import, +Include, +ItemType, +Key, +Keyref, +Length, +List, +MaxExclusive, +MaxInclusive, +MaxLength, +MaxOccurs, +MemberTypes, +MinExclusive, +MinInclusive, +MinLength, +MinOccurs, +Mixed, +Mode, +Name, +Namespace, +Nillable, +NotNamespace, +NotQName, +Notation, +OpenContent, +Override, +Pattern, +Preserve, +ProcessContents, +Public, +Redefine, +Ref, +Refer, +Replace, +Restriction, +Schema, +SchemaLocation, +Selector, +Sequence, +SimpleContent, +SimpleType, +Source, +SubstitutionGroup, +System, +TargetNamespace, +Test, +TotalDigits, +Type, +Union, +Unique, +Use, +Value, +Version, +WhiteSpace, +XML_NS_SCHEMA_URI, +XPathDefaultNamespace, +XmlLanguage, +Xpath + }; + + static inline NodeName toToken(const QString &value); +static inline NodeName toToken(const QStringRef &value); +static NodeName toToken(const QChar *data, int length); +static QString toString(NodeName token); + + + private: + static inline NodeName classifier2(const QChar *data); +static inline NodeName classifier3(const QChar *data); +static inline NodeName classifier4(const QChar *data); +static inline NodeName classifier5(const QChar *data); +static inline NodeName classifier6(const QChar *data); +static inline NodeName classifier7(const QChar *data); +static inline NodeName classifier8(const QChar *data); +static inline NodeName classifier9(const QChar *data); +static inline NodeName classifier10(const QChar *data); +static inline NodeName classifier11(const QChar *data); +static inline NodeName classifier12(const QChar *data); +static inline NodeName classifier13(const QChar *data); +static inline NodeName classifier14(const QChar *data); +static inline NodeName classifier15(const QChar *data); +static inline NodeName classifier17(const QChar *data); +static inline NodeName classifier18(const QChar *data); +static inline NodeName classifier20(const QChar *data); +static inline NodeName classifier21(const QChar *data); +static inline NodeName classifier22(const QChar *data); +static inline NodeName classifier32(const QChar *data); + + }; + + inline XsdSchemaToken::NodeName XsdSchemaToken::toToken(const QString &value) + { + return toToken(value.constData(), value.length()); + } + + inline XsdSchemaToken::NodeName XsdSchemaToken::toToken(const QStringRef &value) + { + return toToken(value.constData(), value.length()); + } + + +QT_END_NAMESPACE + +#endif diff --git a/src/xmlpatterns/schema/qxsdschematypesfactory.cpp b/src/xmlpatterns/schema/qxsdschematypesfactory.cpp new file mode 100644 index 0000000..430433f --- /dev/null +++ b/src/xmlpatterns/schema/qxsdschematypesfactory.cpp @@ -0,0 +1,126 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxsdschematypesfactory_p.h" + +#include "qbasictypesfactory_p.h" +#include "qbuiltintypes_p.h" +#include "qderivedinteger_p.h" +#include "qderivedstring_p.h" +#include "qcommonnamespaces_p.h" +#include "qxsdschematoken_p.h" +#include "qxsdsimpletype_p.h" + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +XsdSchemaTypesFactory::XsdSchemaTypesFactory(const NamePool::Ptr &namePool) + : m_namePool(namePool) +{ + m_types.reserve(3); + + const XsdFacet::Ptr whiteSpaceFacet(new XsdFacet()); + whiteSpaceFacet->setType(XsdFacet::WhiteSpace); + whiteSpaceFacet->setFixed(true); + whiteSpaceFacet->setValue(DerivedString<TypeString>::fromLexical(m_namePool, XsdSchemaToken::toString(XsdSchemaToken::Collapse))); + + const XsdFacet::Ptr minLengthFacet(new XsdFacet()); + minLengthFacet->setType(XsdFacet::MinimumLength); + minLengthFacet->setValue(DerivedInteger<TypeNonNegativeInteger>::fromLexical(namePool, QLatin1String("1"))); + + XsdFacet::Hash facets; + facets.insert(whiteSpaceFacet->type(), whiteSpaceFacet); + facets.insert(minLengthFacet->type(), minLengthFacet); + + { + const QXmlName typeName = m_namePool->allocateQName(CommonNamespaces::WXS, QLatin1String("NMTOKENS")); + const XsdSimpleType::Ptr type(new XsdSimpleType()); + type->setName(typeName); + type->setWxsSuperType(BuiltinTypes::xsAnySimpleType); + type->setCategory(XsdSimpleType::SimpleTypeList); + type->setItemType(BuiltinTypes::xsNMTOKEN); + type->setDerivationMethod(XsdSimpleType::DerivationRestriction); + type->setFacets(facets); + m_types.insert(typeName, type); + } + { + const QXmlName typeName = m_namePool->allocateQName(CommonNamespaces::WXS, QLatin1String("IDREFS")); + const XsdSimpleType::Ptr type(new XsdSimpleType()); + type->setName(typeName); + type->setWxsSuperType(BuiltinTypes::xsAnySimpleType); + type->setCategory(XsdSimpleType::SimpleTypeList); + type->setItemType(BuiltinTypes::xsIDREF); + type->setDerivationMethod(XsdSimpleType::DerivationRestriction); + type->setFacets(facets); + m_types.insert(typeName, type); + } + { + const QXmlName typeName = m_namePool->allocateQName(CommonNamespaces::WXS, QLatin1String("ENTITIES")); + const XsdSimpleType::Ptr type(new XsdSimpleType()); + type->setName(typeName); + type->setWxsSuperType(BuiltinTypes::xsAnySimpleType); + type->setCategory(XsdSimpleType::SimpleTypeList); + type->setItemType(BuiltinTypes::xsENTITY); + type->setDerivationMethod(XsdSimpleType::DerivationRestriction); + type->setFacets(facets); + m_types.insert(typeName, type); + } +} + +SchemaType::Ptr XsdSchemaTypesFactory::createSchemaType(const QXmlName name) const +{ + if (m_types.contains(name)) { + return m_types.value(name); + } else { + if (!m_basicTypesFactory) + m_basicTypesFactory = BasicTypesFactory::self(m_namePool); + + return m_basicTypesFactory->createSchemaType(name); + } +} + +SchemaType::Hash XsdSchemaTypesFactory::types() const +{ + return m_types; +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/schema/qxsdschematypesfactory_p.h b/src/xmlpatterns/schema/qxsdschematypesfactory_p.h new file mode 100644 index 0000000..ed082ac --- /dev/null +++ b/src/xmlpatterns/schema/qxsdschematypesfactory_p.h @@ -0,0 +1,109 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_XsdSchemaTypesFactory_H +#define Patternist_XsdSchemaTypesFactory_H + +#include <QtCore/QHash> +#include "qschematypefactory_p.h" + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +namespace QPatternist +{ + + /** + * @short Factory for creating schema types for the types defined in XSD. + * + * @ingroup Patternist_types + * @author Tobias Koenig <tobias.koenig@trolltech.com> + */ + class XsdSchemaTypesFactory : public SchemaTypeFactory + { + public: + /** + * Creates a new schema type factory. + * + * @param namePool The name pool all type names belong to. + */ + XsdSchemaTypesFactory(const NamePool::Ptr &namePool); + + /** + * Creates a primitive type for @p name. If @p name is not supported, + * @c null is returned. + * + * @note This does not handle user defined types, only builtin types. + */ + virtual SchemaType::Ptr createSchemaType(const QXmlName) const; + + /** + * Returns a hash of all available types. + */ + virtual SchemaType::Hash types() const; + + private: + /** + * A dictonary of all predefined schema types. + */ + SchemaType::Hash m_types; + + NamePool::Ptr m_namePool; + mutable SchemaTypeFactory::Ptr m_basicTypesFactory; + }; +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/schema/qxsdsimpletype.cpp b/src/xmlpatterns/schema/qxsdsimpletype.cpp new file mode 100644 index 0000000..8b367ba --- /dev/null +++ b/src/xmlpatterns/schema/qxsdsimpletype.cpp @@ -0,0 +1,148 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#include "qxsdsimpletype_p.h" + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +QString XsdSimpleType::displayName(const NamePool::Ptr &np) const +{ + return np->displayName(name(np)); +} + +void XsdSimpleType::setWxsSuperType(const SchemaType::Ptr &type) +{ + m_superType = type; +} + +SchemaType::Ptr XsdSimpleType::wxsSuperType() const +{ + return m_superType; +} + +void XsdSimpleType::setContext(const NamedSchemaComponent::Ptr &component) +{ + m_context = component; +} + +NamedSchemaComponent::Ptr XsdSimpleType::context() const +{ + return m_context; +} + +void XsdSimpleType::setPrimitiveType(const AnySimpleType::Ptr &type) +{ + m_primitiveType = type; +} + +AnySimpleType::Ptr XsdSimpleType::primitiveType() const +{ + return m_primitiveType; +} + +void XsdSimpleType::setItemType(const AnySimpleType::Ptr &type) +{ + m_itemType = type; +} + +AnySimpleType::Ptr XsdSimpleType::itemType() const +{ + return m_itemType; +} + +void XsdSimpleType::setMemberTypes(const AnySimpleType::List &types) +{ + m_memberTypes = types; +} + +AnySimpleType::List XsdSimpleType::memberTypes() const +{ + return m_memberTypes; +} + +void XsdSimpleType::setFacets(const XsdFacet::Hash &facets) +{ + m_facets = facets; +} + +XsdFacet::Hash XsdSimpleType::facets() const +{ + return m_facets; +} + +void XsdSimpleType::setCategory(TypeCategory category) +{ + m_typeCategory = category; +} + +XsdSimpleType::TypeCategory XsdSimpleType::category() const +{ + return m_typeCategory; +} + +void XsdSimpleType::setDerivationMethod(DerivationMethod method) +{ + m_derivationMethod = method; +} + +XsdSimpleType::DerivationMethod XsdSimpleType::derivationMethod() const +{ + return m_derivationMethod; +} + +bool XsdSimpleType::isDefinedBySchema() const +{ + return true; +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/schema/qxsdsimpletype_p.h b/src/xmlpatterns/schema/qxsdsimpletype_p.h new file mode 100644 index 0000000..12053f0 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdsimpletype_p.h @@ -0,0 +1,219 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_XsdSimpleType_H +#define Patternist_XsdSimpleType_H + +#include "qanysimpletype_p.h" +#include "qxsdfacet_p.h" +#include "qxsduserschematype_p.h" + +#include <QtCore/QSet> + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +namespace QPatternist +{ + /** + * @short Represents a XSD simpleType object. + * + * This class represents the <em>simpleType</em> object of a XML schema as described + * <a href="http://www.w3.org/TR/xmlschema-2/#rf-defn">here</a>. + * + * It contains information from either a top-level simple type declaration (as child of a <em>schema</em> object) + * or a local simple type declaration (as descendant of an <em>element</em> or <em>complexType</em> object). + * + * @see <a href="http://www.w3.org/Submission/2004/SUBM-xmlschema-api-20040309/xml-schema-api.html#Interface-XSSimpleType">XML Schema API reference</a> + * @ingroup Patternist_schema + * @author Tobias Koenig <tobias.koenig@trolltech.com> + */ + class XsdSimpleType : public XsdUserSchemaType<AnySimpleType> + { + public: + typedef QExplicitlySharedDataPointer<XsdSimpleType> Ptr; + + /** + * Returns the display name of the simple type. + * + * @param namePool The name pool the type name is stored in. + */ + virtual QString displayName(const NamePool::Ptr &namePool) const; + + /** + * Sets the base @p type of the simple type. + * + * @see <a href="http://www.w3.org/TR/xmlschema-2/#defn-basetype">Base Type Definition</a> + */ + void setWxsSuperType(const SchemaType::Ptr &type); + + /** + * Returns the base type of the simple type or an empty pointer if no base type is + * set. + */ + virtual SchemaType::Ptr wxsSuperType() const; + + /** + * Sets the context @p component of the simple type. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#std-context">Context Definition</a> + */ + void setContext(const NamedSchemaComponent::Ptr &component); + + /** + * Returns the context component of the simple type. + */ + NamedSchemaComponent::Ptr context() const; + + /** + * Sets the primitive @p type of the simple type. + * + * The primitive type is only specified if the category is SimpleTypeAtomic. + * + * @see <a href="http://www.w3.org/TR/xmlschema-2/#defn-primitive">Primitive Type Definition</a> + */ + void setPrimitiveType(const AnySimpleType::Ptr &type); + + /** + * Returns the primitive type of the simple type or an empty pointer if the category is + * not SimpleTypeAtomic. + */ + AnySimpleType::Ptr primitiveType() const; + + /** + * Sets the list item @p type of the simple type. + * + * The list item type is only specified if the category is SimpleTypeList. + * + * @see <a href="http://www.w3.org/TR/xmlschema-2/#defn-itemType">Item Type Definition</a> + */ + void setItemType(const AnySimpleType::Ptr &type); + + /** + * Returns the list item type of the simple type or an empty pointer if the category is + * not SimpleTypeList. + */ + AnySimpleType::Ptr itemType() const; + + /** + * Sets the member @p types of the simple type. + * + * The member types are only specified if the category is SimpleTypeUnion. + * + * @see <a href="http://www.w3.org/TR/xmlschema-2/#defn-memberTypes">Member Types Definition</a> + */ + void setMemberTypes(const AnySimpleType::List &types); + + /** + * Returns the list member types of the simple type or an empty list if the category is + * not SimpleTypeUnion. + */ + AnySimpleType::List memberTypes() const; + + /** + * Sets the @p facets of the simple type. + * + * @see <a href="http://www.w3.org/TR/xmlschema-2/#defn-facets">Facets Definition</a> + */ + void setFacets(const XsdFacet::Hash &facets); + + /** + * Returns the facets of the simple type. + */ + XsdFacet::Hash facets() const; + + /** + * Sets the @p category (variety) of the simple type. + * + * @see <a href="http://www.w3.org/TR/xmlschema-2/#defn-variety">Variety Definition</a> + */ + void setCategory(TypeCategory category); + + /** + * Returns the category (variety) of the simple type. + */ + virtual TypeCategory category() const; + + /** + * Sets the derivation @p method of the simple type. + * + * @see DerivationMethod + */ + void setDerivationMethod(DerivationMethod method); + + /** + * Returns the derivation method of the simple type. + */ + virtual DerivationMethod derivationMethod() const; + + /** + * Always returns @c true. + */ + virtual bool isDefinedBySchema() const; + + private: + SchemaType::Ptr m_superType; + NamedSchemaComponent::Ptr m_context; + AnySimpleType::Ptr m_primitiveType; + AnySimpleType::Ptr m_itemType; + AnySimpleType::List m_memberTypes; + XsdFacet::Hash m_facets; + TypeCategory m_typeCategory; + DerivationMethod m_derivationMethod; + }; +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/schema/qxsdstatemachine.cpp b/src/xmlpatterns/schema/qxsdstatemachine.cpp new file mode 100644 index 0000000..3a59042 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdstatemachine.cpp @@ -0,0 +1,477 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* + * NOTE: This file is included by qxsdstatemachine_p.h + * if you need some includes, put them in qxsdstatemachine_p.h (outside of the namespace) + */ + +template <typename TransitionType> +XsdStateMachine<TransitionType>::XsdStateMachine() + : m_counter(50) +{ +} + +template <typename TransitionType> +XsdStateMachine<TransitionType>::XsdStateMachine(const NamePool::Ptr &namePool) + : m_namePool(namePool) + , m_counter(50) +{ +} + +template <typename TransitionType> +typename XsdStateMachine<TransitionType>::StateId XsdStateMachine<TransitionType>::addState(StateType type) +{ +#ifndef QT_NO_DEBUG + // make sure we don't have two start states + if (type == StartState) { + QHashIterator<StateId, StateType> it(m_states); + while (it.hasNext()) { + it.next(); + Q_ASSERT(it.value() != StartState && it.value() != StartEndState); + } + } +#endif // QT_NO_DEBUG + + // reserve new state id + const StateId id = ++m_counter; + m_states.insert(id, type); + + // if it is a start state, we make it to our current state + if (type == StartState || type == StartEndState) + m_currentState = id; + + return id; +} + +template <typename TransitionType> +void XsdStateMachine<TransitionType>::addTransition(StateId start, TransitionType transition, StateId end) +{ + QHash<TransitionType, QVector<StateId> > &hash = m_transitions[start]; + QVector<StateId> &states = hash[transition]; + if (!states.contains(end)) + states.append(end); +} + +template <typename TransitionType> +void XsdStateMachine<TransitionType>::addEpsilonTransition(StateId start, StateId end) +{ + QVector<StateId> &states = m_epsilonTransitions[start]; + states.append(end); +} + +template <typename TransitionType> +void XsdStateMachine<TransitionType>::reset() +{ + // reset the machine to the start state + QHashIterator<StateId, StateType> it(m_states); + while (it.hasNext()) { + it.next(); + if (it.value() == StartState || it.value() == StartEndState) { + m_currentState = it.key(); + return; + } + } + + Q_ASSERT(false); +} + +template <typename TransitionType> +void XsdStateMachine<TransitionType>::clear() +{ + m_states.clear(); + m_transitions.clear(); + m_epsilonTransitions.clear(); + m_currentState = -1; + m_counter = 50; +} + +template <typename TransitionType> +bool XsdStateMachine<TransitionType>::proceed(TransitionType transition) +{ + // check that we are not in an invalid state + if (!m_transitions.contains(m_currentState)) { + return false; + } + + // fetch the transition entry for the current state + const QHash<TransitionType, QVector<StateId> > &entry = m_transitions[m_currentState]; + if (entry.contains(transition)) { // is there an transition for the given input? + m_currentState = entry.value(transition).first(); + m_lastTransition = transition; + return true; + } else { + return false; + } +} + +template <typename TransitionType> +QList<TransitionType> XsdStateMachine<TransitionType>::possibleTransitions() const +{ + // check that we are not in an invalid state + if (!m_transitions.contains(m_currentState)) { + return QList<TransitionType>(); + } + + // fetch the transition entry for the current state + const QHash<TransitionType, QVector<StateId> > &entry = m_transitions[m_currentState]; + + return entry.keys(); +} + +template <typename TransitionType> +template <typename InputType> +bool XsdStateMachine<TransitionType>::proceed(InputType input) +{ + // check that we are not in an invalid state + if (!m_transitions.contains(m_currentState)) { + return false; + } + + // fetch the transition entry for the current state + const QHash<TransitionType, QVector<StateId> > &entry = m_transitions[m_currentState]; + QHashIterator<TransitionType, QVector<StateId> > it(entry); + while (it.hasNext()) { + it.next(); + if (inputEqualsTransition(input, it.key())) { + m_currentState = it.value().first(); + m_lastTransition = it.key(); + return true; + } + } + + return false; +} + +template <typename TransitionType> +template <typename InputType> +bool XsdStateMachine<TransitionType>::inputEqualsTransition(InputType input, TransitionType transition) const +{ + return false; +} + +template <typename TransitionType> +bool XsdStateMachine<TransitionType>::inEndState() const +{ + // check if current state is an end state + return (m_states.value(m_currentState) == StartEndState || m_states.value(m_currentState) == EndState); +} + +template <typename TransitionType> +TransitionType XsdStateMachine<TransitionType>::lastTransition() const +{ + return m_lastTransition; +} + +template <typename TransitionType> +typename XsdStateMachine<TransitionType>::StateId XsdStateMachine<TransitionType>::startState() const +{ + QHashIterator<StateId, StateType> it(m_states); + while (it.hasNext()) { + it.next(); + if (it.value() == StartState || it.value() == StartEndState) + return it.key(); + } + + Q_ASSERT(false); // should never be reached + return -1; +} + +template <typename TransitionType> +QString XsdStateMachine<TransitionType>::transitionTypeToString(TransitionType type) const +{ + Q_UNUSED(type) + + return QString(); +} + +template <typename TransitionType> +bool XsdStateMachine<TransitionType>::outputGraph(QIODevice *device, const QString &graphName) const +{ + if (!device->isOpen()) { + qWarning("device must be open for writing"); + return false; + } + + QByteArray graph; + QTextStream s(&graph); + + QHashIterator<StateId, QHash<TransitionType, QVector<StateId> > > it(m_transitions); + QHashIterator<StateId, StateType> it3(m_states); + + s << "digraph " << graphName << " {\n"; + s << " mindist = 2.0\n"; + + // draw edges + while (it.hasNext()) { + it.next(); + + QHashIterator<TransitionType, QVector<StateId> > it2(it.value()); + while (it2.hasNext()) { + it2.next(); + for (int i = 0; i < it2.value().count(); ++i) + s << " " << it.key() << " -> " << it2.value().at(i) << " [label=\"" << transitionTypeToString(it2.key()) << "\"]\n"; + } + } + + QHashIterator<StateId, QVector<StateId> > it4(m_epsilonTransitions); + while (it4.hasNext()) { + it4.next(); + + const QVector<StateId> states = it4.value(); + for (int i = 0; i < states.count(); ++i) + s << " " << it4.key() << " -> " << states.at(i) << " [label=\"ε\"]\n"; + } + + // draw node infos + while (it3.hasNext()) { + it3.next(); + + QString style; + if (it3.value() == StartState) { + style = QLatin1String("shape=circle, style=filled, color=blue"); + } else if (it3.value() == StartEndState) { + style = QLatin1String("shape=doublecircle, style=filled, color=blue"); + } else if (it3.value() == InternalState) { + style = QLatin1String("shape=circle, style=filled, color=red"); + } else if (it3.value() == EndState) { + style = QLatin1String("shape=doublecircle, style=filled, color=green"); + } + + s << " " << it3.key() << " [" << style << "]\n"; + } + + s << "}\n"; + + s.flush(); + + if (device->write(graph) == -1) + return false; + + return true; +} + + +template <typename TransitionType> +typename XsdStateMachine<TransitionType>::StateId XsdStateMachine<TransitionType>::dfaStateForNfaState(QSet<StateId> nfaState, + QList< QPair<QSet<StateId>, StateId> > &stateTable, + XsdStateMachine<TransitionType> &dfa) const +{ + // check whether we have the given state in our lookup table + // already, in that case simply return it + for (int i = 0; i < stateTable.count(); ++i) { + if (stateTable.at(i).first == nfaState) + return stateTable.at(i).second; + } + + // check if the NFA state set contains a Start or End + // state, in that case our new DFA state will be a + // Start or End state as well + StateType type = InternalState; + QSetIterator<StateId> it(nfaState); + bool hasStartState = false; + bool hasEndState = false; + while (it.hasNext()) { + const StateId state = it.next(); + if (m_states.value(state) == EndState) { + hasEndState = true; + } else if (m_states.value(state) == StartState) { + hasStartState = true; + } + } + if (hasStartState) { + if (hasEndState) + type = StartEndState; + else + type = StartState; + } else if (hasEndState) { + type = EndState; + } + + // create the new DFA state + const StateId dfaState = dfa.addState(type); + + // add the new DFA state to the lookup table + stateTable.append(qMakePair<QSet<StateId>, StateId>(nfaState, dfaState)); + + return dfaState; +} + + +template <typename TransitionType> +QSet<typename XsdStateMachine<TransitionType>::StateId> XsdStateMachine<TransitionType>::epsilonClosure(const QSet<StateId> &input) const +{ + // every state can reach itself by epsilon transition, so include the input states + // in the result as well + QSet<StateId> result = input; + + // add the input states to the list of to be processed states + QList<StateId> workStates = input.toList(); + while (!workStates.isEmpty()) { // while there are states to be processed left... + + // dequeue one state from list + const StateId state = workStates.takeFirst(); + + // get the list of states that can be reached by the epsilon transition + // from the current 'state' + const QVector<StateId> targetStates = m_epsilonTransitions.value(state); + for (int i = 0; i < targetStates.count(); ++i) { + // if we have this target state not in our result set yet... + if (!result.contains(targetStates.at(i))) { + // ... add it to the result set + result.insert(targetStates.at(i)); + + // add the target state to the list of to be processed states as well, + // as we want to have the epsilon transitions not only for the first + // level of following states + workStates.append(targetStates.at(i)); + } + } + } + + return result; +} + +template <typename TransitionType> +QSet<typename XsdStateMachine<TransitionType>::StateId> XsdStateMachine<TransitionType>::move(const QSet<StateId> &states, TransitionType input) const +{ + QSet<StateId> result; + + QSetIterator<StateId> it(states); + while (it.hasNext()) { // iterate over all given states + const StateId state = it.next(); + + // get the transition table for the current state + const QHash<TransitionType, QVector<StateId> > transitions = m_transitions.value(state); + + // get the target states for the given input + const QVector<StateId> targetStates = transitions.value(input); + + // add all target states to the result + for (int i = 0; i < targetStates.size(); ++i) + result.insert(targetStates.at(i)); + } + + return result; +} + +template <typename TransitionType> +XsdStateMachine<TransitionType> XsdStateMachine<TransitionType>::toDFA() const +{ + XsdStateMachine<TransitionType> dfa(m_namePool); + dfa.m_counter = 100; + QList< QPair< QSet<StateId>, StateId> > table; + QList< QSet<StateId> > isMarked; + + // search the start state as the algorithm starts with it... + StateId startState = -1; + QHashIterator<StateId, StateType> stateTypeIt(m_states); + while (stateTypeIt.hasNext()) { + stateTypeIt.next(); + if (stateTypeIt.value() == StartState) { + startState = stateTypeIt.key(); + break; + } + } + Q_ASSERT(startState != -1); + + // our list of state set that still have to be processed + QList< QSet<StateId> > workStates; + + // add the start state to the list of to processed state sets + workStates.append(epsilonClosure(QSet<StateId>() << startState)); + + while (!workStates.isEmpty()) { // as long as there are state sets to process left + + // enqueue set of states + const QSet<StateId> states = workStates.takeFirst(); + + if (isMarked.contains(states)) // we processed this state set already + continue; + + // mark as processed + isMarked.append(states); + + // select a list of all inputs that are possible for + // the 'states' set + QList<TransitionType> input; + + { + QSetIterator<StateId> it(states); + while (it.hasNext()) { + input << m_transitions.value(it.next()).keys(); + } + } + + // get the state in DFA that corresponds to the 'states' set in the NFA + const StateId dfaBegin = dfaStateForNfaState(states, table, dfa); + + for (int i = 0; i < input.count(); ++i) { // for each possible input + // retrieve the states that can be reached from the 'states' set by the + // given input or by epsilon transition + const QSet<StateId> followStates = epsilonClosure(move(states, input.at(i))); + + // get the state in DFA that corresponds to the 'followStates' set in the NFA + const StateId dfaEnd = dfaStateForNfaState(followStates, table, dfa); + + // adds a new transition to the DFA that corresponds to the transitions between + // 'states' and 'followStates' in the NFA + dfa.addTransition(dfaBegin, input.at(i), dfaEnd); + + // add the 'followStates' to the list of to be processed state sets + workStates.append(followStates); + } + } + + return dfa; +} + +template <typename TransitionType> +QHash<typename XsdStateMachine<TransitionType>::StateId, typename XsdStateMachine<TransitionType>::StateType> XsdStateMachine<TransitionType>::states() const +{ + return m_states; +} + +template <typename TransitionType> +QHash<typename XsdStateMachine<TransitionType>::StateId, QHash<TransitionType, QVector<typename XsdStateMachine<TransitionType>::StateId> > > XsdStateMachine<TransitionType>::transitions() const +{ + return m_transitions; +} diff --git a/src/xmlpatterns/schema/qxsdstatemachine_p.h b/src/xmlpatterns/schema/qxsdstatemachine_p.h new file mode 100644 index 0000000..68bc801 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdstatemachine_p.h @@ -0,0 +1,245 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_XsdStateMachine_H +#define Patternist_XsdStateMachine_H + +#include "qnamepool_p.h" + +#include <QtCore/QHash> +#include <QtCore/QSet> +#include <QtCore/QTextStream> + +class QIODevice; + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +namespace QPatternist +{ + /** + * @short A state machine used for evaluation. + * + * @ingroup Patternist_schema + * @author Tobias Koenig <tobias.koenig@trolltech.com> + */ + template <typename TransitionType> + class XsdStateMachine + { + public: + typedef qint32 StateId; + + /** + * Describes the type of state. + */ + enum StateType + { + StartState, ///< The state the machine will start with. + StartEndState, ///< The state the machine will start with, can be end state as well. + InternalState, ///< Any state that is not start or end state. + EndState ///< Any state where the machine is allowed to stop. + }; + + /** + * Creates a new state machine object. + */ + XsdStateMachine(); + + /** + * Creates a new state machine object. + * + * The name pool to use for accessing object names. + */ + XsdStateMachine(const NamePool::Ptr &namePool); + + /** + * Adds a new state of the given @p type to the state machine. + * + * @return The id of the new state. + */ + StateId addState(StateType type); + + /** + * Adds a new @p transition to the state machine. + * + * @param start The start state. + * @param transition The transition to come from the start to the end state. + * @param end The end state. + */ + void addTransition(StateId start, TransitionType transition, StateId end); + + /** + * Adds a new epsilon @p transition to the state machine. + * + * @param start The start state. + * @param end The end state. + */ + void addEpsilonTransition(StateId start, StateId end); + + /** + * Resets the machine to the start state. + */ + void reset(); + + /** + * Removes all states and transitions from the state machine. + */ + void clear(); + + /** + * Continues execution of the machine with the given input @p transition. + * + * @return @c true if the transition was successfull, @c false otherwise. + */ + bool proceed(TransitionType transition); + + /** + * Returns the list of transitions that are reachable from the current + * state. + */ + QList<TransitionType> possibleTransitions() const; + + /** + * Continues execution of the machine with the given @p input. + * + * @note To use this method, inputEqualsTransition must be implemented + * to find the right transition to use. + * + * @return @c true if the transition was successfull, @c false otherwise. + */ + template <typename InputType> + bool proceed(InputType input); + + /** + * Returns whether the given @p input matches the given @p transition. + */ + template <typename InputType> + bool inputEqualsTransition(InputType input, TransitionType transition) const; + + /** + * Returns whether the machine is in an allowed end state. + */ + bool inEndState() const; + + /** + * Returns the last transition that was taken. + */ + TransitionType lastTransition() const; + + /** + * Returns the start state of the machine. + */ + StateId startState() const; + + /** + * This method should be redefined by template specialization for every + * concret TransitionType. + */ + QString transitionTypeToString(TransitionType type) const; + + /** + * Outputs the state machine in DOT format to the given + * output @p device. + */ + bool outputGraph(QIODevice *device, const QString &graphName) const; + + /** + * Returns a DFA that is equal to the NFA of the state machine. + */ + XsdStateMachine<TransitionType> toDFA() const; + + /** + * Returns the information of all states of the state machine. + */ + QHash<StateId, StateType> states() const; + + /** + * Returns the information of all transitions of the state machine. + */ + QHash<StateId, QHash<TransitionType, QVector<StateId> > > transitions() const; + + private: + /** + * Returns the DFA state for the given @p nfaStat from the given @p stateTable. + * If there is no corresponding DFA state yet, a new one is created. + */ + StateId dfaStateForNfaState(QSet<StateId> nfaState, QList< QPair< QSet<StateId>, StateId> > &stateTable, XsdStateMachine<TransitionType> &dfa) const; + + /** + * Returns the set of all states that can be reached from the set of @p input states + * by the epsilon transition. + */ + QSet<StateId> epsilonClosure(const QSet<StateId> &input) const; + + /** + * Returns the set of all states that can be reached from the set of given @p states + * by the given @p input. + */ + QSet<StateId> move(const QSet<StateId> &states, TransitionType input) const; + + NamePool::Ptr m_namePool; + QHash<StateId, StateType> m_states; + QHash<StateId, QHash<TransitionType, QVector<StateId> > > m_transitions; + QHash<StateId, QVector<StateId> > m_epsilonTransitions; + StateId m_currentState; + qint32 m_counter; + TransitionType m_lastTransition; + }; + + #include "qxsdstatemachine.cpp" +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/schema/qxsdstatemachinebuilder.cpp b/src/xmlpatterns/schema/qxsdstatemachinebuilder.cpp new file mode 100644 index 0000000..ae7fefe --- /dev/null +++ b/src/xmlpatterns/schema/qxsdstatemachinebuilder.cpp @@ -0,0 +1,260 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxsdstatemachinebuilder_p.h" + +#include "qxsdelement_p.h" +#include "qxsdmodelgroup_p.h" +#include "qxsdschemahelper_p.h" + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +/* + * This methods takes a list of objects and returns a list of list + * of all combinations the objects can be ordered. + * + * e.g. input = [ 1, 2, 3 ] + * output = [ + * [ 1, 2, 3 ], + * [ 1, 3, 2 ], + * [ 2, 1, 3 ], + * [ 2, 3, 1 ], + * [ 3, 1, 2 ], + * [ 3, 2, 1 ] + * ] + * + * The method is used to create all possible combinations for the particles + * in an <all> model group. + */ +template <typename T> +QList< QList<T> > allCombinations(const QList<T> &input) +{ + if (input.count() == 1) + return (QList< QList<T> >() << input); + + QList< QList<T> > result; + for (int i = 0; i < input.count(); ++i) { + QList<T> subList = input; + T value = subList.takeAt(i); + + QList< QList<T> > subLists = allCombinations(subList); + for (int j = 0; j < subLists.count(); ++j) { + subLists[j].prepend(value); + } + result << subLists; + } + + return result; +} + +XsdStateMachineBuilder::XsdStateMachineBuilder(XsdStateMachine<XsdTerm::Ptr> *machine, const NamePool::Ptr &namePool, Mode mode) + : m_stateMachine(machine), m_namePool(namePool), m_mode(mode) +{ +} + +XsdStateMachine<XsdTerm::Ptr>::StateId XsdStateMachineBuilder::reset() +{ + Q_ASSERT(m_stateMachine); + + m_stateMachine->clear(); + + return m_stateMachine->addState(XsdStateMachine<XsdTerm::Ptr>::EndState); +} + +XsdStateMachine<XsdTerm::Ptr>::StateId XsdStateMachineBuilder::addStartState(XsdStateMachine<XsdTerm::Ptr>::StateId state) +{ + const XsdStateMachine<XsdTerm::Ptr>::StateId startState = m_stateMachine->addState(XsdStateMachine<XsdTerm::Ptr>::StartState); + m_stateMachine->addEpsilonTransition(startState, state); + + return startState; +} + +/* + * Create the FSA according to Algorithm Tp(S) from http://www.ltg.ed.ac.uk/~ht/XML_Europe_2003.html + */ +XsdStateMachine<XsdTerm::Ptr>::StateId XsdStateMachineBuilder::buildParticle(const XsdParticle::Ptr &particle, XsdStateMachine<XsdTerm::Ptr>::StateId endState) +{ + XsdStateMachine<XsdTerm::Ptr>::StateId currentStartState = endState; + XsdStateMachine<XsdTerm::Ptr>::StateId currentEndState = endState; + + // 2 + if (particle->maximumOccursUnbounded()) { + const XsdStateMachine<XsdTerm::Ptr>::StateId t = m_stateMachine->addState(XsdStateMachine<XsdTerm::Ptr>::InternalState); + const XsdStateMachine<XsdTerm::Ptr>::StateId n = buildTerm(particle->term(), t); + + m_stateMachine->addEpsilonTransition(t, n); + m_stateMachine->addEpsilonTransition(n, endState); + + currentEndState = t; + currentStartState = t; + } else { // 3 + int count = (particle->maximumOccurs() - particle->minimumOccurs()); + if (count > 100) + count = 100; + + for (int i = 0; i < count; ++i) { + currentStartState = buildTerm(particle->term(), currentEndState); + m_stateMachine->addEpsilonTransition(currentStartState, endState); + currentEndState = currentStartState; + } + } + + int minOccurs = particle->minimumOccurs(); + if (minOccurs > 100) + minOccurs = 100; + + for (int i = 0; i < minOccurs; ++i) { + currentStartState = buildTerm(particle->term(), currentEndState); + currentEndState = currentStartState; + } + + return currentStartState; +} + +/* + * Create the FSA according to Algorithm Tt(S) from http://www.ltg.ed.ac.uk/~ht/XML_Europe_2003.html + */ +XsdStateMachine<XsdTerm::Ptr>::StateId XsdStateMachineBuilder::buildTerm(const XsdTerm::Ptr &term, XsdStateMachine<XsdTerm::Ptr>::StateId endState) +{ + if (term->isWildcard()) { // 1 + const XsdStateMachine<XsdTerm::Ptr>::StateId b = m_stateMachine->addState(XsdStateMachine<XsdTerm::Ptr>::InternalState); + m_stateMachine->addTransition(b, term, endState); + return b; + } else if (term->isElement()) { // 2 + const XsdStateMachine<XsdTerm::Ptr>::StateId b = m_stateMachine->addState(XsdStateMachine<XsdTerm::Ptr>::InternalState); + m_stateMachine->addTransition(b, term, endState); + + const XsdElement::Ptr element(term); + if (m_mode == CheckingMode) { + const XsdElement::List substGroups = element->substitutionGroups(); + for (int i = 0; i < substGroups.count(); ++i) + m_stateMachine->addTransition(b, substGroups.at(i), endState); + } else if (m_mode == ValidatingMode) { + const XsdElement::List substGroups = element->substitutionGroups(); + for (int i = 0; i < substGroups.count(); ++i) { + if (XsdSchemaHelper::substitutionGroupOkTransitive(element, substGroups.at(i), m_namePool)) + m_stateMachine->addTransition(b, substGroups.at(i), endState); + } + } + + return b; + } else if (term->isModelGroup()) { + const XsdModelGroup::Ptr group(term); + + if (group->compositor() == XsdModelGroup::ChoiceCompositor) { // 3 + const XsdStateMachine<XsdTerm::Ptr>::StateId b = m_stateMachine->addState(XsdStateMachine<XsdTerm::Ptr>::InternalState); + + for (int i = 0; i < group->particles().count(); ++i) { + const XsdParticle::Ptr particle(group->particles().at(i)); + if (particle->maximumOccurs() != 0) { + const XsdStateMachine<XsdTerm::Ptr>::StateId state = buildParticle(particle, endState); + m_stateMachine->addEpsilonTransition(b, state); + } + } + + return b; + } else if (group->compositor() == XsdModelGroup::SequenceCompositor) { // 4 + XsdStateMachine<XsdTerm::Ptr>::StateId currentStartState = endState; + XsdStateMachine<XsdTerm::Ptr>::StateId currentEndState = endState; + + for (int i = (group->particles().count() - 1); i >= 0; --i) { // iterate reverse + const XsdParticle::Ptr particle(group->particles().at(i)); + if (particle->maximumOccurs() != 0) { + currentStartState = buildParticle(particle, currentEndState); + currentEndState = currentStartState; + } + } + + return currentStartState; + } else if (group->compositor() == XsdModelGroup::AllCompositor) { + const XsdStateMachine<XsdTerm::Ptr>::StateId newStartState = m_stateMachine->addState(XsdStateMachine<XsdTerm::Ptr>::InternalState); + + const QList<XsdParticle::List> list = allCombinations(group->particles()); + + for (int i = 0; i < list.count(); ++i) { + XsdStateMachine<XsdTerm::Ptr>::StateId currentStartState = endState; + XsdStateMachine<XsdTerm::Ptr>::StateId currentEndState = endState; + + const XsdParticle::List particles = list.at(i); + for (int j = (particles.count() - 1); j >= 0; --j) { // iterate reverse + const XsdParticle::Ptr particle(particles.at(j)); + if (particle->maximumOccurs() != 0) { + currentStartState = buildParticle(particle, currentEndState); + currentEndState = currentStartState; + } + } + m_stateMachine->addEpsilonTransition(newStartState, currentStartState); + } + + if (list.isEmpty()) + return endState; + else + return newStartState; + } + } + + Q_ASSERT(false); + return 0; +} + +static void internalParticleLookupMap(const XsdParticle::Ptr &particle, QHash<XsdTerm::Ptr, XsdParticle::Ptr> &hash) +{ + hash.insert(particle->term(), particle); + + if (particle->term()->isModelGroup()) { + const XsdModelGroup::Ptr group(particle->term()); + const XsdParticle::List particles = group->particles(); + for (int i = 0; i < particles.count(); ++i) + internalParticleLookupMap(particles.at(i), hash); + } +} + +QHash<XsdTerm::Ptr, XsdParticle::Ptr> XsdStateMachineBuilder::particleLookupMap(const XsdParticle::Ptr &particle) +{ + QHash<XsdTerm::Ptr, XsdParticle::Ptr> result; + internalParticleLookupMap(particle, result); + + return result; +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/schema/qxsdstatemachinebuilder_p.h b/src/xmlpatterns/schema/qxsdstatemachinebuilder_p.h new file mode 100644 index 0000000..08d69de --- /dev/null +++ b/src/xmlpatterns/schema/qxsdstatemachinebuilder_p.h @@ -0,0 +1,141 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_XsdStateMachineBuilder_H +#define Patternist_XsdStateMachineBuilder_H + +#include "qxsdparticle_p.h" +#include "qxsdstatemachine_p.h" +#include "qxsdterm_p.h" + +#include <QtCore/QExplicitlySharedDataPointer> +#include <QtCore/QList> + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +namespace QPatternist +{ + /** + * @short A helper class to build up validation state machines. + * + * @ingroup Patternist_schema + * @author Tobias Koenig <tobias.koenig@trolltech.com> + */ + class XsdStateMachineBuilder : public QSharedData + { + public: + typedef QExplicitlySharedDataPointer<XsdStateMachineBuilder> Ptr; + + enum Mode + { + CheckingMode, + ValidatingMode + }; + + /** + * Creates a new state machine builder. + * + * @param machine The state machine it should work on. + * @param namePool The name pool used by all schema components. + * @param mode The mode the machine shall be build for. + */ + XsdStateMachineBuilder(XsdStateMachine<XsdTerm::Ptr> *machine, const NamePool::Ptr &namePool, Mode mode = CheckingMode); + + /** + * Resets the state machine. + * + * @returns The initial end state. + */ + XsdStateMachine<XsdTerm::Ptr>::StateId reset(); + + /** + * Prepends a start state to the given @p state. + * That is needed to allow the conversion of the state machine from a FSA to a DFA. + */ + XsdStateMachine<XsdTerm::Ptr>::StateId addStartState(XsdStateMachine<XsdTerm::Ptr>::StateId state); + + /** + * Creates the state machine for the given @p particle that should have the + * given @p endState. + * + * @returns The new start state. + */ + XsdStateMachine<XsdTerm::Ptr>::StateId buildParticle(const XsdParticle::Ptr &particle, XsdStateMachine<XsdTerm::Ptr>::StateId endState); + + /** + * Creates the state machine for the given @p term that should have the + * given @p endState. + * + * @returns The new start state. + */ + XsdStateMachine<XsdTerm::Ptr>::StateId buildTerm(const XsdTerm::Ptr &term, XsdStateMachine<XsdTerm::Ptr>::StateId endState); + + /** + * Returns a hash that maps each term that appears inside @p particle, to the particle it belongs. + * + * @note These information are used by XsdParticleChecker to check particle inheritance. + */ + static QHash<XsdTerm::Ptr, XsdParticle::Ptr> particleLookupMap(const XsdParticle::Ptr &particle); + + private: + XsdStateMachine<XsdTerm::Ptr> *m_stateMachine; + NamePool::Ptr m_namePool; + Mode m_mode; + }; +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/schema/qxsdterm.cpp b/src/xmlpatterns/schema/qxsdterm.cpp new file mode 100644 index 0000000..a1349c9 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdterm.cpp @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxsdterm_p.h" + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +bool XsdTerm::isElement() const +{ + return false; +} + +bool XsdTerm::isModelGroup() const +{ + return false; +} + +bool XsdTerm::isWildcard() const +{ + return false; +} + +bool XsdTerm::isReference() const +{ + return false; +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/schema/qxsdterm_p.h b/src/xmlpatterns/schema/qxsdterm_p.h new file mode 100644 index 0000000..c42bb40 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdterm_p.h @@ -0,0 +1,114 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_XsdTerm_H +#define Patternist_XsdTerm_H + +#include "qnamedschemacomponent_p.h" +#include "qxsdannotated_p.h" + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +namespace QPatternist +{ + /** + * @short A base class for all particles of a model group. + * + * This class is the base class for all particles of a model group + * as the <em>element</em>, <em>group</em> or <em>any</em> tag, it is not supposed to + * be instantiated directly. + * + * @see <a href="http://www.w3.org/Submission/2004/SUBM-xmlschema-api-20040309/xml-schema-api.html#Interface-XSTerm">XML Schema API reference</a> + * @ingroup Patternist_schema + * @author Tobias Koenig <tobias.koenig@trolltech.com> + */ + class XsdTerm : public NamedSchemaComponent, public XsdAnnotated + { + public: + typedef QExplicitlySharedDataPointer<XsdTerm> Ptr; + + /** + * Returns @c true if the term is an element, @c false otherwise. + */ + virtual bool isElement() const; + + /** + * Returns @c true if the term is a model group (group tag), @c false otherwise. + */ + virtual bool isModelGroup() const; + + /** + * Returns @c true if the term is a wildcard (any tag), @c false otherwise. + */ + virtual bool isWildcard() const; + + /** + * Returns @c true if the term is a reference, @c false otherwise. + * + * @note The reference term is only used internally as helper during type resolving. + */ + virtual bool isReference() const; + + protected: + /** + * This constructor only exists to ensure this class is subclassed. + */ + inline XsdTerm() {}; + }; +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/schema/qxsdtypechecker.cpp b/src/xmlpatterns/schema/qxsdtypechecker.cpp new file mode 100644 index 0000000..acb10ef --- /dev/null +++ b/src/xmlpatterns/schema/qxsdtypechecker.cpp @@ -0,0 +1,1338 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxsdtypechecker_p.h" + +#include "qabstractdatetime_p.h" +#include "qbase64binary_p.h" +#include "qboolean_p.h" +#include "qdecimal_p.h" +#include "qderivedinteger_p.h" +#include "qduration_p.h" +#include "qgenericstaticcontext_p.h" +#include "qhexbinary_p.h" +#include "qnamespaceresolver_p.h" +#include "qpatternplatform_p.h" +#include "qqnamevalue_p.h" +#include "qvaluefactory_p.h" +#include "qxmlnamepool.h" +#include "qxsdschemahelper_p.h" +#include "qxsdschemamerger_p.h" +#include "qxsdstatemachine_p.h" + +#include "qxsdschemadebugger_p.h" + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +XsdSchemaSourceLocationReflection::XsdSchemaSourceLocationReflection(const QSourceLocation &location) + : m_sourceLocation(location) +{ +} + +const SourceLocationReflection* XsdSchemaSourceLocationReflection::actualReflection() const +{ + return this; +} + +QSourceLocation XsdSchemaSourceLocationReflection::sourceLocation() const +{ + return m_sourceLocation; +} + + +static AnySimpleType::Ptr comparableType(const AnySimpleType::Ptr &type) +{ + if (!type->isDefinedBySchema()) { + return type; + } else { + const XsdSimpleType::Ptr simpleType(type); + if (type->category() == SchemaType::SimpleTypeAtomic) { + return simpleType->primitiveType(); + } else if (type->category() == SchemaType::SimpleTypeList) { + return simpleType->itemType(); + } else if (type->category() == SchemaType::SimpleTypeUnion) { + return simpleType->memberTypes().first(); + } + } + + Q_ASSERT(false); + return AnySimpleType::Ptr(); +} + +static int totalDigitsForSignedLongLong(long long value) +{ + QString number = QString::number(value); + if (number.startsWith(QLatin1Char('-'))) + number = number.mid(1); + + return number.length(); +} + +static int totalDigitsForUnsignedLongLong(unsigned long long value) +{ + const QString number = QString::number(value); + return number.length(); +} + +static int totalDigitsForDecimal(const QString &lexicalValue) +{ + const QLatin1Char zeroChar('0'); + const int length = lexicalValue.length() - 1; + + // strip leading zeros + int pos = 0; + while (lexicalValue.at(pos) == zeroChar && (pos != length)) + pos++; + + QString value = lexicalValue.mid(pos); + + // if contains '.' strip trailing zeros + if (value.contains(QLatin1Char('.'))) { + pos = value.length() - 1; + while (value.at(pos) == zeroChar) { + pos--; + } + + value = value.left(pos + 1); + } + + // check number of digits of remaining string + int totalDigits = 0; + for (int i = 0; i < value.count(); ++i) + if (value.at(i).isDigit()) + ++totalDigits; + + if (totalDigits == 0) + totalDigits = 1; + + return totalDigits; +} + +static int fractionDigitsForDecimal(const QString &lexicalValue) +{ + // we use the lexical value here, as the conversion to double might strip + // away decimal positions + + QString trimmedValue(lexicalValue.trimmed()); + const int pos = trimmedValue.indexOf(QLatin1Char('.')); + if (pos == -1) // no '.' -> 0 fraction digits + return 0; + else + return (trimmedValue.length() - pos - 1); +} + +XsdTypeChecker::XsdTypeChecker(const XsdSchemaContext::Ptr &context, const QVector<QXmlName> &namespaceBindings, const QSourceLocation &location) + : m_context(context) + , m_namePool(m_context->namePool()) + , m_namespaceBindings(namespaceBindings) + , m_reflection(new XsdSchemaSourceLocationReflection(location)) +{ +} + +XsdTypeChecker::~XsdTypeChecker() +{ +} + +QString XsdTypeChecker::normalizedValue(const QString &value, const XsdFacet::Hash &facets) +{ + if (!facets.contains(XsdFacet::WhiteSpace)) + return value; + + const XsdFacet::Ptr whiteSpaceFacet = facets.value(XsdFacet::WhiteSpace); + + const DerivedString<TypeString>::Ptr facetValue = whiteSpaceFacet->value(); + const QString stringValue = facetValue->stringValue(); + if (stringValue == XsdSchemaToken::toString(XsdSchemaToken::Preserve)) + return value; + else if (stringValue == XsdSchemaToken::toString(XsdSchemaToken::Replace)) { + QString newValue(value); + newValue.replace(QLatin1Char('\t'), QLatin1Char(' ')); + newValue.replace(QLatin1Char('\n'), QLatin1Char(' ')); + newValue.replace(QLatin1Char('\r'), QLatin1Char(' ')); + + return newValue; + } else if (stringValue == XsdSchemaToken::toString(XsdSchemaToken::Collapse)) { + return value.simplified(); + } + + return value; +} + +XsdFacet::Hash XsdTypeChecker::mergedFacetsForType(const SchemaType::Ptr &type, const XsdSchemaContext::Ptr &context) +{ + if (!type) + return XsdFacet::Hash(); + + const XsdFacet::Hash baseFacets = mergedFacetsForType(type->wxsSuperType(), context); + const XsdFacet::Hash facets = context->facetsForType(type); + + XsdFacet::Hash result = baseFacets; + XsdFacet::HashIterator it(facets); + while (it.hasNext()) { + it.next(); + + result.insert(it.key(), it.value()); + } + + return result; +} + +bool XsdTypeChecker::isValidString(const QString &normalizedString, const AnySimpleType::Ptr &type, QString &errorMsg, AnySimpleType::Ptr *boundType) const +{ + if (type->name(m_namePool) == BuiltinTypes::xsAnySimpleType->name(m_namePool)) { + if (boundType) + *boundType = type; + + return true; + } + + if (!type->isDefinedBySchema()) { + // special QName check + if (BuiltinTypes::xsQName->wxsTypeMatches(type)) { + if (!XPathHelper::isQName(normalizedString)) { + errorMsg = QtXmlPatterns::tr("%1 is not valid according to %2").arg(formatData(normalizedString)).arg(formatType(m_namePool, type)); + return false; + } + } + + const AtomicValue::Ptr value = fromLexical(normalizedString, type, m_context, m_reflection); + if (value->hasError()) { + errorMsg = QtXmlPatterns::tr("%1 is not valid according to %2").arg(formatData(normalizedString)).arg(formatType(m_namePool, type)); + return false; + } + + if (!checkConstrainingFacets(value, normalizedString, type, errorMsg)) { + return false; + } + + if (boundType) + *boundType = type; + + } else { + const XsdSimpleType::Ptr simpleType(type); + + if (simpleType->category() == XsdSimpleType::SimpleTypeAtomic) { + AnySimpleType::Ptr targetType = simpleType->primitiveType(); + if (!simpleType->wxsSuperType()->isDefinedBySchema()) + targetType = simpleType->wxsSuperType(); + + const AtomicValue::Ptr value = fromLexical(normalizedString, targetType, m_context, m_reflection); + if (value->hasError()) { + errorMsg = QtXmlPatterns::tr("%1 is not valid according to %2").arg(formatData(normalizedString)).arg(formatType(m_namePool, targetType)); + return false; + } + + if (!checkConstrainingFacets(value, normalizedString, type, errorMsg)) { + return false; + } + + if (boundType) + *boundType = type; + + } else if (simpleType->category() == XsdSimpleType::SimpleTypeList) { + QStringList entries = normalizedString.split(QLatin1Char(' '), QString::SkipEmptyParts); + for (int i = 0; i < entries.count(); ++i) { + entries[i] = normalizedValue(entries.at(i), mergedFacetsForType(simpleType->itemType(), m_context)); + } + + if (!checkConstrainingFacetsList(entries, normalizedString, simpleType->itemType(), mergedFacetsForType(simpleType, m_context), errorMsg)) { + return false; + } + + for (int i = 0; i < entries.count(); ++i) { + if (!isValidString(entries.at(i), simpleType->itemType(), errorMsg)) { + return false; + } + } + + if (boundType) + *boundType = simpleType->itemType(); + + } else if (simpleType->category() == XsdSimpleType::SimpleTypeUnion) { + if (!checkConstrainingFacetsUnion(normalizedString, normalizedString, simpleType, mergedFacetsForType(simpleType, m_context), errorMsg)) { + return false; + } + + const AnySimpleType::List memberTypes = simpleType->memberTypes(); + + bool foundValidType = false; + for (int i = 0; i < memberTypes.count(); ++i) { + const XsdFacet::Hash mergedFacets = mergedFacetsForType(memberTypes.at(i), m_context); + if (isValidString(normalizedValue(normalizedString, mergedFacets), memberTypes.at(i), errorMsg)) { + foundValidType = true; + + if (boundType) + *boundType = memberTypes.at(i); + + break; + } + } + + if (!foundValidType) { + return false; + } + } + } + + return true; +} + +bool XsdTypeChecker::valuesAreEqual(const QString &value, const QString &otherValue, const AnySimpleType::Ptr &type) const +{ + const AnySimpleType::Ptr targetType = comparableType(type); + + // if the type is xs:anySimpleType we just do string comparison... + if (targetType->name(m_namePool) == BuiltinTypes::xsAnySimpleType->name(m_namePool)) + return (value == otherValue); + + if (BuiltinTypes::xsQName->wxsTypeMatches(type)) { + const QXmlName valueName = convertToQName(value); + const QXmlName otherValueName = convertToQName(otherValue); + + if (valueName == otherValueName) + return true; + } + + if (type->category() == SchemaType::SimpleTypeAtomic) { + // ... otherwise we use the casting platform for value comparison + const DerivedString<TypeString>::Ptr valueStr = DerivedString<TypeString>::fromLexical(m_namePool, value); + const DerivedString<TypeString>::Ptr otherValueStr = DerivedString<TypeString>::fromLexical(m_namePool, otherValue); + + return XsdSchemaHelper::constructAndCompare(valueStr, AtomicComparator::OperatorEqual, otherValueStr, targetType, m_context, m_reflection); + } else if (type->category() == SchemaType::SimpleTypeList) { + const QStringList values = value.split(QLatin1Char(' '), QString::SkipEmptyParts); + const QStringList otherValues = otherValue.split(QLatin1Char(' '), QString::SkipEmptyParts); + if (values.count() != otherValues.count()) + return false; + + for (int i = 0; i < values.count(); ++i) { + if (!valuesAreEqual(values.at(i), otherValues.at(i), XsdSimpleType::Ptr(type)->itemType())) + return false; + } + + return true; + } else if (type->category() == SchemaType::SimpleTypeUnion) { + const AnySimpleType::List memberTypes = XsdSimpleType::Ptr(type)->memberTypes(); + for (int i = 0; i < memberTypes.count(); ++i) { + if (valuesAreEqual(value, otherValue, memberTypes.at(i))) { + return true; + } + } + + return false; + } + + return false; +} + +bool XsdTypeChecker::checkConstrainingFacets(const AtomicValue::Ptr &value, const QString &lexicalValue, const AnySimpleType::Ptr &type, QString &errorMsg) const +{ + const XsdFacet::Hash facets = mergedFacetsForType(type, m_context); + + if (BuiltinTypes::xsString->wxsTypeMatches(type) || + BuiltinTypes::xsUntypedAtomic->wxsTypeMatches(type)) { + return checkConstrainingFacetsString(value->stringValue(), facets, BuiltinTypes::xsString, errorMsg); + } else if (BuiltinTypes::xsAnyURI->wxsTypeMatches(type)) { + return checkConstrainingFacetsString(value->stringValue(), facets, BuiltinTypes::xsAnyURI, errorMsg); + } else if (BuiltinTypes::xsNOTATION->wxsTypeMatches(type)) { + return checkConstrainingFacetsNotation(value->as<QNameValue>()->qName(), facets, errorMsg); + } else if (BuiltinTypes::xsUnsignedByte->wxsTypeMatches(type) || + BuiltinTypes::xsUnsignedInt->wxsTypeMatches(type) || + BuiltinTypes::xsUnsignedLong->wxsTypeMatches(type) || + BuiltinTypes::xsUnsignedShort->wxsTypeMatches(type)) { + return checkConstrainingFacetsUnsignedInteger(value->as<Numeric>()->toUnsignedInteger(), lexicalValue, facets, errorMsg); + } else if (BuiltinTypes::xsInteger->wxsTypeMatches(type)) { + return checkConstrainingFacetsSignedInteger(value->as<Numeric>()->toInteger(), lexicalValue, facets, errorMsg); + } else if (BuiltinTypes::xsFloat->wxsTypeMatches(type) || + BuiltinTypes::xsDouble->wxsTypeMatches(type)) { + return checkConstrainingFacetsDouble(value->as<Numeric>()->toDouble(), lexicalValue, facets, errorMsg); + } else if (BuiltinTypes::xsDecimal->wxsTypeMatches(type)) { + return checkConstrainingFacetsDecimal(value, lexicalValue, facets, errorMsg); + } else if (BuiltinTypes::xsDateTime->wxsTypeMatches(type)) { + return checkConstrainingFacetsDateTime(value->as<AbstractDateTime>()->toDateTime(), lexicalValue, facets, BuiltinTypes::xsDateTime, errorMsg); + } else if (BuiltinTypes::xsDate->wxsTypeMatches(type)) { + return checkConstrainingFacetsDateTime(value->as<AbstractDateTime>()->toDateTime(), lexicalValue, facets, BuiltinTypes::xsDate, errorMsg); + } else if (BuiltinTypes::xsGYear->wxsTypeMatches(type)) { + return checkConstrainingFacetsDateTime(value->as<AbstractDateTime>()->toDateTime(), lexicalValue, facets, BuiltinTypes::xsGYear, errorMsg); + } else if (BuiltinTypes::xsGYearMonth->wxsTypeMatches(type)) { + return checkConstrainingFacetsDateTime(value->as<AbstractDateTime>()->toDateTime(), lexicalValue, facets, BuiltinTypes::xsGYearMonth, errorMsg); + } else if (BuiltinTypes::xsGMonth->wxsTypeMatches(type)) { + return checkConstrainingFacetsDateTime(value->as<AbstractDateTime>()->toDateTime(), lexicalValue, facets, BuiltinTypes::xsGMonth, errorMsg); + } else if (BuiltinTypes::xsGMonthDay->wxsTypeMatches(type)) { + return checkConstrainingFacetsDateTime(value->as<AbstractDateTime>()->toDateTime(), lexicalValue, facets, BuiltinTypes::xsGMonthDay, errorMsg); + } else if (BuiltinTypes::xsGDay->wxsTypeMatches(type)) { + return checkConstrainingFacetsDateTime(value->as<AbstractDateTime>()->toDateTime(), lexicalValue, facets, BuiltinTypes::xsGDay, errorMsg); + } else if (BuiltinTypes::xsTime->wxsTypeMatches(type)) { + return checkConstrainingFacetsDateTime(value->as<AbstractDateTime>()->toDateTime(), lexicalValue, facets, BuiltinTypes::xsTime, errorMsg); + } else if (BuiltinTypes::xsDuration->wxsTypeMatches(type)) { + return checkConstrainingFacetsDuration(value, lexicalValue, facets, errorMsg); + } else if (BuiltinTypes::xsBoolean->wxsTypeMatches(type)) { + return checkConstrainingFacetsBoolean(value->as<Boolean>()->value(), lexicalValue, facets, errorMsg); + } else if (BuiltinTypes::xsHexBinary->wxsTypeMatches(type)) { + return checkConstrainingFacetsBinary(value->as<Base64Binary>()->asByteArray(), facets, BuiltinTypes::xsHexBinary, errorMsg); + } else if (BuiltinTypes::xsBase64Binary->wxsTypeMatches(type)) { + return checkConstrainingFacetsBinary(value->as<Base64Binary>()->asByteArray(), facets, BuiltinTypes::xsBase64Binary, errorMsg); + } else if (BuiltinTypes::xsQName->wxsTypeMatches(type)) { + return checkConstrainingFacetsQName(value->as<QNameValue>()->qName(), lexicalValue, facets, errorMsg); + } + + return true; +} + +bool XsdTypeChecker::checkConstrainingFacetsString(const QString &value, const XsdFacet::Hash &facets, const AnySimpleType::Ptr &type, QString &errorMsg) const +{ + if (facets.contains(XsdFacet::Length)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::Length); + const DerivedInteger<TypeNonNegativeInteger>::Ptr length = facet->value(); + if (length->toInteger() != value.length()) { + errorMsg = QtXmlPatterns::tr("string content does not match the length facet"); + return false; + } + } + if (facets.contains(XsdFacet::MinimumLength)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::MinimumLength); + const DerivedInteger<TypeNonNegativeInteger>::Ptr length = facet->value(); + if (length->toInteger() > value.length()) { + errorMsg = QtXmlPatterns::tr("string content does not match the minLength facet"); + return false; + } + } + if (facets.contains(XsdFacet::MaximumLength)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::MaximumLength); + const DerivedInteger<TypeNonNegativeInteger>::Ptr length = facet->value(); + if (length->toInteger() < value.length()) { + errorMsg = QtXmlPatterns::tr("string content does not match the maxLength facet"); + return false; + } + } + if (facets.contains(XsdFacet::Pattern)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::Pattern); + const AtomicValue::List multiValue = facet->multiValue(); + bool found = false; + for (int j = 0; j < multiValue.count(); ++j) { + const QString pattern = multiValue.at(j)->as<DerivedString<TypeString> >()->stringValue(); + const QRegExp exp = PatternPlatform::parsePattern(pattern, m_context, m_reflection); + if (exp.exactMatch(value)) { + found = true; + break; + } + } + + if (!found) { + errorMsg = QtXmlPatterns::tr("string content does not match pattern facet"); + return false; + } + } + if (facets.contains(XsdFacet::Enumeration)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::Enumeration); + const DerivedString<TypeString>::Ptr valueStr = DerivedString<TypeString>::fromLexical(m_namePool, value); + + const AtomicValue::List multiValue = facet->multiValue(); + bool found = false; + for (int j = 0; j < multiValue.count(); ++j) { + if (XsdSchemaHelper::constructAndCompare(valueStr, AtomicComparator::OperatorEqual, multiValue.at(j), type, m_context, m_reflection)) { + found = true; + break; + } + } + + if (!found) { + errorMsg = QtXmlPatterns::tr("string content is not listed in the enumeration facet"); + return false; + } + } + if (facets.contains(XsdFacet::Assertion)) { + //TODO: implement + } + + return true; +} + +bool XsdTypeChecker::checkConstrainingFacetsSignedInteger(long long value, const QString &lexicalValue, const XsdFacet::Hash &facets, QString &errorMsg) const +{ + if (facets.contains(XsdFacet::MaximumInclusive)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::MaximumInclusive); + const Numeric::Ptr facetValue = ValueFactory::fromLexical(facet->value()->as<DerivedString<TypeString> >()->stringValue(), BuiltinTypes::xsLong, m_context, m_reflection); + if (facetValue->toInteger() < value) { + errorMsg = QtXmlPatterns::tr("signed integer content does not match the maxInclusive facet"); + return false; + } + } + if (facets.contains(XsdFacet::MaximumExclusive)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::MaximumExclusive); + const Numeric::Ptr facetValue = ValueFactory::fromLexical(facet->value()->as<DerivedString<TypeString> >()->stringValue(), BuiltinTypes::xsLong, m_context, m_reflection); + if (facetValue->toInteger() <= value) { + errorMsg = QtXmlPatterns::tr("signed integer content does not match the maxExclusive facet"); + return false; + } + } + if (facets.contains(XsdFacet::MinimumInclusive)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::MinimumInclusive); + const Numeric::Ptr facetValue = ValueFactory::fromLexical(facet->value()->as<DerivedString<TypeString> >()->stringValue(), BuiltinTypes::xsLong, m_context, m_reflection); + if (facetValue->toInteger() > value) { + errorMsg = QtXmlPatterns::tr("signed integer content does not match the minInclusive facet"); + return false; + } + } + if (facets.contains(XsdFacet::MinimumExclusive)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::MinimumExclusive); + const Numeric::Ptr facetValue = ValueFactory::fromLexical(facet->value()->as<DerivedString<TypeString> >()->stringValue(), BuiltinTypes::xsLong, m_context, m_reflection); + if (facetValue->toInteger() >= value) { + errorMsg = QtXmlPatterns::tr("signed integer content does not match the minExclusive facet"); + return false; + } + } + if (facets.contains(XsdFacet::Enumeration)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::Enumeration); + const DerivedString<TypeString>::Ptr valueStr = DerivedString<TypeString>::fromLexical(m_namePool, QString::number(value)); + + const AtomicValue::List multiValue = facet->multiValue(); + bool found = false; + for (int j = 0; j < multiValue.count(); ++j) { + if (XsdSchemaHelper::constructAndCompare(valueStr, AtomicComparator::OperatorEqual, multiValue.at(j), BuiltinTypes::xsLong, m_context, m_reflection)) { + found = true; + break; + } + } + + if (!found) { + errorMsg = QtXmlPatterns::tr("signed integer content is not listed in the enumeration facet"); + return false; + } + } + if (facets.contains(XsdFacet::Pattern)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::Pattern); + const AtomicValue::List multiValue = facet->multiValue(); + bool found = false; + for (int j = 0; j < multiValue.count(); ++j) { + const QString pattern = multiValue.at(j)->as<DerivedString<TypeString> >()->stringValue(); + const QRegExp exp = PatternPlatform::parsePattern(pattern, m_context, m_reflection); + if (exp.exactMatch(lexicalValue)) { + found = true; + break; + } + } + + if (!found) { + errorMsg = QtXmlPatterns::tr("signed integer content does not match pattern facet"); + return false; + } + } + if (facets.contains(XsdFacet::TotalDigits)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::TotalDigits); + const DerivedInteger<TypePositiveInteger>::Ptr facetValue = facet->value(); + + if (totalDigitsForSignedLongLong(value) > facetValue->toInteger()) { + errorMsg = QtXmlPatterns::tr("signed integer content does not match in the totalDigits facet"); + return false; + } + } + if (facets.contains(XsdFacet::Assertion)) { + //TODO: implement + } + + return true; +} + +bool XsdTypeChecker::checkConstrainingFacetsUnsignedInteger(unsigned long long value, const QString &lexicalValue, const XsdFacet::Hash &facets, QString &errorMsg) const +{ + if (facets.contains(XsdFacet::MaximumInclusive)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::MaximumInclusive); + const Numeric::Ptr facetValue = ValueFactory::fromLexical(facet->value()->as<DerivedString<TypeString> >()->stringValue(), BuiltinTypes::xsUnsignedLong, m_context, m_reflection); + if (facetValue->toUnsignedInteger() < value) { + errorMsg = QtXmlPatterns::tr("unsigned integer content does not match the maxInclusive facet"); + return false; + } + } + if (facets.contains(XsdFacet::MaximumExclusive)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::MaximumExclusive); + const Numeric::Ptr facetValue = ValueFactory::fromLexical(facet->value()->as<DerivedString<TypeString> >()->stringValue(), BuiltinTypes::xsUnsignedLong, m_context, m_reflection); + if (facetValue->toUnsignedInteger() <= value) { + errorMsg = QtXmlPatterns::tr("unsigned integer content does not match the maxExclusive facet"); + return false; + } + } + if (facets.contains(XsdFacet::MinimumInclusive)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::MinimumInclusive); + const Numeric::Ptr facetValue = ValueFactory::fromLexical(facet->value()->as<DerivedString<TypeString> >()->stringValue(), BuiltinTypes::xsUnsignedLong, m_context, m_reflection); + if (facetValue->toUnsignedInteger() > value) { + errorMsg = QtXmlPatterns::tr("unsigned integer content does not match the minInclusive facet"); + return false; + } + } + if (facets.contains(XsdFacet::MinimumExclusive)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::MinimumExclusive); + const Numeric::Ptr facetValue = ValueFactory::fromLexical(facet->value()->as<DerivedString<TypeString> >()->stringValue(), BuiltinTypes::xsUnsignedLong, m_context, m_reflection); + if (facetValue->toUnsignedInteger() >= value) { + errorMsg = QtXmlPatterns::tr("unsigned integer content does not match the minExclusive facet"); + return false; + } + } + if (facets.contains(XsdFacet::Enumeration)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::Enumeration); + const DerivedString<TypeString>::Ptr valueStr = DerivedString<TypeString>::fromLexical(m_namePool, QString::number(value)); + + const AtomicValue::List multiValue = facet->multiValue(); + bool found = false; + for (int j = 0; j < multiValue.count(); ++j) { + if (XsdSchemaHelper::constructAndCompare(valueStr, AtomicComparator::OperatorEqual, multiValue.at(j), BuiltinTypes::xsUnsignedLong, m_context, m_reflection)) { + found = true; + break; + } + } + + if (!found) { + errorMsg = QtXmlPatterns::tr("unsigned integer content is not listed in the enumeration facet"); + return false; + } + } + if (facets.contains(XsdFacet::Pattern)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::Pattern); + const AtomicValue::List multiValue = facet->multiValue(); + bool found = false; + for (int j = 0; j < multiValue.count(); ++j) { + const QString pattern = multiValue.at(j)->as<DerivedString<TypeString> >()->stringValue(); + const QRegExp exp = PatternPlatform::parsePattern(pattern, m_context, m_reflection); + if (exp.exactMatch(lexicalValue)) { + found = true; + break; + } + } + + if (!found) { + errorMsg = QtXmlPatterns::tr("unsigned integer content does not match pattern facet"); + return false; + } + } + if (facets.contains(XsdFacet::TotalDigits)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::TotalDigits); + const DerivedInteger<TypePositiveInteger>::Ptr facetValue = facet->value(); + + if (totalDigitsForUnsignedLongLong(value) > facetValue->toInteger()) { + errorMsg = QtXmlPatterns::tr("unsigned integer content does not match in the totalDigits facet"); + return false; + } + } + if (facets.contains(XsdFacet::Assertion)) { + //TODO: implement + } + + return true; +} + +bool XsdTypeChecker::checkConstrainingFacetsDouble(double value, const QString &lexicalValue, const XsdFacet::Hash &facets, QString &errorMsg) const +{ + if (facets.contains(XsdFacet::MaximumInclusive)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::MaximumInclusive); + const Numeric::Ptr facetValue = ValueFactory::fromLexical(facet->value()->as<DerivedString<TypeString> >()->stringValue(), BuiltinTypes::xsDouble, m_context, m_reflection); + if (facetValue->toDouble() < value) { + errorMsg = QtXmlPatterns::tr("double content does not match the maxInclusive facet"); + return false; + } + } + if (facets.contains(XsdFacet::MaximumExclusive)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::MaximumExclusive); + const Numeric::Ptr facetValue = ValueFactory::fromLexical(facet->value()->as<DerivedString<TypeString> >()->stringValue(), BuiltinTypes::xsDouble, m_context, m_reflection); + if (facetValue->toDouble() <= value) { + errorMsg = QtXmlPatterns::tr("double content does not match the maxExclusive facet"); + return false; + } + } + if (facets.contains(XsdFacet::MinimumInclusive)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::MinimumInclusive); + const Numeric::Ptr facetValue = ValueFactory::fromLexical(facet->value()->as<DerivedString<TypeString> >()->stringValue(), BuiltinTypes::xsDouble, m_context, m_reflection); + if (facetValue->toDouble() > value) { + errorMsg = QtXmlPatterns::tr("double content does not match the minInclusive facet"); + return false; + } + } + if (facets.contains(XsdFacet::MinimumExclusive)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::MinimumExclusive); + const Numeric::Ptr facetValue = ValueFactory::fromLexical(facet->value()->as<DerivedString<TypeString> >()->stringValue(), BuiltinTypes::xsDouble, m_context, m_reflection); + if (facetValue->toDouble() >= value) { + errorMsg = QtXmlPatterns::tr("double content does not match the minExclusive facet"); + return false; + } + } + if (facets.contains(XsdFacet::Enumeration)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::Enumeration); + const DerivedString<TypeString>::Ptr valueStr = DerivedString<TypeString>::fromLexical(m_namePool, QString::number(value)); + + const AtomicValue::List multiValue = facet->multiValue(); + bool found = false; + for (int j = 0; j < multiValue.count(); ++j) { + if (XsdSchemaHelper::constructAndCompare(valueStr, AtomicComparator::OperatorEqual, multiValue.at(j), BuiltinTypes::xsDouble, m_context, m_reflection)) { + found = true; + break; + } + } + + if (!found) { + errorMsg = QtXmlPatterns::tr("double content is not listed in the enumeration facet"); + return false; + } + } + if (facets.contains(XsdFacet::Pattern)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::Pattern); + const AtomicValue::List multiValue = facet->multiValue(); + bool found = false; + for (int j = 0; j < multiValue.count(); ++j) { + const QString pattern = multiValue.at(j)->as<DerivedString<TypeString> >()->stringValue(); + const QRegExp exp = PatternPlatform::parsePattern(pattern, m_context, m_reflection); + if (exp.exactMatch(lexicalValue)) { + found = true; + break; + } + } + + if (!found) { + errorMsg = QtXmlPatterns::tr("double content does not match pattern facet"); + return false; + } + } + if (facets.contains(XsdFacet::Assertion)) { + //TODO: implement + } + + return true; +} + +bool XsdTypeChecker::checkConstrainingFacetsDecimal(const AtomicValue::Ptr &value, const QString &lexicalValue, const XsdFacet::Hash &facets, QString &errorMsg) const +{ + if (facets.contains(XsdFacet::FractionDigits)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::FractionDigits); + const DerivedInteger<TypePositiveInteger>::Ptr facetValue = facet->value(); + + if (fractionDigitsForDecimal(lexicalValue) > facetValue->toInteger()) { + errorMsg = QtXmlPatterns::tr("decimal content does not match in the fractionDigits facet"); + return false; + } + } + if (facets.contains(XsdFacet::TotalDigits)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::TotalDigits); + const DerivedInteger<TypePositiveInteger>::Ptr facetValue = facet->value(); + + if (totalDigitsForDecimal(lexicalValue) > facetValue->toInteger()) { + errorMsg = QtXmlPatterns::tr("decimal content does not match in the totalDigits facet"); + return false; + } + } + + return checkConstrainingFacetsDouble(value->as<Decimal>()->toDouble(), lexicalValue, facets, errorMsg); +} + +bool XsdTypeChecker::checkConstrainingFacetsDateTime(const QDateTime &value, const QString &lexicalValue, const XsdFacet::Hash &facets, const AnySimpleType::Ptr &type, QString &errorMsg) const +{ + if (facets.contains(XsdFacet::MaximumInclusive)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::MaximumInclusive); + const AbstractDateTime::Ptr facetValue = ValueFactory::fromLexical(facet->value()->as<DerivedString<TypeString> >()->stringValue(), type, m_context, m_reflection); + if (facetValue->toDateTime() < value) { + errorMsg = QtXmlPatterns::tr("date time content does not match the maxInclusive facet"); + return false; + } + } + if (facets.contains(XsdFacet::MaximumExclusive)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::MaximumExclusive); + const AbstractDateTime::Ptr facetValue = ValueFactory::fromLexical(facet->value()->as<DerivedString<TypeString> >()->stringValue(), type, m_context, m_reflection); + if (facetValue->toDateTime() <= value) { + errorMsg = QtXmlPatterns::tr("date time content does not match the maxExclusive facet"); + return false; + } + } + if (facets.contains(XsdFacet::MinimumInclusive)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::MinimumInclusive); + const AbstractDateTime::Ptr facetValue = ValueFactory::fromLexical(facet->value()->as<DerivedString<TypeString> >()->stringValue(), type, m_context, m_reflection); + if (facetValue->toDateTime() > value) { + errorMsg = QtXmlPatterns::tr("date time content does not match the minInclusive facet"); + return false; + } + } + if (facets.contains(XsdFacet::MinimumExclusive)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::MinimumExclusive); + const AbstractDateTime::Ptr facetValue = ValueFactory::fromLexical(facet->value()->as<DerivedString<TypeString> >()->stringValue(), type, m_context, m_reflection); + if (facetValue->toDateTime() >= value) { + errorMsg = QtXmlPatterns::tr("date time content does not match the minExclusive facet"); + return false; + } + } + if (facets.contains(XsdFacet::Enumeration)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::Enumeration); + + const AtomicValue::List multiValue = facet->multiValue(); + bool found = false; + for (int j = 0; j < multiValue.count(); ++j) { + const AbstractDateTime::Ptr facetValue = ValueFactory::fromLexical(multiValue.at(j)->as<DerivedString<TypeString> >()->stringValue(), type, m_context, m_reflection); + if (facetValue->toDateTime() == value) { + found = true; + break; + } + } + + if (!found) { + errorMsg = QtXmlPatterns::tr("date time content is not listed in the enumeration facet"); + return false; + } + } + if (facets.contains(XsdFacet::Pattern)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::Pattern); + const AtomicValue::List multiValue = facet->multiValue(); + bool found = false; + for (int j = 0; j < multiValue.count(); ++j) { + const QString pattern = multiValue.at(j)->as<DerivedString<TypeString> >()->stringValue(); + const QRegExp exp = PatternPlatform::parsePattern(pattern, m_context, m_reflection); + if (exp.exactMatch(lexicalValue)) { + found = true; + break; + } + } + + if (!found) { + errorMsg = QtXmlPatterns::tr("date time content does not match pattern facet"); + return false; + } + } + + return true; +} + +bool XsdTypeChecker::checkConstrainingFacetsDuration(const AtomicValue::Ptr&, const QString &lexicalValue, const XsdFacet::Hash &facets, QString &errorMsg) const +{ + if (facets.contains(XsdFacet::MaximumInclusive)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::MaximumInclusive); + const DerivedString<TypeString>::Ptr value = DerivedString<TypeString>::fromLexical(m_namePool, lexicalValue); + + if (XsdSchemaHelper::constructAndCompare(facets.value(XsdFacet::MaximumInclusive)->value(), AtomicComparator::OperatorLessThan, value, BuiltinTypes::xsDuration, m_context, m_reflection)) { + errorMsg = QtXmlPatterns::tr("duration content does not match the maxInclusive facet"); + return false; + } + } + if (facets.contains(XsdFacet::MaximumExclusive)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::MaximumExclusive); + const DerivedString<TypeString>::Ptr value = DerivedString<TypeString>::fromLexical(m_namePool, lexicalValue); + + if (XsdSchemaHelper::constructAndCompare(facets.value(XsdFacet::MaximumExclusive)->value(), AtomicComparator::OperatorLessOrEqual, value, BuiltinTypes::xsDuration, m_context, m_reflection)) { + errorMsg = QtXmlPatterns::tr("duration content does not match the maxExclusive facet"); + return false; + } + } + if (facets.contains(XsdFacet::MinimumInclusive)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::MinimumInclusive); + const DerivedString<TypeString>::Ptr value = DerivedString<TypeString>::fromLexical(m_namePool, lexicalValue); + + if (XsdSchemaHelper::constructAndCompare(facets.value(XsdFacet::MinimumInclusive)->value(), AtomicComparator::OperatorGreaterThan, value, BuiltinTypes::xsDuration, m_context, m_reflection)) { + errorMsg = QtXmlPatterns::tr("duration content does not match the minInclusive facet"); + return false; + } + } + if (facets.contains(XsdFacet::MinimumExclusive)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::MinimumExclusive); + const DerivedString<TypeString>::Ptr value = DerivedString<TypeString>::fromLexical(m_namePool, lexicalValue); + + if (XsdSchemaHelper::constructAndCompare(facets.value(XsdFacet::MinimumExclusive)->value(), AtomicComparator::OperatorGreaterOrEqual, value, BuiltinTypes::xsDuration, m_context, m_reflection)) { + errorMsg = QtXmlPatterns::tr("duration content does not match the minExclusive facet"); + return false; + } + } + if (facets.contains(XsdFacet::Enumeration)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::Enumeration); + const DerivedString<TypeString>::Ptr value = DerivedString<TypeString>::fromLexical(m_namePool, lexicalValue); + + const AtomicValue::List multiValue = facet->multiValue(); + bool found = false; + for (int j = 0; j < multiValue.count(); ++j) { + if (XsdSchemaHelper::constructAndCompare(multiValue.at(j), AtomicComparator::OperatorEqual, value, BuiltinTypes::xsDuration, m_context, m_reflection)) { + found = true; + break; + } + } + + if (!found) { + errorMsg = QtXmlPatterns::tr("duration content is not listed in the enumeration facet"); + return false; + } + } + if (facets.contains(XsdFacet::Pattern)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::Pattern); + const AtomicValue::List multiValue = facet->multiValue(); + bool found = false; + for (int j = 0; j < multiValue.count(); ++j) { + const QString pattern = multiValue.at(j)->as<DerivedString<TypeString> >()->stringValue(); + const QRegExp exp = PatternPlatform::parsePattern(pattern, m_context, m_reflection); + if (exp.exactMatch(lexicalValue)) { + found = true; + break; + } + } + + if (!found) { + errorMsg = QtXmlPatterns::tr("duration content does not match pattern facet"); + return false; + } + } + if (facets.contains(XsdFacet::Assertion)) { + //TODO: implement + } + + return true; +} + +bool XsdTypeChecker::checkConstrainingFacetsBoolean(bool, const QString &lexicalValue, const XsdFacet::Hash &facets, QString &errorMsg) const +{ + if (facets.contains(XsdFacet::Pattern)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::Pattern); + const AtomicValue::List multiValue = facet->multiValue(); + bool found = false; + for (int j = 0; j < multiValue.count(); ++j) { + const QString pattern = multiValue.at(j)->as<DerivedString<TypeString> >()->stringValue(); + const QRegExp exp = PatternPlatform::parsePattern(pattern, m_context, m_reflection); + if (exp.exactMatch(lexicalValue)) { + found = true; + break; + } + } + + if (!found) { + errorMsg = QtXmlPatterns::tr("boolean content does not match pattern facet"); + return false; + } + } + if (facets.contains(XsdFacet::Assertion)) { + //TODO: implement + } + + return true; +} + +bool XsdTypeChecker::checkConstrainingFacetsBinary(const QByteArray &value, const XsdFacet::Hash &facets, const AnySimpleType::Ptr &type, QString &errorMsg) const +{ + if (facets.contains(XsdFacet::Length)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::Length); + const DerivedInteger<TypeNonNegativeInteger>::Ptr length = facet->value(); + if (length->toInteger() != value.length()) { + errorMsg = QtXmlPatterns::tr("binary content does not match the length facet"); + return false; + } + } + if (facets.contains(XsdFacet::MinimumLength)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::MinimumLength); + const DerivedInteger<TypeNonNegativeInteger>::Ptr length = facet->value(); + if (length->toInteger() > value.length()) { + errorMsg = QtXmlPatterns::tr("binary content does not match the minLength facet"); + return false; + } + } + if (facets.contains(XsdFacet::MaximumLength)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::MaximumLength); + const DerivedInteger<TypeNonNegativeInteger>::Ptr length = facet->value(); + if (length->toInteger() < value.length()) { + errorMsg = QtXmlPatterns::tr("binary content does not match the maxLength facet"); + return false; + } + } + if (facets.contains(XsdFacet::Enumeration)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::Enumeration); + const AtomicValue::List multiValue = facet->multiValue(); + bool found = false; + for (int j = 0; j < multiValue.count(); ++j) { + const Base64Binary::Ptr binary = ValueFactory::fromLexical(multiValue.at(j)->as<DerivedString<TypeString> >()->stringValue(), type, m_context, m_reflection); + const QByteArray facetValue = binary->as<Base64Binary>()->asByteArray(); + if (value == facetValue) { + found = true; + break; + } + } + + if (!found) { + errorMsg = QtXmlPatterns::tr("binary content is not listed in the enumeration facet"); + return false; + } + } + if (facets.contains(XsdFacet::Pattern)) { + //TODO: implement + } + if (facets.contains(XsdFacet::Assertion)) { + //TODO: implement + } + + return true; +} + +bool XsdTypeChecker::checkConstrainingFacetsQName(const QXmlName &value, const QString &lexicalValue, const XsdFacet::Hash &facets, QString &errorMsg) const +{ + if (facets.contains(XsdFacet::Length)) { + // always true + } + if (facets.contains(XsdFacet::MinimumLength)) { + // always true + } + if (facets.contains(XsdFacet::MaximumLength)) { + // always true + } + if (facets.contains(XsdFacet::Enumeration)) { + if (!XPathHelper::isQName(lexicalValue)) { + errorMsg = QtXmlPatterns::tr("invalid QName content: %1").arg(formatData(lexicalValue)); + return false; + } + + const XsdFacet::Ptr facet = facets.value(XsdFacet::Enumeration); + const AtomicValue::List multiValue = facet->multiValue(); + bool found = false; + for (int j = 0; j < multiValue.count(); ++j) { + const QXmlName facetValue = multiValue.at(j)->as<QNameValue>()->qName(); + + if (value == facetValue) { + found = true; + break; + } + } + + if (!found) { + errorMsg = QtXmlPatterns::tr("QName content is not listed in the enumeration facet"); + return false; + } + } + if (facets.contains(XsdFacet::Pattern)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::Pattern); + const AtomicValue::List multiValue = facet->multiValue(); + bool found = false; + for (int j = 0; j < multiValue.count(); ++j) { + const QString pattern = multiValue.at(j)->as<DerivedString<TypeString> >()->stringValue(); + const QRegExp exp = PatternPlatform::parsePattern(pattern, m_context, m_reflection); + if (exp.exactMatch(lexicalValue)) { + found = true; + break; + } + } + + if (!found) { + errorMsg = QtXmlPatterns::tr("QName content does not match pattern facet"); + return false; + } + } + if (facets.contains(XsdFacet::Assertion)) { + //TODO: implement + } + + return true; +} + +bool XsdTypeChecker::checkConstrainingFacetsNotation(const QXmlName &value, const XsdFacet::Hash &facets, QString &errorMsg) const +{ + if (facets.contains(XsdFacet::Length)) { + // deprecated by spec + } + if (facets.contains(XsdFacet::MinimumLength)) { + // deprecated by spec + } + if (facets.contains(XsdFacet::MaximumLength)) { + // deprecated by spec + } + if (facets.contains(XsdFacet::Enumeration)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::Enumeration); + const AtomicValue::List multiValue = facet->multiValue(); + bool found = false; + for (int j = 0; j < multiValue.count(); ++j) { + const QXmlName facetValue = multiValue.at(j)->as<QNameValue>()->qName(); + + if (value == facetValue) { + found = true; + break; + } + } + + if (!found) { + errorMsg = QtXmlPatterns::tr("notation content is not listed in the enumeration facet"); + return false; + } + } + if (facets.contains(XsdFacet::Pattern)) { + //TODO: implement + } + if (facets.contains(XsdFacet::Assertion)) { + //TODO: implement + } + + return true; +} + +bool XsdTypeChecker::checkConstrainingFacetsList(const QStringList &values, const QString &lexicalValue, const AnySimpleType::Ptr &itemType, const XsdFacet::Hash &facets, QString &errorMsg) const +{ + if (facets.contains(XsdFacet::Length)) { + const DerivedInteger<TypeNonNegativeInteger>::Ptr value = facets.value(XsdFacet::Length)->value(); + if (value->toInteger() != values.count()) { + errorMsg = QtXmlPatterns::tr("list content does not match length facet"); + return false; + } + } + if (facets.contains(XsdFacet::MinimumLength)) { + const DerivedInteger<TypeNonNegativeInteger>::Ptr value = facets.value(XsdFacet::MinimumLength)->value(); + if (value->toInteger() > values.count()) { + errorMsg = QtXmlPatterns::tr("list content does not match minLength facet"); + return false; + } + } + if (facets.contains(XsdFacet::MaximumLength)) { + const DerivedInteger<TypeNonNegativeInteger>::Ptr value = facets.value(XsdFacet::MaximumLength)->value(); + if (value->toInteger() < values.count()) { + errorMsg = QtXmlPatterns::tr("list content does not match maxLength facet"); + return false; + } + } + if (facets.contains(XsdFacet::Enumeration)) { + + bool found = false; + + // we have to handle lists with QName derived items differently + if (BuiltinTypes::xsQName->wxsTypeMatches(itemType) || BuiltinTypes::xsNOTATION->wxsTypeMatches(itemType)) { + // first convert the string values from the instance document to a list of QXmlName + QList<QXmlName> instanceValues; + for (int i = 0; i < values.count(); ++i) { + instanceValues.append(convertToQName(values.at(i))); + } + + // fetch the values from the facet and create a list of QXmlNames for each of them + const XsdFacet::Ptr facet = facets.value(XsdFacet::Enumeration); + + const AtomicValue::List multiValue = facet->multiValue(); + for (int i = 0; i < multiValue.count(); ++i) { + const QStringList facetValueList = multiValue.at(i)->as<DerivedString<TypeString> >()->stringValue().split(QLatin1Char(' '), QString::SkipEmptyParts); + + // create the list of atomic string values + QList<QXmlName> facetValues; + for (int j = 0; j < facetValueList.count(); ++j) { + facetValues.append(convertToQName(facetValueList.at(j))); + } + + // check if both lists have the same length + if (instanceValues.count() != facetValues.count()) + continue; + + // check if both lists are equal, that means the contain equal items in the same order + bool matchesAll = true; + for (int j = 0; j < instanceValues.count(); ++j) { + if (instanceValues.at(j) != facetValues.at(j)) { + matchesAll = false; + break; + } + } + + if (matchesAll) { + found = true; + break; + } + } + } else { + // first convert the string values from the instance document to atomic values of type string + AtomicValue::List instanceValues; + for (int i = 0; i < values.count(); ++i) { + instanceValues.append(DerivedString<TypeString>::fromLexical(m_namePool, values.at(i))); + } + + // fetch the values from the facet and create a list of atomic string values for each of them + const XsdFacet::Ptr facet = facets.value(XsdFacet::Enumeration); + + const AnySimpleType::Ptr targetType = comparableType(itemType); + + const AtomicValue::List multiValue = facet->multiValue(); + for (int i = 0; i < multiValue.count(); ++i) { + const QStringList facetValueList = multiValue.at(i)->as<DerivedString<TypeString> >()->stringValue().split(QLatin1Char(' '), QString::SkipEmptyParts); + + // create the list of atomic string values + AtomicValue::List facetValues; + for (int j = 0; j < facetValueList.count(); ++j) { + facetValues.append(DerivedString<TypeString>::fromLexical(m_namePool, facetValueList.at(j))); + } + + // check if both lists have the same length + if (instanceValues.count() != facetValues.count()) + continue; + + // check if both lists are equal, that means the contain equal items in the same order + bool matchesAll = true; + for (int j = 0; j < instanceValues.count(); ++j) { + if (!XsdSchemaHelper::constructAndCompare(instanceValues.at(j), AtomicComparator::OperatorEqual, facetValues.at(j), targetType, m_context, m_reflection)) { + matchesAll = false; + break; + } + } + + if (matchesAll) { + found = true; + break; + } + } + } + + if (!found) { + errorMsg = QtXmlPatterns::tr("list content is not listed in the enumeration facet"); + return false; + } + } + if (facets.contains(XsdFacet::Pattern)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::Pattern); + const AtomicValue::List multiValue = facet->multiValue(); + bool found = false; + for (int j = 0; j < multiValue.count(); ++j) { + const QString pattern = multiValue.at(j)->as<DerivedString<TypeString> >()->stringValue(); + const QRegExp exp = PatternPlatform::parsePattern(pattern, m_context, m_reflection); + if (exp.exactMatch(lexicalValue)) { + found = true; + break; + } + } + + if (!found) { + errorMsg = QtXmlPatterns::tr("list content does not match pattern facet"); + return false; + } + } + if (facets.contains(XsdFacet::Assertion)) { + //TODO: implement + } + + return true; +} + +bool XsdTypeChecker::checkConstrainingFacetsUnion(const QString &value, const QString &lexicalValue, const XsdSimpleType::Ptr &simpleType, const XsdFacet::Hash &facets, QString &errorMsg) const +{ + if (facets.contains(XsdFacet::Enumeration)) { + const AnySimpleType::List memberTypes = simpleType->memberTypes(); + + const XsdFacet::Ptr facet = facets.value(XsdFacet::Enumeration); + + // convert the instance value into an atomic string value + const DerivedString<TypeString>::Ptr valueString = DerivedString<TypeString>::fromLexical(m_namePool, value); + + // collect the facet values into a list of atomic string values + const AtomicValue::List facetValues = facet->multiValue(); + + // compare the instance value against the facetValues for each member type and + // search for a match + + bool found = false; + for (int i = 0; i < memberTypes.count(); ++i) { + const AnySimpleType::Ptr targetType = comparableType(memberTypes.at(i)); + for (int j = 0; j < facetValues.count(); ++j) { + if (XsdSchemaHelper::constructAndCompare(valueString, AtomicComparator::OperatorEqual, facetValues.at(j), targetType, m_context, m_reflection)) { + found = true; + break; + } + } + } + + if (!found) { + errorMsg = QtXmlPatterns::tr("union content is not listed in the enumeration facet"); + return false; + } + } + if (facets.contains(XsdFacet::Pattern)) { + const XsdFacet::Ptr facet = facets.value(XsdFacet::Pattern); + const AtomicValue::List multiValue = facet->multiValue(); + bool found = false; + for (int j = 0; j < multiValue.count(); ++j) { + const QString pattern = multiValue.at(j)->as<DerivedString<TypeString> >()->stringValue(); + const QRegExp exp = PatternPlatform::parsePattern(pattern, m_context, m_reflection); + if (exp.exactMatch(lexicalValue)) { + found = true; + break; + } + } + + if (!found) { + errorMsg = QtXmlPatterns::tr("union content does not match pattern facet"); + return false; + } + } + if (facets.contains(XsdFacet::Assertion)) { + //TODO: implement + } + + return true; +} + +AtomicValue::Ptr XsdTypeChecker::fromLexical(const QString &value, const SchemaType::Ptr &type, const ReportContext::Ptr &context, const SourceLocationReflection *const reflection) const +{ + if (type->name(m_namePool) == BuiltinTypes::xsNOTATION->name(m_namePool) || type->name(m_namePool) == BuiltinTypes::xsQName->name(m_namePool)) { + if (value.simplified().isEmpty()) + return ValidationError::createError(QtXmlPatterns::tr("data of type %1 are not allowed to be empty").arg(formatType(m_namePool, BuiltinTypes::xsNOTATION))); + + const QXmlName valueName = convertToQName(value); + return QNameValue::fromValue(m_namePool, valueName); + } else { + return ValueFactory::fromLexical(value, type, context, reflection); + } +} + +QXmlName XsdTypeChecker::convertToQName(const QString &name) const +{ + const int pos = name.indexOf(QLatin1Char(':')); + + QXmlName::PrefixCode prefixCode = 0; + QXmlName::NamespaceCode namespaceCode; + QXmlName::LocalNameCode localNameCode; + if (pos != -1) { + prefixCode = m_context->namePool()->allocatePrefix(name.left(pos)); + namespaceCode = StandardNamespaces::empty; + for (int i = 0; i < m_namespaceBindings.count(); ++i) { + if (m_namespaceBindings.at(i).prefix() == prefixCode) { + namespaceCode = m_namespaceBindings.at(i).namespaceURI(); + break; + } + } + localNameCode = m_context->namePool()->allocateLocalName(name.mid(pos + 1)); + } else { + prefixCode = StandardPrefixes::empty; + namespaceCode = StandardNamespaces::empty; + for (int i = 0; i < m_namespaceBindings.count(); ++i) { + if (m_namespaceBindings.at(i).prefix() == prefixCode) { + namespaceCode = m_namespaceBindings.at(i).namespaceURI(); + break; + } + } + localNameCode = m_context->namePool()->allocateLocalName(name); + } + + return QXmlName(namespaceCode, localNameCode, prefixCode); +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/schema/qxsdtypechecker_p.h b/src/xmlpatterns/schema/qxsdtypechecker_p.h new file mode 100644 index 0000000..88a0c63 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdtypechecker_p.h @@ -0,0 +1,189 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_XsdTypeChecker_H +#define Patternist_XsdTypeChecker_H + +#include <QtXmlPatterns/QSourceLocation> + +#include "qschematype_p.h" +#include "qsourcelocationreflection_p.h" +#include "qxsdschemacontext_p.h" + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +class QXmlQuery; + +namespace QPatternist +{ + /** + * @short An implementation of SourceLocationReflection that takes a QSourceLocation. + * + * This is a convenience class which provides a QSourceLocation with a SourceLocationReflection + * interface. + */ + class XsdSchemaSourceLocationReflection : public SourceLocationReflection + { + public: + XsdSchemaSourceLocationReflection(const QSourceLocation &location); + + virtual const SourceLocationReflection *actualReflection() const; + virtual QSourceLocation sourceLocation() const; + + private: + const QSourceLocation m_sourceLocation; + }; + + /** + * @short The class that provides methods for checking a string against a type. + * + * The class provides functionality for type-aware string handling. + */ + class XsdTypeChecker + { + public: + /** + * Creates a new type checker. + * + * @param context The schema context that is used for error reporting. + * @param namespaceBindings The namespace bindings that shall be used to check against xs:QName based types. + * @param location The source location that is used for error reporting. + */ + XsdTypeChecker(const XsdSchemaContext::Ptr &context, const QVector<QXmlName> &namespaceBindings, const QSourceLocation &location); + + /** + * Destroys the type checker. + */ + ~XsdTypeChecker(); + + /** + * Returns all facets for the given @p type. + * + * The list of facets is created by following the type hierarchy from xs:anyType down to the given type + * and merging the facets in each step. + */ + static XsdFacet::Hash mergedFacetsForType(const SchemaType::Ptr &type, const XsdSchemaContext::Ptr &context); + + /** + * Returns the normalized value for the given @p value. + * + * The normalized value is the original value with all the white space facets + * applied on it. + * + * @param value The original value. + * @param facets The hash of all facets of the values type. + */ + static QString normalizedValue(const QString &value, const XsdFacet::Hash &facets); + + /** + * Checks whether the @p normalizedString is valid according the given @p type. + * + * @param normalizedString The string in normalized form (whitespace facets applied). + * @param type The type the string shall be tested against. + * @param errorMsg Contains the error message if the normalizedString does not match the type. + * @param boundType The type the data was bound to during validation. + * + * @note The @p boundType only differs from @p type if the type is derived from an based union value. + */ + bool isValidString(const QString &normalizedString, const AnySimpleType::Ptr &type, QString &errorMsg, AnySimpleType::Ptr *boundType = 0) const; + + /** + * Returns whether the given @p value and @p otherValue are of @p type and are equal. + */ + bool valuesAreEqual(const QString &value, const QString &otherValue, const AnySimpleType::Ptr &type) const; + + private: + Q_DISABLE_COPY(XsdTypeChecker) + + /** + * Checks the given value against the facets of @p type. + */ + bool checkConstrainingFacets(const AtomicValue::Ptr &value, const QString &lexicalValue, const AnySimpleType::Ptr &type, QString &errorMsg) const; + bool checkConstrainingFacetsString(const QString &value, const XsdFacet::Hash &facets, const AnySimpleType::Ptr &type, QString &errorMsg) const; + bool checkConstrainingFacetsSignedInteger(long long value, const QString &lexicalValue, const XsdFacet::Hash &facets, QString &errorMsg) const; + bool checkConstrainingFacetsUnsignedInteger(unsigned long long value, const QString &lexicalValue, const XsdFacet::Hash &facets, QString &errorMsg) const; + bool checkConstrainingFacetsDouble(double value, const QString &lexicalValue, const XsdFacet::Hash &facets, QString &errorMsg) const; + bool checkConstrainingFacetsDecimal(const AtomicValue::Ptr &value, const QString &lexicalValue, const XsdFacet::Hash &facets, QString &errorMsg) const; + bool checkConstrainingFacetsDateTime(const QDateTime &value, const QString &lexicalValue, const XsdFacet::Hash &facets, const AnySimpleType::Ptr &type, QString &errorMsg) const; + bool checkConstrainingFacetsDuration(const AtomicValue::Ptr &value, const QString &lexicalValue, const XsdFacet::Hash &facets, QString &errorMsg) const; + bool checkConstrainingFacetsBoolean(bool value, const QString &lexicalValue, const XsdFacet::Hash &facets, QString &errorMsg) const; + bool checkConstrainingFacetsBinary(const QByteArray &value, const XsdFacet::Hash &facets, const AnySimpleType::Ptr &type, QString &errorMsg) const; + bool checkConstrainingFacetsQName(const QXmlName&, const QString &lexicalValue, const XsdFacet::Hash &facets, QString &errorMsg) const; + bool checkConstrainingFacetsNotation(const QXmlName &value, const XsdFacet::Hash &facets, QString &errorMsg) const; + bool checkConstrainingFacetsList(const QStringList &values, const QString &lexicalValue, const AnySimpleType::Ptr &itemType, const XsdFacet::Hash &facets, QString &errorMsg) const; + bool checkConstrainingFacetsUnion(const QString &value, const QString &lexicalValue, const XsdSimpleType::Ptr &simpleType, const XsdFacet::Hash &facets, QString &errorMsg) const; + + /** + * Creates an atomic value of @p type from the given string @p value. + */ + AtomicValue::Ptr fromLexical(const QString &value, const SchemaType::Ptr &type, const ReportContext::Ptr &context, const SourceLocationReflection *const reflection) const; + + /** + * Converts a qualified name into a QXmlName according to the namespace + * mappings of the current node. + */ + QXmlName convertToQName(const QString &name) const; + + XsdSchemaContext::Ptr m_context; + XsdSchema::Ptr m_schema; + const NamePool::Ptr m_namePool; + QVector<QXmlName> m_namespaceBindings; + SourceLocationReflection* m_reflection; + }; +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/schema/qxsduserschematype.cpp b/src/xmlpatterns/schema/qxsduserschematype.cpp new file mode 100644 index 0000000..bb545b4 --- /dev/null +++ b/src/xmlpatterns/schema/qxsduserschematype.cpp @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* + * NOTE: This file is included by qxsduserschematype_p.h + * if you need some includes, put them in qxsduserschematype_p.h (outside of the namespace) + */ + +template<typename TSuperClass> +void XsdUserSchemaType<TSuperClass>::setName(const QXmlName &name) +{ + m_name = name; +} + +template<typename TSuperClass> +QXmlName XsdUserSchemaType<TSuperClass>::name(const NamePool::Ptr&) const +{ + return m_name; +} + +template<typename TSuperClass> +QString XsdUserSchemaType<TSuperClass>::displayName(const NamePool::Ptr &np) const +{ + return np->displayName(m_name); +} + +template<typename TSuperClass> +void XsdUserSchemaType<TSuperClass>::setDerivationConstraints(const SchemaType::DerivationConstraints &constraints) +{ + m_derivationConstraints = constraints; +} + +template<typename TSuperClass> +SchemaType::DerivationConstraints XsdUserSchemaType<TSuperClass>::derivationConstraints() const +{ + return m_derivationConstraints; +} diff --git a/src/xmlpatterns/schema/qxsduserschematype_p.h b/src/xmlpatterns/schema/qxsduserschematype_p.h new file mode 100644 index 0000000..9138d09 --- /dev/null +++ b/src/xmlpatterns/schema/qxsduserschematype_p.h @@ -0,0 +1,124 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_XsdUserSchemaType_H +#define Patternist_XsdUserSchemaType_H + +#include "qnamedschemacomponent_p.h" +#include "qschematype_p.h" +#include "qxsdannotated_p.h" + +template<typename N, typename M> class QHash; +template<typename N> class QList; + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +namespace QPatternist +{ + /** + * @short A base class for all user defined simple and complex types. + * + * This class was introduced to combine the SchemaType class and the + * NamedSchemaComponent class without explicit inheritance. + * + * @ingroup Patternist_schema + * @author Tobias Koenig <tobias.koenig@trolltech.com> + */ + template<typename TSuperClass> + class XsdUserSchemaType : public TSuperClass, public NamedSchemaComponent, public XsdAnnotated + { + public: + typedef QExplicitlySharedDataPointer<XsdUserSchemaType> Ptr; + + /** + * Sets the @p name of the type. + */ + void setName(const QXmlName &name); + + /** + * Returns the name of the type. + * + * @param namePool The pool the name belongs to. + */ + virtual QXmlName name(const NamePool::Ptr &namePool) const; + + /** + * Returns the display name of the type. + * + * @param namePool The pool the name belongs to. + */ + virtual QString displayName(const NamePool::Ptr &namePool) const; + + /** + * Sets the derivation @p constraints of the type. + */ + void setDerivationConstraints(const SchemaType::DerivationConstraints &constraints); + + /** + * Returns the derivation constraints of the type. + */ + SchemaType::DerivationConstraints derivationConstraints() const; + + private: + QXmlName m_name; + SchemaType::DerivationConstraints m_derivationConstraints; + }; + + #include "qxsduserschematype.cpp" +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/schema/qxsdvalidatedxmlnodemodel.cpp b/src/xmlpatterns/schema/qxsdvalidatedxmlnodemodel.cpp new file mode 100644 index 0000000..944ae79 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdvalidatedxmlnodemodel.cpp @@ -0,0 +1,215 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxsdvalidatedxmlnodemodel_p.h" + +#include <QtCore/QUrl> +#include <QtCore/QVariant> +#include <QtCore/QVector> + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +XsdValidatedXmlNodeModel::XsdValidatedXmlNodeModel(const QAbstractXmlNodeModel *model) + : m_internalModel(model) +{ +} + +XsdValidatedXmlNodeModel::~XsdValidatedXmlNodeModel() +{ +} + +QUrl XsdValidatedXmlNodeModel::baseUri(const QXmlNodeModelIndex &index) const +{ + return m_internalModel->baseUri(index); +} + +QUrl XsdValidatedXmlNodeModel::documentUri(const QXmlNodeModelIndex &index) const +{ + return m_internalModel->documentUri(index); +} + +QXmlNodeModelIndex::NodeKind XsdValidatedXmlNodeModel::kind(const QXmlNodeModelIndex &index) const +{ + return m_internalModel->kind(index); +} + +QXmlNodeModelIndex::DocumentOrder XsdValidatedXmlNodeModel::compareOrder(const QXmlNodeModelIndex &index, const QXmlNodeModelIndex &otherIndex) const +{ + return m_internalModel->compareOrder(index, otherIndex); +} + +QXmlNodeModelIndex XsdValidatedXmlNodeModel::root(const QXmlNodeModelIndex &index) const +{ + return m_internalModel->root(index); +} + +QXmlName XsdValidatedXmlNodeModel::name(const QXmlNodeModelIndex &index) const +{ + return m_internalModel->name(index); +} + +QString XsdValidatedXmlNodeModel::stringValue(const QXmlNodeModelIndex &index) const +{ + return m_internalModel->stringValue(index); +} + +QVariant XsdValidatedXmlNodeModel::typedValue(const QXmlNodeModelIndex &index) const +{ + return m_internalModel->typedValue(index); +} + +QExplicitlySharedDataPointer<QAbstractXmlForwardIterator<QXmlNodeModelIndex> > XsdValidatedXmlNodeModel::iterate(const QXmlNodeModelIndex &index, QXmlNodeModelIndex::Axis axis) const +{ + return m_internalModel->iterate(index, axis); +} + +QPatternist::ItemIteratorPtr XsdValidatedXmlNodeModel::sequencedTypedValue(const QXmlNodeModelIndex &index) const +{ + return m_internalModel->sequencedTypedValue(index); +} + +QPatternist::ItemTypePtr XsdValidatedXmlNodeModel::type(const QXmlNodeModelIndex &index) const +{ + return m_internalModel->type(index); +} + +QXmlName::NamespaceCode XsdValidatedXmlNodeModel::namespaceForPrefix(const QXmlNodeModelIndex &index, const QXmlName::PrefixCode prefix) const +{ + return m_internalModel->namespaceForPrefix(index, prefix); +} + +bool XsdValidatedXmlNodeModel::isDeepEqual(const QXmlNodeModelIndex &index, const QXmlNodeModelIndex &otherIndex) const +{ + return m_internalModel->isDeepEqual(index, otherIndex); +} + +void XsdValidatedXmlNodeModel::sendNamespaces(const QXmlNodeModelIndex &index, QAbstractXmlReceiver *const receiver) const +{ + m_internalModel->sendNamespaces(index, receiver); +} + +QVector<QXmlName> XsdValidatedXmlNodeModel::namespaceBindings(const QXmlNodeModelIndex &index) const +{ + return m_internalModel->namespaceBindings(index); +} + +QXmlNodeModelIndex XsdValidatedXmlNodeModel::elementById(const QXmlName &name) const +{ + return m_internalModel->elementById(name); +} + +QVector<QXmlNodeModelIndex> XsdValidatedXmlNodeModel::nodesByIdref(const QXmlName &name) const +{ + return m_internalModel->nodesByIdref(name); +} + +void XsdValidatedXmlNodeModel::copyNodeTo(const QXmlNodeModelIndex &index, QAbstractXmlReceiver *const receiver, const NodeCopySettings &settings) const +{ + return m_internalModel->copyNodeTo(index, receiver, settings); +} + +QXmlNodeModelIndex XsdValidatedXmlNodeModel::nextFromSimpleAxis(SimpleAxis axis, const QXmlNodeModelIndex &origin) const +{ + return m_internalModel->nextFromSimpleAxis(axis, origin); +} + +QVector<QXmlNodeModelIndex> XsdValidatedXmlNodeModel::attributes(const QXmlNodeModelIndex &index) const +{ + return m_internalModel->attributes(index); +} + +void XsdValidatedXmlNodeModel::setAssignedElement(const QXmlNodeModelIndex &index, const XsdElement::Ptr &element) +{ + m_assignedElements.insert(index, element); +} + +XsdElement::Ptr XsdValidatedXmlNodeModel::assignedElement(const QXmlNodeModelIndex &index) const +{ + if (m_assignedElements.contains(index)) + return m_assignedElements.value(index); + else + return XsdElement::Ptr(); +} + +void XsdValidatedXmlNodeModel::setAssignedAttribute(const QXmlNodeModelIndex &index, const XsdAttribute::Ptr &attribute) +{ + m_assignedAttributes.insert(index, attribute); +} + +XsdAttribute::Ptr XsdValidatedXmlNodeModel::assignedAttribute(const QXmlNodeModelIndex &index) const +{ + if (m_assignedAttributes.contains(index)) + return m_assignedAttributes.value(index); + else + return XsdAttribute::Ptr(); +} + +void XsdValidatedXmlNodeModel::setAssignedType(const QXmlNodeModelIndex &index, const SchemaType::Ptr &type) +{ + m_assignedTypes.insert(index, type); +} + +SchemaType::Ptr XsdValidatedXmlNodeModel::assignedType(const QXmlNodeModelIndex &index) const +{ + if (m_assignedTypes.contains(index)) + return m_assignedTypes.value(index); + else + return SchemaType::Ptr(); +} + +void XsdValidatedXmlNodeModel::addIdIdRefBinding(const QString &id, const NamedSchemaComponent::Ptr &binding) +{ + m_idIdRefBindings[id].insert(binding); +} + +QStringList XsdValidatedXmlNodeModel::idIdRefBindingIds() const +{ + return m_idIdRefBindings.keys(); +} + +QSet<NamedSchemaComponent::Ptr> XsdValidatedXmlNodeModel::idIdRefBindings(const QString &id) const +{ + return m_idIdRefBindings.value(id); +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/schema/qxsdvalidatedxmlnodemodel_p.h b/src/xmlpatterns/schema/qxsdvalidatedxmlnodemodel_p.h new file mode 100644 index 0000000..6b6c03d --- /dev/null +++ b/src/xmlpatterns/schema/qxsdvalidatedxmlnodemodel_p.h @@ -0,0 +1,179 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_XsdValidatedXmlNodeModel_H +#define Patternist_XsdValidatedXmlNodeModel_H + +#include "qabstractxmlnodemodel.h" + +#include "qabstractxmlforwarditerator_p.h" +#include "qitem_p.h" +#include "qschematype_p.h" +#include "qxsdelement_p.h" + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +namespace QPatternist +{ + /** + * @short A delegate class that wraps around a QAbstractXmlNodeModel and provides + * additional validation specific information. + * + * This class represents the input XML document enriched with additional type + * information that has been assigned during validation. + * + * @ingroup Patternist_schema + * @author Tobias Koenig <tobias.koenig@trolltech.com> + */ + class XsdValidatedXmlNodeModel : public QAbstractXmlNodeModel + { + public: + typedef QExplicitlySharedDataPointer<XsdValidatedXmlNodeModel> Ptr; + typedef QList<Ptr> List; + + /** + * Creates a new validated xml node model. + */ + XsdValidatedXmlNodeModel(const QAbstractXmlNodeModel *model); + + /** + * Destroys the validated xml node model. + */ + virtual ~XsdValidatedXmlNodeModel(); + + virtual QUrl baseUri(const QXmlNodeModelIndex &ni) const; + virtual QUrl documentUri(const QXmlNodeModelIndex &ni) const; + virtual QXmlNodeModelIndex::NodeKind kind(const QXmlNodeModelIndex &ni) const; + virtual QXmlNodeModelIndex::DocumentOrder compareOrder(const QXmlNodeModelIndex &ni1, const QXmlNodeModelIndex &ni2) const; + virtual QXmlNodeModelIndex root(const QXmlNodeModelIndex &n) const; + virtual QXmlName name(const QXmlNodeModelIndex &ni) const; + virtual QString stringValue(const QXmlNodeModelIndex &n) const; + virtual QVariant typedValue(const QXmlNodeModelIndex &n) const; + virtual QExplicitlySharedDataPointer<QAbstractXmlForwardIterator<QXmlNodeModelIndex> > iterate(const QXmlNodeModelIndex &ni, QXmlNodeModelIndex::Axis axis) const; + virtual QPatternist::ItemIteratorPtr sequencedTypedValue(const QXmlNodeModelIndex &ni) const; + virtual QPatternist::ItemTypePtr type(const QXmlNodeModelIndex &ni) const; + virtual QXmlName::NamespaceCode namespaceForPrefix(const QXmlNodeModelIndex &ni, const QXmlName::PrefixCode prefix) const; + virtual bool isDeepEqual(const QXmlNodeModelIndex &ni1, const QXmlNodeModelIndex &ni2) const; + virtual void sendNamespaces(const QXmlNodeModelIndex &n, QAbstractXmlReceiver *const receiver) const; + virtual QVector<QXmlName> namespaceBindings(const QXmlNodeModelIndex &n) const; + virtual QXmlNodeModelIndex elementById(const QXmlName &NCName) const; + virtual QVector<QXmlNodeModelIndex> nodesByIdref(const QXmlName &NCName) const; + virtual void copyNodeTo(const QXmlNodeModelIndex &node, QAbstractXmlReceiver *const receiver, const NodeCopySettings &) const; + + /** + * Sets the @p element that is assigned to the xml node at @p index. + */ + void setAssignedElement(const QXmlNodeModelIndex &index, const XsdElement::Ptr &element); + + /** + * Returns the element that is assigned to the xml node at @p index. + */ + XsdElement::Ptr assignedElement(const QXmlNodeModelIndex &index) const; + + /** + * Sets the @p attribute that is assigned to the xml node at @p index. + */ + void setAssignedAttribute(const QXmlNodeModelIndex &index, const XsdAttribute::Ptr &attribute); + + /** + * Returns the attribute that is assigned to the xml node at @p index. + */ + XsdAttribute::Ptr assignedAttribute(const QXmlNodeModelIndex &index) const; + + /** + * Sets the @p type that is assigned to the xml node at @p index. + * + * @note The type can be a different than the type of the element or + * attribute that is assigned to the index, since the instance + * document can overwrite it by xsi:type. + */ + void setAssignedType(const QXmlNodeModelIndex &index, const SchemaType::Ptr &type); + + /** + * Returns the type that is assigned to the xml node at @p index. + */ + SchemaType::Ptr assignedType(const QXmlNodeModelIndex &index) const; + + /** + * Adds the attribute or element @p binding with the given @p id. + */ + void addIdIdRefBinding(const QString &id, const NamedSchemaComponent::Ptr &binding); + + /** + * Returns a list of all binding ids. + */ + QStringList idIdRefBindingIds() const; + + /** + * Returns the set of bindings with the given @p id. + */ + QSet<NamedSchemaComponent::Ptr> idIdRefBindings(const QString &id) const; + + protected: + virtual QXmlNodeModelIndex nextFromSimpleAxis(SimpleAxis axis, const QXmlNodeModelIndex &origin) const; + virtual QVector<QXmlNodeModelIndex> attributes(const QXmlNodeModelIndex &element) const; + + private: + QExplicitlySharedDataPointer<const QAbstractXmlNodeModel> m_internalModel; + QHash<QXmlNodeModelIndex, XsdElement::Ptr> m_assignedElements; + QHash<QXmlNodeModelIndex, XsdAttribute::Ptr> m_assignedAttributes; + QHash<QXmlNodeModelIndex, SchemaType::Ptr> m_assignedTypes; + QHash<QString, QSet<NamedSchemaComponent::Ptr> > m_idIdRefBindings; + }; +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/schema/qxsdvalidatinginstancereader.cpp b/src/xmlpatterns/schema/qxsdvalidatinginstancereader.cpp new file mode 100644 index 0000000..8af70f6 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdvalidatinginstancereader.cpp @@ -0,0 +1,1276 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxsdvalidatinginstancereader_p.h" + +#include "qabstractdatetime_p.h" +#include "qacceltreeresourceloader_p.h" +#include "qbase64binary_p.h" +#include "qboolean_p.h" +#include "qcommonnamespaces_p.h" +#include "qderivedinteger_p.h" +#include "qduration_p.h" +#include "qgenericstaticcontext_p.h" +#include "qhexbinary_p.h" +#include "qnamespaceresolver_p.h" +#include "qpatternplatform_p.h" +#include "qqnamevalue_p.h" +#include "qsourcelocationreflection_p.h" +#include "qvaluefactory_p.h" +#include "qxmlnamepool.h" +#include "qxmlquery_p.h" +#include "qxmlschema_p.h" +#include "qxsdschemahelper_p.h" +#include "qxsdschemamerger_p.h" +#include "qxsdstatemachine_p.h" +#include "qxsdstatemachinebuilder_p.h" +#include "qxsdtypechecker_p.h" + +#include "qxsdschemadebugger_p.h" + +#include <QtCore/QFile> +#include <QtXmlPatterns/QXmlQuery> +#include <QtXmlPatterns/QXmlResultItems> + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +namespace QPatternist +{ + template <> + template <> + bool XsdStateMachine<XsdTerm::Ptr>::inputEqualsTransition<QXmlName>(QXmlName name, XsdTerm::Ptr term) const + { + if (term->isElement()) { + return (XsdElement::Ptr(term)->name(m_namePool) == name); + } else if (term->isWildcard()) { + // wildcards using XsdWildcard::absentNamespace, so we have to fix that here + if (name.namespaceURI() == StandardNamespaces::empty) { + name.setNamespaceURI(m_namePool->allocateNamespace(XsdWildcard::absentNamespace())); + } + + return XsdSchemaHelper::wildcardAllowsExpandedName(name, XsdWildcard::Ptr(term), m_namePool); + } + + return false; + } +} + +XsdValidatingInstanceReader::XsdValidatingInstanceReader(XsdValidatedXmlNodeModel *model, const QUrl &documentUri, const XsdSchemaContext::Ptr &context) + : XsdInstanceReader(model, context) + , m_model(model) + , m_namePool(m_context->namePool()) + , m_xsiNilName(m_namePool->allocateQName(CommonNamespaces::XSI, QLatin1String("nil"))) + , m_xsiTypeName(m_namePool->allocateQName(CommonNamespaces::XSI, QLatin1String("type"))) + , m_xsiSchemaLocationName(m_namePool->allocateQName(CommonNamespaces::XSI, QLatin1String("schemaLocation"))) + , m_xsiNoNamespaceSchemaLocationName(m_namePool->allocateQName(CommonNamespaces::XSI, QLatin1String("noNamespaceSchemaLocation"))) + , m_documentUri(documentUri) +{ + m_idRefsType = m_context->schemaTypeFactory()->createSchemaType(m_namePool->allocateQName(CommonNamespaces::WXS, QLatin1String("IDREFS"))); +} + +void XsdValidatingInstanceReader::addSchema(const XsdSchema::Ptr &schema, const QUrl &locationUrl) +{ + if (!m_mergedSchemas.contains(locationUrl)) { + m_mergedSchemas.insert(locationUrl, QStringList() << schema->targetNamespace()); + } else { + QStringList &targetNamespaces = m_mergedSchemas[locationUrl]; + if (targetNamespaces.contains(schema->targetNamespace())) + return; + + targetNamespaces.append(schema->targetNamespace()); + } + + const XsdSchemaMerger merger(m_schema, schema); + m_schema = merger.mergedSchema(); +/* + XsdSchemaDebugger dbg(m_namePool); + dbg.dumpSchema(m_schema); +*/ +} + +bool XsdValidatingInstanceReader::read() +{ + while (!atEnd()) { + readNext(); + + if (isEndElement()) + return true; + + if (isStartElement()) { + const QXmlName elementName = name(); + const QXmlItem currentItem = item(); + bool hasStateMachine = false; + XsdElement::Ptr processedElement; + + if (!validate(hasStateMachine, processedElement)) + return false; + + read(); + + if (processedElement) { // for wildcard with 'skip' we have no element + m_model->setAssignedElement(currentItem.toNodeModelIndex(), processedElement); + + // check identity constraints after all child nodes have been + // validated, so that we know there assigned types + validateIdentityConstraint(processedElement, currentItem); + } + + if (!m_stateMachines.isEmpty() && hasStateMachine) { + if (!m_stateMachines.top().inEndState()) { + error(QtXmlPatterns::tr("element %1 is missing child element").arg(formatKeyword(m_namePool->displayName(elementName)))); + return false; + } + m_stateMachines.pop(); + } + } + } + + // final validations + + // check IDREF occurrences + const QStringList ids = m_model->idIdRefBindingIds(); + QSetIterator<QString> it(m_idRefs); + while (it.hasNext()) { + const QString id = it.next(); + if (!ids.contains(id)) { + error(QtXmlPatterns::tr("there is one IDREF value with no corresponding ID: %1").arg(formatKeyword(id))); + return false; + } + } + + return true; +} + +void XsdValidatingInstanceReader::error(const QString &msg) const +{ + m_context.data()->error(msg, XsdSchemaContext::XSDError, sourceLocation()); +} + +bool XsdValidatingInstanceReader::loadSchema(const QString &targetNamespace, const QUrl &location) +{ + const AutoPtr<QNetworkReply> reply(AccelTreeResourceLoader::load(location, m_context->networkAccessManager(), + m_context, AccelTreeResourceLoader::ContinueOnError)); + if (!reply) + return true; + + // we have to create a separated schema context here, that however shares the type factory + XsdSchemaContext::Ptr context(new XsdSchemaContext(m_namePool)); + context->m_schemaTypeFactory = m_context->m_schemaTypeFactory; + + QXmlSchemaPrivate schema(context); + schema.load(reply.data(), location, targetNamespace); + if (!schema.isValid()) { + error(QtXmlPatterns::tr("loaded schema file is invalid")); + return false; + } + + addSchema(schema.m_schemaParserContext->schema(), location); + + return true; +} + +bool XsdValidatingInstanceReader::validate(bool &hasStateMachine, XsdElement::Ptr &processedElement) +{ + // first check if a custom schema is defined + if (hasAttribute(m_xsiSchemaLocationName)) { + const QString schemaLocation = attribute(m_xsiSchemaLocationName); + const QStringList parts = schemaLocation.split(QLatin1Char(' '), QString::SkipEmptyParts); + if ((parts.count()%2) == 1) { + error(QtXmlPatterns::tr("%1 contains invalid data").arg(formatKeyword(m_namePool, m_xsiSchemaLocationName))); + return false; + } + + for (int i = 0; i < parts.count(); i += 2) { + const QString identifier = QString::fromLatin1("%1 %2").arg(parts.at(i)).arg(parts.at(i + 1)); + if (m_processedSchemaLocations.contains(identifier)) + continue; + else + m_processedSchemaLocations.insert(identifier); + + // check constraint 4) from http://www.w3.org/TR/xmlschema-1/#schema-loc (only valid for XML Schema 1.0?) + if (m_processedNamespaces.contains(parts.at(i))) { + error(QtXmlPatterns::tr("xsi:schemaLocation namespace %1 has already appeared earlier in the instance document").arg(formatKeyword(parts.at(i)))); + return false; + } + + QUrl url(parts.at(i + 1)); + if (url.isRelative()) { + Q_ASSERT(m_documentUri.isValid()); + + url = m_documentUri.resolved(url); + } + + loadSchema(parts.at(i), url); + } + } + + if (hasAttribute(m_xsiNoNamespaceSchemaLocationName)) { + const QString schemaLocation = attribute(m_xsiNoNamespaceSchemaLocationName); + + if (!m_processedSchemaLocations.contains(schemaLocation)) { + m_processedSchemaLocations.insert(schemaLocation); + + if (m_processedNamespaces.contains(QString())) { + error(QtXmlPatterns::tr("xsi:noNamespaceSchemaLocation cannot appear after the first no-namespace element or attribute")); + return false; + } + + QUrl url(schemaLocation); + if (url.isRelative()) { + Q_ASSERT(m_documentUri.isValid()); + + url = m_documentUri.resolved(url); + } + + loadSchema(QString(), url); + } + } + + m_processedNamespaces.insert(m_namePool->stringForNamespace(name().namespaceURI())); + + if (!m_schema) { + error(QtXmlPatterns::tr("no schema defined for validation")); + return false; + } + + // check if we are 'inside' a type definition + if (m_stateMachines.isEmpty()) { + // find out the type of the top-level element + XsdElement::Ptr element = elementByName(name()); + if (!element) { + if (!hasAttribute(m_xsiTypeName)) { + error(QtXmlPatterns::tr("no definition for element %1 available").arg(formatKeyword(m_namePool, name()))); + return false; + } + + // This instance document has an element with no definition in the schema + // but an explicitly given type, that is fine according to the spec. + // We will create an element definition manually here and continue the + // normal validation process + element = XsdElement::Ptr(new XsdElement()); + element->setName(name()); + element->setIsAbstract(false); + element->setIsNillable(hasAttribute(m_xsiNilName)); + + const QString type = qNameAttribute(m_xsiTypeName); + const QXmlName typeName = convertToQName(type); + + const SchemaType::Ptr elementType = typeByName(typeName); + if (!elementType) { + error(QtXmlPatterns::tr("specified type %1 is not known to the schema").arg(formatType(m_namePool, typeName))); + return false; + } + element->setType(elementType); + } + + // rememeber the element we process + processedElement = element; + + if (!validateElement(element, hasStateMachine)) { + return false; + } + + } else { + if (!m_stateMachines.top().proceed<QXmlName>(name())) { + error(QtXmlPatterns::tr("element %1 is not defined in this scope").arg(formatKeyword(m_namePool, name()))); + return false; + } + + const XsdTerm::Ptr term = m_stateMachines.top().lastTransition(); + if (term->isElement()) { + const XsdElement::Ptr element(term); + + // rememeber the element we process + processedElement = element; + + if (!validateElement(element, hasStateMachine)) + return false; + + } else { + const XsdWildcard::Ptr wildcard(term); + if (wildcard->processContents() != XsdWildcard::Skip) { + XsdElement::Ptr elementDeclaration = elementByName(name()); + if (!elementDeclaration) { + if (hasAttribute(m_xsiTypeName)) { + // This instance document has an element with no definition in the schema + // but an explicitly given type, that is fine according to the spec. + // We will create an element definition manually here and continue the + // normal validation process + elementDeclaration = XsdElement::Ptr(new XsdElement()); + elementDeclaration->setName(name()); + elementDeclaration->setIsAbstract(false); + elementDeclaration->setIsNillable(hasAttribute(m_xsiNilName)); + + const QString type = qNameAttribute(m_xsiTypeName); + const QXmlName typeName = convertToQName(type); + + const SchemaType::Ptr elementType = typeByName(typeName); + if (!elementType) { + error(QtXmlPatterns::tr("specified type %1 is not known to the schema").arg(formatType(m_namePool, typeName))); + return false; + } + elementDeclaration->setType(elementType); + } + } + + if (!elementDeclaration) { + if (wildcard->processContents() == XsdWildcard::Strict) { + error(QtXmlPatterns::tr("declaration for element %1 does not exist").arg(formatKeyword(m_namePool->displayName(name())))); + return false; + } else { + // in this case we put a state machine for the xs:anyType on the statemachine stack, + // so we accept every content of this element + + createAndPushStateMachine(anyType()->contentType()->particle()); + hasStateMachine = true; + } + } else { + if (!validateElement(elementDeclaration, hasStateMachine)) { + if (wildcard->processContents() == XsdWildcard::Strict) { + error(QtXmlPatterns::tr("element %1 contains invalid content").arg(formatKeyword(m_namePool->displayName(name())))); + return false; + } + } + + // rememeber the type of that element node + m_model->setAssignedType(item().toNodeModelIndex(), elementDeclaration->type()); + } + } else { // wildcard process contents type is Skip + // in this case we put a state machine for the xs:anyType on the statemachine stack, + // so we accept every content of this element + + const XsdWildcard::Ptr wildcard(new XsdWildcard()); + wildcard->namespaceConstraint()->setVariety(XsdWildcard::NamespaceConstraint::Any); + wildcard->setProcessContents(XsdWildcard::Skip); + + const XsdParticle::Ptr outerParticle(new XsdParticle()); + outerParticle->setMinimumOccurs(1); + outerParticle->setMaximumOccurs(1); + + const XsdParticle::Ptr innerParticle(new XsdParticle()); + innerParticle->setMinimumOccurs(0); + innerParticle->setMaximumOccursUnbounded(true); + innerParticle->setTerm(wildcard); + + const XsdModelGroup::Ptr outerModelGroup(new XsdModelGroup()); + outerModelGroup->setCompositor(XsdModelGroup::SequenceCompositor); + outerModelGroup->setParticles(XsdParticle::List() << innerParticle); + outerParticle->setTerm(outerModelGroup); + + createAndPushStateMachine(outerParticle); + hasStateMachine = true; + } + } + } + + return true; +} + +void XsdValidatingInstanceReader::createAndPushStateMachine(const XsdParticle::Ptr &particle) +{ + XsdStateMachine<XsdTerm::Ptr> stateMachine(m_namePool); + + XsdStateMachineBuilder builder(&stateMachine, m_namePool, XsdStateMachineBuilder::ValidatingMode); + const XsdStateMachine<XsdTerm::Ptr>::StateId endState = builder.reset(); + const XsdStateMachine<XsdTerm::Ptr>::StateId startState = builder.buildParticle(particle, endState); + builder.addStartState(startState); + +/* + QString fileName = QString("/tmp/foo_%1.dot").arg(m_namePool->displayName(complexType->name(m_namePool))); + QString pngFileName = QString("/tmp/foo_%1.png").arg(m_namePool->displayName(complexType->name(m_namePool))); + QFile file(fileName); + file.open(QIODevice::WriteOnly); + stateMachine.outputGraph(&file, "Hello"); + file.close(); + ::system(QString("dot -Tpng %1 -o%2").arg(fileName).arg(pngFileName).toLatin1().data()); +*/ + + stateMachine = stateMachine.toDFA(); + + m_stateMachines.push(stateMachine); +} + +bool XsdValidatingInstanceReader::validateElement(const XsdElement::Ptr &declaration, bool &hasStateMachine) +{ + // http://www.w3.org/TR/xmlschema11-1/#d0e10998 + + bool isNilled = false; + + // 1 tested already, 'declaration' corresponds D + + // 2 + if (declaration->isAbstract()) { + error(QtXmlPatterns::tr("element %1 is declared as abstract").arg(formatKeyword(declaration->displayName(m_namePool)))); + return false; + } + + // 3 + if (!declaration->isNillable()) { + if (hasAttribute(m_xsiNilName)) { + error(QtXmlPatterns::tr("element %1 is not nillable").arg(formatKeyword(declaration->displayName(m_namePool)))); + return false; // 3.1 + } + } else { + if (hasAttribute(m_xsiNilName)) { + const QString value = attribute(m_xsiNilName); + const Boolean::Ptr nil = Boolean::fromLexical(value); + if (nil->hasError()) { + error(QtXmlPatterns::tr("attribute %1 contains invalid data: %1").arg(formatKeyword(QLatin1String("nil"))).arg(formatData(value))); + return false; + } + + // 3.2.3 + if (nil->as<Boolean>()->value() == true) { + // 3.2.3.1 + if (hasChildElement() || hasChildText()) { + error(QtXmlPatterns::tr("element contains content although it is nillable")); + return false; + } + + // 3.2.3.2 + if (declaration->valueConstraint() && declaration->valueConstraint()->variety() == XsdElement::ValueConstraint::Fixed) { + error(QtXmlPatterns::tr("fixed value constrained not allowed if element is nillable")); + return false; + } + } + + isNilled = nil->as<Boolean>()->value(); + } + } + + SchemaType::Ptr finalElementType = declaration->type(); + + // 4 + if (hasAttribute(m_xsiTypeName)) { + const QString type = qNameAttribute(m_xsiTypeName); + const QXmlName typeName = convertToQName(type); + + const SchemaType::Ptr elementType = typeByName(typeName); + // 4.1 + if (!elementType) { + error(QtXmlPatterns::tr("specified type %1 is not known to the schema").arg(formatType(m_namePool, typeName))); + return false; + } + + // 4.2 + SchemaType::DerivationConstraints constraints = 0; + if (declaration->disallowedSubstitutions() & NamedSchemaComponent::ExtensionConstraint) + constraints |= SchemaType::ExtensionConstraint; + if (declaration->disallowedSubstitutions() & NamedSchemaComponent::RestrictionConstraint) + constraints |= SchemaType::RestrictionConstraint; + + if (!XsdSchemaHelper::isValidlySubstitutable(elementType, declaration->type(), constraints)) { + if (declaration->type()->name(m_namePool) != BuiltinTypes::xsAnyType->name(m_namePool)) { // xs:anyType is a valid substitutable type here + error(QtXmlPatterns::tr("specified type %1 is not validly substitutable with element type %2").arg(formatType(m_namePool, elementType)).arg(formatType(m_namePool, declaration->type()))); + return false; + } + } + + finalElementType = elementType; + } + + if (!validateElementType(declaration, finalElementType, isNilled, hasStateMachine)) + return false; + + return true; +} + +bool XsdValidatingInstanceReader::validateElementType(const XsdElement::Ptr &declaration, const SchemaType::Ptr &type, bool isNilled, bool &hasStateMachine) +{ + // @see http://www.w3.org/TR/xmlschema11-1/#d0e11749 + + // 1 checked already + + // 2 + if (type->isComplexType() && type->isDefinedBySchema()) { + if (XsdComplexType::Ptr(type)->isAbstract()) { + error(QtXmlPatterns::tr("complex type %1 is not allowed to be abstract").arg(formatType(m_namePool, type))); + return false; + } + } + + // 3 + if (type->isSimpleType()) + return validateElementSimpleType(declaration, type, isNilled); // 3.1 + else + return validateElementComplexType(declaration, type, isNilled, hasStateMachine); // 3.2 +} + +bool XsdValidatingInstanceReader::validateElementSimpleType(const XsdElement::Ptr &declaration, const SchemaType::Ptr &type, bool isNilled) +{ + // @see http://www.w3.org/TR/xmlschema11-1/#d0e11749 + + // 3.1.1 + const QSet<QXmlName> allowedAttributes(QSet<QXmlName>() << m_xsiNilName << m_xsiTypeName << m_xsiSchemaLocationName << m_xsiNoNamespaceSchemaLocationName); + QSet<QXmlName> elementAttributes = attributeNames(); + elementAttributes.subtract(allowedAttributes); + if (!elementAttributes.isEmpty()) { + error(QtXmlPatterns::tr("element %1 contains not allowed attributes").arg(formatKeyword(declaration->displayName(m_namePool)))); + return false; + } + + // 3.1.2 + if (hasChildElement()) { + error(QtXmlPatterns::tr("element %1 contains not allowed child element").arg(formatKeyword(declaration->displayName(m_namePool)))); + return false; + } + + // 3.1.3 + if (!isNilled) { + const XsdFacet::Hash facets = XsdTypeChecker::mergedFacetsForType(type, m_context); + + QString actualValue; + if (hasChildText()) { + actualValue = XsdTypeChecker::normalizedValue(text(), facets); + } else { + if (declaration->valueConstraint()) + actualValue = XsdTypeChecker::normalizedValue(declaration->valueConstraint()->value(), facets); + } + + QString errorMsg; + AnySimpleType::Ptr boundType; + + const XsdTypeChecker checker(m_context, namespaceBindings(item().toNodeModelIndex()), sourceLocation()); + if (!checker.isValidString(actualValue, type, errorMsg, &boundType)) { + error(QtXmlPatterns::tr("content of element %1 does not match its type definition: %2").arg(formatKeyword(declaration->displayName(m_namePool))).arg(errorMsg)); + return false; + } + + // additional check + if (declaration->valueConstraint() && declaration->valueConstraint()->variety() == XsdElement::ValueConstraint::Fixed) { + const QString actualConstraintValue = XsdTypeChecker::normalizedValue(declaration->valueConstraint()->value(), facets); + if (!text().isEmpty() && !checker.valuesAreEqual(actualValue, actualConstraintValue, type)) { + error(QtXmlPatterns::tr("content of element %1 does not match defined value constraint").arg(formatKeyword(declaration->displayName(m_namePool)))); + return false; + } + } + } + + // 4 checked in validateElement already + + // rememeber the type of that element node + m_model->setAssignedType(item().toNodeModelIndex(), type); + + const XsdFacet::Hash facets = XsdTypeChecker::mergedFacetsForType(type, m_context); + const QString actualValue = XsdTypeChecker::normalizedValue(text(), facets); + + if (BuiltinTypes::xsID->wxsTypeMatches(type)) { + addIdIdRefBinding(actualValue, declaration); + } + + if (m_idRefsType->wxsTypeMatches(type)) { + const QStringList idRefs = actualValue.split(QLatin1Char(' '), QString::SkipEmptyParts); + for (int i = 0; i < idRefs.count(); ++i) { + m_idRefs.insert(idRefs.at(i)); + } + } else if (BuiltinTypes::xsIDREF->wxsTypeMatches(type)) { + m_idRefs.insert(actualValue); + } + + return true; +} + +static bool hasIDAttributeUse(const XsdAttributeUse::List &uses) +{ + const int count = uses.count(); + for (int i = 0; i < count; ++i) { + if (BuiltinTypes::xsID->wxsTypeMatches(uses.at(i)->attribute()->type())) + return true; + } + + return false; +} + +bool XsdValidatingInstanceReader::validateElementComplexType(const XsdElement::Ptr &declaration, const SchemaType::Ptr &type, bool isNilled, bool &hasStateMachine) +{ + // @see http://www.w3.org/TR/xmlschema11-1/#cvc-complex-type + + // 1 + if (!isNilled) { + XsdComplexType::Ptr complexType; + + if (type->isDefinedBySchema()) { + complexType = XsdComplexType::Ptr(type); + } else { + if (type->name(m_namePool) == BuiltinTypes::xsAnyType->name(m_namePool)) + complexType = anyType(); + } + + if (complexType) { + // 1.1 + if (complexType->contentType()->variety() == XsdComplexType::ContentType::Empty) { + if (hasChildText() || hasChildElement()) { + error(QtXmlPatterns::tr("element %1 contains not allowed child content").arg(formatKeyword(declaration->displayName(m_namePool)))); + return false; + } + } + + // 1.2 + if (complexType->contentType()->variety() == XsdComplexType::ContentType::Simple) { + if (hasChildElement()) { + error(QtXmlPatterns::tr("element %1 contains not allowed child element").arg(formatKeyword(declaration->displayName(m_namePool)))); + return false; + } + + const XsdFacet::Hash facets = XsdTypeChecker::mergedFacetsForType(complexType->contentType()->simpleType(), m_context); + QString actualValue; + if (hasChildText()) { + actualValue = XsdTypeChecker::normalizedValue(text(), facets); + } else { + if (declaration->valueConstraint()) + actualValue = XsdTypeChecker::normalizedValue(declaration->valueConstraint()->value(), facets); + } + + QString errorMsg; + AnySimpleType::Ptr boundType; + const XsdTypeChecker checker(m_context, namespaceBindings(item().toNodeModelIndex()), sourceLocation()); + if (!checker.isValidString(actualValue, complexType->contentType()->simpleType(), errorMsg, &boundType)) { + error(QtXmlPatterns::tr("content of element %1 does not match its type definition: %2").arg(formatKeyword(declaration->displayName(m_namePool))).arg(errorMsg)); + return false; + } + + // additional check + if (declaration->valueConstraint() && declaration->valueConstraint()->variety() == XsdElement::ValueConstraint::Fixed) { + if (!checker.valuesAreEqual(actualValue, declaration->valueConstraint()->value(), boundType)) { + error(QtXmlPatterns::tr("content of element %1 does not match defined value constraint").arg(formatKeyword(declaration->displayName(m_namePool)))); + return false; + } + } + } + + // 1.3 + if (complexType->contentType()->variety() == XsdComplexType::ContentType::ElementOnly) { + if (!text().simplified().isEmpty()) { + error(QtXmlPatterns::tr("element %1 contains not allowed text content").arg(formatKeyword(declaration->displayName(m_namePool)))); + return false; + } + } + + // 1.4 + if (complexType->contentType()->variety() == XsdComplexType::ContentType::ElementOnly || + complexType->contentType()->variety() == XsdComplexType::ContentType::Mixed) { + + if (complexType->contentType()->particle()) { + createAndPushStateMachine(complexType->contentType()->particle()); + hasStateMachine = true; + } + + // additional check + if (complexType->contentType()->variety() == XsdComplexType::ContentType::Mixed) { + if (declaration->valueConstraint() && declaration->valueConstraint()->variety() == XsdElement::ValueConstraint::Fixed) { + if (hasChildElement()) { + error(QtXmlPatterns::tr("element %1 can not contain other elements, as it has a fixed content").arg(formatKeyword(declaration->displayName(m_namePool)))); + return false; + } + + const XsdFacet::Hash facets = XsdTypeChecker::mergedFacetsForType(complexType->contentType()->simpleType(), m_context); + QString actualValue; + if (hasChildText()) { + actualValue = XsdTypeChecker::normalizedValue(text(), facets); + } else { + if (declaration->valueConstraint()) + actualValue = XsdTypeChecker::normalizedValue(declaration->valueConstraint()->value(), facets); + } + + if (actualValue != declaration->valueConstraint()->value()) { + error(QtXmlPatterns::tr("content of element %1 does not match defined value constraint").arg(formatKeyword(declaration->displayName(m_namePool)))); + return false; + } + } + } + } + } + } + + if (type->isDefinedBySchema()) { + const XsdComplexType::Ptr complexType(type); + + // create a lookup hash for faster access + QHash<QXmlName, XsdAttributeUse::Ptr> attributeUseHash; + { + const XsdAttributeUse::List attributeUses = complexType->attributeUses(); + for (int i = 0; i < attributeUses.count(); ++i) + attributeUseHash.insert(attributeUses.at(i)->attribute()->name(m_namePool), attributeUses.at(i)); + } + + const QSet<QXmlName> attributes(attributeNames()); + + // 3 + QHashIterator<QXmlName, XsdAttributeUse::Ptr> usesIt(attributeUseHash); + while (usesIt.hasNext()) { + usesIt.next(); + + if (usesIt.value()->isRequired()) { + if (!attributes.contains(usesIt.key())) { + error(QtXmlPatterns::tr("element %1 is missing required attribute %2").arg(formatKeyword(declaration->displayName(m_namePool))) + .arg(formatKeyword(m_namePool->displayName(usesIt.key())))); + return false; + } + } + } + + bool hasIDAttribute = hasIDAttributeUse(complexType->attributeUses()); + + // 2 + QSetIterator<QXmlName> it(attributes); + while (it.hasNext()) { + const QXmlName attributeName = it.next(); + + // skip builtin attributes + if (attributeName == m_xsiNilName || + attributeName == m_xsiTypeName || + attributeName == m_xsiSchemaLocationName || + attributeName == m_xsiNoNamespaceSchemaLocationName) + continue; + + // 2.1 + if (attributeUseHash.contains(attributeName) && (attributeUseHash.value(attributeName)->useType() != XsdAttributeUse::ProhibitedUse)) { + if (!validateAttribute(attributeUseHash.value(attributeName), attribute(attributeName))) + return false; + } else { // 2.2 + if (complexType->attributeWildcard()) { + const XsdWildcard::Ptr wildcard(complexType->attributeWildcard()); + if (!validateAttributeWildcard(attributeName, wildcard)) { + error(QtXmlPatterns::tr("attribute %1 does not match the attribute wildcard").arg(formatKeyword(m_namePool->displayName(attributeName)))); + return false; + } + + if (wildcard->processContents() != XsdWildcard::Skip) { + const XsdAttribute::Ptr attributeDeclaration = attributeByName(attributeName); + + if (!attributeDeclaration) { + if (wildcard->processContents() == XsdWildcard::Strict) { + error(QtXmlPatterns::tr("declaration for attribute %1 does not exist").arg(formatKeyword(m_namePool->displayName(attributeName)))); + return false; + } + } else { + if (BuiltinTypes::xsID->wxsTypeMatches(attributeDeclaration->type())) { + if (hasIDAttribute) { + error(QtXmlPatterns::tr("element %1 contains two attributes of type %2") + .arg(formatKeyword(declaration->displayName(m_namePool))) + .arg(formatKeyword("ID"))); + return false; + } + + hasIDAttribute = true; + } + + if (!validateAttribute(attributeDeclaration, attribute(attributeName))) { + if (wildcard->processContents() == XsdWildcard::Strict) { + error(QtXmlPatterns::tr("attribute %1 contains invalid content").arg(formatKeyword(m_namePool->displayName(attributeName)))); + return false; + } + } + } + } + } else { + error(QtXmlPatterns::tr("element %1 contains unknown attribute %2").arg(formatKeyword(declaration->displayName(m_namePool))) + .arg(formatKeyword(m_namePool->displayName(attributeName)))); + return false; + } + } + } + } + + // 4 + // so what?... + + // 5 + // hmm... + + // 6 + // TODO: check assertions + + // 7 + // TODO: check type table restrictions + + // rememeber the type of that element node + m_model->setAssignedType(item().toNodeModelIndex(), type); + + return true; +} + +bool XsdValidatingInstanceReader::validateAttribute(const XsdAttributeUse::Ptr &declaration, const QString &value) +{ + const AnySimpleType::Ptr attributeType = declaration->attribute()->type(); + const XsdFacet::Hash facets = XsdTypeChecker::mergedFacetsForType(attributeType, m_context); + + const QString actualValue = XsdTypeChecker::normalizedValue(value, facets); + + QString errorMsg; + AnySimpleType::Ptr boundType; + + const QXmlNodeModelIndex index = attributeItem(declaration->attribute()->name(m_namePool)).toNodeModelIndex(); + + const XsdTypeChecker checker(m_context, namespaceBindings(index), sourceLocation()); + if (!checker.isValidString(actualValue, attributeType, errorMsg, &boundType)) { + error(QtXmlPatterns::tr("content of attribute %1 does not match its type definition: %2").arg(formatKeyword(declaration->attribute()->displayName(m_namePool))).arg(errorMsg)); + return false; + } + + // @see http://www.w3.org/TR/xmlschema11-1/#cvc-au + if (declaration->valueConstraint() && declaration->valueConstraint()->variety() == XsdAttributeUse::ValueConstraint::Fixed) { + const QString actualConstraintValue = XsdTypeChecker::normalizedValue(declaration->valueConstraint()->value(), facets); + if (!checker.valuesAreEqual(actualValue, actualConstraintValue, attributeType)) { + error(QtXmlPatterns::tr("content of attribute %1 does not match defined value constraint").arg(formatKeyword(declaration->attribute()->displayName(m_namePool)))); + return false; + } + } + + if (BuiltinTypes::xsID->wxsTypeMatches(declaration->attribute()->type())) { + addIdIdRefBinding(actualValue, declaration->attribute()); + } + + if (m_idRefsType->wxsTypeMatches(declaration->attribute()->type())) { + const QStringList idRefs = actualValue.split(QLatin1Char(' '), QString::SkipEmptyParts); + for (int i = 0; i < idRefs.count(); ++i) + m_idRefs.insert(idRefs.at(i)); + } else if (BuiltinTypes::xsIDREF->wxsTypeMatches(declaration->attribute()->type())) { + m_idRefs.insert(actualValue); + } + + m_model->setAssignedType(index, declaration->attribute()->type()); + m_model->setAssignedAttribute(index, declaration->attribute()); + + return true; +} + +//TODO: merge that with the method above +bool XsdValidatingInstanceReader::validateAttribute(const XsdAttribute::Ptr &declaration, const QString &value) +{ + const AnySimpleType::Ptr attributeType = declaration->type(); + const XsdFacet::Hash facets = XsdTypeChecker::mergedFacetsForType(attributeType, m_context); + + const QString actualValue = XsdTypeChecker::normalizedValue(value, facets); + + QString errorMsg; + AnySimpleType::Ptr boundType; + + const QXmlNodeModelIndex index = attributeItem(declaration->name(m_namePool)).toNodeModelIndex(); + + const XsdTypeChecker checker(m_context, namespaceBindings(index), sourceLocation()); + if (!checker.isValidString(actualValue, attributeType, errorMsg, &boundType)) { + error(QtXmlPatterns::tr("content of attribute %1 does not match its type definition: %2").arg(formatKeyword(declaration->displayName(m_namePool))).arg(errorMsg)); + return false; + } + + // @see http://www.w3.org/TR/xmlschema11-1/#cvc-au + if (declaration->valueConstraint() && declaration->valueConstraint()->variety() == XsdAttribute::ValueConstraint::Fixed) { + const QString actualConstraintValue = XsdTypeChecker::normalizedValue(declaration->valueConstraint()->value(), facets); + if (!checker.valuesAreEqual(actualValue, actualConstraintValue, attributeType)) { + error(QtXmlPatterns::tr("content of attribute %1 does not match defined value constraint").arg(formatKeyword(declaration->displayName(m_namePool)))); + return false; + } + } + + if (BuiltinTypes::xsID->wxsTypeMatches(declaration->type())) { + addIdIdRefBinding(actualValue, declaration); + } + + if (m_idRefsType->wxsTypeMatches(declaration->type())) { + const QStringList idRefs = actualValue.split(QLatin1Char(' '), QString::SkipEmptyParts); + for (int i = 0; i < idRefs.count(); ++i) + m_idRefs.insert(idRefs.at(i)); + } else if (BuiltinTypes::xsIDREF->wxsTypeMatches(declaration->type())) { + m_idRefs.insert(actualValue); + } + + m_model->setAssignedType(index, declaration->type()); + m_model->setAssignedAttribute(index, declaration); + + return true; +} + +bool XsdValidatingInstanceReader::validateAttributeWildcard(const QXmlName &attributeName, const XsdWildcard::Ptr &wildcard) +{ + // @see http://www.w3.org/TR/xmlschema11-1/#cvc-wildcard + + // wildcards using XsdWildcard::absentNamespace, so we have to fix that here + QXmlName name(attributeName); + if (name.namespaceURI() == StandardNamespaces::empty) { + name.setNamespaceURI(m_namePool->allocateNamespace(XsdWildcard::absentNamespace())); + } + + return XsdSchemaHelper::wildcardAllowsExpandedName(name, wildcard, m_namePool); +} + +bool XsdValidatingInstanceReader::validateIdentityConstraint(const XsdElement::Ptr &element, const QXmlItem ¤tItem) +{ + const XsdIdentityConstraint::List constraints = element->identityConstraints(); + + for (int i = 0; i < constraints.count(); ++i) { + const XsdIdentityConstraint::Ptr constraint = constraints.at(i); + + TargetNode::Set targetNodeSet, qualifiedNodeSet; + selectNodeSets(element, currentItem, constraint, targetNodeSet, qualifiedNodeSet); + + if (constraint->category() == XsdIdentityConstraint::Unique) { + if (!validateUniqueIdentityConstraint(element, constraint, qualifiedNodeSet)) + return false; + } else if (constraint->category() == XsdIdentityConstraint::Key) { + if (!validateKeyIdentityConstraint(element, constraint, targetNodeSet, qualifiedNodeSet)) + return false; + } + } + + // we do the keyref check in a separated run to make sure that all keys are available + for (int i = 0; i < constraints.count(); ++i) { + const XsdIdentityConstraint::Ptr constraint = constraints.at(i); + if (constraint->category() == XsdIdentityConstraint::KeyReference) { + TargetNode::Set targetNodeSet, qualifiedNodeSet; + selectNodeSets(element, currentItem, constraint, targetNodeSet, qualifiedNodeSet); + + if (!validateKeyRefIdentityConstraint(element, constraint, qualifiedNodeSet)) + return false; + } + } + + return true; +} + +bool XsdValidatingInstanceReader::validateUniqueIdentityConstraint(const XsdElement::Ptr&, const XsdIdentityConstraint::Ptr &constraint, const TargetNode::Set &qualifiedNodeSet) +{ + // @see http://www.w3.org/TR/xmlschema11-1/#d0e32243 + + // 4.1 + const XsdSchemaSourceLocationReflection reflection(sourceLocation()); + + QSetIterator<TargetNode> it(qualifiedNodeSet); + while (it.hasNext()) { + const TargetNode node = it.next(); + QSetIterator<TargetNode> innerIt(qualifiedNodeSet); + while (innerIt.hasNext()) { + const TargetNode innerNode = innerIt.next(); + + if (node == innerNode) // do not compare with ourself + continue; + + if (node.fieldsAreEqual(innerNode, m_namePool, m_context, &reflection)) { + error(QtXmlPatterns::tr("non-unique value found for constraint %1").arg(formatKeyword(constraint->displayName(m_namePool)))); + return false; + } + } + } + + m_idcKeys.insert(constraint->name(m_namePool), qualifiedNodeSet); + + return true; +} + +bool XsdValidatingInstanceReader::validateKeyIdentityConstraint(const XsdElement::Ptr &element, const XsdIdentityConstraint::Ptr &constraint, const TargetNode::Set &targetNodeSet, const TargetNode::Set &qualifiedNodeSet) +{ + // @see http://www.w3.org/TR/xmlschema11-1/#d0e32243 + + // 4.2 + const XsdSchemaSourceLocationReflection reflection(sourceLocation()); + + // 4.2.1 + if (targetNodeSet.count() != qualifiedNodeSet.count()) { + error(QtXmlPatterns::tr("key constraint %1 contains absent fields").arg(formatKeyword(constraint->displayName(m_namePool)))); + return false; + } + + // 4.2.2 + if (!validateUniqueIdentityConstraint(element, constraint, qualifiedNodeSet)) + return false; + + // 4.2.3 + QSetIterator<TargetNode> it(qualifiedNodeSet); + while (it.hasNext()) { + const TargetNode node = it.next(); + const QVector<QXmlItem> fieldItems = node.fieldItems(); + for (int i = 0; i < fieldItems.count(); ++i) { + const QXmlNodeModelIndex index = fieldItems.at(i).toNodeModelIndex(); + if (m_model->kind(index) == QXmlNodeModelIndex::Element) { + const XsdElement::Ptr declaration = m_model->assignedElement(index); + if (declaration && declaration->isNillable()) { + error(QtXmlPatterns::tr("key constraint %1 contains references nillable element %2") + .arg(formatKeyword(constraint->displayName(m_namePool))) + .arg(formatKeyword(declaration->displayName(m_namePool)))); + return false; + } + } + } + } + + m_idcKeys.insert(constraint->name(m_namePool), qualifiedNodeSet); + + return true; +} + +bool XsdValidatingInstanceReader::validateKeyRefIdentityConstraint(const XsdElement::Ptr&, const XsdIdentityConstraint::Ptr &constraint, const TargetNode::Set &qualifiedNodeSet) +{ + // @see http://www.w3.org/TR/xmlschema11-1/#d0e32243 + + // 4.3 + const XsdSchemaSourceLocationReflection reflection(sourceLocation()); + + const TargetNode::Set keySet = m_idcKeys.value(constraint->referencedKey()->name(m_namePool)); + + QSetIterator<TargetNode> it(qualifiedNodeSet); + while (it.hasNext()) { + const TargetNode node = it.next(); + + bool foundMatching = false; + + QSetIterator<TargetNode> keyIt(keySet); + while (keyIt.hasNext()) { + const TargetNode keyNode = keyIt.next(); + + if (node.fieldsAreEqual(keyNode, m_namePool, m_context, &reflection)) { + foundMatching = true; + break; + } + } + + if (!foundMatching) { + error(QtXmlPatterns::tr("no referenced value found for key reference %1").arg(formatKeyword(constraint->displayName(m_namePool)))); + return false; + } + } + + return true; +} + +QXmlQuery XsdValidatingInstanceReader::createXQuery(const QList<QXmlName> &namespaceBindings, const QXmlItem &contextNode, const QString &queryString) const +{ + // create a public name pool from our name pool + QXmlNamePool namePool(m_namePool.data()); + + // the QXmlQuery shall work with the same name pool as we do + QXmlQuery query(namePool); + + // add additional namespace bindings + QXmlQueryPrivate *queryPrivate = query.d; + + for (int i = 0; i < namespaceBindings.count(); ++i) { + if (!namespaceBindings.at(i).prefix() == StandardPrefixes::empty) + queryPrivate->addAdditionalNamespaceBinding(namespaceBindings.at(i)); + } + + // set the context node for that query and the query string + query.setFocus(contextNode); + query.setQuery(queryString, m_documentUri); + + return query; +} + +bool XsdValidatingInstanceReader::selectNodeSets(const XsdElement::Ptr&, const QXmlItem ¤tItem, const XsdIdentityConstraint::Ptr &constraint, TargetNode::Set &targetNodeSet, TargetNode::Set &qualifiedNodeSet) +{ + // at first select all target nodes + const XsdXPathExpression::Ptr selector = constraint->selector(); + const XsdXPathExpression::List fields = constraint->fields(); + + QXmlQuery query = createXQuery(selector->namespaceBindings(), currentItem, selector->expression()); + + QXmlResultItems resultItems; + query.evaluateTo(&resultItems); + + // now we iterate over all target nodes and select the fields for each node + QXmlItem item(resultItems.next()); + while (!item.isNull()) { + + TargetNode targetNode(item); + + for (int i = 0; i < fields.count(); ++i) { + const XsdXPathExpression::Ptr field = fields.at(i); + QXmlQuery fieldQuery = createXQuery(field->namespaceBindings(), item, field->expression()); + + QXmlResultItems fieldResultItems; + fieldQuery.evaluateTo(&fieldResultItems); + + // copy result into vetor for better testing... + QVector<QXmlItem> fieldVector; + QXmlItem fieldItem(fieldResultItems.next()); + while (!fieldItem.isNull()) { + fieldVector.append(fieldItem); + fieldItem = fieldResultItems.next(); + } + + if (fieldVector.count() > 1) { + error(QtXmlPatterns::tr("more than one value found for field %1").arg(formatData(field->expression()))); + return false; + } + + if (fieldVector.count() == 1) { + fieldItem = fieldVector.first(); + + const QXmlNodeModelIndex index = fieldItem.toNodeModelIndex(); + const SchemaType::Ptr type = m_model->assignedType(index); + + bool typeOk = true; + if (type->isComplexType()) { + if (type->isDefinedBySchema()) { + if (XsdComplexType::Ptr(type)->contentType()->variety() != XsdComplexType::ContentType::Simple) + typeOk = false; + } else { + typeOk = false; + } + } + if (!typeOk) { + error(QtXmlPatterns::tr("field %1 has no simple type").arg(formatData(field->expression()))); + return false; + } + + SchemaType::Ptr targetType = type; + QString value = m_model->stringValue(fieldItem.toNodeModelIndex()); + + if (type->isDefinedBySchema()) { + if (type->isSimpleType()) + targetType = XsdSimpleType::Ptr(type)->primitiveType(); + else + targetType = XsdComplexType::Ptr(type)->contentType()->simpleType(); + } else { + if (BuiltinTypes::xsAnySimpleType->name(m_namePool) == type->name(m_namePool)) { + targetType = BuiltinTypes::xsString; + value = QLatin1String("___anySimpleType_value"); + } + } + + // if it is xs:QName derived type, we normalize the name content + // and do a string comparison + if (BuiltinTypes::xsQName->wxsTypeMatches(type)) { + targetType = BuiltinTypes::xsString; + + const QXmlName qName = convertToQName(value.trimmed()); + value = QString::fromLatin1("%1:%2").arg(m_namePool->stringForNamespace(qName.namespaceURI())).arg(m_namePool->stringForLocalName(qName.localName())); + } + + targetNode.addField(fieldItem, value, targetType); + } else { + // we add an empty entry here, that makes comparison easier later on + targetNode.addField(QXmlItem(), QString(), SchemaType::Ptr()); + } + } + + targetNodeSet.insert(targetNode); + + item = resultItems.next(); + } + + // copy all items from target node set to qualified node set, that have no empty fields + QSetIterator<TargetNode> it(targetNodeSet); + while (it.hasNext()) { + const TargetNode node = it.next(); + if (node.emptyFieldsCount() == 0) + qualifiedNodeSet.insert(node); + } + + return true; +} + +XsdElement::Ptr XsdValidatingInstanceReader::elementByName(const QXmlName &name) const +{ + return m_schema->element(name); +} + +XsdAttribute::Ptr XsdValidatingInstanceReader::attributeByName(const QXmlName &name) const +{ + return m_schema->attribute(name); +} + +SchemaType::Ptr XsdValidatingInstanceReader::typeByName(const QXmlName &name) const +{ + const SchemaType::Ptr type = m_schema->type(name); + if (type) + return type; + + return m_context->schemaTypeFactory()->createSchemaType(name); +} + +void XsdValidatingInstanceReader::addIdIdRefBinding(const QString &id, const NamedSchemaComponent::Ptr &binding) +{ + if (!m_model->idIdRefBindings(id).isEmpty()) { + error(QtXmlPatterns::tr("ID value '%1' is not unique").arg(formatKeyword(id))); + return; + } + + m_model->addIdIdRefBinding(id, binding); +} + +QString XsdValidatingInstanceReader::qNameAttribute(const QXmlName &attributeName) +{ + const QString value = attribute(attributeName).simplified(); + if (!XPathHelper::isQName(value)) { + error(QtXmlPatterns::tr("'%1' attribute contains invalid QName content: %2").arg(m_namePool->displayName(attributeName)).arg(formatData(value))); + return QString(); + } else { + return value; + } +} + +XsdComplexType::Ptr XsdValidatingInstanceReader::anyType() +{ + if (m_anyType) + return m_anyType; + + const XsdWildcard::Ptr wildcard(new XsdWildcard()); + wildcard->namespaceConstraint()->setVariety(XsdWildcard::NamespaceConstraint::Any); + wildcard->setProcessContents(XsdWildcard::Lax); + + const XsdParticle::Ptr outerParticle(new XsdParticle()); + outerParticle->setMinimumOccurs(1); + outerParticle->setMaximumOccurs(1); + + const XsdParticle::Ptr innerParticle(new XsdParticle()); + innerParticle->setMinimumOccurs(0); + innerParticle->setMaximumOccursUnbounded(true); + innerParticle->setTerm(wildcard); + + const XsdModelGroup::Ptr outerModelGroup(new XsdModelGroup()); + outerModelGroup->setCompositor(XsdModelGroup::SequenceCompositor); + outerModelGroup->setParticles(XsdParticle::List() << innerParticle); + outerParticle->setTerm(outerModelGroup); + + m_anyType = XsdComplexType::Ptr(new XsdComplexType()); + m_anyType->setName(BuiltinTypes::xsAnyType->name(m_namePool)); + m_anyType->setDerivationMethod(XsdComplexType::DerivationRestriction); + m_anyType->contentType()->setVariety(XsdComplexType::ContentType::Mixed); + m_anyType->contentType()->setParticle(outerParticle); + m_anyType->setAttributeWildcard(wildcard); + m_anyType->setIsAbstract(false); + + return m_anyType; +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/schema/qxsdvalidatinginstancereader_p.h b/src/xmlpatterns/schema/qxsdvalidatinginstancereader_p.h new file mode 100644 index 0000000..8ea4d28 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdvalidatinginstancereader_p.h @@ -0,0 +1,296 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_XsdValidatingInstanceReader_H +#define Patternist_XsdValidatingInstanceReader_H + +#include "qxsdidchelper_p.h" +#include "qxsdinstancereader_p.h" +#include "qxsdstatemachine_p.h" +#include "qxsdvalidatedxmlnodemodel_p.h" + +#include <QtCore/QStack> + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +class QXmlQuery; + +namespace QPatternist +{ + /** + * @short The validating schema instance reader. + * + * This class reads in a xml instance document from a QAbstractXmlNodeModel and + * validates it against a given xml schema. + * + * @ingroup Patternist_schema + * @author Tobias Koenig <tobias.koenig@trolltech.com> + */ + class XsdValidatingInstanceReader : public XsdInstanceReader + { + public: + typedef QExplicitlySharedDataPointer<XsdValidatingInstanceReader> Ptr; + + /** + * Creates a new validating instance reader that reads the data from + * the given @p model. + * + * @param model The model the data shall be read from. + * @param documentUri The uri of the document the model is from. + * @param context The context that is used to report errors etc. + */ + XsdValidatingInstanceReader(XsdValidatedXmlNodeModel *model, const QUrl &documentUri, const XsdSchemaContext::Ptr &context); + + /** + * Adds a new @p schema to the pool of schemas that shall be used + * for validation. + * The schema is located at the given @p url. + */ + void addSchema(const XsdSchema::Ptr &schema, const QUrl &url); + + /** + * Reads and validates the instance document. + */ + bool read(); + + private: + /** + * Loads a schema with the given @p targetNamespace from the given @p location + * and adds it to the pool of schemas that are used for validation. + * + * This method is used to load schemas defined in the xsi:schemaLocation or + * xsi:noNamespaceSchemaLocation attributes in the instance document. + */ + bool loadSchema(const QString &targetNamespace, const QUrl &location); + + /** + * Reports an error via the report context. + */ + void error(const QString &msg) const; + + /** + * Validates the current element tag of the instance document. + * + * @param hasStateMachine Used to remember whether this element represents the start tag + * of a complex type and therefor pushes a new state machine on the stack. + * @param element Used to remember which element has been validated in this step. + */ + bool validate(bool &hasStateMachine, XsdElement::Ptr &element); + + /** + * Validates the current tag of the instance document against the given element @p declaration. + * + * @param declaration The element declaration to validate against. + * @param hasStateMachine Used to remember whether this element represents the start tag + * of a complex type and therefor pushes a new state machine on the stack. + */ + bool validateElement(const XsdElement::Ptr &declaration, bool &hasStateMachine); + + /** + * Validates the current tag of the instance document against the given @p type of the element @p declaration. + * + * @param declaration The element declaration to validate against. + * @param type The type to validate against. + * @param isNilled Defines whether the element is nilled by the instance document. + * @param hasStateMachine Used to remember whether this element represents the start tag + * of a complex type and therefor pushes a new state machine on the stack. + * + * @note The @p type can differ from the element @p declaration type if the instance document has defined + * it via xsi:type attribute. + */ + bool validateElementType(const XsdElement::Ptr &declaration, const SchemaType::Ptr &type, bool isNilled, bool &hasStateMachine); + + /** + * Validates the current tag of the instance document against the given simple @p type of the element @p declaration. + * + * @param declaration The element declaration to validate against. + * @param type The type to validate against. + * @param isNilled Defines whether the element is nilled by the instance document. + * + * @note The @p type can differ from the element @p declaration type if the instance document has defined + * it via xsi:type attribute. + */ + bool validateElementSimpleType(const XsdElement::Ptr &declaration, const SchemaType::Ptr &type, bool isNilled); + + /** + * Validates the current tag of the instance document against the given complex @p type of the element @p declaration. + * + * @param declaration The element declaration to validate against. + * @param type The type to validate against. + * @param isNilled Defines whether the element is nilled by the instance document. + * @param hasStateMachine Used to remember whether this element represents the start tag + * of a complex type and therefor pushes a new state machine on the stack. + * + * @note The @p type can differ from the element @p declaration type if the instance document has defined + * it via xsi:type attribute. + */ + bool validateElementComplexType(const XsdElement::Ptr &declaration, const SchemaType::Ptr &type, bool isNilled, bool &hasStateMachine); + + /** + * Validates the given @p value against the attribute use @p declaration. + */ + bool validateAttribute(const XsdAttributeUse::Ptr &declaration, const QString &value); + + /** + * Validates the given @p value against the attribute @p declaration. + */ + bool validateAttribute(const XsdAttribute::Ptr &declaration, const QString &value); + + /** + * Validates the given @p attributeName against the @p wildcard. + */ + bool validateAttributeWildcard(const QXmlName &attributeName, const XsdWildcard::Ptr &wildcard); + + /** + * Validates the identity constraints of an @p element. + */ + bool validateIdentityConstraint(const XsdElement::Ptr &element, const QXmlItem ¤tItem); + + /** + * Validates the <em>unique</em> identity @p constraint of the @p element. + */ + bool validateUniqueIdentityConstraint(const XsdElement::Ptr &element, const XsdIdentityConstraint::Ptr &constraint, const TargetNode::Set &qualifiedNodeSet); + + /** + * Validates the <em>key</em> identity @p constraint of the @p element. + */ + bool validateKeyIdentityConstraint(const XsdElement::Ptr &element, const XsdIdentityConstraint::Ptr &constraint, const TargetNode::Set &targetNodeSet, const TargetNode::Set &qualifiedNodeSet); + + /** + * Validates the <em>keyref</em> identity @p constraint of the @p element. + */ + bool validateKeyRefIdentityConstraint(const XsdElement::Ptr &element, const XsdIdentityConstraint::Ptr &constraint, const TargetNode::Set &qualifiedNodeSet); + + /** + * Selects two sets of nodes that match the given identity @p constraint. + * + * @param element The element the identity constraint belongs to. + * @param currentItem The current element that will be used as focus for the XQuery. + * @param constraint The constraint (selector and fields) that describe the two sets. + * @param targetNodeSet The target node set as defined by the schema specification. + * @param qualifiedNodeSet The qualified node set as defined by the schema specification. + */ + bool selectNodeSets(const XsdElement::Ptr &element, const QXmlItem ¤tItem, const XsdIdentityConstraint::Ptr &constraint, TargetNode::Set &targetNodeSet, TargetNode::Set &qualifiedNodeSet); + + /** + * Creates an QXmlQuery object with the defined @p namespaceBindings that has the @p contextNode as focus + * and will execute @p query. + */ + QXmlQuery createXQuery(const QList<QXmlName> &namespaceBindings, const QXmlItem &contextNode, const QString &query) const; + + /** + * Returns the element declaration with the given @p name from the pool of all schemas. + */ + XsdElement::Ptr elementByName(const QXmlName &name) const; + + /** + * Returns the attribute declaration with the given @p name from the pool of all schemas. + */ + XsdAttribute::Ptr attributeByName(const QXmlName &name) const; + + /** + * Returns the type declaration with the given @p name from the pool of all schemas. + */ + SchemaType::Ptr typeByName(const QXmlName &name) const; + + /** + * Adds the ID/IDREF binding to the validated model and checks for duplicates. + */ + void addIdIdRefBinding(const QString &id, const NamedSchemaComponent::Ptr &binding); + + /** + * Helper method that reads an attribute of type xs:QName and does + * syntax checking. + */ + QString qNameAttribute(const QXmlName &attributeName); + + /** + * Returns the xs:anyType that is used to build up the state machine. + * We need that as the BuiltinTypes::xsAnyType is not a XsdComplexType. + */ + XsdComplexType::Ptr anyType(); + + /** + * Helper method that creates a state machine for the given @p particle + * and pushes it on the state machine stack. + */ + void createAndPushStateMachine(const XsdParticle::Ptr &particle); + + typedef QHash<QUrl, QStringList> MergedSchemas; + typedef QHashIterator<QUrl, QStringList> MergedSchemasIterator; + + XsdValidatedXmlNodeModel::Ptr m_model; + MergedSchemas m_mergedSchemas; + XsdSchema::Ptr m_schema; + const NamePool::Ptr m_namePool; + const QXmlName m_xsiNilName; + const QXmlName m_xsiTypeName; + const QXmlName m_xsiSchemaLocationName; + const QXmlName m_xsiNoNamespaceSchemaLocationName; + + QStack<XsdStateMachine<XsdTerm::Ptr> > m_stateMachines; + QUrl m_documentUri; + XsdComplexType::Ptr m_anyType; + QSet<QString> m_processedNamespaces; + QSet<QString> m_processedSchemaLocations; + QSet<QString> m_idRefs; + QHash<QXmlName, TargetNode::Set> m_idcKeys; + SchemaType::Ptr m_idRefsType; + }; +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/schema/qxsdwildcard.cpp b/src/xmlpatterns/schema/qxsdwildcard.cpp new file mode 100644 index 0000000..561a169 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdwildcard.cpp @@ -0,0 +1,115 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxsdwildcard_p.h" + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +QString XsdWildcard::absentNamespace() +{ + return QLatin1String("__ns_absent"); +} + +void XsdWildcard::NamespaceConstraint::setVariety(Variety variety) +{ + m_variety = variety; +} + +XsdWildcard::NamespaceConstraint::Variety XsdWildcard::NamespaceConstraint::variety() const +{ + return m_variety; +} + +void XsdWildcard::NamespaceConstraint::setNamespaces(const QSet<QString> &namespaces) +{ + m_namespaces = namespaces; +} + +QSet<QString> XsdWildcard::NamespaceConstraint::namespaces() const +{ + return m_namespaces; +} + +void XsdWildcard::NamespaceConstraint::setDisallowedNames(const QSet<QString> &names) +{ + m_disallowedNames = names; +} + +QSet<QString> XsdWildcard::NamespaceConstraint::disallowedNames() const +{ + return m_disallowedNames; +} + +XsdWildcard::XsdWildcard() + : m_namespaceConstraint(new NamespaceConstraint()) + , m_processContents(Strict) +{ + m_namespaceConstraint->setVariety(NamespaceConstraint::Any); +} + +bool XsdWildcard::isWildcard() const +{ + return true; +} + +void XsdWildcard::setNamespaceConstraint(const NamespaceConstraint::Ptr &namespaceConstraint) +{ + m_namespaceConstraint = namespaceConstraint; +} + +XsdWildcard::NamespaceConstraint::Ptr XsdWildcard::namespaceConstraint() const +{ + return m_namespaceConstraint; +} + +void XsdWildcard::setProcessContents(ProcessContents contents) +{ + m_processContents = contents; +} + +XsdWildcard::ProcessContents XsdWildcard::processContents() const +{ + return m_processContents; +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/schema/qxsdwildcard_p.h b/src/xmlpatterns/schema/qxsdwildcard_p.h new file mode 100644 index 0000000..a925ab4 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdwildcard_p.h @@ -0,0 +1,199 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_XsdWildcard_H +#define Patternist_XsdWildcard_H + +#include "qxsdterm_p.h" + +#include <QtCore/QSet> + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +namespace QPatternist +{ + /** + * @short Represents a XSD wildcard object. + * + * This class represents the <em>wildcard</em> object of a XML schema as described + * <a href="http://www.w3.org/TR/xmlschema11-1/#Wildcards">here</a>. + * + * It contains information from either an <em>any</em> object or an <em>anyAttribute</em> object. + * + * @see <a href="http://www.w3.org/Submission/2004/SUBM-xmlschema-api-20040309/xml-schema-api.html#Interface-XSWildcard">XML Schema API reference</a> + * @ingroup Patternist_schema + * @author Tobias Koenig <tobias.koenig@trolltech.com> + */ + class XsdWildcard : public XsdTerm + { + public: + typedef QExplicitlySharedDataPointer<XsdWildcard> Ptr; + + /** + * Defines the absent namespace that is used in wildcards. + */ + static QString absentNamespace(); + + /** + * Describes the <a href="http://www.w3.org/TR/xmlschema11-1/#w-namespace_constraint">namespace constraint</a> of the wildcard. + */ + class NamespaceConstraint : public QSharedData + { + public: + typedef QExplicitlySharedDataPointer<NamespaceConstraint> Ptr; + + /** + * Describes the variety of the namespace constraint. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#nc-variety">Variety Definition</a> + */ + enum Variety + { + Any, ///< Any namespace is allowed. + Enumeration, ///< Namespaces in the namespaces set are allowed. + Not ///< Namespaces in the namespaces set are not allowed. + }; + + /** + * Sets the @p variety of the namespace constraint. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#nc-variety">Variety Definition</a> + */ + void setVariety(Variety variety); + + /** + * Returns the variety of the namespace constraint. + */ + Variety variety() const; + + /** + * Sets the set of @p namespaces of the namespace constraint. + */ + void setNamespaces(const QSet<QString> &namespaces); + + /** + * Returns the set of namespaces of the namespace constraint. + */ + QSet<QString> namespaces() const; + + /** + * Sets the set of disallowed @p names of the namespace constraint. + */ + void setDisallowedNames(const QSet<QString> &names); + + /** + * Returns the set of disallowed names of the namespace constraint. + */ + QSet<QString> disallowedNames() const; + + private: + Variety m_variety; + QSet<QString> m_namespaces; + QSet<QString> m_disallowedNames; + }; + + /** + * Describes the <a href="http://www.w3.org/TR/xmlschema11-1/#w-process_contents">type of content processing</a> of the wildcard. + */ + enum ProcessContents + { + Strict, ///< There must be a top-level declaration for the item available, or the item must have an xsi:type, and the item must be valid as appropriate. + Lax, ///< If the item has a uniquely determined declaration available, it must be valid with respect to that definition. + Skip ///< No constraints at all: the item must simply be well-formed XML. + }; + + /** + * Creates a new wildcard object. + */ + XsdWildcard(); + + /** + * Returns always @c true, used to avoid dynamic casts. + */ + virtual bool isWildcard() const; + + /** + * Sets the namespace @p constraint of the wildcard. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#w-namespace_constraint">Namespace Constraint Definition</a> + */ + void setNamespaceConstraint(const NamespaceConstraint::Ptr &constraint); + + /** + * Returns the namespace constraint of the wildcard. + */ + NamespaceConstraint::Ptr namespaceConstraint() const; + + /** + * Sets the process @p contents of the wildcard. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#w-process_contents">Process Contents Definition</a> + */ + void setProcessContents(ProcessContents contents); + + /** + * Returns the process contents of the wildcard. + */ + ProcessContents processContents() const; + + private: + NamespaceConstraint::Ptr m_namespaceConstraint; + ProcessContents m_processContents; + }; +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/schema/qxsdxpathexpression.cpp b/src/xmlpatterns/schema/qxsdxpathexpression.cpp new file mode 100644 index 0000000..aa08cbc --- /dev/null +++ b/src/xmlpatterns/schema/qxsdxpathexpression.cpp @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qxsdxpathexpression_p.h" + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +void XsdXPathExpression::setNamespaceBindings(const QList<QXmlName> &set) +{ + m_namespaceBindings = set; +} + +QList<QXmlName> XsdXPathExpression::namespaceBindings() const +{ + return m_namespaceBindings; +} + +void XsdXPathExpression::setDefaultNamespace(const AnyURI::Ptr &defaultNs) +{ + m_defaultNamespace = defaultNs; +} + +AnyURI::Ptr XsdXPathExpression::defaultNamespace() const +{ + return m_defaultNamespace; +} + +void XsdXPathExpression::setBaseURI(const AnyURI::Ptr &uri) +{ + m_baseURI = uri; +} + +AnyURI::Ptr XsdXPathExpression::baseURI() const +{ + return m_baseURI; +} + +void XsdXPathExpression::setExpression(const QString &expression) +{ + m_expression = expression; +} + +QString XsdXPathExpression::expression() const +{ + return m_expression; +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/schema/qxsdxpathexpression_p.h b/src/xmlpatterns/schema/qxsdxpathexpression_p.h new file mode 100644 index 0000000..6f149d7 --- /dev/null +++ b/src/xmlpatterns/schema/qxsdxpathexpression_p.h @@ -0,0 +1,143 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_XsdXPathExpression_H +#define Patternist_XsdXPathExpression_H + +#include "qanyuri_p.h" +#include "qnamedschemacomponent_p.h" +#include "qxsdannotated_p.h" + +#include <QtCore/QList> + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +namespace QPatternist +{ + /** + * @short Represents a XSD assertion object. + * + * @ingroup Patternist_schema + * @author Tobias Koenig <tobias.koenig@trolltech.com> + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#x">XPathExpression Definition</a> + */ + class XsdXPathExpression : public NamedSchemaComponent, public XsdAnnotated + { + public: + typedef QExplicitlySharedDataPointer<XsdXPathExpression> Ptr; + typedef QList<XsdXPathExpression::Ptr> List; + + /** + * Sets the list of namespace @p bindings of the XPath expression. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#x-namespace_bindings">Namespace Bindings Definition</a> + * + * @note We can't use a QSet<QXmlName> here, as the hash method does not take the prefix + * in account, so we loose entries. + */ + void setNamespaceBindings(const QList<QXmlName> &bindings); + + /** + * Returns the list of namespace bindings of the XPath expression. + */ + QList<QXmlName> namespaceBindings() const; + + /** + * Sets the default namespace of the XPath expression. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#x-default_namespace">Default Namespace Definition</a> + */ + void setDefaultNamespace(const AnyURI::Ptr &defaultNamespace); + + /** + * Returns the default namespace of the XPath expression. + */ + AnyURI::Ptr defaultNamespace() const; + + /** + * Sets the base @p uri of the XPath expression. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#x-base_URI">Base URI Definition</a> + */ + void setBaseURI(const AnyURI::Ptr &uri); + + /** + * Returns the base uri of the XPath expression. + */ + AnyURI::Ptr baseURI() const; + + /** + * Sets the @p expression string of the XPath expression. + * + * @see <a href="http://www.w3.org/TR/xmlschema11-1/#x-expression">Expression Definition</a> + */ + void setExpression(const QString &expression); + + /** + * Returns the expression string of the XPath expression. + */ + QString expression() const; + + private: + QList<QXmlName> m_namespaceBindings; + AnyURI::Ptr m_defaultNamespace; + AnyURI::Ptr m_baseURI; + QString m_expression; + }; +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/schema/schema.pri b/src/xmlpatterns/schema/schema.pri new file mode 100644 index 0000000..b00d64b --- /dev/null +++ b/src/xmlpatterns/schema/schema.pri @@ -0,0 +1,93 @@ +HEADERS += $$PWD/qnamespacesupport_p.h \ + $$PWD/qxsdalternative_p.h \ + $$PWD/qxsdannotated_p.h \ + $$PWD/qxsdannotation_p.h \ + $$PWD/qxsdapplicationinformation_p.h \ + $$PWD/qxsdassertion_p.h \ + $$PWD/qxsdattribute_p.h \ + $$PWD/qxsdattributereference_p.h \ + $$PWD/qxsdattributeterm_p.h \ + $$PWD/qxsdattributeuse_p.h \ + $$PWD/qxsdattributegroup_p.h \ + $$PWD/qxsdcomplextype_p.h \ + $$PWD/qxsddocumentation_p.h \ + $$PWD/qxsdelement_p.h \ + $$PWD/qxsdfacet_p.h \ + $$PWD/qxsdidcache_p.h \ + $$PWD/qxsdidchelper_p.h \ + $$PWD/qxsdidentityconstraint_p.h \ + $$PWD/qxsdinstancereader_p.h \ + $$PWD/qxsdmodelgroup_p.h \ + $$PWD/qxsdnotation_p.h \ + $$PWD/qxsdparticle_p.h \ + $$PWD/qxsdparticlechecker_p.h \ + $$PWD/qxsdreference_p.h \ + $$PWD/qxsdsimpletype_p.h \ + $$PWD/qxsdschema_p.h \ + $$PWD/qxsdschemachecker_p.h \ + $$PWD/qxsdschemacontext_p.h \ + $$PWD/qxsdschemadebugger_p.h \ + $$PWD/qxsdschemahelper_p.h \ + $$PWD/qxsdschemamerger_p.h \ + $$PWD/qxsdschemaparser_p.h \ + $$PWD/qxsdschemaparsercontext_p.h \ + $$PWD/qxsdschemaresolver_p.h \ + $$PWD/qxsdschematoken_p.h \ + $$PWD/qxsdschematypesfactory_p.h \ + $$PWD/qxsdstatemachine_p.h \ + $$PWD/qxsdstatemachinebuilder_p.h \ + $$PWD/qxsdterm_p.h \ + $$PWD/qxsdtypechecker_p.h \ + $$PWD/qxsduserschematype_p.h \ + $$PWD/qxsdvalidatedxmlnodemodel_p.h \ + $$PWD/qxsdvalidatinginstancereader_p.h \ + $$PWD/qxsdwildcard_p.h \ + $$PWD/qxsdxpathexpression_p.h + +SOURCES += $$PWD/qnamespacesupport.cpp \ + $$PWD/qxsdalternative.cpp \ + $$PWD/qxsdannotated.cpp \ + $$PWD/qxsdannotation.cpp \ + $$PWD/qxsdapplicationinformation.cpp \ + $$PWD/qxsdassertion.cpp \ + $$PWD/qxsdattribute.cpp \ + $$PWD/qxsdattributereference.cpp \ + $$PWD/qxsdattributeterm.cpp \ + $$PWD/qxsdattributeuse.cpp \ + $$PWD/qxsdattributegroup.cpp \ + $$PWD/qxsdcomplextype.cpp \ + $$PWD/qxsddocumentation.cpp \ + $$PWD/qxsdelement.cpp \ + $$PWD/qxsdfacet.cpp \ + $$PWD/qxsdidcache.cpp \ + $$PWD/qxsdidchelper.cpp \ + $$PWD/qxsdidentityconstraint.cpp \ + $$PWD/qxsdinstancereader.cpp \ + $$PWD/qxsdmodelgroup.cpp \ + $$PWD/qxsdnotation.cpp \ + $$PWD/qxsdparticle.cpp \ + $$PWD/qxsdparticlechecker.cpp \ + $$PWD/qxsdreference.cpp \ + $$PWD/qxsdsimpletype.cpp \ + $$PWD/qxsdschema.cpp \ + $$PWD/qxsdschemachecker.cpp \ + $$PWD/qxsdschemachecker_setup.cpp \ + $$PWD/qxsdschemacontext.cpp \ + $$PWD/qxsdschemadebugger.cpp \ + $$PWD/qxsdschemahelper.cpp \ + $$PWD/qxsdschemamerger.cpp \ + $$PWD/qxsdschemaparser.cpp \ + $$PWD/qxsdschemaparser_setup.cpp \ + $$PWD/qxsdschemaparsercontext.cpp \ + $$PWD/qxsdschemaresolver.cpp \ + $$PWD/qxsdschematoken.cpp \ + $$PWD/qxsdschematypesfactory.cpp \ + $$PWD/qxsdstatemachinebuilder.cpp \ + $$PWD/qxsdterm.cpp \ + $$PWD/qxsdtypechecker.cpp \ + $$PWD/qxsdwildcard.cpp \ + $$PWD/qxsdvalidatedxmlnodemodel.cpp \ + $$PWD/qxsdvalidatinginstancereader.cpp \ + $$PWD/qxsdxpathexpression.cpp + +RESOURCES += $$PWD/builtinschemas.qrc diff --git a/src/xmlpatterns/schema/schemas/xml.xsd b/src/xmlpatterns/schema/schemas/xml.xsd new file mode 100644 index 0000000..eeb9db5 --- /dev/null +++ b/src/xmlpatterns/schema/schemas/xml.xsd @@ -0,0 +1,145 @@ +<?xml version='1.0'?> +<xs:schema targetNamespace="http://www.w3.org/XML/1998/namespace" xmlns:xs="http://www.w3.org/2001/XMLSchema" xml:lang="en"> + + <xs:annotation> + <xs:documentation> + See http://www.w3.org/XML/1998/namespace.html and + http://www.w3.org/TR/REC-xml for information about this namespace. + + This schema document describes the XML namespace, in a form + suitable for import by other schema documents. + + Note that local names in this namespace are intended to be defined + only by the World Wide Web Consortium or its subgroups. The + following names are currently defined in this namespace and should + not be used with conflicting semantics by any Working Group, + specification, or document instance: + + base (as an attribute name): denotes an attribute whose value + provides a URI to be used as the base for interpreting any + relative URIs in the scope of the element on which it + appears; its value is inherited. This name is reserved + by virtue of its definition in the XML Base specification. + + id (as an attribute name): denotes an attribute whose value + should be interpreted as if declared to be of type ID. + This name is reserved by virtue of its definition in the + xml:id specification. + + lang (as an attribute name): denotes an attribute whose value + is a language code for the natural language of the content of + any element; its value is inherited. This name is reserved + by virtue of its definition in the XML specification. + + space (as an attribute name): denotes an attribute whose + value is a keyword indicating what whitespace processing + discipline is intended for the content of the element; its + value is inherited. This name is reserved by virtue of its + definition in the XML specification. + + Father (in any context at all): denotes Jon Bosak, the chair of + the original XML Working Group. This name is reserved by + the following decision of the W3C XML Plenary and + XML Coordination groups: + + In appreciation for his vision, leadership and dedication + the W3C XML Plenary on this 10th day of February, 2000 + reserves for Jon Bosak in perpetuity the XML name + xml:Father + </xs:documentation> + </xs:annotation> + + <xs:annotation> + <xs:documentation>This schema defines attributes and an attribute group + suitable for use by + schemas wishing to allow xml:base, xml:lang, xml:space or xml:id + attributes on elements they define. + + To enable this, such a schema must import this schema + for the XML namespace, e.g. as follows: + <schema . . .> + . . . + <import namespace="http://www.w3.org/XML/1998/namespace" + schemaLocation="http://www.w3.org/2001/xml.xsd"/> + + Subsequently, qualified reference to any of the attributes + or the group defined below will have the desired effect, e.g. + + <type . . .> + . . . + <attributeGroup ref="xml:specialAttrs"/> + + will define a type which will schema-validate an instance + element with any of those attributes</xs:documentation> + </xs:annotation> + + <xs:annotation> + <xs:documentation>In keeping with the XML Schema WG's standard versioning + policy, this schema document will persist at + http://www.w3.org/2007/08/xml.xsd. + At the date of issue it can also be found at + http://www.w3.org/2001/xml.xsd. + The schema document at that URI may however change in the future, + in order to remain compatible with the latest version of XML Schema + itself, or with the XML namespace itself. In other words, if the XML + Schema or XML namespaces change, the version of this document at + http://www.w3.org/2001/xml.xsd will change + accordingly; the version at + http://www.w3.org/2007/08/xml.xsd will not change. + </xs:documentation> + </xs:annotation> + + <xs:attribute name="lang"> + <xs:annotation> + <xs:documentation>Attempting to install the relevant ISO 2- and 3-letter + codes as the enumerated possible values is probably never + going to be a realistic possibility. See + RFC 3066 at http://www.ietf.org/rfc/rfc3066.txt and the IANA registry + at http://www.iana.org/assignments/lang-tag-apps.htm for + further information. + + The union allows for the 'un-declaration' of xml:lang with + the empty string.</xs:documentation> + </xs:annotation> + <xs:simpleType> + <xs:union memberTypes="xs:language"> + <xs:simpleType> + <xs:restriction base="xs:string"> + <xs:enumeration value=""/> + </xs:restriction> + </xs:simpleType> + </xs:union> + </xs:simpleType> + </xs:attribute> + + <xs:attribute name="space"> + <xs:simpleType> + <xs:restriction base="xs:NCName"> + <xs:enumeration value="default"/> + <xs:enumeration value="preserve"/> + </xs:restriction> + </xs:simpleType> + </xs:attribute> + + <xs:attribute name="base" type="xs:anyURI"> + <xs:annotation> + <xs:documentation>See http://www.w3.org/TR/xmlbase/ for + information about this attribute.</xs:documentation> + </xs:annotation> + </xs:attribute> + + <xs:attribute name="id" type="xs:ID"> + <xs:annotation> + <xs:documentation>See http://www.w3.org/TR/xml-id/ for + information about this attribute.</xs:documentation> + </xs:annotation> + </xs:attribute> + + <xs:attributeGroup name="specialAttrs"> + <xs:attribute ref="xml:base"/> + <xs:attribute ref="xml:lang"/> + <xs:attribute ref="xml:space"/> + <xs:attribute ref="xml:id"/> + </xs:attributeGroup> + +</xs:schema> diff --git a/src/xmlpatterns/schema/schemas/xml.xsd-LICENSE b/src/xmlpatterns/schema/schemas/xml.xsd-LICENSE new file mode 100644 index 0000000..2c687d8 --- /dev/null +++ b/src/xmlpatterns/schema/schemas/xml.xsd-LICENSE @@ -0,0 +1,40 @@ +W3C SOFTWARE NOTICE AND LICENSE + +This license came from: http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231 + +This work (and included software, documentation such as READMEs, or other +related items) is being provided by the copyright holders under the following +license. By obtaining, using and/or copying this work, you (the licensee) +agree that you have read, understood, and will comply with the following +terms and conditions. + +Permission to copy, modify, and distribute this software and its +documentation, with or without modification, for any purpose and without +fee or royalty is hereby granted, provided that you include the following on +ALL copies of the software and documentation or portions thereof, including +modifications: + + 1. The full text of this NOTICE in a location viewable to users of the + redistributed or derivative work. + 2. Any pre-existing intellectual property disclaimers, notices, or terms + and conditions. If none exist, the W3C Software Short Notice should be + included (hypertext is preferred, text is permitted) + within the body of any redistributed or derivative code. + 3. Notice of any changes or modifications to the files, including the date + changes were made. (We recommend you provide URIs to the location from + which the code is derived.) + +THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS +MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT +LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR +PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE +ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. + +COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR +DOCUMENTATION. + +The name and trademarks of copyright holders may NOT be used in +advertising or publicity pertaining to the software without specific, written +prior permission. Title to copyright in this software and any associated +documentation will at all times remain with copyright holders. diff --git a/src/xmlpatterns/schema/tokens.xml b/src/xmlpatterns/schema/tokens.xml new file mode 100644 index 0000000..5420695 --- /dev/null +++ b/src/xmlpatterns/schema/tokens.xml @@ -0,0 +1,155 @@ +<?xml version="1.0" encoding="UTF-8"?> +<tokenAutomaton scope="public" + className="XsdSchemaToken" + headerFile="qxsdschematoken_p.h" + sourceFile="qxsdschematoken.cpp" + defaultToken="NoKeyword" + tokenEnum="NodeName" + hasToString="true" + includeGuardName="QPatternist_XsdSchemaToken_h"> + <tokens> + <token>abstract</token> + <token>all</token> + <token>alternative</token> + <token>annotation</token> + <token>any</token> + <token>anyAttribute</token> + <token>appinfo</token> + <token>appliesToEmpty</token> + <token>assert</token> + <token>assertion</token> + <token>attribute</token> + <token>attributeFormDefault</token> + <token>attributeGroup</token> + <token>base</token> + <token>block</token> + <token>blockDefault</token> + <token>choice</token> + <token>collapse</token> + <token>complexContent</token> + <token>complexType</token> + <token>default</token> + <token>defaultAttributes</token> + <token>defaultAttributesApply</token> + <token>defaultOpenContent</token> + <token>documentation</token> + <token>element</token> + <token>elementFormDefault</token> + <token>enumeration</token> + <token>extension</token> + <token>field</token> + <token>final</token> + <token>finalDefault</token> + <token>fixed</token> + <token>form</token> + <token>fractionDigits</token> + <token>group</token> + <token>id</token> + <token>import</token> + <token>include</token> + <token>itemType</token> + <token>key</token> + <token>keyref</token> + <token>length</token> + <token>list</token> + <token>maxExclusive</token> + <token>maxInclusive</token> + <token>maxLength</token> + <token>maxOccurs</token> + <token>memberTypes</token> + <token>minExclusive</token> + <token>minInclusive</token> + <token>minLength</token> + <token>minOccurs</token> + <token>mixed</token> + <token>mode</token> + <token>name</token> + <token>namespace</token> + <token>nillable</token> + <token>notation</token> + <token>notNamespace</token> + <token>notQName</token> + <token>openContent</token> + <token>override</token> + <token>preserve</token> + <token>pattern</token> + <token>processContents</token> + <token>public</token> + <token>redefine</token> + <token>ref</token> + <token>refer</token> + <token>replace</token> + <token>restriction</token> + <token>schema</token> + <token>schemaLocation</token> + <token>selector</token> + <token>sequence</token> + <token>simpleContent</token> + <token>simpleType</token> + <token>source</token> + <token>substitutionGroup</token> + <token>system</token> + <token>targetNamespace</token> + <token>test</token> + <token>totalDigits</token> + <token>type</token> + <token>union</token> + <token>unique</token> + <token>use</token> + <token>value</token> + <token>version</token> + <token>whiteSpace</token> + <token>xpath</token> + <token name="XPathDefaultNamespace">xpathDefaultNamespace</token> + <token name="XmlLanguage">xml:lang</token> + <token name="XML_NS_SCHEMA_URI">http://www.w3.org/2001/XMLSchema</token> + </tokens> + + <boilerplate> + + <prolog>/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +</prolog> + + </boilerplate> + +</tokenAutomaton> diff --git a/src/xmlpatterns/type/qanysimpletype.cpp b/src/xmlpatterns/type/qanysimpletype.cpp index 9e5c876..659f4499 100644 --- a/src/xmlpatterns/type/qanysimpletype.cpp +++ b/src/xmlpatterns/type/qanysimpletype.cpp @@ -80,4 +80,14 @@ SchemaType::DerivationMethod AnySimpleType::derivationMethod() const return DerivationRestriction; } +bool AnySimpleType::isSimpleType() const +{ + return true; +} + +bool AnySimpleType::isComplexType() const +{ + return false; +} + QT_END_NAMESPACE diff --git a/src/xmlpatterns/type/qanysimpletype_p.h b/src/xmlpatterns/type/qanysimpletype_p.h index 8009c3b..a633052 100644 --- a/src/xmlpatterns/type/qanysimpletype_p.h +++ b/src/xmlpatterns/type/qanysimpletype_p.h @@ -73,6 +73,8 @@ namespace QPatternist class AnySimpleType : public AnyType { public: + typedef QExplicitlySharedDataPointer<AnySimpleType> Ptr; + typedef QList<AnySimpleType::Ptr> List; friend class BuiltinTypes; virtual ~AnySimpleType(); @@ -105,6 +107,16 @@ namespace QPatternist */ virtual SchemaType::DerivationMethod derivationMethod() const; + /** + * Always returns @c true. + */ + virtual bool isSimpleType() const; + + /** + * Always returns @c false. + */ + virtual bool isComplexType() const; + protected: AnySimpleType(); diff --git a/src/xmlpatterns/type/qanytype.cpp b/src/xmlpatterns/type/qanytype.cpp index 3d8714e..cabe56f 100644 --- a/src/xmlpatterns/type/qanytype.cpp +++ b/src/xmlpatterns/type/qanytype.cpp @@ -69,7 +69,7 @@ QXmlName AnyType::name(const NamePool::Ptr &np) const return np->allocateQName(StandardNamespaces::xs, QLatin1String("anyType")); } -QString AnyType::displayName(const NamePool::Ptr &) const +QString AnyType::displayName(const NamePool::Ptr &np) const { /* A bit faster than calling name()->displayName() */ return QLatin1String("xs:anyType"); @@ -85,9 +85,19 @@ SchemaType::TypeCategory AnyType::category() const return None; } +bool AnyType::isComplexType() const +{ + return true; +} + SchemaType::DerivationMethod AnyType::derivationMethod() const { return NoDerivation; } +SchemaType::DerivationConstraints AnyType::derivationConstraints() const +{ + return SchemaType::DerivationConstraints(); +} + QT_END_NAMESPACE diff --git a/src/xmlpatterns/type/qanytype_p.h b/src/xmlpatterns/type/qanytype_p.h index ae5cac8..7bc5554 100644 --- a/src/xmlpatterns/type/qanytype_p.h +++ b/src/xmlpatterns/type/qanytype_p.h @@ -114,6 +114,16 @@ namespace QPatternist */ virtual DerivationMethod derivationMethod() const; + /** + * @returns an empty set of derivation constraint flags. + */ + virtual DerivationConstraints derivationConstraints() const; + + /** + * Always returns @c true. + */ + virtual bool isComplexType() const; + protected: /** * @short This constructor is protected, because this diff --git a/src/xmlpatterns/type/qnamedschemacomponent.cpp b/src/xmlpatterns/type/qnamedschemacomponent.cpp new file mode 100644 index 0000000..c7bdc30 --- /dev/null +++ b/src/xmlpatterns/type/qnamedschemacomponent.cpp @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qnamedschemacomponent_p.h" + +QT_BEGIN_NAMESPACE + +using namespace QPatternist; + +NamedSchemaComponent::NamedSchemaComponent() +{ +} + +NamedSchemaComponent::~NamedSchemaComponent() +{ +} + +void NamedSchemaComponent::setName(const QXmlName &name) +{ + m_name = name; +} + +QXmlName NamedSchemaComponent::name(const NamePool::Ptr&) const +{ + return m_name; +} + +QString NamedSchemaComponent::displayName(const NamePool::Ptr &np) const +{ + return np->displayName(m_name); +} + +QT_END_NAMESPACE diff --git a/src/xmlpatterns/type/qnamedschemacomponent_p.h b/src/xmlpatterns/type/qnamedschemacomponent_p.h new file mode 100644 index 0000000..ab8a916 --- /dev/null +++ b/src/xmlpatterns/type/qnamedschemacomponent_p.h @@ -0,0 +1,127 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtXmlPatterns of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_NamedSchemaComponent_H +#define Patternist_NamedSchemaComponent_H + +#include "qnamepool_p.h" +#include "qschemacomponent_p.h" +#include "qxmlname.h" + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +namespace QPatternist +{ + /** + * @short Base class for all named components that can appear in a W3C XML Schema. + * + * @ingroup Patternist_types + * @author Tobias Koenig <tobias.koenig@trolltech.com> + */ + class NamedSchemaComponent : public SchemaComponent + { + public: + typedef QExplicitlySharedDataPointer<NamedSchemaComponent> Ptr; + + /** + * Describes the blocking constraints that are given by the 'block' attributes. + */ + enum BlockingConstraint + { + RestrictionConstraint = 1, + ExtensionConstraint = 2, + SubstitutionConstraint = 4 + }; + Q_DECLARE_FLAGS(BlockingConstraints, BlockingConstraint) + + /** + * Creates a new named schema component. + */ + NamedSchemaComponent(); + + /** + * Destroys the named schema component. + */ + virtual ~NamedSchemaComponent(); + + /** + * Sets the @p name of the schema component. + */ + void setName(const QXmlName &name); + + /** + * Returns the name of the schema component. + * + * @param namePool The name pool the name belongs to. + */ + virtual QXmlName name(const NamePool::Ptr &namePool) const; + + /** + * Returns the display name of the schema component. + * + * @param namePool The name pool the name belongs to. + */ + virtual QString displayName(const NamePool::Ptr &namePool) const; + + private: + QXmlName m_name; + }; + + Q_DECLARE_OPERATORS_FOR_FLAGS(NamedSchemaComponent::BlockingConstraints) +} + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/src/xmlpatterns/type/qprimitives_p.h b/src/xmlpatterns/type/qprimitives_p.h index 818cb22..b77698a 100644 --- a/src/xmlpatterns/type/qprimitives_p.h +++ b/src/xmlpatterns/type/qprimitives_p.h @@ -53,6 +53,8 @@ #define Patternist_Primitives_H #include <QtGlobal> +#include <QtCore/QHash> +#include <QtCore/QUrl> /** * @file @@ -79,6 +81,17 @@ namespace QPatternist { /** + * @internal + * + * A method to allow a QHash or QSet with QUrl + * as key type. + */ + inline uint qHash(const QUrl &uri) + { + return qHash(uri.toString()); + } + + /** * @defgroup Patternist_cppWXSTypes C++ Primitives for W3C XML Schema Number Types * * The implementations of W3C XML Schema's(WXS) number types, more specifically @@ -195,6 +208,8 @@ namespace QPatternist QString Q_AUTOTEST_EXPORT escape(const QString &input); } +using QPatternist::qHash; + QT_END_NAMESPACE QT_END_HEADER diff --git a/src/xmlpatterns/type/qschematype.cpp b/src/xmlpatterns/type/qschematype.cpp index e7b8738..51ac41d 100644 --- a/src/xmlpatterns/type/qschematype.cpp +++ b/src/xmlpatterns/type/qschematype.cpp @@ -72,4 +72,9 @@ bool SchemaType::isComplexType() const return category() == ComplexType; } +bool SchemaType::isDefinedBySchema() const +{ + return false; +} + QT_END_NAMESPACE diff --git a/src/xmlpatterns/type/qschematype_p.h b/src/xmlpatterns/type/qschematype_p.h index 38ed9b6..eaac28a 100644 --- a/src/xmlpatterns/type/qschematype_p.h +++ b/src/xmlpatterns/type/qschematype_p.h @@ -57,6 +57,7 @@ #include "qxmlname.h" template<typename N, typename M> class QHash; +template<typename N> class QList; QT_BEGIN_HEADER @@ -80,6 +81,7 @@ namespace QPatternist typedef QExplicitlySharedDataPointer<SchemaType> Ptr; typedef QHash<QXmlName, SchemaType::Ptr> Hash; + typedef QList<SchemaType::Ptr> List; /** * Schema types are divided into different categories such as @@ -117,6 +119,18 @@ namespace QPatternist NoDerivation = 16 }; + /** + * Describes the derivation constraints that are given by the 'final' or 'block' attributes. + */ + enum DerivationConstraint + { + RestrictionConstraint = 1, + ExtensionConstraint = 2, + ListConstraint = 4, + UnionConstraint = 8 + }; + Q_DECLARE_FLAGS(DerivationConstraints, DerivationConstraint) + SchemaType(); virtual ~SchemaType(); @@ -137,6 +151,11 @@ namespace QPatternist virtual DerivationMethod derivationMethod() const = 0; /** + * Determines what derivation constraints exists for the type. + */ + virtual DerivationConstraints derivationConstraints() const = 0; + + /** * Determines whether the type is an abstract type. * * @note It is important a correct value is returned, since @@ -202,7 +221,7 @@ namespace QPatternist * @note Do not re-implement this function, but instead override category() * and let it return an appropriate value. */ - bool isSimpleType() const; + virtual bool isSimpleType() const; /** * Determines whether the type is a complex type, by introspecting @@ -211,8 +230,15 @@ namespace QPatternist * @note Do not re-implement this function, but instead override category() * and let it return an appropriate value. */ - bool isComplexType() const; + virtual bool isComplexType() const; + + /** + * Returns whether the value has been defined by a schema (is not a built in type). + */ + virtual bool isDefinedBySchema() const; }; + + Q_DECLARE_OPERATORS_FOR_FLAGS(SchemaType::DerivationConstraints) } QT_END_NAMESPACE diff --git a/src/xmlpatterns/type/type.pri b/src/xmlpatterns/type/type.pri index ef5976a..5425298 100644 --- a/src/xmlpatterns/type/type.pri +++ b/src/xmlpatterns/type/type.pri @@ -24,6 +24,7 @@ HEADERS += $$PWD/qabstractnodetest_p.h \ $$PWD/qitemtype_p.h \ $$PWD/qlocalnametest_p.h \ $$PWD/qmultiitemtype_p.h \ + $$PWD/qnamedschemacomponent_p.h \ $$PWD/qnamespacenametest_p.h \ $$PWD/qnonetype_p.h \ $$PWD/qnumerictype_p.h \ @@ -57,6 +58,7 @@ SOURCES += $$PWD/qabstractnodetest.cpp \ $$PWD/qitemtype.cpp \ $$PWD/qlocalnametest.cpp \ $$PWD/qmultiitemtype.cpp \ + $$PWD/qnamedschemacomponent.cpp \ $$PWD/qnamespacenametest.cpp \ $$PWD/qnonetype.cpp \ $$PWD/qnumerictype.cpp \ diff --git a/src/xmlpatterns/utils/qpatternistlocale_p.h b/src/xmlpatterns/utils/qpatternistlocale_p.h index 5dcd917..d8288c7 100644 --- a/src/xmlpatterns/utils/qpatternistlocale_p.h +++ b/src/xmlpatterns/utils/qpatternistlocale_p.h @@ -93,7 +93,8 @@ namespace QPatternist Q_DISABLE_COPY(QtXmlPatterns) }; - static inline QString formatKeyword(const QString &keyword) + // don't make this function static, otherwise xlC 7 cannot find it + inline QString formatKeyword(const QString &keyword) { return QLatin1String("<span class='XQuery-keyword'>") + escape(keyword) + @@ -168,6 +169,16 @@ namespace QPatternist } /** + * @short Formats name of any type. + */ + static inline QString formatType(const NamePool::Ptr &np, const QXmlName &name) + { + return QLatin1String("<span class='XQuery-type'>") + + escape(np->displayName(name)) + + QLatin1String("</span>"); + } + + /** * @short Formats Cardinality. */ static inline QString formatType(const Cardinality &type) diff --git a/src/xmlpatterns/utils/qxpathhelper.cpp b/src/xmlpatterns/utils/qxpathhelper.cpp index 377d097..69f5494 100644 --- a/src/xmlpatterns/utils/qxpathhelper.cpp +++ b/src/xmlpatterns/utils/qxpathhelper.cpp @@ -125,4 +125,16 @@ ItemType::Ptr XPathHelper::typeFromKind(const QXmlNodeModelIndex::NodeKind nodeK } } +QUrl XPathHelper::normalizeQueryURI(const QUrl &uri) +{ + Q_ASSERT_X(uri.isEmpty() || uri.isValid(), Q_FUNC_INFO, + "The URI passed to QXmlQuery::setQuery() must be valid or empty."); + if(uri.isEmpty()) + return QUrl::fromLocalFile(QCoreApplication::applicationFilePath()); + else if(uri.isRelative()) + return QUrl::fromLocalFile(QCoreApplication::applicationFilePath()).resolved(uri); + else + return uri; +} + QT_END_NAMESPACE diff --git a/src/xmlpatterns/utils/qxpathhelper_p.h b/src/xmlpatterns/utils/qxpathhelper_p.h index 8b7dc6e..4a37bb6 100644 --- a/src/xmlpatterns/utils/qxpathhelper_p.h +++ b/src/xmlpatterns/utils/qxpathhelper_p.h @@ -128,6 +128,11 @@ namespace QPatternist static QPatternist::ItemTypePtr typeFromKind(const QXmlNodeModelIndex::NodeKind nodeKind); /** + * Normalizes an @p uri by resolving it to the application directory if empty. + */ + static QUrl normalizeQueryURI(const QUrl &uri); + + /** * @short Determines whether @p consists only of whitespace. Characters * considered whitespace are the ones for which QChar::isSpace() returns @c true for. * diff --git a/src/xmlpatterns/xmlpatterns.pro b/src/xmlpatterns/xmlpatterns.pro index e9d8af9..fb6aa1a 100644 --- a/src/xmlpatterns/xmlpatterns.pro +++ b/src/xmlpatterns/xmlpatterns.pro @@ -21,6 +21,8 @@ include($$PWD/iterators/iterators.pri) include($$PWD/janitors/janitors.pri) include($$PWD/parser/parser.pri) include($$PWD/projection/projection.pri) +include($$PWD/schema/schema.pri) +include($$PWD/schematron/schematron.pri) include($$PWD/type/type.pri) include($$PWD/utils/utils.pri) include($$PWD/qobjectmodel/qobjectmodel.pri) diff --git a/tests/auto/auto.pro b/tests/auto/auto.pro index f6ff59d..4ff0080 100644 --- a/tests/auto/auto.pro +++ b/tests/auto/auto.pro @@ -395,7 +395,8 @@ SUBDIRS += _networkselftest \ symbols \ qrand \ uic \ - uic3 + uic3 \ + utf8 contains(QT_CONFIG, OdfWriter):SUBDIRS += qzip qtextodfwriter @@ -424,9 +425,14 @@ SUBDIRS += checkxmlfiles \ qxmlnodemodelindex \ qxmlquery \ qxmlresultitems \ + qxmlschema \ + qxmlschemavalidator \ qxmlserializer \ xmlpatterns \ xmlpatternsdiagnosticsts \ + xmlpatternsschema \ + xmlpatternsschemats \ + xmlpatternsvalidator \ xmlpatternsview \ xmlpatternsxqts \ xmlpatternsxslts diff --git a/tests/auto/bic/tst_bic.cpp b/tests/auto/bic/tst_bic.cpp index e7a0c04..36c35ff 100644 --- a/tests/auto/bic/tst_bic.cpp +++ b/tests/auto/bic/tst_bic.cpp @@ -43,6 +43,10 @@ #include <QtCore/QtCore> #include <QtTest/QtTest> +#ifdef QT_NO_PROCESS +QTEST_NOOP_MAIN +#else + #include "qbic.h" #include <stdlib.h> @@ -145,7 +149,7 @@ void tst_Bic::initTestCase_data() void tst_Bic::initTestCase() { - QString qtDir = QString::fromLocal8Bit(getenv("QTDIR")); + QString qtDir = QString::fromLocal8Bit(qgetenv("QTDIR")); QVERIFY2(!qtDir.isEmpty(), "This test needs $QTDIR"); if (qgetenv("PATH").contains("teambuilder")) @@ -220,7 +224,7 @@ QBic::Info tst_Bic::getCurrentInfo(const QString &libName) tmpQFile.write(tmpFileContents); tmpQFile.flush(); - QString qtDir = QString::fromLocal8Bit(getenv("QTDIR")); + QString qtDir = QString::fromLocal8Bit(qgetenv("QTDIR")); #ifdef Q_OS_WIN qtDir.replace('\\', '/'); #endif @@ -367,4 +371,4 @@ void tst_Bic::sizesAndVTables() QTEST_APPLESS_MAIN(tst_Bic) #include "tst_bic.moc" - +#endif diff --git a/tests/auto/compilerwarnings/tst_compilerwarnings.cpp b/tests/auto/compilerwarnings/tst_compilerwarnings.cpp index 2f5cf6c..d5fef1b 100644 --- a/tests/auto/compilerwarnings/tst_compilerwarnings.cpp +++ b/tests/auto/compilerwarnings/tst_compilerwarnings.cpp @@ -47,6 +47,10 @@ #include <QtTest/QtTest> +#ifdef QT_NO_PROCESS +QTEST_NOOP_MAIN +#else + #include <stdlib.h> QT_USE_NAMESPACE @@ -67,8 +71,8 @@ private slots: static QStringList getFeatures() { QStringList srcDirs; - srcDirs << QString::fromLocal8Bit(getenv("QTDIR")) - << QString::fromLocal8Bit(getenv("QTSRCDIR")); + srcDirs << QString::fromLocal8Bit(qgetenv("QTDIR")) + << QString::fromLocal8Bit(qgetenv("QTSRCDIR")); QString featurefile; foreach (QString dir, srcDirs) { @@ -157,7 +161,7 @@ void tst_CompilerWarnings::warnings() QStringList args; QString compilerName; - static QString qtDir = QString::fromLocal8Bit(getenv("QTDIR")); + static QString qtDir = QString::fromLocal8Bit(qgetenv("QTDIR")); QVERIFY2(!qtDir.isEmpty(), "This test needs $QTDIR"); args << cflags; @@ -248,4 +252,4 @@ void tst_CompilerWarnings::warnings() QTEST_APPLESS_MAIN(tst_CompilerWarnings) #include "tst_compilerwarnings.moc" - +#endif // QT_NO_PROCESS diff --git a/tests/auto/linguist/lconvert/data/test-broken-utf8.po.out b/tests/auto/linguist/lconvert/data/test-broken-utf8.po.out index c00fd19..0a9f4c8 100644 --- a/tests/auto/linguist/lconvert/data/test-broken-utf8.po.out +++ b/tests/auto/linguist/lconvert/data/test-broken-utf8.po.out @@ -6,4 +6,4 @@ msgid "this works" msgstr "das geht: ä" msgid "this is broken" -msgstr "das ist kaputt: i" +msgstr "das ist kaputt: �i" diff --git a/tests/auto/linguist/lrelease/tst_lrelease.cpp b/tests/auto/linguist/lrelease/tst_lrelease.cpp index 45e9d6b..4928a4f 100644 --- a/tests/auto/linguist/lrelease/tst_lrelease.cpp +++ b/tests/auto/linguist/lrelease/tst_lrelease.cpp @@ -200,7 +200,7 @@ void tst_lrelease::compressed() void tst_lrelease::idbased() { - QVERIFY(!QProcess::execute("lrelease -idbased testdata/idbased.ts")); + QVERIFY(!QProcess::execute(binDir + "/lrelease -idbased testdata/idbased.ts")); QTranslator translator; QVERIFY(translator.load("testdata/idbased.qm")); diff --git a/tests/auto/linguist/lupdate/testdata/good/lacksqobject/main.cpp b/tests/auto/linguist/lupdate/testdata/good/lacksqobject/main.cpp index 05fcd79..0e42d52 100644 --- a/tests/auto/linguist/lupdate/testdata/good/lacksqobject/main.cpp +++ b/tests/auto/linguist/lupdate/testdata/good/lacksqobject/main.cpp @@ -1,8 +1,8 @@ // IMPORTANT!!!! If you want to add testdata to this file, // always add it to the end in order to not change the linenumbers of translations!!! -#include <QtCore> - +#define QTCORE <QtCore> +#include QTCORE // Hidden from lupdate, but compiles // // Test 'lacks Q_OBJECT' reporting on namespace scopes diff --git a/tests/auto/moc/tst_moc.cpp b/tests/auto/moc/tst_moc.cpp index 3a40ae0..d66791f 100644 --- a/tests/auto/moc/tst_moc.cpp +++ b/tests/auto/moc/tst_moc.cpp @@ -488,6 +488,7 @@ private slots: void warnOnPropertyWithoutREAD(); void constructors(); void typenameWithUnsigned(); + void warnOnVirtualSignal(); signals: void sigWithUnsignedArg(unsigned foo); @@ -510,7 +511,7 @@ private: void tst_Moc::initTestCase() { -#if defined(Q_OS_UNIX) +#if defined(Q_OS_UNIX) && !defined(QT_NO_PROCESS) QProcess proc; proc.start("qmake", QStringList() << "-query" << "QT_INSTALL_HEADERS"); QVERIFY(proc.waitForFinished()); @@ -555,7 +556,7 @@ void tst_Moc::oldStyleCasts() #ifdef MOC_CROSS_COMPILED QSKIP("Not tested when cross-compiled", SkipAll); #endif -#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) +#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) && !defined(QT_NO_PROCESS) QProcess proc; proc.start("moc", QStringList(srcify("/oldstyle-casts.h"))); QVERIFY(proc.waitForFinished()); @@ -585,7 +586,7 @@ void tst_Moc::warnOnExtraSignalSlotQualifiaction() #ifdef MOC_CROSS_COMPILED QSKIP("Not tested when cross-compiled", SkipAll); #endif -#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) +#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) && !defined(QT_NO_PROCESS) QProcess proc; proc.start("moc", QStringList(srcify("extraqualification.h"))); QVERIFY(proc.waitForFinished()); @@ -627,7 +628,7 @@ void tst_Moc::inputFileNameWithDotsButNoExtension() #ifdef MOC_CROSS_COMPILED QSKIP("Not tested when cross-compiled", SkipAll); #endif -#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) +#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) && !defined(QT_NO_PROCESS) QProcess proc; proc.setWorkingDirectory(QString(SRCDIR) + "/task71021"); proc.start("moc", QStringList("../Header")); @@ -835,7 +836,7 @@ void tst_Moc::warnOnMultipleInheritance() #ifdef MOC_CROSS_COMPILED QSKIP("Not tested when cross-compiled", SkipAll); #endif -#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) +#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) && !defined(QT_NO_PROCESS) QProcess proc; QStringList args; args << "-I" << qtIncludePath + "/QtGui" @@ -858,7 +859,7 @@ void tst_Moc::forgottenQInterface() #ifdef MOC_CROSS_COMPILED QSKIP("Not tested when cross-compiled", SkipAll); #endif -#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) +#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) && !defined(QT_NO_PROCESS) QProcess proc; QStringList args; args << "-I" << qtIncludePath + "/QtCore" @@ -940,7 +941,7 @@ void tst_Moc::frameworkSearchPath() #ifdef MOC_CROSS_COMPILED QSKIP("Not tested when cross-compiled", SkipAll); #endif -#if defined(Q_OS_UNIX) +#if defined(Q_OS_UNIX) && !defined(QT_NO_PROCESS) QStringList args; args << "-F" << srcify(".") << srcify("interface-from-framework.h") @@ -978,7 +979,7 @@ void tst_Moc::templateGtGt() #ifdef MOC_CROSS_COMPILED QSKIP("Not tested when cross-compiled", SkipAll); #endif -#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) +#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) && !defined(QT_NO_PROCESS) QProcess proc; proc.start("moc", QStringList(srcify("template-gtgt.h"))); QVERIFY(proc.waitForFinished()); @@ -994,7 +995,7 @@ void tst_Moc::templateGtGt() void tst_Moc::defineMacroViaCmdline() { -#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) +#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) && !defined(QT_NO_PROCESS) QProcess proc; QStringList args; @@ -1082,7 +1083,7 @@ void tst_Moc::warnOnPropertyWithoutREAD() #ifdef MOC_CROSS_COMPILED QSKIP("Not tested when cross-compiled", SkipAll); #endif -#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) +#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) && !defined(QT_NO_PROCESS) QProcess proc; proc.start("moc", QStringList(srcify("warn-on-property-without-read.h"))); QVERIFY(proc.waitForFinished()); @@ -1180,6 +1181,27 @@ void tst_Moc::typenameWithUnsigned() QVERIFY(mobj->indexOfSlot("l(unsignedQImage)") != -1); } + +void tst_Moc::warnOnVirtualSignal() +{ +#ifdef MOC_CROSS_COMPILED + QSKIP("Not tested when cross-compiled", SkipAll); +#endif +#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) && !defined(QT_NO_PROCESS) + QProcess proc; + proc.start("moc", QStringList(srcify("pure-virtual-signals.h"))); + QVERIFY(proc.waitForFinished()); + QCOMPARE(proc.exitCode(), 0); + QByteArray mocOut = proc.readAllStandardOutput(); + QVERIFY(!mocOut.isEmpty()); + QString mocWarning = QString::fromLocal8Bit(proc.readAllStandardError()); + QCOMPARE(mocWarning, QString(SRCDIR) + QString("/pure-virtual-signals.h:48: Warning: Signals cannot be declared virtual\n") + + QString(SRCDIR) + QString("/pure-virtual-signals.h:50: Warning: Signals cannot be declared virtual\n")); +#else + QSKIP("Only tested on linux/gcc", SkipAll); +#endif +} + QTEST_MAIN(tst_Moc) #include "tst_moc.moc" diff --git a/tests/auto/patternistheaders/tst_patternistheaders.cpp b/tests/auto/patternistheaders/tst_patternistheaders.cpp index 00b2544..dd342ae 100644 --- a/tests/auto/patternistheaders/tst_patternistheaders.cpp +++ b/tests/auto/patternistheaders/tst_patternistheaders.cpp @@ -94,6 +94,10 @@ void tst_PatternistHeaders::run() const #include <qxmlquery.h> #include <QXmlResultItems> #include <qxmlresultitems.h> +#include <QXmlSchema> +#include <qxmlschema.h> +#include <QXmlSchemaValidator> +#include <qxmlschemavalidator.h> #include <QXmlSerializer> #include <qxmlserializer.h> @@ -122,6 +126,10 @@ void tst_PatternistHeaders::run() const #include <QtXmlPatterns/qxmlquery.h> #include <QtXmlPatterns/QXmlResultItems> #include <QtXmlPatterns/qxmlresultitems.h> +#include <QtXmlPatterns/QXmlSchema> +#include <QtXmlPatterns/qxmlschema.h> +#include <QtXmlPatterns/QXmlSchemaValidator> +#include <QtXmlPatterns/qxmlschemavalidator.h> #include <QtXmlPatterns/QXmlSerializer> #include <QtXmlPatterns/qxmlserializer.h> diff --git a/tests/auto/q3sqlcursor/tst_q3sqlcursor.cpp b/tests/auto/q3sqlcursor/tst_q3sqlcursor.cpp index 0a2e46e..e4b1a55 100644 --- a/tests/auto/q3sqlcursor/tst_q3sqlcursor.cpp +++ b/tests/auto/q3sqlcursor/tst_q3sqlcursor.cpp @@ -574,10 +574,7 @@ void tst_Q3SqlCursor::precision() QVERIFY_SQL(cur, select()); QVERIFY( cur.next() ); - if(!tst_Databases::isSqlServer(db)) - QCOMPARE( cur.value( 0 ).asString(), precStr ); - else - QCOMPARE( cur.value( 0 ).asString(), precStr.left(precStr.size()-1) ); // Sql server fails at counting. + QCOMPARE( cur.value( 0 ).asString(), precStr ); QVERIFY( cur.next() ); QCOMPARE( cur.value( 0 ).asDouble(), precDbl ); } diff --git a/tests/auto/qabstractitemview/tst_qabstractitemview.cpp b/tests/auto/qabstractitemview/tst_qabstractitemview.cpp index 0bc459e..e7b94d1 100644 --- a/tests/auto/qabstractitemview/tst_qabstractitemview.cpp +++ b/tests/auto/qabstractitemview/tst_qabstractitemview.cpp @@ -55,6 +55,7 @@ #include <qpushbutton.h> #include <qscrollbar.h> #include <qboxlayout.h> +#include <qlineedit.h> #include "../../shared/util.h" //TESTED_CLASS= @@ -209,10 +210,11 @@ private slots: void noFallbackToRoot(); void setCurrentIndex_data(); void setCurrentIndex(); - + void task221955_selectedEditor(); void task250754_fontChange(); void task200665_itemEntered(); + void task257481_emptyEditor(); }; class MyAbstractItemDelegate : public QAbstractItemDelegate @@ -945,12 +947,12 @@ void tst_QAbstractItemView::dragAndDropOnChild() class TestModel : public QStandardItemModel { public: - TestModel(int rows, int columns) : QStandardItemModel(rows, columns) + TestModel(int rows, int columns) : QStandardItemModel(rows, columns) { setData_count = 0; } - virtual bool setData(const QModelIndex &/*index*/, const QVariant &/*value*/, int /*role = Qt::EditRole*/) + virtual bool setData(const QModelIndex &/*index*/, const QVariant &/*value*/, int /*role = Qt::EditRole*/) { ++setData_count; return true; @@ -967,20 +969,20 @@ void tst_QAbstractItemView::setItemDelegate_data() // default is rows, a -1 will switch to columns QTest::addColumn<IntList>("rowsOrColumnsWithDelegate"); QTest::addColumn<QPoint>("cellToEdit"); - QTest::newRow("4 columndelegates") - << (IntList() << -1 << 0 << 1 << 2 << 3) + QTest::newRow("4 columndelegates") + << (IntList() << -1 << 0 << 1 << 2 << 3) << QPoint(0, 0); - QTest::newRow("2 identical rowdelegates on the same row") - << (IntList() << 0 << 0) + QTest::newRow("2 identical rowdelegates on the same row") + << (IntList() << 0 << 0) << QPoint(0, 0); - QTest::newRow("2 identical columndelegates on the same column") - << (IntList() << -1 << 2 << 2) + QTest::newRow("2 identical columndelegates on the same column") + << (IntList() << -1 << 2 << 2) << QPoint(2, 0); - QTest::newRow("2 duplicate delegates, 1 row and 1 column") - << (IntList() << 0 << -1 << 2) + QTest::newRow("2 duplicate delegates, 1 row and 1 column") + << (IntList() << 0 << -1 << 2) << QPoint(2, 0); - QTest::newRow("4 duplicate delegates, 2 row and 2 column") - << (IntList() << 0 << 0 << -1 << 2 << 2) + QTest::newRow("4 duplicate delegates, 2 row and 2 column") + << (IntList() << 0 << 0 << -1 << 2 << 2) << QPoint(2, 0); } @@ -1002,7 +1004,7 @@ void tst_QAbstractItemView::setItemDelegate() if (row) { v.setItemDelegateForRow(rc, delegate); } else { - v.setItemDelegateForColumn(rc, delegate); + v.setItemDelegateForColumn(rc, delegate); } } } @@ -1120,42 +1122,42 @@ void tst_QAbstractItemView::setCurrentIndex() void tst_QAbstractItemView::task221955_selectedEditor() { QPushButton *button; - + QTreeWidget tree; tree.setColumnCount(2); tree.addTopLevelItem(new QTreeWidgetItem(QStringList() << "Foo" <<"1")); tree.addTopLevelItem(new QTreeWidgetItem(QStringList() << "Bar" <<"2")); tree.addTopLevelItem(new QTreeWidgetItem(QStringList() << "Baz" <<"3")); - + QTreeWidgetItem *dummy = new QTreeWidgetItem(); tree.addTopLevelItem(dummy); tree.setItemWidget(dummy, 0, button = new QPushButton("More...")); button->setAutoFillBackground(true); // as recommended in doc - + tree.show(); tree.setFocus(); tree.setCurrentIndex(tree.model()->index(1,0)); QTest::qWait(100); QApplication::setActiveWindow(&tree); - + QVERIFY(! tree.selectionModel()->selectedIndexes().contains(tree.model()->index(3,0))); //We set the focus to the button, the index need to be selected - button->setFocus(); + button->setFocus(); QTest::qWait(100); QVERIFY(tree.selectionModel()->selectedIndexes().contains(tree.model()->index(3,0))); - + tree.setCurrentIndex(tree.model()->index(1,0)); QVERIFY(! tree.selectionModel()->selectedIndexes().contains(tree.model()->index(3,0))); - + //Same thing but with the flag NoSelection, nothing can be selected. tree.setFocus(); tree.setSelectionMode(QAbstractItemView::NoSelection); tree.clearSelection(); QVERIFY(tree.selectionModel()->selectedIndexes().isEmpty()); QTest::qWait(10); - button->setFocus(); + button->setFocus(); QTest::qWait(50); QVERIFY(tree.selectionModel()->selectedIndexes().isEmpty()); } @@ -1196,7 +1198,7 @@ void tst_QAbstractItemView::task250754_fontChange() QTest::qWait(30); //now with the huge items, the scrollbar must be visible QVERIFY(tree.verticalScrollBar()->isVisible()); - + qApp->setStyleSheet(app_css); } @@ -1217,6 +1219,41 @@ void tst_QAbstractItemView::task200665_itemEntered() } +void tst_QAbstractItemView::task257481_emptyEditor() +{ + QIcon icon = qApp->style()->standardIcon(QStyle::SP_ComputerIcon); + + QStandardItemModel model; + + model.appendRow( new QStandardItem(icon, QString()) ); + model.appendRow( new QStandardItem(icon, "Editor works") ); + model.appendRow( new QStandardItem( QString() ) ); + + QTreeView treeView; + treeView.setRootIsDecorated(false); + treeView.setModel(&model); + treeView.show(); + + treeView.edit(model.index(0,0)); + QList<QLineEdit *> lineEditors = qFindChildren<QLineEdit *>(treeView.viewport()); + QCOMPARE(lineEditors.count(), 1); + QVERIFY(!lineEditors.first()->size().isEmpty()); + + QTest::qWait(30); + + treeView.edit(model.index(1,0)); + lineEditors = qFindChildren<QLineEdit *>(treeView.viewport()); + QCOMPARE(lineEditors.count(), 1); + QVERIFY(!lineEditors.first()->size().isEmpty()); + + QTest::qWait(30); + + treeView.edit(model.index(2,0)); + lineEditors = qFindChildren<QLineEdit *>(treeView.viewport()); + QCOMPARE(lineEditors.count(), 1); + QVERIFY(!lineEditors.first()->size().isEmpty()); +} + QTEST_MAIN(tst_QAbstractItemView) #include "tst_qabstractitemview.moc" diff --git a/tests/auto/qabstractscrollarea/tst_qabstractscrollarea.cpp b/tests/auto/qabstractscrollarea/tst_qabstractscrollarea.cpp index e976c1b..556e850 100644 --- a/tests/auto/qabstractscrollarea/tst_qabstractscrollarea.cpp +++ b/tests/auto/qabstractscrollarea/tst_qabstractscrollarea.cpp @@ -66,6 +66,7 @@ private slots: void setScrollBars(); void setScrollBars2(); void objectNaming(); + void patternBackground(); void viewportCrash(); void task214488_layoutDirection_data(); @@ -350,5 +351,39 @@ void tst_QAbstractScrollArea::task214488_layoutDirection() QVERIFY(lessThan ? (hbar->value() < refValue) : (hbar->value() > refValue)); } +void tst_QAbstractScrollArea::patternBackground() +{ + QScrollArea scrollArea; + scrollArea.resize(200, 200); + QWidget widget; + widget.resize(600, 600); + scrollArea.setWidget(&widget); + scrollArea.show(); + + QLinearGradient linearGrad(QPointF(250, 250), QPointF(300, 300)); + linearGrad.setColorAt(0, Qt::yellow); + linearGrad.setColorAt(1, Qt::red); + QBrush bg(linearGrad); + scrollArea.viewport()->setPalette(QPalette(Qt::black, bg, bg, bg, bg, bg, bg, bg, bg)); + widget.setPalette(Qt::transparent); + + QTest::qWait(50); + + QImage image(200, 200, QImage::Format_ARGB32); + scrollArea.render(&image); + + QCOMPARE(image.pixel(QPoint(20,20)) , QColor(Qt::yellow).rgb()); + + QScrollBar *hbar = scrollArea.horizontalScrollBar(); + hbar->setValue(hbar->maximum()); + QScrollBar *vbar = scrollArea.verticalScrollBar(); + vbar->setValue(vbar->maximum()); + + QTest::qWait(50); + + scrollArea.render(&image); + QCOMPARE(image.pixel(QPoint(20,20)) , QColor(Qt::red).rgb()); +} + QTEST_MAIN(tst_QAbstractScrollArea) #include "tst_qabstractscrollarea.moc" diff --git a/tests/auto/qabstractxmlnodemodel/tst_qabstractxmlnodemodel.cpp b/tests/auto/qabstractxmlnodemodel/tst_qabstractxmlnodemodel.cpp index 7679bd8..634f692 100644 --- a/tests/auto/qabstractxmlnodemodel/tst_qabstractxmlnodemodel.cpp +++ b/tests/auto/qabstractxmlnodemodel/tst_qabstractxmlnodemodel.cpp @@ -45,6 +45,7 @@ #ifdef QTEST_XMLPATTERNS +#include <QSourceLocation> #include <QXmlFormatter> #include <QXmlNamePool> #include <QXmlQuery> @@ -80,6 +81,7 @@ private Q_SLOTS: void id() const; void idref() const; void typedValue() const; + void sourceLocation() const; private: QAbstractXmlNodeModel::Ptr m_nodeModel; @@ -389,6 +391,12 @@ void tst_QAbstractXmlNodeModel::typedValue() const QVERIFY(output.isEmpty()); } +void tst_QAbstractXmlNodeModel::sourceLocation() const +{ + const QAbstractXmlNodeModel* const constModel = m_nodeModel.data(); + const QSourceLocation location = constModel->sourceLocation(m_rootNode); +} + QTEST_MAIN(tst_QAbstractXmlNodeModel) #include "tst_qabstractxmlnodemodel.moc" diff --git a/tests/auto/qaction/tst_qaction.cpp b/tests/auto/qaction/tst_qaction.cpp index 452ca58..3c71baf 100644 --- a/tests/auto/qaction/tst_qaction.cpp +++ b/tests/auto/qaction/tst_qaction.cpp @@ -105,6 +105,10 @@ void tst_QAction::getSetCheck() obj1.setMenu((QMenu *)0); QCOMPARE((QMenu *)0, obj1.menu()); delete var2; + + QCOMPARE(obj1.priority(), QAction::NormalPriority); + obj1.setPriority(QAction::LowPriority); + QCOMPARE(obj1.priority(), QAction::LowPriority); } class MyWidget : public QWidget diff --git a/tests/auto/qapplication/tst_qapplication.cpp b/tests/auto/qapplication/tst_qapplication.cpp index 8532723..7cb6bfa 100644 --- a/tests/auto/qapplication/tst_qapplication.cpp +++ b/tests/auto/qapplication/tst_qapplication.cpp @@ -1382,6 +1382,7 @@ void tst_QApplication::testDeleteLaterProcessEvents() */ void tst_QApplication::desktopSettingsAware() { +#ifndef QT_NO_PROCESS QProcess testProcess; #ifdef Q_OS_WINCE int argc = 0; @@ -1399,6 +1400,7 @@ void tst_QApplication::desktopSettingsAware() QVERIFY(testProcess.waitForFinished(10000)); QCOMPARE(int(testProcess.state()), int(QProcess::NotRunning)); QVERIFY(int(testProcess.error()) != int(QProcess::Crashed)); +#endif } void tst_QApplication::setActiveWindow() diff --git a/tests/auto/qbytearray/tst_qbytearray.cpp b/tests/auto/qbytearray/tst_qbytearray.cpp index 78fbf32..b7e4717 100644 --- a/tests/auto/qbytearray/tst_qbytearray.cpp +++ b/tests/auto/qbytearray/tst_qbytearray.cpp @@ -235,6 +235,8 @@ void tst_QByteArray::qUncompress() QSKIP("Corrupt data causes this tests to lock up on HP-UX / PA-RISC with gcc", SkipAll); #elif defined Q_OS_SOLARIS QSKIP("Corrupt data causes this tests to lock up on Solaris", SkipAll); +#elif defined Q_OS_QNX + QSKIP("Currupt data cuases this test to lock up on QNX", SkipAll); #endif QTEST(::qUncompress(in), "out"); diff --git a/tests/auto/qclipboard/tst_qclipboard.cpp b/tests/auto/qclipboard/tst_qclipboard.cpp index f400754..bcdf043 100644 --- a/tests/auto/qclipboard/tst_qclipboard.cpp +++ b/tests/auto/qclipboard/tst_qclipboard.cpp @@ -192,6 +192,7 @@ void tst_QClipboard::testSignals() */ void tst_QClipboard::copy_exit_paste() { +#ifndef QT_NO_PROCESS #if defined Q_WS_X11 || defined Q_WS_QWS QSKIP("This test does not make sense on X11 and embedded, copied data disappears from the clipboard when the application exits ", SkipAll); // ### It's still possible to test copy/paste - just keep the apps running @@ -205,6 +206,7 @@ void tst_QClipboard::copy_exit_paste() QTest::qWait(100); #endif QCOMPARE(QProcess::execute("paster/paster", stringArgument), 0); +#endif } void tst_QClipboard::setMimeData() diff --git a/tests/auto/qcompleter/tst_qcompleter.cpp b/tests/auto/qcompleter/tst_qcompleter.cpp index fb03e1a..0a9c16a 100644 --- a/tests/auto/qcompleter/tst_qcompleter.cpp +++ b/tests/auto/qcompleter/tst_qcompleter.cpp @@ -102,6 +102,8 @@ public: ~tst_QCompleter(); private slots: + void getSetCheck(); + void multipleWidgets(); void focusIn(); @@ -268,6 +270,72 @@ void tst_QCompleter::filter() QCOMPARE(completer->currentCompletion(), completionText); } +// Testing get/set functions +void tst_QCompleter::getSetCheck() +{ + QStandardItemModel model(3,3); + QCompleter completer(&model); + + // QString QCompleter::completionPrefix() + // void QCompleter::setCompletionPrefix(QString) + completer.setCompletionPrefix(QString("te")); + QCOMPARE(completer.completionPrefix(), QString("te")); + completer.setCompletionPrefix(QString()); + QCOMPARE(completer.completionPrefix(), QString()); + + // ModelSorting QCompleter::modelSorting() + // void QCompleter::setModelSorting(ModelSorting) + completer.setModelSorting(QCompleter::CaseSensitivelySortedModel); + QCOMPARE(completer.modelSorting(), QCompleter::CaseSensitivelySortedModel); + completer.setModelSorting(QCompleter::CaseInsensitivelySortedModel); + QCOMPARE(completer.modelSorting(), QCompleter::CaseInsensitivelySortedModel); + completer.setModelSorting(QCompleter::UnsortedModel); + QCOMPARE(completer.modelSorting(), QCompleter::UnsortedModel); + + // CompletionMode QCompleter::completionMode() + // void QCompleter::setCompletionMode(CompletionMode) + QCOMPARE(completer.completionMode(), QCompleter::PopupCompletion); // default value + completer.setCompletionMode(QCompleter::UnfilteredPopupCompletion); + QCOMPARE(completer.completionMode(), QCompleter::UnfilteredPopupCompletion); + completer.setCompletionMode(QCompleter::InlineCompletion); + QCOMPARE(completer.completionMode(), QCompleter::InlineCompletion); + + // int QCompleter::completionColumn() + // void QCompleter::setCompletionColumn(int) + completer.setCompletionColumn(2); + QCOMPARE(completer.completionColumn(), 2); + completer.setCompletionColumn(1); + QCOMPARE(completer.completionColumn(), 1); + + // int QCompleter::completionRole() + // void QCompleter::setCompletionRole(int) + QCOMPARE(completer.completionRole(), static_cast<int>(Qt::EditRole)); // default value + completer.setCompletionRole(Qt::DisplayRole); + QCOMPARE(completer.completionRole(), static_cast<int>(Qt::DisplayRole)); + + // int QCompleter::maxVisibleItems() + // void QCompleter::setMaxVisibleItems(int) + QCOMPARE(completer.maxVisibleItems(), 7); // default value + completer.setMaxVisibleItems(10); + QCOMPARE(completer.maxVisibleItems(), 10); + QTest::ignoreMessage(QtWarningMsg, "QCompleter::setMaxVisibleItems: " + "Invalid max visible items (-2147483648) must be >= 0"); + completer.setMaxVisibleItems(INT_MIN); + QCOMPARE(completer.maxVisibleItems(), 10); // Cannot be set to something negative => old value + + // Qt::CaseSensitivity QCompleter::caseSensitivity() + // void QCompleter::setCaseSensitivity(Qt::CaseSensitivity) + QCOMPARE(completer.caseSensitivity(), Qt::CaseSensitive); // default value + completer.setCaseSensitivity(Qt::CaseInsensitive); + QCOMPARE(completer.caseSensitivity(), Qt::CaseInsensitive); + + // bool QCompleter::wrapAround() + // void QCompleter::setWrapAround(bool) + QCOMPARE(completer.wrapAround(), true); // default value + completer.setWrapAround(false); + QCOMPARE(completer.wrapAround(), false); +} + void tst_QCompleter::csMatchingOnCsSortedModel_data() { delete completer; diff --git a/tests/auto/qcopchannel/tst_qcopchannel.cpp b/tests/auto/qcopchannel/tst_qcopchannel.cpp index d07898a..ce97eae 100644 --- a/tests/auto/qcopchannel/tst_qcopchannel.cpp +++ b/tests/auto/qcopchannel/tst_qcopchannel.cpp @@ -42,7 +42,7 @@ #include <QtTest/QtTest> -#ifdef Q_WS_QWS +#if defined(Q_WS_QWS) && !defined(QT_NO_PROCESS) //TESTED_CLASS= //TESTED_FILES= diff --git a/tests/auto/qdir/tst_qdir.cpp b/tests/auto/qdir/tst_qdir.cpp index 1fd5e88..e5b23ab 100644 --- a/tests/auto/qdir/tst_qdir.cpp +++ b/tests/auto/qdir/tst_qdir.cpp @@ -571,10 +571,21 @@ void tst_QDir::entryList() return; } - for (int i=0; i<max; ++i) - QCOMPARE(actual[i], expected[i]); + bool doContentCheck = true; +#ifdef Q_OS_UNIX + if (qstrcmp(QTest::currentDataTag(), "QDir::AllEntries | QDir::Writable") == 0) { + // for root, everything is writeable + if (::getuid() == 0) + doContentCheck = false; + } +#endif - QCOMPARE(actual.count(), expected.count()); + if (doContentCheck) { + for (int i=0; i<max; ++i) + QCOMPARE(actual[i], expected[i]); + + QCOMPARE(actual.count(), expected.count()); + } QFile::remove(SRCDIR "entrylist/writable"); QFile::remove(SRCDIR "entrylist/linktofile"); diff --git a/tests/auto/qdirectpainter/tst_qdirectpainter.cpp b/tests/auto/qdirectpainter/tst_qdirectpainter.cpp index e300244..d5c0ef8 100644 --- a/tests/auto/qdirectpainter/tst_qdirectpainter.cpp +++ b/tests/auto/qdirectpainter/tst_qdirectpainter.cpp @@ -175,6 +175,9 @@ void tst_QDirectPainter::setGeometry() void tst_QDirectPainter::regionSynchronization() { +#ifdef QT_NO_PROCESS + QSKIP("Test requires QProcess", SkipAll); +#else QRect dpRect(10, 10, 50, 50); // Start the direct painter in a different process @@ -211,6 +214,7 @@ void tst_QDirectPainter::regionSynchronization() QVERIFY(i > 100); // sanity check proc.kill(); +#endif } class MyObject : public QObject diff --git a/tests/auto/qdiriterator/tst_qdiriterator.cpp b/tests/auto/qdiriterator/tst_qdiriterator.cpp index e916e8b..2d5758e 100644 --- a/tests/auto/qdiriterator/tst_qdiriterator.cpp +++ b/tests/auto/qdiriterator/tst_qdiriterator.cpp @@ -183,17 +183,28 @@ void tst_QDirIterator::iterateRelativeDirectory() QFETCH(QStringList, entries); QDirIterator it(dirName, nameFilters, filters, flags); - QStringList iteratorList; - while (it.hasNext()) - iteratorList << it.next(); - - // The order of QDirIterator returning items differs on some platforms. - // Thus it is not guaranteed that all paths will be returned relative - // and we need to assure we have two valid StringLists to compare. So - // we make all entries absolute for comparison. QStringList list; - foreach(QString item, iteratorList) - list.append(QFileInfo(item).canonicalFilePath()); + while (it.hasNext()) { + QString next = it.next(); + + QString fileName = it.fileName(); + QString filePath = it.filePath(); + QString path = it.path(); + + QFileInfo info = it.fileInfo(); + + QCOMPARE(path, dirName); + QCOMPARE(next, filePath); + + QCOMPARE(info, QFileInfo(next)); + QCOMPARE(fileName, info.fileName()); + QCOMPARE(filePath, info.filePath()); + + // Using canonical file paths for final comparison + list << info.canonicalFilePath(); + } + + // The order of items returned by QDirIterator is not guaranteed. list.sort(); QStringList sortedEntries; diff --git a/tests/auto/qfile/tst_qfile.cpp b/tests/auto/qfile/tst_qfile.cpp index 8d9c2be..66f29dd 100644 --- a/tests/auto/qfile/tst_qfile.cpp +++ b/tests/auto/qfile/tst_qfile.cpp @@ -382,6 +382,12 @@ void tst_QFile::open() QFETCH( bool, ok ); +#ifdef Q_OS_UNIX + if (::getuid() == 0) + // root and Chuck Norris don't care for file permissions. Skip. + QSKIP("Running this test as root doesn't make sense", SkipAll); +#endif + #if defined(Q_OS_WIN32) || defined(Q_OS_WINCE) QEXPECT_FAIL("noreadfile", "Windows does not currently support non-readable files.", Abort); #endif @@ -2493,14 +2499,20 @@ void tst_QFile::map() file.close(); - // Change permissions on a file, just to confirm it would fail - QFile::Permissions originalPermissions = file.permissions(); - QVERIFY(file.setPermissions(QFile::ReadOther)); - QVERIFY(!file.open(QFile::ReadWrite)); - memory = file.map(offset, size); - QCOMPARE(file.error(), QFile::PermissionsError); - QVERIFY(!memory); - QVERIFY(file.setPermissions(originalPermissions)); +#ifdef Q_OS_UNIX + if (::getuid() != 0) + // root always has permissions +#endif + { + // Change permissions on a file, just to confirm it would fail + QFile::Permissions originalPermissions = file.permissions(); + QVERIFY(file.setPermissions(QFile::ReadOther)); + QVERIFY(!file.open(QFile::ReadWrite)); + memory = file.map(offset, size); + QCOMPARE(file.error(), QFile::PermissionsError); + QVERIFY(!memory); + QVERIFY(file.setPermissions(originalPermissions)); + } QVERIFY(file.remove()); } diff --git a/tests/auto/qfileinfo/tst_qfileinfo.cpp b/tests/auto/qfileinfo/tst_qfileinfo.cpp index 48dc357..e5831fd 100644 --- a/tests/auto/qfileinfo/tst_qfileinfo.cpp +++ b/tests/auto/qfileinfo/tst_qfileinfo.cpp @@ -127,6 +127,8 @@ private slots: void size_data(); void size(); + void systemFiles(); + void compare_data(); void compare(); @@ -354,8 +356,9 @@ void tst_QFileInfo::exists_data() QTest::newRow("data6") << "resources/*" << false; QTest::newRow("data7") << "resources/*.foo" << false; QTest::newRow("data8") << "resources/*.ext1" << false; - QTest::newRow("data9") << "." << true; - QTest::newRow("data10") << ". " << false; + QTest::newRow("data9") << "resources/file?.ext1" << false; + QTest::newRow("data10") << "." << true; + QTest::newRow("data11") << ". " << false; QTest::newRow("simple dir") << "resources" << true; QTest::newRow("simple dir with slash") << "resources/" << true; @@ -741,6 +744,17 @@ void tst_QFileInfo::size() QTEST(int(fi.size()), "size"); } +void tst_QFileInfo::systemFiles() +{ +#ifndef Q_OS_WIN + QSKIP("This is a Windows only test", SkipAll); +#endif + QFileInfo fi("c:\\pagefile.sys"); + QVERIFY(fi.exists()); // task 167099 + QVERIFY(fi.size() > 0); // task 189202 + QVERIFY(fi.lastModified().isValid()); +} + void tst_QFileInfo::compare_data() { QTest::addColumn<QString>("file1"); diff --git a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp index 3f41a90..f58cad2 100644 --- a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp +++ b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp @@ -4478,14 +4478,13 @@ void tst_QGraphicsItem::paint() view.hide(); QGraphicsScene scene2; + QGraphicsView view2(&scene2); + view2.show(); + QTest::qWait(250); PaintTester tester2; scene2.addItem(&tester2); - - QGraphicsView view2(&scene2); - view2.show(); qApp->processEvents(); - QTest::qWait(250); //First show one paint QVERIFY(tester2.painted == 1); @@ -5570,11 +5569,12 @@ public: void tst_QGraphicsItem::ensureUpdateOnTextItem() { QGraphicsScene scene; - TextItem *text1 = new TextItem(QLatin1String("123")); - scene.addItem(text1); QGraphicsView view(&scene); view.show(); QTest::qWait(250); + TextItem *text1 = new TextItem(QLatin1String("123")); + scene.addItem(text1); + qApp->processEvents(); QCOMPARE(text1->updates,1); //same bouding rect but we have to update @@ -6034,14 +6034,15 @@ void tst_QGraphicsItem::itemStacksBehindParent() scene.addItem(parent1); scene.addItem(parent2); - paintedItems.clear(); - QGraphicsView view(&scene); view.show(); #ifdef Q_WS_X11 qt_x11_wait_for_window_manager(&view); #endif QTest::qWait(250); + paintedItems.clear(); + view.viewport()->update(); + QTest::qWait(100); QCOMPARE(scene.items(0, 0, 100, 100), (QList<QGraphicsItem *>() << grandChild111 << child11 @@ -7247,6 +7248,11 @@ void tst_QGraphicsItem::sorting() _paintedItems.clear(); view.viewport()->repaint(); +#ifdef Q_WS_MAC + // There's no difference between repaint and update on the Mac, + // so we have to process events here to make sure we get the event. + QTest::qWait(100); +#endif QCOMPARE(_paintedItems, QList<QGraphicsItem *>() << grid[0][0] << grid[0][1] << grid[0][2] << grid[0][3] @@ -7279,6 +7285,11 @@ void tst_QGraphicsItem::itemHasNoContents() _paintedItems.clear(); view.viewport()->repaint(); +#ifdef Q_WS_MAC + // There's no difference between update() and repaint() on the Mac, + // so we have to process events here to make sure we get the event. + QTest::qWait(100); +#endif QCOMPARE(_paintedItems, QList<QGraphicsItem *>() << item2); } diff --git a/tests/auto/qgraphicssceneindex/tst_qgraphicssceneindex.cpp b/tests/auto/qgraphicssceneindex/tst_qgraphicssceneindex.cpp index 3ce5b16..f825c16 100644 --- a/tests/auto/qgraphicssceneindex/tst_qgraphicssceneindex.cpp +++ b/tests/auto/qgraphicssceneindex/tst_qgraphicssceneindex.cpp @@ -34,7 +34,7 @@ ** met: http://www.gnu.org/copyleft/gpl.html. ** ** If you are unsure which license is appropriate for your use, please -** contact the sales department at qt-sales@nokia.com. +** contact the sales department at http://www.qtsoftware.com/contact. ** $QT_END_LICENSE$ ** ****************************************************************************/ @@ -66,6 +66,7 @@ private slots: void movingItems(); void connectedToSceneRectChanged(); void items(); + void clear(); private: void common_data(); @@ -267,5 +268,38 @@ void tst_QGraphicsSceneIndex::items() QCOMPARE(scene.items().size(), 3); } +void tst_QGraphicsSceneIndex::clear() +{ + class MyItem : public QGraphicsItem + { + public: + MyItem(QGraphicsItem *parent = 0) : QGraphicsItem(parent), numPaints(0) {} + int numPaints; + protected: + QRectF boundingRect() const { return QRectF(0, 0, 10, 10); } + void paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *) + { ++numPaints; } + }; + + QGraphicsScene scene; + scene.setSceneRect(0, 0, 100, 100); + scene.addItem(new MyItem); + + QGraphicsView view(&scene); + view.show(); +#ifdef Q_WS_X11 + qt_x11_wait_for_window_manager(&view); +#endif + QTest::qWait(250); + scene.clear(); + + // Make sure the index is re-generated after QGraphicsScene::clear(); + // otherwise no items will be painted. + MyItem *item = new MyItem; + scene.addItem(item); + qApp->processEvents(); + QCOMPARE(item->numPaints, 1); +} + QTEST_MAIN(tst_QGraphicsSceneIndex) #include "tst_qgraphicssceneindex.moc" diff --git a/tests/auto/qgraphicsview/tst_qgraphicsview.cpp b/tests/auto/qgraphicsview/tst_qgraphicsview.cpp index 9a5089b..37c5967 100644 --- a/tests/auto/qgraphicsview/tst_qgraphicsview.cpp +++ b/tests/auto/qgraphicsview/tst_qgraphicsview.cpp @@ -3338,6 +3338,15 @@ void tst_QGraphicsView::render() { // ### This test can be much more thorough - see QGraphicsScene::render. QGraphicsScene scene; + QGraphicsView view(&scene); + view.setFrameStyle(0); + view.resize(200, 200); + view.show(); +#ifdef Q_WS_X11 + qt_x11_wait_for_window_manager(&view); +#endif + QTest::qWait(200); + RenderTester *r1 = new RenderTester(QRectF(0, 0, 50, 50)); RenderTester *r2 = new RenderTester(QRectF(50, 50, 50, 50)); RenderTester *r3 = new RenderTester(QRectF(0, 50, 50, 50)); @@ -3347,14 +3356,7 @@ void tst_QGraphicsView::render() scene.addItem(r3); scene.addItem(r4); - QGraphicsView view(&scene); - view.setFrameStyle(0); - view.resize(200, 200); - view.show(); -#ifdef Q_WS_X11 - qt_x11_wait_for_window_manager(&view); -#endif - QTest::qWait(200); + qApp->processEvents(); QCOMPARE(r1->paints, 1); QCOMPARE(r2->paints, 1); diff --git a/tests/auto/qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp b/tests/auto/qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp index e116624..aa0705d 100644 --- a/tests/auto/qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp +++ b/tests/auto/qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp @@ -244,8 +244,8 @@ void tst_QHttpNetworkConnection::get() QByteArray ba; do { QCoreApplication::instance()->processEvents(); - if (reply->bytesAvailable()) - ba += reply->read(); + while (reply->bytesAvailable()) + ba += reply->readAny(); if (stopWatch.elapsed() >= 30000) break; } while (!reply->isFinished()); @@ -327,7 +327,8 @@ void tst_QHttpNetworkConnection::put() if (reply->isFinished()) { QByteArray ba; - ba += reply->read(); + while (reply->bytesAvailable()) + ba += reply->readAny(); } else if(finishedWithErrorCalled) { if(!succeed) { delete reply; @@ -417,8 +418,8 @@ void tst_QHttpNetworkConnection::post() QByteArray ba; do { QCoreApplication::instance()->processEvents(); - if (reply->bytesAvailable()) - ba += reply->read(); + while (reply->bytesAvailable()) + ba += reply->readAny(); if (stopWatch.elapsed() >= 30000) break; } while (!reply->isFinished()); @@ -616,8 +617,8 @@ void tst_QHttpNetworkConnection::compression() QByteArray ba; do { QCoreApplication::instance()->processEvents(); - if (reply->bytesAvailable()) - ba += reply->read(); + while (reply->bytesAvailable()) + ba += reply->readAny(); if (stopWatch.elapsed() >= 30000) break; } while (!reply->isFinished()); diff --git a/tests/auto/qicoimageformat/icons/valid/Qt.ico b/tests/auto/qicoimageformat/icons/valid/Qt.ico Binary files differnew file mode 100644 index 0000000..fef1dee --- /dev/null +++ b/tests/auto/qicoimageformat/icons/valid/Qt.ico diff --git a/tests/auto/qicoimageformat/tst_qticoimageformat.cpp b/tests/auto/qicoimageformat/tst_qticoimageformat.cpp index 51ee4aa..fbd3821 100644 --- a/tests/auto/qicoimageformat/tst_qticoimageformat.cpp +++ b/tests/auto/qicoimageformat/tst_qticoimageformat.cpp @@ -70,6 +70,8 @@ private slots: void loopCount(); void nextImageDelay_data(); void nextImageDelay(); + void pngCompression_data(); + void pngCompression(); private: QString m_IconPath; @@ -130,6 +132,7 @@ void tst_QtIcoImageFormat::canRead_data() QTest::newRow("invalid floppy (first 8 bytes = 0xff)") << "invalid/35floppy.ico" << 0; QTest::newRow("103x16px, 24BPP") << "valid/trolltechlogo_tiny.ico" << 1; QTest::newRow("includes 32BPP w/alpha") << "valid/semitransparent.ico" << 1; + QTest::newRow("PNG compression") << "valid/Qt.ico" << 1; } void tst_QtIcoImageFormat::canRead() @@ -199,6 +202,7 @@ void tst_QtIcoImageFormat::imageCount_data() QTest::newRow("16px16c, 32px32c, 32px256c") << "valid/WORLDH.ico" << 3; QTest::newRow("invalid floppy (first 8 bytes = 0xff)") << "invalid/35floppy.ico" << 0; QTest::newRow("includes 32BPP w/alpha") << "valid/semitransparent.ico" << 9; + QTest::newRow("PNG compression") << "valid/Qt.ico" << 4; } @@ -226,6 +230,7 @@ void tst_QtIcoImageFormat::jumpToNextImage_data() QTest::newRow("16px16c, 32px32c, 32px256c") << "valid/WORLD.ico" << 3; QTest::newRow("16px16c, 32px32c, 32px256c") << "valid/WORLDH.ico" << 3; QTest::newRow("includes 32BPP w/alpha") << "valid/semitransparent.ico" << 9; + QTest::newRow("PNG compression") << "valid/Qt.ico" << 4; } void tst_QtIcoImageFormat::jumpToNextImage() @@ -275,6 +280,7 @@ void tst_QtIcoImageFormat::nextImageDelay_data() QTest::newRow("16px16c, 32px32c, 32px256c") << "valid/WORLDH.ico" << 3; QTest::newRow("invalid floppy (first 8 bytes = 0xff)") << "invalid/35floppy.ico" << -1; QTest::newRow("includes 32BPP w/alpha") << "valid/semitransparent.ico" << 9; + QTest::newRow("PNG compression") << "valid/Qt.ico" << 4; } void tst_QtIcoImageFormat::nextImageDelay() @@ -294,5 +300,32 @@ void tst_QtIcoImageFormat::nextImageDelay() } } +void tst_QtIcoImageFormat::pngCompression_data() +{ + QTest::addColumn<QString>("fileName"); + QTest::addColumn<int>("index"); + QTest::addColumn<int>("width"); + QTest::addColumn<int>("height"); + + QTest::newRow("PNG compression") << "valid/Qt.ico" << 4 << 256 << 256; +} + +void tst_QtIcoImageFormat::pngCompression() +{ + QFETCH(QString, fileName); + QFETCH(int, index); + QFETCH(int, width); + QFETCH(int, height); + + QImageReader reader(m_IconPath + "/" + fileName); + + QImage image; + reader.jumpToImage(index); + reader.read(&image); + + QCOMPARE(image.width(), width); + QCOMPARE(image.height(), height); +} + QTEST_MAIN(tst_QtIcoImageFormat) #include "tst_qticoimageformat.moc" diff --git a/tests/auto/qlistview/tst_qlistview.cpp b/tests/auto/qlistview/tst_qlistview.cpp index a18f037..cc80931 100644 --- a/tests/auto/qlistview/tst_qlistview.cpp +++ b/tests/auto/qlistview/tst_qlistview.cpp @@ -110,6 +110,7 @@ private slots: void task196118_visualRegionForSelection(); void task254449_draggingItemToNegativeCoordinates(); void keyboardSearch(); + void shiftSelectionWithNonUniformItemSizes(); }; // Testing get/set functions @@ -1656,5 +1657,71 @@ void tst_QListView::keyboardSearch() QCOMPARE(view.currentIndex() , model.index(6,0)); //KONQUEROR } +void tst_QListView::shiftSelectionWithNonUniformItemSizes() +{ + // This checks that no items are selected unexpectedly by Shift-Arrow + // when items with non-uniform sizes are laid out in a grid + { // First test: QListView::LeftToRight flow + QStringList items; + items << "Long\nText" << "Text" << "Text" << "Text"; + QStringListModel model(items); + + QListView view; + view.setFixedSize(250, 250); + view.setFlow(QListView::LeftToRight); + view.setGridSize(QSize(100, 100)); + view.setSelectionMode(QListView::ExtendedSelection); + view.setViewMode(QListView::IconMode); + view.setModel(&model); + view.show(); + QTest::qWait(30); + + // Verfify that item sizes are non-uniform + QVERIFY(view.sizeHintForIndex(model.index(0, 0)).height() > view.sizeHintForIndex(model.index(1, 0)).height()); + + QModelIndex index = model.index(3, 0); + view.setCurrentIndex(index); + QCOMPARE(view.currentIndex(), index); + + QTest::keyClick(&view, Qt::Key_Up, Qt::ShiftModifier); + QTest::qWait(10); + QCOMPARE(view.currentIndex(), model.index(1, 0)); + + QModelIndexList selected = view.selectionModel()->selectedIndexes(); + QCOMPARE(selected.count(), 3); + QVERIFY(!selected.contains(model.index(0, 0))); + } + { // Second test: QListView::TopToBottom flow + QStringList items; + items << "ab" << "a" << "a" << "a"; + QStringListModel model(items); + + QListView view; + view.setFixedSize(250, 250); + view.setFlow(QListView::TopToBottom); + view.setGridSize(QSize(100, 100)); + view.setSelectionMode(QListView::ExtendedSelection); + view.setViewMode(QListView::IconMode); + view.setModel(&model); + view.show(); + QTest::qWait(30); + + // Verfify that item sizes are non-uniform + QVERIFY(view.sizeHintForIndex(model.index(0, 0)).width() > view.sizeHintForIndex(model.index(1, 0)).width()); + + QModelIndex index = model.index(3, 0); + view.setCurrentIndex(index); + QCOMPARE(view.currentIndex(), index); + + QTest::keyClick(&view, Qt::Key_Left, Qt::ShiftModifier); + QTest::qWait(10); + QCOMPARE(view.currentIndex(), model.index(1, 0)); + + QModelIndexList selected = view.selectionModel()->selectedIndexes(); + QCOMPARE(selected.count(), 3); + QVERIFY(!selected.contains(model.index(0, 0))); + } +} + QTEST_MAIN(tst_QListView) #include "tst_qlistview.moc" diff --git a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp index f2bfb1f..788be1e 100644 --- a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp +++ b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp @@ -114,6 +114,7 @@ class tst_QNetworkReply: public QObject MyCookieJar *cookieJar; #ifndef QT_NO_OPENSSL QSslConfiguration storedSslConfiguration; + QList<QSslError> storedExpectedSslErrors; #endif public: @@ -126,9 +127,11 @@ public Q_SLOTS: void gotError(); void authenticationRequired(QNetworkReply*,QAuthenticator*); void proxyAuthenticationRequired(const QNetworkProxy &,QAuthenticator*); + #ifndef QT_NO_OPENSSL void sslErrors(QNetworkReply*,const QList<QSslError> &); void storeSslConfiguration(); + void ignoreSslErrorListSlot(QNetworkReply *reply, const QList<QSslError> &); #endif protected Q_SLOTS: @@ -247,6 +250,13 @@ private Q_SLOTS: void httpConnectionCount(); void httpDownloadPerformance_data(); void httpDownloadPerformance(); + +#ifndef QT_NO_OPENSSL + void ignoreSslErrorsList_data(); + void ignoreSslErrorsList(); + void ignoreSslErrorsListWithSlot_data(); + void ignoreSslErrorsListWithSlot(); +#endif }; QT_BEGIN_NAMESPACE @@ -3540,7 +3550,7 @@ void tst_QNetworkReply::httpProxyCommands_data() << QUrl("http://0.0.0.0:4443/http-request") << QByteArray("HTTP/1.0 200 OK\r\nProxy-Connection: close\r\nContent-Length: 1\r\n\r\n1") << "GET http://0.0.0.0:4443/http-request HTTP/1."; -#ifndef QT_NO_SSL +#ifndef QT_NO_OPENSSL QTest::newRow("https") << QUrl("https://0.0.0.0:4443/https-request") << QByteArray("HTTP/1.0 200 Connection Established\r\n\r\n") @@ -3763,6 +3773,7 @@ public slots: } void bytesWrittenSlot(qint64 amount) { + Q_UNUSED(amount); if (dataSent == dataSize && client) { // close eventually @@ -3831,5 +3842,81 @@ void tst_QNetworkReply::httpDownloadPerformance() delete reply; } +#ifndef QT_NO_OPENSSL +void tst_QNetworkReply::ignoreSslErrorsList_data() +{ + QTest::addColumn<QString>("url"); + QTest::addColumn<QList<QSslError> >("expectedSslErrors"); + QTest::addColumn<QNetworkReply::NetworkError>("expectedNetworkError"); + + QList<QSslError> expectedSslErrors; + // apparently, because of some weird behaviour of SRCDIR, the file name below needs to start with a slash + QList<QSslCertificate> certs = QSslCertificate::fromPath(QLatin1String(SRCDIR "/../qsslsocket/certs/qt-test-server-cacert.pem")); + QSslError rightError(QSslError::SelfSignedCertificate, certs.at(0)); + QSslError wrongError(QSslError::SelfSignedCertificate); + + QTest::newRow("SSL-failure-empty-list") << "https://" + QtNetworkSettings::serverName() + "/index.html" << expectedSslErrors << QNetworkReply::SslHandshakeFailedError; + expectedSslErrors.append(wrongError); + QTest::newRow("SSL-failure-wrong-error") << "https://" + QtNetworkSettings::serverName() + "/index.html" << expectedSslErrors << QNetworkReply::SslHandshakeFailedError; + expectedSslErrors.append(rightError); + QTest::newRow("allErrorsInExpectedList1") << "https://" + QtNetworkSettings::serverName() + "/index.html" << expectedSslErrors << QNetworkReply::NoError; + expectedSslErrors.removeAll(wrongError); + QTest::newRow("allErrorsInExpectedList2") << "https://" + QtNetworkSettings::serverName() + "/index.html" << expectedSslErrors << QNetworkReply::NoError; + expectedSslErrors.removeAll(rightError); + QTest::newRow("SSL-failure-empty-list-again") << "https://" + QtNetworkSettings::serverName() + "/index.html" << expectedSslErrors << QNetworkReply::SslHandshakeFailedError; +} + +void tst_QNetworkReply::ignoreSslErrorsList() +{ + QFETCH(QString, url); + QNetworkRequest request(url); + QNetworkReply *reply = manager.get(request); + + QFETCH(QList<QSslError>, expectedSslErrors); + reply->ignoreSslErrors(expectedSslErrors); + + connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop())); + QTestEventLoop::instance().enterLoop(10); + QVERIFY(!QTestEventLoop::instance().timeout()); + + QFETCH(QNetworkReply::NetworkError, expectedNetworkError); + QCOMPARE(reply->error(), expectedNetworkError); +} + +void tst_QNetworkReply::ignoreSslErrorsListWithSlot_data() +{ + ignoreSslErrorsList_data(); +} + +// this is not a test, just a slot called in the test below +void tst_QNetworkReply::ignoreSslErrorListSlot(QNetworkReply *reply, const QList<QSslError> &) +{ + reply->ignoreSslErrors(storedExpectedSslErrors); +} + +// do the same as in ignoreSslErrorsList, but ignore the errors in the slot +void tst_QNetworkReply::ignoreSslErrorsListWithSlot() +{ + QFETCH(QString, url); + QNetworkRequest request(url); + QNetworkReply *reply = manager.get(request); + + QFETCH(QList<QSslError>, expectedSslErrors); + // store the errors to ignore them later in the slot connected below + storedExpectedSslErrors = expectedSslErrors; + connect(&manager, SIGNAL(sslErrors(QNetworkReply *, const QList<QSslError> &)), + this, SLOT(ignoreSslErrorListSlot(QNetworkReply *, const QList<QSslError> &))); + + + connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop())); + QTestEventLoop::instance().enterLoop(10); + QVERIFY(!QTestEventLoop::instance().timeout()); + + QFETCH(QNetworkReply::NetworkError, expectedNetworkError); + QCOMPARE(reply->error(), expectedNetworkError); +} + +#endif // QT_NO_OPENSSL + QTEST_MAIN(tst_QNetworkReply) #include "tst_qnetworkreply.moc" diff --git a/tests/auto/qobject/tst_qobject.cpp b/tests/auto/qobject/tst_qobject.cpp index 8ce7c3a..4f25af6 100644 --- a/tests/auto/qobject/tst_qobject.cpp +++ b/tests/auto/qobject/tst_qobject.cpp @@ -2426,11 +2426,15 @@ void tst_QObject::dynamicProperties() void tst_QObject::recursiveSignalEmission() { +#ifdef QT_NO_PROCESS + QSKIP("Test requires QProcess", SkipAll); +#else QProcess proc; proc.start("./signalbug"); QVERIFY(proc.waitForFinished()); QVERIFY(proc.exitStatus() == QProcess::NormalExit); QCOMPARE(proc.exitCode(), 0); +#endif } void tst_QObject::blockingQueuedConnection() diff --git a/tests/auto/qprocess/tst_qprocess.cpp b/tests/auto/qprocess/tst_qprocess.cpp index c19d0a5..1ae5b12 100644 --- a/tests/auto/qprocess/tst_qprocess.cpp +++ b/tests/auto/qprocess/tst_qprocess.cpp @@ -50,6 +50,10 @@ #include <QtNetwork/QHostInfo> #include <stdlib.h> +#ifdef QT_NO_PROCESS +QTEST_NOOP_MAIN +#else + #if defined(Q_OS_WIN) #include <windows.h> #endif @@ -143,6 +147,7 @@ private slots: void startFinishStartFinish(); void invalidProgramString_data(); void invalidProgramString(); + void processEventsInAReadyReadSlot(); // keep these at the end, since they use lots of processes and sometimes // caused obscure failures to occur in tests that followed them (esp. on the Mac) @@ -156,6 +161,7 @@ protected slots: void restartProcess(); void waitForReadyReadInAReadyReadSlotSlot(); void waitForBytesWrittenInABytesWrittenSlotSlot(); + void processEventsInAReadyReadSlotSlot(); private: QProcess *process; @@ -2130,5 +2136,35 @@ void tst_QProcess::invalidProgramString() QVERIFY(!QProcess::startDetached(programString)); } +//----------------------------------------------------------------------------- +void tst_QProcess::processEventsInAReadyReadSlot() +{ +#ifdef Q_OS_WINCE + QSKIP("Reading and writing to a process is not supported on Qt/CE", SkipAll); +#endif + + QProcess process; + QVERIFY(QObject::connect(&process, SIGNAL(readyReadStandardOutput()), this, SLOT(processEventsInAReadyReadSlotSlot()))); + + for (int i = 0; i < 10; ++i) { + QCOMPARE(process.state(), QProcess::NotRunning); + +#ifdef Q_OS_MAC + process.start("testProcessOutput/testProcessOutput.app"); +#else + process.start("testProcessOutput/testProcessOutput"); +#endif + + QVERIFY(process.waitForFinished(10000)); + } +} + +//----------------------------------------------------------------------------- +void tst_QProcess::processEventsInAReadyReadSlotSlot() +{ + qApp->processEvents(); +} + QTEST_MAIN(tst_QProcess) #include "tst_qprocess.moc" +#endif diff --git a/tests/auto/qprogressbar/tst_qprogressbar.cpp b/tests/auto/qprogressbar/tst_qprogressbar.cpp index 403b56b..911d6b7 100644 --- a/tests/auto/qprogressbar/tst_qprogressbar.cpp +++ b/tests/auto/qprogressbar/tst_qprogressbar.cpp @@ -62,6 +62,8 @@ private slots: void format(); void setValueRepaint(); void sizeHint(); + void formatedText_data(); + void formatedText(); void task245201_testChangeStyleAndDelete_data(); void task245201_testChangeStyleAndDelete(); @@ -174,7 +176,7 @@ void tst_QProgressBar::format() bar.repainted = false; bar.setFormat("%v of %m (%p%)"); qApp->processEvents(); -#ifndef Q_WS_MAC +#ifndef Q_WS_MAC // The Mac scroll bar is animated, which means we get paint events all the time. QVERIFY(!bar.repainted); #endif @@ -225,6 +227,34 @@ void tst_QProgressBar::sizeHint() QCOMPARE(barSize.height(), size.height()); } +void tst_QProgressBar::formatedText_data() +{ + QTest::addColumn<int>("minimum"); + QTest::addColumn<int>("maximum"); + QTest::addColumn<int>("value"); + QTest::addColumn<QString>("format"); + QTest::addColumn<QString>("text"); + + QTest::newRow("1") << -100 << 100 << 0 << QString::fromLatin1(" %p - %v - %m ") << QString::fromLatin1(" 50 - 0 - 200 "); + QTest::newRow("2") << -100 << 0 << -25 << QString::fromLatin1(" %p - %v - %m ") << QString::fromLatin1(" 75 - -25 - 100 "); + QTest::newRow("3") << 10 << 10 << 10 << QString::fromLatin1(" %p - %v - %m ") << QString::fromLatin1(" 100 - 10 - 0 "); + QTest::newRow("task152227") << INT_MIN << INT_MAX << 42 << QString::fromLatin1(" %p - %v - %m ") << QString::fromLatin1(" 50 - 42 - 4294967295 "); +} + +void tst_QProgressBar::formatedText() +{ + QFETCH(int, minimum); + QFETCH(int, maximum); + QFETCH(int, value); + QFETCH(QString, format); + QFETCH(QString, text); + QProgressBar bar; + bar.setRange(minimum, maximum); + bar.setValue(value); + bar.setFormat(format); + QCOMPARE(bar.text(), text); +} + void tst_QProgressBar::task245201_testChangeStyleAndDelete_data() { QTest::addColumn<QString>("style1_str"); diff --git a/tests/auto/qsettings/tst_qsettings.cpp b/tests/auto/qsettings/tst_qsettings.cpp index 77fef1f..5b9e9e1 100644 --- a/tests/auto/qsettings/tst_qsettings.cpp +++ b/tests/auto/qsettings/tst_qsettings.cpp @@ -716,6 +716,9 @@ void tst_QSettings::testErrorHandling() #ifdef QT_BUILD_INTERNAL #ifdef Q_OS_WIN QSKIP("Windows doesn't support most file modes, including read-only directories, so this test is moot.", SkipAll); +#elif defined(Q_OS_UNIX) + if (::getuid() == 0) + QSKIP("Running this test as root doesn't work, since file perms do not bother him", SkipAll); #else QFETCH(int, filePerms); QFETCH(int, dirPerms); @@ -724,8 +727,7 @@ void tst_QSettings::testErrorHandling() QFETCH(int, statusAfterGet); QFETCH(int, statusAfterSetAndSync); - - system(QString("chmod 700 %1 2>/dev/null").arg(settingsPath("someDir")).toLatin1()); + system(QString("chmod 700 %1 2>/dev/null").arg(settingsPath("someDir")).toLatin1()); system(QString("chmod -R u+rwx %1 2>/dev/null").arg(settingsPath("someDir")).toLatin1()); system(QString("rm -fr %1").arg(settingsPath("someDir")).toLatin1()); diff --git a/tests/auto/qsqldatabase/tst_qsqldatabase.cpp b/tests/auto/qsqldatabase/tst_qsqldatabase.cpp index 994a3d7..e1f1d3c 100644 --- a/tests/auto/qsqldatabase/tst_qsqldatabase.cpp +++ b/tests/auto/qsqldatabase/tst_qsqldatabase.cpp @@ -353,8 +353,10 @@ void tst_QSqlDatabase::dropTestTables(QSqlDatabase db) << qTableName("bug_249059"); QSqlQuery q(0, db); - if (db.driverName().startsWith("QPSQL")) + if (db.driverName().startsWith("QPSQL")) { q.exec("drop schema " + qTableName("qtestschema") + " cascade"); + q.exec("drop schema " + qTableName("qtestScHeMa") + " cascade"); + } if (testWhiteSpaceNames(db.driverName())) tableNames << db.driver()->escapeIdentifier(qTableName("qtest") + " test", QSqlDriver::TableName); @@ -558,19 +560,19 @@ void tst_QSqlDatabase::whitespaceInIdentifiers() QString tableName = qTableName("qtest") + " test"; QVERIFY(db.tables().contains(tableName, Qt::CaseInsensitive)); - QSqlRecord rec = db.record(tableName); + QSqlRecord rec = db.record(db.driver()->escapeIdentifier(tableName, QSqlDriver::TableName)); QCOMPARE(rec.count(), 1); QCOMPARE(rec.fieldName(0), QString("test test")); if(db.driverName().startsWith("QOCI")) - QCOMPARE(rec.field(0).type(), QVariant::String); + QCOMPARE(rec.field(0).type(), QVariant::Double); else QCOMPARE(rec.field(0).type(), QVariant::Int); - QSqlIndex idx = db.primaryIndex(tableName); + QSqlIndex idx = db.primaryIndex(db.driver()->escapeIdentifier(tableName, QSqlDriver::TableName)); QCOMPARE(idx.count(), 1); QCOMPARE(idx.fieldName(0), QString("test test")); if(db.driverName().startsWith("QOCI")) - QCOMPARE(idx.field(0).type(), QVariant::String); + QCOMPARE(idx.field(0).type(), QVariant::Double); else QCOMPARE(idx.field(0).type(), QVariant::Int); } else { @@ -1522,7 +1524,7 @@ void tst_QSqlDatabase::psql_escapedIdentifiers() QSqlQuery q(db); QString schemaName = qTableName("qtestScHeMa"); - QString tableName = qTableName("qtestTaBlE"); + QString tableName = qTableName("qtest"); QString field1Name = QString("fIeLdNaMe"); QString field2Name = QString("ZuLu"); @@ -1540,7 +1542,7 @@ void tst_QSqlDatabase::psql_escapedIdentifiers() rec.append(fld1); rec.append(fld2); - QVERIFY_SQL(q, exec(drv->sqlStatement(QSqlDriver::SelectStatement, schemaName + '.' + tableName, rec, false))); + QVERIFY_SQL(q, exec(drv->sqlStatement(QSqlDriver::SelectStatement, db.driver()->escapeIdentifier(schemaName, QSqlDriver::TableName) + '.' + db.driver()->escapeIdentifier(tableName, QSqlDriver::TableName), rec, false))); rec = q.record(); QCOMPARE(rec.count(), 2); @@ -2271,15 +2273,15 @@ void tst_QSqlDatabase::eventNotificationPSQL() QSqlQuery query(db); QString procedureName = qTableName("posteventProc"); - QSqlDriver *driver=db.driver(); - QVERIFY_SQL(*driver, subscribeToNotification(procedureName)); + QSqlDriver &driver=*(db.driver()); + QVERIFY_SQL(driver, subscribeToNotification(procedureName)); QSignalSpy spy(db.driver(), SIGNAL(notification(const QString&))); query.exec(QString("NOTIFY \"%1\"").arg(procedureName)); QCoreApplication::processEvents(); QCOMPARE(spy.count(), 1); QList<QVariant> arguments = spy.takeFirst(); QVERIFY(arguments.at(0).toString() == procedureName); - QVERIFY_SQL(*driver, unsubscribeFromNotification(procedureName)); + QVERIFY_SQL(driver, unsubscribeFromNotification(procedureName)); } void tst_QSqlDatabase::sqlite_bindAndFetchUInt() diff --git a/tests/auto/qsslsocket/certs/qt-test-server-cacert.pem b/tests/auto/qsslsocket/certs/qt-test-server-cacert.pem index 83adca2..25bd404 100644 --- a/tests/auto/qsslsocket/certs/qt-test-server-cacert.pem +++ b/tests/auto/qsslsocket/certs/qt-test-server-cacert.pem @@ -1,22 +1,17 @@ -----BEGIN CERTIFICATE----- -MIIDuDCCAyGgAwIBAgIJAM17QpZu2GP7MA0GCSqGSIb3DQEBBAUAMIGaMQ4wDAYD -VQQKEwVOb2tpYTEUMBIGA1UECxMLUXQgU29mdHdhcmUxIjAgBgkqhkiG9w0BCQEW -E25vYm9keUBub2RvbWFpbi5vcmcxDTALBgNVBAcTBE9zbG8xDTALBgNVBAgTBE9z -bG8xCzAJBgNVBAYTAk5PMSMwIQYDVQQDExpxdC10ZXN0LXNlcnZlci5xdC10ZXN0 -LW5ldDAeFw0wODEyMDIxNDQ3MjZaFw0xODExMzAxNDQ3MjZaMIGaMQ4wDAYDVQQK -EwVOb2tpYTEUMBIGA1UECxMLUXQgU29mdHdhcmUxIjAgBgkqhkiG9w0BCQEWE25v -Ym9keUBub2RvbWFpbi5vcmcxDTALBgNVBAcTBE9zbG8xDTALBgNVBAgTBE9zbG8x -CzAJBgNVBAYTAk5PMSMwIQYDVQQDExpxdC10ZXN0LXNlcnZlci5xdC10ZXN0LW5l -dDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAz7dQ0l6IYpwVUcvj0mQxvG80 -yzoRzYr+alh7HMmOFI6/xjBHD6zAEEmLBafY7M/xe8PGH7ds2l2BFJkz0OS+IJRX -8CdOoeFvmVyp+L84tzXk81NKnMQ3y8DiFc6aUkfnyybA0whIv/TlqNyrYeQUin+t -61dPf1vr0LAAm5HdeYECAwEAAaOCAQIwgf8wDAYDVR0TBAUwAwEB/zAdBgNVHQ4E -FgQUwhEr5xV4r0deMQd3XwFkFtwls20wgc8GA1UdIwSBxzCBxIAUwhEr5xV4r0de -MQd3XwFkFtwls22hgaCkgZ0wgZoxDjAMBgNVBAoTBU5va2lhMRQwEgYDVQQLEwtR -dCBTb2Z0d2FyZTEiMCAGCSqGSIb3DQEJARYTbm9ib2R5QG5vZG9tYWluLm9yZzEN -MAsGA1UEBxMET3NsbzENMAsGA1UECBMET3NsbzELMAkGA1UEBhMCTk8xIzAhBgNV -BAMTGnF0LXRlc3Qtc2VydmVyLnF0LXRlc3QtbmV0ggkAzXtClm7YY/swDQYJKoZI -hvcNAQEEBQADgYEAQ/8YDtHrUoEsu9j5J6GY8iuuT8jvs/W1se5vXzoITgld+vLM -RWzxz35Hwzy2n31MNmUagRyQsTNOvEtJTxPCP97eLLxxrHDAbRmY/PPcZfolfOQf -xKQYf9naBv2F9Bs0WcY9z0Dgdl27szTAN67vGddYx5HpU9UE8Or5hdFJI3I= +MIICrTCCAhYCCQCdDn5rci6VDjANBgkqhkiG9w0BAQQFADCBmjEOMAwGA1UEChMF +Tm9raWExFDASBgNVBAsTC1F0IFNvZnR3YXJlMSIwIAYJKoZIhvcNAQkBFhNub2Jv +ZHlAbm9kb21haW4ub3JnMQ0wCwYDVQQHEwRPc2xvMQ0wCwYDVQQIEwRPc2xvMQsw +CQYDVQQGEwJOTzEjMCEGA1UEAxMacXQtdGVzdC1zZXJ2ZXIucXQtdGVzdC1uZXQw +HhcNMDkwNzEwMDc0MTIzWhcNMTkwNzA4MDc0MTIzWjCBmjEOMAwGA1UEChMFTm9r +aWExFDASBgNVBAsTC1F0IFNvZnR3YXJlMSIwIAYJKoZIhvcNAQkBFhNub2JvZHlA +bm9kb21haW4ub3JnMQ0wCwYDVQQHEwRPc2xvMQ0wCwYDVQQIEwRPc2xvMQswCQYD +VQQGEwJOTzEjMCEGA1UEAxMacXQtdGVzdC1zZXJ2ZXIucXQtdGVzdC1uZXQwgZ8w +DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM2q22/WNMmn8cC+5EEYGeICySLmp9W6 +Ay6eKHr0Xxp3X3epETuPfvAuxp7rOtkS18EMUegkUj8jw0IMEcbyHKFC/rTCaYOt +93CxGBXMIChiMPAsFeYzGa/D6xzAkfcRaJRQ+Ek3CDLXPnXfo7xpABXezYcPXAJr +gsgBfWrwHdxzAgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAy7YOLCZABQy2Ygkchq1I ++TUpvMn+gLwAyW8TNErM1V4lNY2+K78RawzKx3SqM97ymCy4TD45EA3A2gmi32NI +xSKBNjFyzngUqsXBdcSasALiowlZCiJrGwlGX5qCkBlxXvJeUEbuJLPYVl5FBjXZ +6o00K4cSPCqtqUez7WSmDZU= -----END CERTIFICATE----- diff --git a/tests/auto/qsslsocket/tst_qsslsocket.cpp b/tests/auto/qsslsocket/tst_qsslsocket.cpp index 066b950..23eee29 100644 --- a/tests/auto/qsslsocket/tst_qsslsocket.cpp +++ b/tests/auto/qsslsocket/tst_qsslsocket.cpp @@ -173,6 +173,10 @@ private slots: void disconnectFromHostWhenConnecting(); void disconnectFromHostWhenConnected(); void resetProxy(); + void ignoreSslErrorsList_data(); + void ignoreSslErrorsList(); + void ignoreSslErrorsListWithSlot_data(); + void ignoreSslErrorsListWithSlot(); static void exitLoop() { @@ -194,9 +198,11 @@ protected slots: if (errors.size() == 1 && errors.first().error() == QSslError::CertificateUntrusted) socket->ignoreSslErrors(); } + void ignoreErrorListSlot(const QList<QSslError> &errors); private: QSslSocket *socket; + QList<QSslError> storedExpectedSslErrors; #endif // QT_NO_OPENSSL private: static int loopLevel; @@ -609,7 +615,7 @@ void tst_QSslSocket::connectToHostEncryptedWithVerificationPeerName() QSslSocketPtr socket = newSocket(); this->socket = socket; - socket->addCaCertificates(QLatin1String("certs/qt-test-server-cacert.pem")); + socket->addCaCertificates(QLatin1String(SRCDIR "certs/qt-test-server-cacert.pem")); #ifdef QSSLSOCKET_CERTUNTRUSTED_WORKAROUND connect(&socket, SIGNAL(sslErrors(QList<QSslError>)), this, SLOT(untrustedWorkaroundSlot(QList<QSslError>))); @@ -1417,9 +1423,7 @@ void tst_QSslSocket::verifyMode() QVERIFY(!socket.waitForEncrypted()); QList<QSslError> expectedErrors = QList<QSslError>() - << QSslError(QSslError::UnableToGetLocalIssuerCertificate, socket.peerCertificate()) - << QSslError(QSslError::CertificateUntrusted, socket.peerCertificate()) - << QSslError(QSslError::UnableToVerifyFirstCertificate, socket.peerCertificate()); + << QSslError(QSslError::SelfSignedCertificate, socket.peerCertificate()); QCOMPARE(socket.sslErrors(), expectedErrors); socket.abort(); @@ -1539,6 +1543,82 @@ void tst_QSslSocket::resetProxy() QVERIFY2(socket2.waitForConnected(10000), qPrintable(socket.errorString())); } +void tst_QSslSocket::ignoreSslErrorsList_data() +{ + QTest::addColumn<QList<QSslError> >("expectedSslErrors"); + QTest::addColumn<int>("expectedSslErrorSignalCount"); + + // construct the list of errors that we will get with the SSL handshake and that we will ignore + QList<QSslError> expectedSslErrors; + // fromPath gives us a list of certs, but it actually only contains one + QList<QSslCertificate> certs = QSslCertificate::fromPath(QLatin1String(SRCDIR "certs/qt-test-server-cacert.pem")); + QSslError rightError(QSslError::SelfSignedCertificate, certs.at(0)); + QSslError wrongError(QSslError::SelfSignedCertificate); + + + QTest::newRow("SSL-failure-empty-list") << expectedSslErrors << 1; + expectedSslErrors.append(wrongError); + QTest::newRow("SSL-failure-wrong-error") << expectedSslErrors << 1; + expectedSslErrors.append(rightError); + QTest::newRow("allErrorsInExpectedList1") << expectedSslErrors << 0; + expectedSslErrors.removeAll(wrongError); + QTest::newRow("allErrorsInExpectedList2") << expectedSslErrors << 0; + expectedSslErrors.removeAll(rightError); + QTest::newRow("SSL-failure-empty-list-again") << expectedSslErrors << 1; +} + +void tst_QSslSocket::ignoreSslErrorsList() +{ + QSslSocket socket; + connect(&socket, SIGNAL(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)), + this, SLOT(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*))); + +// this->socket = &socket; + QSslCertificate cert; + + QFETCH(QList<QSslError>, expectedSslErrors); + socket.ignoreSslErrors(expectedSslErrors); + + QFETCH(int, expectedSslErrorSignalCount); + QSignalSpy sslErrorsSpy(&socket, SIGNAL(error(QAbstractSocket::SocketError))); + + socket.connectToHostEncrypted(QtNetworkSettings::serverName(), 443); + + bool expectEncryptionSuccess = (expectedSslErrorSignalCount == 0); + QCOMPARE(socket.waitForEncrypted(10000), expectEncryptionSuccess); + QCOMPARE(sslErrorsSpy.count(), expectedSslErrorSignalCount); +} + +void tst_QSslSocket::ignoreSslErrorsListWithSlot_data() +{ + ignoreSslErrorsList_data(); +} + +// this is not a test, just a slot called in the test below +void tst_QSslSocket::ignoreErrorListSlot(const QList<QSslError> &) +{ + socket->ignoreSslErrors(storedExpectedSslErrors); +} + +void tst_QSslSocket::ignoreSslErrorsListWithSlot() +{ + QSslSocket socket; + this->socket = &socket; + + QFETCH(QList<QSslError>, expectedSslErrors); + // store the errors to ignore them later in the slot connected below + storedExpectedSslErrors = expectedSslErrors; + connect(&socket, SIGNAL(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)), + this, SLOT(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*))); + connect(&socket, SIGNAL(sslErrors(const QList<QSslError> &)), + this, SLOT(ignoreErrorListSlot(const QList<QSslError> &))); + socket.connectToHostEncrypted(QtNetworkSettings::serverName(), 443); + + QFETCH(int, expectedSslErrorSignalCount); + bool expectEncryptionSuccess = (expectedSslErrorSignalCount == 0); + QCOMPARE(socket.waitForEncrypted(10000), expectEncryptionSuccess); +} + #endif // QT_NO_OPENSSL QTEST_MAIN(tst_QSslSocket) diff --git a/tests/auto/qstate/tst_qstate.cpp b/tests/auto/qstate/tst_qstate.cpp index ab87767..78b9853 100644 --- a/tests/auto/qstate/tst_qstate.cpp +++ b/tests/auto/qstate/tst_qstate.cpp @@ -60,10 +60,10 @@ tst_QState::~tst_QState() void tst_QState::test() { QStateMachine machine; - QState *s1 = new QState(machine.rootState()); + QState *s1 = new QState(&machine); QCOMPARE(s1->machine(), &machine); - QCOMPARE(s1->parentState(), machine.rootState()); + QCOMPARE(s1->parentState(), &machine); QCOMPARE(s1->initialState(), (QState*)0); QVERIFY(s1->childStates().isEmpty()); QVERIFY(s1->transitions().isEmpty()); @@ -218,7 +218,7 @@ void tst_QState::assignProperty() QObject *object = new QObject(); object->setProperty("fooBar", 10); - QState *s1 = new QState(machine.rootState()); + QState *s1 = new QState(&machine); s1->assignProperty(object, "fooBar", 20); machine.setInitialState(s1); @@ -235,7 +235,7 @@ void tst_QState::assignPropertyTwice() QObject *object = new QObject(); object->setProperty("fooBar", 10); - QState *s1 = new QState(machine.rootState()); + QState *s1 = new QState(&machine); s1->assignProperty(object, "fooBar", 20); s1->assignProperty(object, "fooBar", 30); @@ -271,9 +271,9 @@ void tst_QState::historyInitialState() { QStateMachine machine; - QState *s1 = new QState(machine.rootState()); + QState *s1 = new QState(&machine); - QState *s2 = new QState(machine.rootState()); + QState *s2 = new QState(&machine); QHistoryState *h1 = new QHistoryState(s2); s2->setInitialState(h1); diff --git a/tests/auto/qstatemachine/tst_qstatemachine.cpp b/tests/auto/qstatemachine/tst_qstatemachine.cpp index efcb983..7f4d9f5 100644 --- a/tests/auto/qstatemachine/tst_qstatemachine.cpp +++ b/tests/auto/qstatemachine/tst_qstatemachine.cpp @@ -127,6 +127,7 @@ private slots: void targetStateWithNoParent(); void targetStateDeleted(); void transitionToRootState(); + void transitionFromRootState(); void transitionEntersParent(); void defaultErrorState(); @@ -189,6 +190,8 @@ private slots: // void overrideDefaultSourceAnimationWithSpecific(); // void overrideDefaultTargetAnimationWithSpecific(); // void overrideDefaultTargetAnimationWithSource(); + + void nestedStateMachines(); }; tst_QStateMachine::tst_QStateMachine() @@ -258,13 +261,17 @@ private: void tst_QStateMachine::transitionToRootState() { QStateMachine machine; + machine.setObjectName("machine"); QState *initialState = new QState(); + initialState->setObjectName("initial"); machine.addState(initialState); machine.setInitialState(initialState); - QTest::ignoreMessage(QtWarningMsg, "QAbstractTransition::setTargetStates: root state cannot be target of transition"); - initialState->addTransition(new EventTransition(QEvent::User, machine.rootState())); + QAbstractTransition *trans = initialState->addTransition(new EventTransition(QEvent::User, &machine)); + QVERIFY(trans != 0); + QCOMPARE(trans->sourceState(), initialState); + QCOMPARE(trans->targetState(), &machine); machine.start(); QCoreApplication::processEvents(); @@ -273,10 +280,21 @@ void tst_QStateMachine::transitionToRootState() QVERIFY(machine.configuration().contains(initialState)); machine.postEvent(new QEvent(QEvent::User)); + QTest::ignoreMessage(QtWarningMsg, "Unrecoverable error detected in running state machine: No common ancestor for targets and source of transition from state 'initial'"); QCoreApplication::processEvents(); + QVERIFY(machine.configuration().isEmpty()); + QVERIFY(!machine.isRunning()); +} - QCOMPARE(machine.configuration().count(), 1); - QVERIFY(machine.configuration().contains(initialState)); +void tst_QStateMachine::transitionFromRootState() +{ + QStateMachine machine; + QState *root = &machine; + QState *s1 = new QState(root); + EventTransition *trans = new EventTransition(QEvent::User, s1); + QCOMPARE(root->addTransition(trans), trans); + QCOMPARE(trans->sourceState(), root); + QCOMPARE(trans->targetState(), s1); } void tst_QStateMachine::transitionEntersParent() @@ -658,7 +676,7 @@ void tst_QStateMachine::errorStateIsRootState() { QStateMachine machine; QTest::ignoreMessage(QtWarningMsg, "QStateMachine::setErrorState: root state cannot be error state"); - machine.setErrorState(machine.rootState()); + machine.setErrorState(&machine); QState *initialState = new QState(); initialState->setObjectName("initialState"); @@ -759,7 +777,7 @@ void tst_QStateMachine::errorStateEntersParentFirst() void tst_QStateMachine::customErrorStateIsNull() { QStateMachine machine; - machine.rootState()->setErrorState(0); + machine.setErrorState(0); QState *initialState = new QState(); machine.addState(initialState); @@ -785,9 +803,9 @@ void tst_QStateMachine::customErrorStateIsNull() void tst_QStateMachine::clearError() { QStateMachine machine; - machine.setErrorState(new QState(machine.rootState())); // avoid warnings + machine.setErrorState(new QState(&machine)); // avoid warnings - QState *brokenState = new QState(machine.rootState()); + QState *brokenState = new QState(&machine); brokenState->setObjectName("brokenState"); machine.setInitialState(brokenState); new QState(brokenState); @@ -809,13 +827,13 @@ void tst_QStateMachine::historyStateAsInitialState() { QStateMachine machine; - QHistoryState *hs = new QHistoryState(machine.rootState()); + QHistoryState *hs = new QHistoryState(&machine); machine.setInitialState(hs); - QState *s1 = new QState(machine.rootState()); + QState *s1 = new QState(&machine); hs->setDefaultState(s1); - QState *s2 = new QState(machine.rootState()); + QState *s2 = new QState(&machine); QHistoryState *s2h = new QHistoryState(s2); s2->setInitialState(s2h); @@ -843,11 +861,11 @@ void tst_QStateMachine::historyStateHasNowhereToGo() { QStateMachine machine; - QState *initialState = new QState(machine.rootState()); + QState *initialState = new QState(&machine); machine.setInitialState(initialState); - machine.setErrorState(new QState(machine.rootState())); // avoid warnings + machine.setErrorState(new QState(&machine)); // avoid warnings - QState *brokenState = new QState(machine.rootState()); + QState *brokenState = new QState(&machine); brokenState->setObjectName("brokenState"); brokenState->setInitialState(new QState(brokenState)); @@ -877,14 +895,14 @@ void tst_QStateMachine::brokenStateIsNeverEntered() entryController->setProperty("childStateEntered", false); entryController->setProperty("errorStateEntered", false); - QState *initialState = new QState(machine.rootState()); + QState *initialState = new QState(&machine); machine.setInitialState(initialState); - QState *errorState = new QState(machine.rootState()); + QState *errorState = new QState(&machine); errorState->assignProperty(entryController, "errorStateEntered", true); machine.setErrorState(errorState); - QState *brokenState = new QState(machine.rootState()); + QState *brokenState = new QState(&machine); brokenState->assignProperty(entryController, "brokenStateEntered", true); brokenState->setObjectName("brokenState"); @@ -908,7 +926,7 @@ void tst_QStateMachine::transitionToStateNotInGraph() { QStateMachine machine; - QState *initialState = new QState(machine.rootState()); + QState *initialState = new QState(&machine); initialState->setObjectName("initialState"); machine.setInitialState(initialState); @@ -933,7 +951,7 @@ void tst_QStateMachine::customErrorStateNotInGraph() machine.setErrorState(&errorState); QCOMPARE(machine.errorState(), reinterpret_cast<QAbstractState *>(0)); - QState *initialBrokenState = new QState(machine.rootState()); + QState *initialBrokenState = new QState(&machine); initialBrokenState->setObjectName("initialBrokenState"); machine.setInitialState(initialBrokenState); new QState(initialBrokenState); @@ -999,25 +1017,22 @@ void tst_QStateMachine::restoreProperties() void tst_QStateMachine::rootState() { QStateMachine machine; - QVERIFY(machine.rootState() != 0); - QVERIFY(qobject_cast<QState*>(machine.rootState()) != 0); - QCOMPARE(qobject_cast<QState*>(machine.rootState())->parentState(), (QState*)0); - QCOMPARE(machine.rootState()->parent(), (QObject*)&machine); - QCOMPARE(machine.rootState()->machine(), &machine); + QCOMPARE(qobject_cast<QState*>(machine.parentState()), (QState*)0); + QCOMPARE(machine.machine(), (QStateMachine*)0); - QState *s1 = new QState(machine.rootState()); - QCOMPARE(s1->parentState(), machine.rootState()); + QState *s1 = new QState(&machine); + QCOMPARE(s1->parentState(), &machine); QState *s2 = new QState(); s2->setParent(&machine); - QCOMPARE(s2->parentState(), machine.rootState()); + QCOMPARE(s2->parentState(), &machine); } void tst_QStateMachine::addAndRemoveState() { #ifdef QT_BUILD_INTERNAL QStateMachine machine; - QStatePrivate *root_d = QStatePrivate::get(machine.rootState()); + QStatePrivate *root_d = QStatePrivate::get(&machine); QCOMPARE(root_d->childStates().size(), 0); QTest::ignoreMessage(QtWarningMsg, "QStateMachine::addState: cannot add null state"); @@ -1028,7 +1043,7 @@ void tst_QStateMachine::addAndRemoveState() QCOMPARE(s1->machine(), (QStateMachine*)0); machine.addState(s1); QCOMPARE(s1->machine(), &machine); - QCOMPARE(s1->parentState(), machine.rootState()); + QCOMPARE(s1->parentState(), &machine); QCOMPARE(root_d->childStates().size(), 1); QCOMPARE(root_d->childStates().at(0), (QAbstractState*)s1); @@ -1038,7 +1053,7 @@ void tst_QStateMachine::addAndRemoveState() QState *s2 = new QState(); QCOMPARE(s2->parentState(), (QState*)0); machine.addState(s2); - QCOMPARE(s2->parentState(), machine.rootState()); + QCOMPARE(s2->parentState(), &machine); QCOMPARE(root_d->childStates().size(), 2); QCOMPARE(root_d->childStates().at(0), (QAbstractState*)s1); QCOMPARE(root_d->childStates().at(1), (QAbstractState*)s2); @@ -1063,13 +1078,13 @@ void tst_QStateMachine::addAndRemoveState() { QString warning; warning.sprintf("QStateMachine::removeState: state %p's machine (%p) is different from this machine (%p)", - machine2.rootState(), &machine2, &machine); + &machine2, (void*)0, &machine); QTest::ignoreMessage(QtWarningMsg, qPrintable(warning)); - machine.removeState(machine2.rootState()); + machine.removeState(&machine2); } // ### check this behavior - machine.addState(machine2.rootState()); - QCOMPARE(machine2.rootState()->parent(), (QObject*)machine.rootState()); + machine.addState(&machine2); + QCOMPARE(machine2.parent(), (QObject*)&machine); } delete s1; @@ -1085,7 +1100,7 @@ void tst_QStateMachine::stateEntryAndExit() { QStateMachine machine; - TestState *s1 = new TestState(machine.rootState()); + TestState *s1 = new TestState(&machine); QTest::ignoreMessage(QtWarningMsg, "QState::addTransition: cannot add transition to null state"); s1->addTransition((QAbstractState*)0); QTest::ignoreMessage(QtWarningMsg, "QState::addTransition: cannot add null transition"); @@ -1093,8 +1108,8 @@ void tst_QStateMachine::stateEntryAndExit() QTest::ignoreMessage(QtWarningMsg, "QState::removeTransition: cannot remove null transition"); s1->removeTransition((QAbstractTransition*)0); - TestState *s2 = new TestState(machine.rootState()); - QFinalState *s3 = new QFinalState(machine.rootState()); + TestState *s2 = new TestState(&machine); + QFinalState *s3 = new QFinalState(&machine); TestTransition *t = new TestTransition(s2); QCOMPARE(t->machine(), (QStateMachine*)0); @@ -1143,9 +1158,9 @@ void tst_QStateMachine::stateEntryAndExit() QCOMPARE(machine.initialState(), (QAbstractState*)s1); { QString warning; - warning.sprintf("QState::setInitialState: state %p is not a child of this state (%p)", machine.rootState(), machine.rootState()); + warning.sprintf("QState::setInitialState: state %p is not a child of this state (%p)", &machine, &machine); QTest::ignoreMessage(QtWarningMsg, qPrintable(warning)); - machine.setInitialState(machine.rootState()); + machine.setInitialState(&machine); QCOMPARE(machine.initialState(), (QAbstractState*)s1); } QVERIFY(machine.configuration().isEmpty()); @@ -1192,11 +1207,11 @@ void tst_QStateMachine::stateEntryAndExit() { QStateMachine machine; - TestState *s1 = new TestState(machine.rootState()); + TestState *s1 = new TestState(&machine); TestState *s11 = new TestState(s1); TestState *s12 = new TestState(s1); - TestState *s2 = new TestState(machine.rootState()); - QFinalState *s3 = new QFinalState(machine.rootState()); + TestState *s2 = new TestState(&machine); + QFinalState *s3 = new QFinalState(&machine); s1->setInitialState(s11); TestTransition *t1 = new TestTransition(s12); s11->addTransition(t1); @@ -1255,13 +1270,13 @@ void tst_QStateMachine::stateEntryAndExit() void tst_QStateMachine::assignProperty() { QStateMachine machine; - QState *s1 = new QState(machine.rootState()); + QState *s1 = new QState(&machine); QTest::ignoreMessage(QtWarningMsg, "QState::assignProperty: cannot assign property 'foo' of null object"); s1->assignProperty(0, "foo", QVariant()); s1->assignProperty(s1, "objectName", "s1"); - QFinalState *s2 = new QFinalState(machine.rootState()); + QFinalState *s2 = new QFinalState(&machine); s1->addTransition(s2); machine.setInitialState(s1); machine.start(); @@ -1307,9 +1322,9 @@ void tst_QStateMachine::assignPropertyWithAnimation() QObject obj; obj.setProperty("foo", 321); obj.setProperty("bar", 654); - QState *s1 = new QState(machine.rootState()); + QState *s1 = new QState(&machine); s1->assignProperty(&obj, "foo", 123); - QState *s2 = new QState(machine.rootState()); + QState *s2 = new QState(&machine); s2->assignProperty(&obj, "foo", 456); s2->assignProperty(&obj, "bar", 789); QAbstractTransition *trans = s1->addTransition(s2); @@ -1329,7 +1344,7 @@ void tst_QStateMachine::assignPropertyWithAnimation() trans->addAnimation(&anim); QCOMPARE(trans->animations().size(), 1); QCOMPARE(trans->animations().at(0), (QAbstractAnimation*)&anim); - QFinalState *s3 = new QFinalState(machine.rootState()); + QFinalState *s3 = new QFinalState(&machine); s2->addTransition(s2, SIGNAL(polished()), s3); machine.setInitialState(s1); @@ -1345,9 +1360,9 @@ void tst_QStateMachine::assignPropertyWithAnimation() QObject obj; obj.setProperty("foo", 321); obj.setProperty("bar", 654); - QState *s1 = new QState(machine.rootState()); + QState *s1 = new QState(&machine); s1->assignProperty(&obj, "foo", 123); - QState *s2 = new QState(machine.rootState()); + QState *s2 = new QState(&machine); s2->assignProperty(&obj, "foo", 456); s2->assignProperty(&obj, "bar", 789); QAbstractTransition *trans = s1->addTransition(s2); @@ -1357,7 +1372,7 @@ void tst_QStateMachine::assignPropertyWithAnimation() QPropertyAnimation anim2(&obj, "bar"); anim2.setDuration(150); trans->addAnimation(&anim2); - QFinalState *s3 = new QFinalState(machine.rootState()); + QFinalState *s3 = new QFinalState(&machine); s2->addTransition(s2, SIGNAL(polished()), s3); machine.setInitialState(s1); @@ -1373,10 +1388,10 @@ void tst_QStateMachine::assignPropertyWithAnimation() QObject obj; obj.setProperty("foo", 321); obj.setProperty("bar", 654); - QState *s1 = new QState(machine.rootState()); + QState *s1 = new QState(&machine); s1->assignProperty(&obj, "foo", 123); s1->assignProperty(&obj, "bar", 321); - QState *s2 = new QState(machine.rootState()); + QState *s2 = new QState(&machine); s2->assignProperty(&obj, "foo", 456); s2->assignProperty(&obj, "bar", 654); s2->assignProperty(&obj, "baz", 789); @@ -1385,7 +1400,7 @@ void tst_QStateMachine::assignPropertyWithAnimation() group.addAnimation(new QPropertyAnimation(&obj, "foo")); group.addAnimation(new QPropertyAnimation(&obj, "bar")); trans->addAnimation(&group); - QFinalState *s3 = new QFinalState(machine.rootState()); + QFinalState *s3 = new QFinalState(&machine); s2->addTransition(s2, SIGNAL(polished()), s3); machine.setInitialState(s1); @@ -1402,7 +1417,7 @@ void tst_QStateMachine::assignPropertyWithAnimation() QObject obj; obj.setProperty("foo", 321); obj.setProperty("bar", 654); - QState *s1 = new QState(machine.rootState()); + QState *s1 = new QState(&machine); QCOMPARE(s1->childMode(), QState::ExclusiveStates); s1->setChildMode(QState::ParallelStates); QCOMPARE(s1->childMode(), QState::ParallelStates); @@ -1412,7 +1427,7 @@ void tst_QStateMachine::assignPropertyWithAnimation() s1->setObjectName("s1"); s1->assignProperty(&obj, "foo", 123); s1->assignProperty(&obj, "bar", 456); - QState *s2 = new QState(machine.rootState()); + QState *s2 = new QState(&machine); s2->setObjectName("s2"); s2->assignProperty(&obj, "foo", 321); QState *s21 = new QState(s2); @@ -1434,7 +1449,7 @@ void tst_QStateMachine::assignPropertyWithAnimation() s21->addTransition(s21, SIGNAL(polished()), s22); - QFinalState *s3 = new QFinalState(machine.rootState()); + QFinalState *s3 = new QFinalState(&machine); s22->addTransition(s2, SIGNAL(polished()), s3); machine.setInitialState(s1); @@ -1451,7 +1466,7 @@ void tst_QStateMachine::assignPropertyWithAnimation() QObject obj; obj.setProperty("foo", 321); obj.setProperty("bar", 654); - QState *group = new QState(machine.rootState()); + QState *group = new QState(&machine); QState *s1 = new QState(group); group->setInitialState(s1); s1->assignProperty(&obj, "foo", 123); @@ -1577,12 +1592,12 @@ void tst_QStateMachine::postEvent() void tst_QStateMachine::stateFinished() { QStateMachine machine; - QState *s1 = new QState(machine.rootState()); + QState *s1 = new QState(&machine); QState *s1_1 = new QState(s1); QFinalState *s1_2 = new QFinalState(s1); s1_1->addTransition(s1_2); s1->setInitialState(s1_1); - QFinalState *s2 = new QFinalState(machine.rootState()); + QFinalState *s2 = new QFinalState(&machine); s1->addTransition(s1, SIGNAL(finished()), s2); machine.setInitialState(s1); QSignalSpy finishedSpy(&machine, SIGNAL(finished())); @@ -1632,7 +1647,7 @@ void tst_QStateMachine::parallelStates() void tst_QStateMachine::parallelRootState() { QStateMachine machine; - QState *root = machine.rootState(); + QState *root = &machine; QCOMPARE(root->childMode(), QState::ExclusiveStates); root->setChildMode(QState::ParallelStates); QCOMPARE(root->childMode(), QState::ParallelStates); @@ -1655,7 +1670,7 @@ void tst_QStateMachine::parallelRootState() void tst_QStateMachine::allSourceToTargetConfigurations() { QStateMachine machine; - QState *s0 = new QState(machine.rootState()); + QState *s0 = new QState(&machine); s0->setObjectName("s0"); QState *s1 = new QState(s0); s1->setObjectName("s1"); @@ -1667,7 +1682,7 @@ void tst_QStateMachine::allSourceToTargetConfigurations() s21->setObjectName("s21"); QState *s211 = new QState(s21); s211->setObjectName("s211"); - QFinalState *f = new QFinalState(machine.rootState()); + QFinalState *f = new QFinalState(&machine); f->setObjectName("f"); s0->setInitialState(s1); @@ -1741,7 +1756,7 @@ void tst_QStateMachine::signalTransitions() { { QStateMachine machine; - QState *s0 = new QState(machine.rootState()); + QState *s0 = new QState(&machine); QTest::ignoreMessage(QtWarningMsg, "QState::addTransition: sender cannot be null"); QCOMPARE(s0->addTransition(0, SIGNAL(noSuchSignal()), 0), (QSignalTransition*)0); @@ -1752,7 +1767,7 @@ void tst_QStateMachine::signalTransitions() QTest::ignoreMessage(QtWarningMsg, "QState::addTransition: cannot add transition to null state"); QCOMPARE(s0->addTransition(&emitter, SIGNAL(signalWithNoArg()), 0), (QSignalTransition*)0); - QFinalState *s1 = new QFinalState(machine.rootState()); + QFinalState *s1 = new QFinalState(&machine); QTest::ignoreMessage(QtWarningMsg, "QState::addTransition: no such signal SignalEmitter::noSuchSignal()"); QCOMPARE(s0->addTransition(&emitter, SIGNAL(noSuchSignal()), s1), (QSignalTransition*)0); @@ -1803,8 +1818,8 @@ void tst_QStateMachine::signalTransitions() } { QStateMachine machine; - QState *s0 = new QState(machine.rootState()); - QFinalState *s1 = new QFinalState(machine.rootState()); + QState *s0 = new QState(&machine); + QFinalState *s1 = new QFinalState(&machine); SignalEmitter emitter; QSignalTransition *trans = s0->addTransition(&emitter, "signalWithNoArg()", s1); QVERIFY(trans != 0); @@ -1831,8 +1846,8 @@ void tst_QStateMachine::signalTransitions() } { QStateMachine machine; - QState *s0 = new QState(machine.rootState()); - QFinalState *s1 = new QFinalState(machine.rootState()); + QState *s0 = new QState(&machine); + QFinalState *s1 = new QFinalState(&machine); SignalEmitter emitter; TestSignalTransition *trans = new TestSignalTransition(&emitter, SIGNAL(signalWithIntArg(int)), s1); s0->addTransition(trans); @@ -1850,8 +1865,8 @@ void tst_QStateMachine::signalTransitions() } { QStateMachine machine; - QState *s0 = new QState(machine.rootState()); - QFinalState *s1 = new QFinalState(machine.rootState()); + QState *s0 = new QState(&machine); + QFinalState *s1 = new QFinalState(&machine); SignalEmitter emitter; TestSignalTransition *trans = new TestSignalTransition(&emitter, SIGNAL(signalWithStringArg(QString)), s1); s0->addTransition(trans); @@ -1870,8 +1885,8 @@ void tst_QStateMachine::signalTransitions() } { QStateMachine machine; - QState *s0 = new QState(machine.rootState()); - QFinalState *s1 = new QFinalState(machine.rootState()); + QState *s0 = new QState(&machine); + QFinalState *s1 = new QFinalState(&machine); TestSignalTransition *trans = new TestSignalTransition(); QCOMPARE(trans->senderObject(), (QObject*)0); @@ -1898,8 +1913,8 @@ void tst_QStateMachine::signalTransitions() { QStateMachine machine; SignalEmitter emitter; - QState *s0 = new QState(machine.rootState()); - QState *s1 = new QState(machine.rootState()); + QState *s0 = new QState(&machine); + QState *s1 = new QState(&machine); QSignalTransition *t0 = s0->addTransition(&emitter, SIGNAL(signalWithNoArg()), s1); QSignalTransition *t1 = s1->addTransition(&emitter, SIGNAL(signalWithNoArg()), s0); @@ -1943,12 +1958,12 @@ void tst_QStateMachine::signalTransitions() { QStateMachine machine; SignalEmitter emitter; - QState *s0 = new QState(machine.rootState()); - QFinalState *s1 = new QFinalState(machine.rootState()); + QState *s0 = new QState(&machine); + QFinalState *s1 = new QFinalState(&machine); s0->addTransition(&emitter, SIGNAL(signalWithNoArg()), s1); - QFinalState *s2 = new QFinalState(machine.rootState()); + QFinalState *s2 = new QFinalState(&machine); s0->addTransition(&emitter, SIGNAL(signalWithIntArg(int)), s2); - QFinalState *s3 = new QFinalState(machine.rootState()); + QFinalState *s3 = new QFinalState(&machine); s0->addTransition(&emitter, SIGNAL(signalWithStringArg(QString)), s3); QSignalSpy startedSpy(&machine, SIGNAL(started())); @@ -1980,8 +1995,8 @@ void tst_QStateMachine::signalTransitions() { QStateMachine machine; SignalEmitter emitter; - QState *s0 = new QState(machine.rootState()); - QFinalState *s1 = new QFinalState(machine.rootState()); + QState *s0 = new QState(&machine); + QFinalState *s1 = new QFinalState(&machine); QSignalTransition *t0 = s0->addTransition(&emitter, SIGNAL( signalWithNoArg( ) ), s1); QVERIFY(t0 != 0); QCOMPARE(t0->signal(), QByteArray(SIGNAL( signalWithNoArg( ) ))); @@ -2008,8 +2023,8 @@ void tst_QStateMachine::eventTransitions() QPushButton button; for (int x = 0; x < 2; ++x) { QStateMachine machine; - QState *s0 = new QState(machine.rootState()); - QFinalState *s1 = new QFinalState(machine.rootState()); + QState *s0 = new QState(&machine); + QFinalState *s1 = new QFinalState(&machine); QMouseEventTransition *trans; if (x == 0) { @@ -2057,8 +2072,8 @@ void tst_QStateMachine::eventTransitions() } for (int x = 0; x < 3; ++x) { QStateMachine machine; - QState *s0 = new QState(machine.rootState()); - QFinalState *s1 = new QFinalState(machine.rootState()); + QState *s0 = new QState(&machine); + QFinalState *s1 = new QFinalState(&machine); QEventTransition *trans; if (x == 0) { @@ -2092,8 +2107,8 @@ void tst_QStateMachine::eventTransitions() } { QStateMachine machine; - QState *s0 = new QState(machine.rootState()); - QFinalState *s1 = new QFinalState(machine.rootState()); + QState *s0 = new QState(&machine); + QFinalState *s1 = new QFinalState(&machine); QMouseEventTransition *trans = new QMouseEventTransition(); QCOMPARE(trans->eventObject(), (QObject*)0); @@ -2118,8 +2133,8 @@ void tst_QStateMachine::eventTransitions() { QStateMachine machine; - QState *s0 = new QState(machine.rootState()); - QFinalState *s1 = new QFinalState(machine.rootState()); + QState *s0 = new QState(&machine); + QFinalState *s1 = new QFinalState(&machine); QKeyEventTransition *trans = new QKeyEventTransition(&button, QEvent::KeyPress, Qt::Key_A); QCOMPARE(trans->eventType(), QEvent::KeyPress); @@ -2139,8 +2154,8 @@ void tst_QStateMachine::eventTransitions() } { QStateMachine machine; - QState *s0 = new QState(machine.rootState()); - QFinalState *s1 = new QFinalState(machine.rootState()); + QState *s0 = new QState(&machine); + QFinalState *s1 = new QFinalState(&machine); QKeyEventTransition *trans = new QKeyEventTransition(); QCOMPARE(trans->eventObject(), (QObject*)0); @@ -2165,8 +2180,8 @@ void tst_QStateMachine::eventTransitions() // Multiple transitions for same (object,event) { QStateMachine machine; - QState *s0 = new QState(machine.rootState()); - QState *s1 = new QState(machine.rootState()); + QState *s0 = new QState(&machine); + QState *s1 = new QState(&machine); QEventTransition *t0 = new QEventTransition(&button, QEvent::MouseButtonPress); t0->setTargetState(s1); s0->addTransition(t0); @@ -2213,9 +2228,9 @@ void tst_QStateMachine::eventTransitions() // multiple event transitions from same source { QStateMachine machine; - QState *s0 = new QState(machine.rootState()); - QFinalState *s1 = new QFinalState(machine.rootState()); - QFinalState *s2 = new QFinalState(machine.rootState()); + QState *s0 = new QState(&machine); + QFinalState *s1 = new QFinalState(&machine); + QFinalState *s2 = new QFinalState(&machine); QEventTransition *t0 = new QEventTransition(&button, QEvent::MouseButtonPress); t0->setTargetState(s1); s0->addTransition(t0); @@ -2244,8 +2259,8 @@ void tst_QStateMachine::eventTransitions() // custom event { QStateMachine machine; - QState *s0 = new QState(machine.rootState()); - QFinalState *s1 = new QFinalState(machine.rootState()); + QState *s0 = new QState(&machine); + QFinalState *s1 = new QFinalState(&machine); QEventTransition *trans = new QEventTransition(&button, QEvent::Type(QEvent::User+1)); trans->setTargetState(s1); @@ -2263,7 +2278,7 @@ void tst_QStateMachine::historyStates() { for (int x = 0; x < 2; ++x) { QStateMachine machine; - QState *root = machine.rootState(); + QState *root = &machine; QState *s0 = new QState(root); QState *s00 = new QState(s0); QState *s01 = new QState(s0); @@ -2347,7 +2362,7 @@ void tst_QStateMachine::startAndStop() QCOMPARE(stoppedSpy.count(), 0); QCOMPARE(finishedSpy.count(), 0); - QState *s1 = new QState(machine.rootState()); + QState *s1 = new QState(&machine); machine.setInitialState(s1); machine.start(); QTRY_COMPARE(machine.isRunning(), true); @@ -2378,7 +2393,7 @@ void tst_QStateMachine::startAndStop() void tst_QStateMachine::targetStateWithNoParent() { QStateMachine machine; - QState *s1 = new QState(machine.rootState()); + QState *s1 = new QState(&machine); s1->setObjectName("s1"); QState s2; s1->addTransition(&s2); @@ -2398,9 +2413,9 @@ void tst_QStateMachine::targetStateWithNoParent() void tst_QStateMachine::targetStateDeleted() { QStateMachine machine; - QState *s1 = new QState(machine.rootState()); + QState *s1 = new QState(&machine); s1->setObjectName("s1"); - QState *s2 = new QState(machine.rootState()); + QState *s2 = new QState(&machine); QAbstractTransition *trans = s1->addTransition(s2); delete s2; QCOMPARE(trans->targetState(), (QAbstractState*)0); @@ -2415,13 +2430,13 @@ void tst_QStateMachine::defaultGlobalRestorePolicy() propertyHolder->setProperty("a", 1); propertyHolder->setProperty("b", 2); - QState *s1 = new QState(machine.rootState()); + QState *s1 = new QState(&machine); s1->assignProperty(propertyHolder, "a", 3); - QState *s2 = new QState(machine.rootState()); + QState *s2 = new QState(&machine); s2->assignProperty(propertyHolder, "b", 4); - QState *s3 = new QState(machine.rootState()); + QState *s3 = new QState(&machine); s1->addTransition(new EventTransition(QEvent::User, s2)); s2->addTransition(new EventTransition(QEvent::User, s3)); @@ -2450,11 +2465,12 @@ void tst_QStateMachine::noInitialStateForInitialState() { QStateMachine machine; - QState *initialState = new QState(machine.rootState()); + QState *initialState = new QState(&machine); initialState->setObjectName("initialState"); machine.setInitialState(initialState); QState *childState = new QState(initialState); + (void)childState; QTest::ignoreMessage(QtWarningMsg, "Unrecoverable error detected in running state machine: " "Missing initial state in compound state 'initialState'"); @@ -2474,7 +2490,7 @@ void tst_QStateMachine::restorePolicyNotInherited() propertyHolder->setProperty("a", 1); propertyHolder->setProperty("b", 2); - QState *parentState = new QState(machine.rootState()); + QState *parentState = new QState(&machine); parentState->setObjectName("parentState"); parentState->setRestorePolicy(QState::RestoreProperties); @@ -2523,13 +2539,13 @@ void tst_QStateMachine::globalRestorePolicySetToDoNotRestore() propertyHolder->setProperty("a", 1); propertyHolder->setProperty("b", 2); - QState *s1 = new QState(machine.rootState()); + QState *s1 = new QState(&machine); s1->assignProperty(propertyHolder, "a", 3); - QState *s2 = new QState(machine.rootState()); + QState *s2 = new QState(&machine); s2->assignProperty(propertyHolder, "b", 4); - QState *s3 = new QState(machine.rootState()); + QState *s3 = new QState(&machine); s1->addTransition(new EventTransition(QEvent::User, s2)); s2->addTransition(new EventTransition(QEvent::User, s3)); @@ -2633,7 +2649,7 @@ void tst_QStateMachine::restorePolicyOnChildState() propertyHolder->setProperty("a", 1); propertyHolder->setProperty("b", 2); - QState *parentState = new QState(machine.rootState()); + QState *parentState = new QState(&machine); parentState->setObjectName("parentState"); QState *s1 = new QState(parentState); @@ -2684,13 +2700,13 @@ void tst_QStateMachine::globalRestorePolicySetToRestore() propertyHolder->setProperty("a", 1); propertyHolder->setProperty("b", 2); - QState *s1 = new QState(machine.rootState()); + QState *s1 = new QState(&machine); s1->assignProperty(propertyHolder, "a", 3); - QState *s2 = new QState(machine.rootState()); + QState *s2 = new QState(&machine); s2->assignProperty(propertyHolder, "b", 4); - QState *s3 = new QState(machine.rootState()); + QState *s3 = new QState(&machine); s1->addTransition(new EventTransition(QEvent::User, s2)); s2->addTransition(new EventTransition(QEvent::User, s3)); @@ -2723,19 +2739,19 @@ void tst_QStateMachine::mixedRestoreProperties() QObject *propertyHolder = new QObject(); propertyHolder->setProperty("a", 1); - QState *s1 = new QState(machine.rootState()); + QState *s1 = new QState(&machine); s1->setRestorePolicy(QState::RestoreProperties); s1->assignProperty(propertyHolder, "a", 3); - QState *s2 = new QState(machine.rootState()); + QState *s2 = new QState(&machine); s2->assignProperty(propertyHolder, "a", 4); - QState *s3 = new QState(machine.rootState()); + QState *s3 = new QState(&machine); - QState *s4 = new QState(machine.rootState()); + QState *s4 = new QState(&machine); s4->assignProperty(propertyHolder, "a", 5); - QState *s5 = new QState(machine.rootState()); + QState *s5 = new QState(&machine); s5->setRestorePolicy(QState::RestoreProperties); s5->assignProperty(propertyHolder, "a", 6); @@ -2787,8 +2803,8 @@ void tst_QStateMachine::mixedRestoreProperties() void tst_QStateMachine::transitionWithParent() { QStateMachine machine; - QState *s1 = new QState(machine.rootState()); - QState *s2 = new QState(machine.rootState()); + QState *s1 = new QState(&machine); + QState *s2 = new QState(&machine); EventTransition *trans = new EventTransition(QEvent::User, s2, s1); QCOMPARE(trans->sourceState(), s1); QCOMPARE(trans->targetState(), (QAbstractState*)s2); @@ -2803,8 +2819,8 @@ void tst_QStateMachine::simpleAnimation() QObject *object = new QObject(&machine); object->setProperty("fooBar", 1.0); - QState *s1 = new QState(machine.rootState()); - QState *s2 = new QState(machine.rootState()); + QState *s1 = new QState(&machine); + QState *s2 = new QState(&machine); s2->assignProperty(object, "fooBar", 2.0); EventTransition *et = new EventTransition(QEvent::User, s2); @@ -2812,7 +2828,7 @@ void tst_QStateMachine::simpleAnimation() et->addAnimation(animation); s1->addTransition(et); - QState *s3 = new QState(machine.rootState()); + QState *s3 = new QState(&machine); s2->addTransition(animation, SIGNAL(finished()), s3); QObject::connect(s3, SIGNAL(entered()), QCoreApplication::instance(), SLOT(quit())); @@ -2847,8 +2863,8 @@ void tst_QStateMachine::twoAnimations() object->setProperty("foo", 1.0); object->setProperty("bar", 3.0); - QState *s1 = new QState(machine.rootState()); - QState *s2 = new QState(machine.rootState()); + QState *s1 = new QState(&machine); + QState *s2 = new QState(&machine); s2->assignProperty(object, "foo", 2.0); s2->assignProperty(object, "bar", 10.0); @@ -2865,7 +2881,7 @@ void tst_QStateMachine::twoAnimations() et->addAnimation(animationBar); s1->addTransition(et); - QState *s3 = new QState(machine.rootState()); + QState *s3 = new QState(&machine); QObject::connect(s3, SIGNAL(entered()), QCoreApplication::instance(), SLOT(quit())); s2->addTransition(s2, SIGNAL(polished()), s3); @@ -2890,23 +2906,23 @@ void tst_QStateMachine::twoAnimatedTransitions() QObject *object = new QObject(&machine); object->setProperty("foo", 1.0); - QState *s1 = new QState(machine.rootState()); + QState *s1 = new QState(&machine); - QState *s2 = new QState(machine.rootState()); + QState *s2 = new QState(&machine); s2->assignProperty(object, "foo", 5.0); QPropertyAnimation *fooAnimation = new QPropertyAnimation(object, "foo", s2); s1->addTransition(new EventTransition(QEvent::User, s2))->addAnimation(fooAnimation); - QState *s3 = new QState(machine.rootState()); + QState *s3 = new QState(&machine); QObject::connect(s3, SIGNAL(entered()), QCoreApplication::instance(), SLOT(quit())); s2->addTransition(fooAnimation, SIGNAL(finished()), s3); - QState *s4 = new QState(machine.rootState()); + QState *s4 = new QState(&machine); s4->assignProperty(object, "foo", 2.0); QPropertyAnimation *fooAnimation2 = new QPropertyAnimation(object, "foo", s4); s3->addTransition(new EventTransition(QEvent::User, s4))->addAnimation(fooAnimation2); - QState *s5 = new QState(machine.rootState()); + QState *s5 = new QState(&machine); QObject::connect(s5, SIGNAL(entered()), QApplication::instance(), SLOT(quit())); s4->addTransition(fooAnimation2, SIGNAL(finished()), s5); @@ -2934,22 +2950,22 @@ void tst_QStateMachine::playAnimationTwice() QObject *object = new QObject(&machine); object->setProperty("foo", 1.0); - QState *s1 = new QState(machine.rootState()); + QState *s1 = new QState(&machine); - QState *s2 = new QState(machine.rootState()); + QState *s2 = new QState(&machine); s2->assignProperty(object, "foo", 5.0); QPropertyAnimation *fooAnimation = new QPropertyAnimation(object, "foo", s2); s1->addTransition(new EventTransition(QEvent::User, s2))->addAnimation(fooAnimation); - QState *s3 = new QState(machine.rootState()); + QState *s3 = new QState(&machine); QObject::connect(s3, SIGNAL(entered()), QCoreApplication::instance(), SLOT(quit())); s2->addTransition(fooAnimation, SIGNAL(finished()), s3); - QState *s4 = new QState(machine.rootState()); + QState *s4 = new QState(&machine); s4->assignProperty(object, "foo", 2.0); s3->addTransition(new EventTransition(QEvent::User, s4))->addAnimation(fooAnimation); - QState *s5 = new QState(machine.rootState()); + QState *s5 = new QState(&machine); QObject::connect(s5, SIGNAL(entered()), QApplication::instance(), SLOT(quit())); s4->addTransition(fooAnimation, SIGNAL(finished()), s5); @@ -2980,8 +2996,8 @@ void tst_QStateMachine::nestedTargetStateForAnimation() SlotCalledCounter counter; - QState *s1 = new QState(machine.rootState()); - QState *s2 = new QState(machine.rootState()); + QState *s1 = new QState(&machine); + QState *s2 = new QState(&machine); s2->assignProperty(object, "foo", 2.0); @@ -3008,7 +3024,7 @@ void tst_QStateMachine::nestedTargetStateForAnimation() connect(animation, SIGNAL(finished()), &counter, SLOT(slot())); at->addAnimation(animation); - QState *s3 = new QState(machine.rootState()); + QState *s3 = new QState(&machine); s2->addTransition(s2Child, SIGNAL(polished()), s3); QObject::connect(s3, SIGNAL(entered()), QCoreApplication::instance(), SLOT(quit())); @@ -3036,13 +3052,13 @@ void tst_QStateMachine::animatedGlobalRestoreProperty() SlotCalledCounter counter; - QState *s1 = new QState(machine.rootState()); - QState *s2 = new QState(machine.rootState()); + QState *s1 = new QState(&machine); + QState *s2 = new QState(&machine); s2->assignProperty(object, "foo", 2.0); - QState *s3 = new QState(machine.rootState()); + QState *s3 = new QState(&machine); - QState *s4 = new QState(machine.rootState()); + QState *s4 = new QState(&machine); QObject::connect(s4, SIGNAL(entered()), QCoreApplication::instance(), SLOT(quit())); QAbstractTransition *at = s1->addTransition(new EventTransition(QEvent::User, s2)); @@ -3080,16 +3096,16 @@ void tst_QStateMachine::specificTargetValueOfAnimation() QObject *object = new QObject(&machine); object->setProperty("foo", 1.0); - QState *s1 = new QState(machine.rootState()); + QState *s1 = new QState(&machine); - QState *s2 = new QState(machine.rootState()); + QState *s2 = new QState(&machine); s2->assignProperty(object, "foo", 2.0); QPropertyAnimation *anim = new QPropertyAnimation(object, "foo"); anim->setEndValue(10.0); s1->addTransition(new EventTransition(QEvent::User, s2))->addAnimation(anim); - QState *s3 = new QState(machine.rootState()); + QState *s3 = new QState(&machine); QObject::connect(s3, SIGNAL(entered()), QCoreApplication::instance(), SLOT(quit())); s2->addTransition(anim, SIGNAL(finished()), s3); @@ -3103,6 +3119,8 @@ void tst_QStateMachine::specificTargetValueOfAnimation() QVERIFY(machine.configuration().contains(s3)); QCOMPARE(object->property("foo").toDouble(), 2.0); QCOMPARE(anim->endValue().toDouble(), 10.0); + + delete anim; } void tst_QStateMachine::addDefaultAnimation() @@ -3112,12 +3130,12 @@ void tst_QStateMachine::addDefaultAnimation() QObject *object = new QObject(); object->setProperty("foo", 1.0); - QState *s1 = new QState(machine.rootState()); + QState *s1 = new QState(&machine); - QState *s2 = new QState(machine.rootState()); + QState *s2 = new QState(&machine); s2->assignProperty(object, "foo", 2.0); - QState *s3 = new QState(machine.rootState()); + QState *s3 = new QState(&machine); QObject::connect(s3, SIGNAL(entered()), QCoreApplication::instance(), SLOT(quit())); s1->addTransition(new EventTransition(QEvent::User, s2)); @@ -3135,6 +3153,8 @@ void tst_QStateMachine::addDefaultAnimation() QVERIFY(machine.configuration().contains(s3)); QCOMPARE(object->property("foo").toDouble(), 2.0); + + delete object; } void tst_QStateMachine::addDefaultAnimationWithUnusedAnimation() @@ -3147,12 +3167,12 @@ void tst_QStateMachine::addDefaultAnimationWithUnusedAnimation() SlotCalledCounter counter; - QState *s1 = new QState(machine.rootState()); + QState *s1 = new QState(&machine); - QState *s2 = new QState(machine.rootState()); + QState *s2 = new QState(&machine); s2->assignProperty(object, "foo", 2.0); - QState *s3 = new QState(machine.rootState()); + QState *s3 = new QState(&machine); QObject::connect(s3, SIGNAL(entered()), QCoreApplication::instance(), SLOT(quit())); s1->addTransition(new EventTransition(QEvent::User, s2)); @@ -3214,6 +3234,9 @@ void tst_QStateMachine::removeDefaultAnimation() machine.removeDefaultAnimation(anim2); QCOMPARE(machine.defaultAnimations().size(), 0); + + delete anim; + delete anim2; } void tst_QStateMachine::overrideDefaultAnimationWithSpecific() @@ -3225,13 +3248,13 @@ void tst_QStateMachine::overrideDefaultAnimationWithSpecific() SlotCalledCounter counter; - QState *s1 = new QState(machine.rootState()); + QState *s1 = new QState(&machine); machine.setInitialState(s1); - QState *s2 = new QState(machine.rootState()); + QState *s2 = new QState(&machine); s2->assignProperty(object, "foo", 2.0); - QState *s3 = new QState(machine.rootState()); + QState *s3 = new QState(&machine); QObject::connect(s3, SIGNAL(entered()), QCoreApplication::instance(), SLOT(quit())); QAbstractTransition *at = s1->addTransition(new EventTransition(QEvent::User, s2)); @@ -3254,6 +3277,9 @@ void tst_QStateMachine::overrideDefaultAnimationWithSpecific() QVERIFY(machine.configuration().contains(s3)); QCOMPARE(counter.counter, 2); // specific animation started and stopped + + delete defaultAnimation; + delete moreSpecificAnimation; } /* @@ -3264,12 +3290,12 @@ void tst_QStateMachine::addDefaultAnimationForSource() QObject *object = new QObject(); object->setProperty("foo", 1.0); - QState *s1 = new QState(machine.rootState()); + QState *s1 = new QState(&machine); - QState *s2 = new QState(machine.rootState()); + QState *s2 = new QState(&machine); s2->assignProperty(object, "foo", 2.0); - QState *s3 = new QState(machine.rootState()); + QState *s3 = new QState(&machine); QObject::connect(s3, SIGNAL(entered()), QCoreApplication::instance(), SLOT(quit())); s1->addTransition(new EventTransition(QEvent::User, s2)); @@ -3296,12 +3322,12 @@ void tst_QStateMachine::addDefaultAnimationForTarget() QObject *object = new QObject(); object->setProperty("foo", 1.0); - QState *s1 = new QState(machine.rootState()); + QState *s1 = new QState(&machine); - QState *s2 = new QState(machine.rootState()); + QState *s2 = new QState(&machine); s2->assignProperty(object, "foo", 2.0); - QState *s3 = new QState(machine.rootState()); + QState *s3 = new QState(&machine); QObject::connect(s3, SIGNAL(entered()), QCoreApplication::instance(), SLOT(quit())); s1->addTransition(new EventTransition(QEvent::User, s2)); @@ -3325,88 +3351,88 @@ void tst_QStateMachine::removeDefaultAnimationForSource() { QStateMachine machine; - QCOMPARE(machine.defaultAnimationsForSourceState(machine.rootState()).size(), 0); + QCOMPARE(machine.defaultAnimationsForSourceState(&machine).size(), 0); QPropertyAnimation *anim = new QPropertyAnimation(this, "foo"); - machine.addDefaultAnimationForSourceState(machine.rootState(), anim); + machine.addDefaultAnimationForSourceState(&machine, anim); QCOMPARE(machine.defaultAnimations().size(), 0); - QCOMPARE(machine.defaultAnimationsForTargetState(machine.rootState()).size(), 0); - QCOMPARE(machine.defaultAnimationsForSourceState(machine.rootState()).size(), 1); - QVERIFY(machine.defaultAnimationsForSourceState(machine.rootState()).contains(anim)); + QCOMPARE(machine.defaultAnimationsForTargetState(&machine).size(), 0); + QCOMPARE(machine.defaultAnimationsForSourceState(&machine).size(), 1); + QVERIFY(machine.defaultAnimationsForSourceState(&machine).contains(anim)); - machine.removeDefaultAnimationForTargetState(machine.rootState(), anim); + machine.removeDefaultAnimationForTargetState(&machine, anim); QCOMPARE(machine.defaultAnimations().size(), 0); - QCOMPARE(machine.defaultAnimationsForTargetState(machine.rootState()).size(), 0); - QCOMPARE(machine.defaultAnimationsForSourceState(machine.rootState()).size(), 1); - QVERIFY(machine.defaultAnimationsForSourceState(machine.rootState()).contains(anim)); + QCOMPARE(machine.defaultAnimationsForTargetState(&machine).size(), 0); + QCOMPARE(machine.defaultAnimationsForSourceState(&machine).size(), 1); + QVERIFY(machine.defaultAnimationsForSourceState(&machine).contains(anim)); - machine.removeDefaultAnimationForSourceState(machine.rootState(), anim); + machine.removeDefaultAnimationForSourceState(&machine, anim); - QCOMPARE(machine.defaultAnimationsForSourceState(machine.rootState()).size(), 0); + QCOMPARE(machine.defaultAnimationsForSourceState(&machine).size(), 0); - machine.addDefaultAnimationForSourceState(machine.rootState(), anim); + machine.addDefaultAnimationForSourceState(&machine, anim); QPropertyAnimation *anim2 = new QPropertyAnimation(this, "foo"); - machine.addDefaultAnimationForSourceState(machine.rootState(), anim2); + machine.addDefaultAnimationForSourceState(&machine, anim2); - QCOMPARE(machine.defaultAnimationsForSourceState(machine.rootState()).size(), 2); - QVERIFY(machine.defaultAnimationsForSourceState(machine.rootState()).contains(anim)); - QVERIFY(machine.defaultAnimationsForSourceState(machine.rootState()).contains(anim2)); + QCOMPARE(machine.defaultAnimationsForSourceState(&machine).size(), 2); + QVERIFY(machine.defaultAnimationsForSourceState(&machine).contains(anim)); + QVERIFY(machine.defaultAnimationsForSourceState(&machine).contains(anim2)); - machine.removeDefaultAnimationForSourceState(machine.rootState(), anim); + machine.removeDefaultAnimationForSourceState(&machine, anim); - QCOMPARE(machine.defaultAnimationsForSourceState(machine.rootState()).size(), 1); - QVERIFY(machine.defaultAnimationsForSourceState(machine.rootState()).contains(anim2)); + QCOMPARE(machine.defaultAnimationsForSourceState(&machine).size(), 1); + QVERIFY(machine.defaultAnimationsForSourceState(&machine).contains(anim2)); - machine.removeDefaultAnimationForSourceState(machine.rootState(), anim2); - QCOMPARE(machine.defaultAnimationsForSourceState(machine.rootState()).size(), 0); + machine.removeDefaultAnimationForSourceState(&machine, anim2); + QCOMPARE(machine.defaultAnimationsForSourceState(&machine).size(), 0); } void tst_QStateMachine::removeDefaultAnimationForTarget() { QStateMachine machine; - QCOMPARE(machine.defaultAnimationsForTargetState(machine.rootState()).size(), 0); + QCOMPARE(machine.defaultAnimationsForTargetState(&machine).size(), 0); QPropertyAnimation *anim = new QPropertyAnimation(this, "foo"); - machine.addDefaultAnimationForTargetState(machine.rootState(), anim); + machine.addDefaultAnimationForTargetState(&machine, anim); QCOMPARE(machine.defaultAnimations().size(), 0); - QCOMPARE(machine.defaultAnimationsForSourceState(machine.rootState()).size(), 0); - QCOMPARE(machine.defaultAnimationsForTargetState(machine.rootState()).size(), 1); - QVERIFY(machine.defaultAnimationsForTargetState(machine.rootState()).contains(anim)); + QCOMPARE(machine.defaultAnimationsForSourceState(&machine).size(), 0); + QCOMPARE(machine.defaultAnimationsForTargetState(&machine).size(), 1); + QVERIFY(machine.defaultAnimationsForTargetState(&machine).contains(anim)); - machine.removeDefaultAnimationForSourceState(machine.rootState(), anim); + machine.removeDefaultAnimationForSourceState(&machine, anim); QCOMPARE(machine.defaultAnimations().size(), 0); - QCOMPARE(machine.defaultAnimationsForSourceState(machine.rootState()).size(), 0); - QCOMPARE(machine.defaultAnimationsForTargetState(machine.rootState()).size(), 1); - QVERIFY(machine.defaultAnimationsForTargetState(machine.rootState()).contains(anim)); + QCOMPARE(machine.defaultAnimationsForSourceState(&machine).size(), 0); + QCOMPARE(machine.defaultAnimationsForTargetState(&machine).size(), 1); + QVERIFY(machine.defaultAnimationsForTargetState(&machine).contains(anim)); - machine.removeDefaultAnimationForTargetState(machine.rootState(), anim); + machine.removeDefaultAnimationForTargetState(&machine, anim); - QCOMPARE(machine.defaultAnimationsForTargetState(machine.rootState()).size(), 0); + QCOMPARE(machine.defaultAnimationsForTargetState(&machine).size(), 0); - machine.addDefaultAnimationForTargetState(machine.rootState(), anim); + machine.addDefaultAnimationForTargetState(&machine, anim); QPropertyAnimation *anim2 = new QPropertyAnimation(this, "foo"); - machine.addDefaultAnimationForTargetState(machine.rootState(), anim2); + machine.addDefaultAnimationForTargetState(&machine, anim2); - QCOMPARE(machine.defaultAnimationsForTargetState(machine.rootState()).size(), 2); - QVERIFY(machine.defaultAnimationsForTargetState(machine.rootState()).contains(anim)); - QVERIFY(machine.defaultAnimationsForTargetState(machine.rootState()).contains(anim2)); + QCOMPARE(machine.defaultAnimationsForTargetState(&machine).size(), 2); + QVERIFY(machine.defaultAnimationsForTargetState(&machine).contains(anim)); + QVERIFY(machine.defaultAnimationsForTargetState(&machine).contains(anim2)); - machine.removeDefaultAnimationForTargetState(machine.rootState(), anim); + machine.removeDefaultAnimationForTargetState(&machine, anim); - QCOMPARE(machine.defaultAnimationsForTargetState(machine.rootState()).size(), 1); - QVERIFY(machine.defaultAnimationsForTargetState(machine.rootState()).contains(anim2)); + QCOMPARE(machine.defaultAnimationsForTargetState(&machine).size(), 1); + QVERIFY(machine.defaultAnimationsForTargetState(&machine).contains(anim2)); - machine.removeDefaultAnimationForTargetState(machine.rootState(), anim2); - QCOMPARE(machine.defaultAnimationsForTargetState(machine.rootState()).size(), 0); + machine.removeDefaultAnimationForTargetState(&machine, anim2); + QCOMPARE(machine.defaultAnimationsForTargetState(&machine).size(), 0); } void tst_QStateMachine::overrideDefaultAnimationWithSource() @@ -3418,13 +3444,13 @@ void tst_QStateMachine::overrideDefaultAnimationWithSource() SlotCalledCounter counter; - QState *s1 = new QState(machine.rootState()); + QState *s1 = new QState(&machine); machine.setInitialState(s1); - QState *s2 = new QState(machine.rootState()); + QState *s2 = new QState(&machine); s2->assignProperty(object, "foo", 2.0); - QState *s3 = new QState(machine.rootState()); + QState *s3 = new QState(&machine); QObject::connect(s3, SIGNAL(entered()), QCoreApplication::instance(), SLOT(quit())); s1->addTransition(new EventTransition(QEvent::User, s2)); @@ -3458,13 +3484,13 @@ void tst_QStateMachine::overrideDefaultAnimationWithTarget() SlotCalledCounter counter; - QState *s1 = new QState(machine.rootState()); + QState *s1 = new QState(&machine); machine.setInitialState(s1); - QState *s2 = new QState(machine.rootState()); + QState *s2 = new QState(&machine); s2->assignProperty(object, "foo", 2.0); - QState *s3 = new QState(machine.rootState()); + QState *s3 = new QState(&machine); QObject::connect(s3, SIGNAL(entered()), QCoreApplication::instance(), SLOT(quit())); s1->addTransition(new EventTransition(QEvent::User, s2)); @@ -3499,13 +3525,13 @@ void tst_QStateMachine::overrideDefaultSourceAnimationWithSpecific() SlotCalledCounter counter; - QState *s1 = new QState(machine.rootState()); + QState *s1 = new QState(&machine); machine.setInitialState(s1); - QState *s2 = new QState(machine.rootState()); + QState *s2 = new QState(&machine); s2->assignProperty(object, "foo", 2.0); - QState *s3 = new QState(machine.rootState()); + QState *s3 = new QState(&machine); QObject::connect(s3, SIGNAL(entered()), QCoreApplication::instance(), SLOT(quit())); QAbstractTransition *at = s1->addTransition(new EventTransition(QEvent::User, s2)); @@ -3539,13 +3565,13 @@ void tst_QStateMachine::overrideDefaultTargetAnimationWithSpecific() SlotCalledCounter counter; - QState *s1 = new QState(machine.rootState()); + QState *s1 = new QState(&machine); machine.setInitialState(s1); - QState *s2 = new QState(machine.rootState()); + QState *s2 = new QState(&machine); s2->assignProperty(object, "foo", 2.0); - QState *s3 = new QState(machine.rootState()); + QState *s3 = new QState(&machine); QObject::connect(s3, SIGNAL(entered()), QCoreApplication::instance(), SLOT(quit())); QAbstractTransition *at = s1->addTransition(new EventTransition(QEvent::User, s2)); @@ -3579,13 +3605,13 @@ void tst_QStateMachine::overrideDefaultTargetAnimationWithSource() SlotCalledCounter counter; - QState *s1 = new QState(machine.rootState()); + QState *s1 = new QState(&machine); machine.setInitialState(s1); - QState *s2 = new QState(machine.rootState()); + QState *s2 = new QState(&machine); s2->assignProperty(object, "foo", 2.0); - QState *s3 = new QState(machine.rootState()); + QState *s3 = new QState(&machine); QObject::connect(s3, SIGNAL(entered()), QCoreApplication::instance(), SLOT(quit())); s1->addTransition(new EventTransition(QEvent::User, s2)); @@ -3621,10 +3647,10 @@ void tst_QStateMachine::parallelStateAssignmentsDone() propertyHolder->setProperty("bar", 456); propertyHolder->setProperty("zoot", 789); - QState *s1 = new QState(machine.rootState()); + QState *s1 = new QState(&machine); machine.setInitialState(s1); - QState *parallelState = new QState(QState::ParallelStates, machine.rootState()); + QState *parallelState = new QState(QState::ParallelStates, &machine); parallelState->assignProperty(propertyHolder, "foo", 321); QState *s2 = new QState(parallelState); @@ -3653,10 +3679,10 @@ void tst_QStateMachine::transitionsFromParallelStateWithNoChildren() { QStateMachine machine; - QState *parallelState = new QState(QState::ParallelStates, machine.rootState()); + QState *parallelState = new QState(QState::ParallelStates, &machine); machine.setInitialState(parallelState); - QState *s1 = new QState(machine.rootState()); + QState *s1 = new QState(&machine); parallelState->addTransition(new EventTransition(QEvent::User, s1)); machine.start(); @@ -3677,7 +3703,7 @@ void tst_QStateMachine::parallelStateTransition() { QStateMachine machine; - QState *parallelState = new QState(QState::ParallelStates, machine.rootState()); + QState *parallelState = new QState(QState::ParallelStates, &machine); machine.setInitialState(parallelState); QState *s1 = new QState(parallelState); @@ -3726,10 +3752,10 @@ void tst_QStateMachine::nestedRestoreProperties() propertyHolder->setProperty("foo", 1); propertyHolder->setProperty("bar", 2); - QState *s1 = new QState(machine.rootState()); + QState *s1 = new QState(&machine); machine.setInitialState(s1); - QState *s2 = new QState(machine.rootState()); + QState *s2 = new QState(&machine); s2->assignProperty(propertyHolder, "foo", 3); QState *s21 = new QState(s2); @@ -3778,10 +3804,10 @@ void tst_QStateMachine::nestedRestoreProperties2() propertyHolder->setProperty("foo", 1); propertyHolder->setProperty("bar", 2); - QState *s1 = new QState(machine.rootState()); + QState *s1 = new QState(&machine); machine.setInitialState(s1); - QState *s2 = new QState(machine.rootState()); + QState *s2 = new QState(&machine); s2->assignProperty(propertyHolder, "foo", 3); QState *s21 = new QState(s2); @@ -3833,6 +3859,46 @@ void tst_QStateMachine::nestedRestoreProperties2() } +void tst_QStateMachine::nestedStateMachines() +{ + QStateMachine machine; + QState *group = new QState(&machine); + group->setChildMode(QState::ParallelStates); + QStateMachine *subMachines[3]; + for (int i = 0; i < 3; ++i) { + QState *subGroup = new QState(group); + QStateMachine *subMachine = new QStateMachine(subGroup); + { + QState *initial = new QState(subMachine); + QFinalState *done = new QFinalState(subMachine); + initial->addTransition(new EventTransition(QEvent::User, done)); + subMachine->setInitialState(initial); + } + QFinalState *subMachineDone = new QFinalState(subGroup); + subMachine->addTransition(subMachine, SIGNAL(finished()), subMachineDone); + subGroup->setInitialState(subMachine); + subMachines[i] = subMachine; + } + QFinalState *final = new QFinalState(&machine); + group->addTransition(group, SIGNAL(finished()), final); + machine.setInitialState(group); + + QSignalSpy startedSpy(&machine, SIGNAL(started())); + QSignalSpy finishedSpy(&machine, SIGNAL(finished())); + machine.start(); + QTRY_COMPARE(startedSpy.count(), 1); + QTRY_COMPARE(machine.configuration().count(), 1+2*3); + QVERIFY(machine.configuration().contains(group)); + for (int i = 0; i < 3; ++i) + QVERIFY(machine.configuration().contains(subMachines[i])); + + QCoreApplication::processEvents(); // starts the submachines + + for (int i = 0; i < 3; ++i) + subMachines[i]->postEvent(new QEvent(QEvent::User)); + + QTRY_COMPARE(finishedSpy.count(), 1); +} QTEST_MAIN(tst_QStateMachine) #include "tst_qstatemachine.moc" diff --git a/tests/auto/qtextcodec/tst_qtextcodec.cpp b/tests/auto/qtextcodec/tst_qtextcodec.cpp index f2da1ec..9f51805 100644 --- a/tests/auto/qtextcodec/tst_qtextcodec.cpp +++ b/tests/auto/qtextcodec/tst_qtextcodec.cpp @@ -1875,6 +1875,9 @@ void tst_QTextCodec::codecForUtfText() #ifdef Q_OS_UNIX void tst_QTextCodec::toLocal8Bit() { +#ifdef QT_NO_PROCESS + QSKIP("This test requires QProcess", SkipAll); +#else QProcess process; process.start("echo/echo"); QString string(QChar(0x410)); @@ -1884,6 +1887,7 @@ void tst_QTextCodec::toLocal8Bit() process.waitForFinished(); QCOMPARE(process.exitStatus(), QProcess::NormalExit); QCOMPARE(process.exitCode(), 0); +#endif } #endif diff --git a/tests/auto/qtoolbar/tst_qtoolbar.cpp b/tests/auto/qtoolbar/tst_qtoolbar.cpp index a762cba..856a935 100644 --- a/tests/auto/qtoolbar/tst_qtoolbar.cpp +++ b/tests/auto/qtoolbar/tst_qtoolbar.cpp @@ -796,6 +796,10 @@ void tst_QToolBar::toolButtonStyle() tb.setToolButtonStyle(Qt::ToolButtonTextUnderIcon); QCOMPARE(tb.toolButtonStyle(), Qt::ToolButtonTextUnderIcon); QCOMPARE(spy.count(), 0); + + tb.setToolButtonStyle(Qt::ToolButtonFollowStyle); + QCOMPARE(tb.toolButtonStyle(), Qt::ToolButtonFollowStyle); + QCOMPARE(spy.count(), 1); } { diff --git a/tests/auto/qtoolbutton/tst_qtoolbutton.cpp b/tests/auto/qtoolbutton/tst_qtoolbutton.cpp index 9e342ad..4176507 100644 --- a/tests/auto/qtoolbutton/tst_qtoolbutton.cpp +++ b/tests/auto/qtoolbutton/tst_qtoolbutton.cpp @@ -64,6 +64,7 @@ public: private slots: void getSetCheck(); void triggered(); + void collapseTextOnPriority(); void task230994_iconSize(); void task176137_autoRepeatOfAction(); @@ -160,6 +161,32 @@ void tst_QToolButton::triggered() delete menu; } +void tst_QToolButton::collapseTextOnPriority() +{ + class MyToolButton : public QToolButton + { + friend class tst_QToolButton; + public: + void initStyleOption(QStyleOptionToolButton *option) + { + QToolButton::initStyleOption(option); + } + }; + + MyToolButton button; + button.setToolButtonStyle(Qt::ToolButtonTextBesideIcon); + QAction action(button.style()->standardIcon(QStyle::SP_ArrowBack), "test", 0); + button.setDefaultAction(&action); + + QStyleOptionToolButton option; + button.initStyleOption(&option); + QVERIFY(option.toolButtonStyle == Qt::ToolButtonTextBesideIcon); + action.setPriority(QAction::LowPriority); + button.initStyleOption(&option); + QVERIFY(option.toolButtonStyle == Qt::ToolButtonIconOnly); +} + + void tst_QToolButton::task230994_iconSize() { //we check that the iconsize returned bu initStyleOption is valid diff --git a/tests/auto/qurl/tst_qurl.cpp b/tests/auto/qurl/tst_qurl.cpp index 723f882..78ea146 100644 --- a/tests/auto/qurl/tst_qurl.cpp +++ b/tests/auto/qurl/tst_qurl.cpp @@ -162,6 +162,8 @@ private slots: void nameprep_testsuite(); void ace_testsuite_data(); void ace_testsuite(); + void std3violations_data(); + void std3violations(); void tldRestrictions_data(); void tldRestrictions(); void emptyQueryOrFragment(); @@ -3059,7 +3061,8 @@ void tst_QUrl::nameprep_testsuite_data() #ifdef QT_BUILD_INTERNAL QT_BEGIN_NAMESPACE -extern QString qt_nameprep(const QString &source); +extern void qt_nameprep(QString *source, int from); +extern bool qt_check_std3rules(const QChar *, int); QT_END_NAMESPACE #endif @@ -3084,7 +3087,8 @@ void tst_QUrl::nameprep_testsuite() "Investigate further", Continue); QEXPECT_FAIL("Larger test (expanding)", "Investigate further", Continue); - QCOMPARE(qt_nameprep(in), out); + qt_nameprep(&in, 0); + QCOMPARE(in, out); #endif } @@ -3100,6 +3104,11 @@ void tst_QUrl::ace_testsuite_data() QTest::newRow("ascii-upper") << "FLUKE" << "fluke" << "fluke" << "fluke"; QTest::newRow("asciifolded") << QString::fromLatin1("stra\337e") << "strasse" << "." << "strasse"; + QTest::newRow("asciifolded-dotcom") << QString::fromLatin1("stra\337e.example.com") << "strasse.example.com" << "." << "strasse.example.com"; + QTest::newRow("greek-mu") << QString::fromLatin1("\265V") + <<"xn--v-lmb" + << "." + << QString::fromUtf8("\316\274v"); QTest::newRow("non-ascii-lower") << QString::fromLatin1("alqualond\353") << "xn--alqualond-34a" @@ -3132,6 +3141,9 @@ void tst_QUrl::ace_testsuite_data() QTest::newRow("idn-upper") << "XN--ALQUALOND-34A" << "xn--alqualond-34a" << QString::fromLatin1("alqualond\353") << QString::fromLatin1("alqualond\353"); + + QTest::newRow("separator-3002") << QString::fromUtf8("example\343\200\202com") + << "example.com" << "." << "example.com"; } void tst_QUrl::ace_testsuite() @@ -3142,23 +3154,83 @@ void tst_QUrl::ace_testsuite() QFETCH(QString, fromace); QFETCH(QString, unicode); - QString domain = in + canonsuffix; - QCOMPARE(QString::fromLatin1(QUrl::toAce(domain)), toace + canonsuffix); + const char *suffix = canonsuffix; + if (toace.contains('.')) + suffix = 0; + + QString domain = in + suffix; + QCOMPARE(QString::fromLatin1(QUrl::toAce(domain)), toace + suffix); if (fromace != ".") - QCOMPARE(QUrl::fromAce(domain.toLatin1()), fromace + canonsuffix); - QCOMPARE(QUrl::fromAce(QUrl::toAce(domain)), unicode + canonsuffix); + QCOMPARE(QUrl::fromAce(domain.toLatin1()), fromace + suffix); + QCOMPARE(QUrl::fromAce(QUrl::toAce(domain)), unicode + suffix); - domain = in + ".troll.No"; - QCOMPARE(QString::fromLatin1(QUrl::toAce(domain)), toace + canonsuffix); + domain = in + (suffix ? ".troll.No" : ""); + QCOMPARE(QString::fromLatin1(QUrl::toAce(domain)), toace + suffix); if (fromace != ".") - QCOMPARE(QUrl::fromAce(domain.toLatin1()), fromace + canonsuffix); - QCOMPARE(QUrl::fromAce(QUrl::toAce(domain)), unicode + canonsuffix); + QCOMPARE(QUrl::fromAce(domain.toLatin1()), fromace + suffix); + QCOMPARE(QUrl::fromAce(QUrl::toAce(domain)), unicode + suffix); - domain = in + ".troll.NO"; - QCOMPARE(QString::fromLatin1(QUrl::toAce(domain)), toace + canonsuffix); + domain = in + (suffix ? ".troll.NO" : ""); + QCOMPARE(QString::fromLatin1(QUrl::toAce(domain)), toace + suffix); if (fromace != ".") - QCOMPARE(QUrl::fromAce(domain.toLatin1()), fromace + canonsuffix); - QCOMPARE(QUrl::fromAce(QUrl::toAce(domain)), unicode + canonsuffix); + QCOMPARE(QUrl::fromAce(domain.toLatin1()), fromace + suffix); + QCOMPARE(QUrl::fromAce(QUrl::toAce(domain)), unicode + suffix); +} + +void tst_QUrl::std3violations_data() +{ + QTest::addColumn<QString>("source"); + QTest::addColumn<bool>("validUrl"); + + QTest::newRow("too-long") << "this-domain-is-far-too-long-for-its-own-good-and-should-have-been-limited-to-63-chars" << false; + QTest::newRow("dash-begin") << "-x-foo" << false; + QTest::newRow("dash-end") << "x-foo-" << false; + QTest::newRow("dash-begin-end") << "-foo-" << false; + + QTest::newRow("control") << "\033foo" << false; + QTest::newRow("bang") << "foo!" << false; + QTest::newRow("plus") << "foo+bar" << false; + QTest::newRow("dot") << "foo.bar"; + QTest::newRow("slash") << "foo/bar" << true; + QTest::newRow("colon") << "foo:80" << true; + QTest::newRow("question") << "foo?bar" << true; + QTest::newRow("at") << "foo@bar" << true; + QTest::newRow("backslash") << "foo\\bar" << false; + QTest::newRow("underline") << "foo_bar" << false; + + // these characters are transformed by NFKC to non-LDH characters + QTest::newRow("dot-like") << QString::fromUtf8("foo\342\200\244bar") << false; // U+2024 ONE DOT LEADER + QTest::newRow("slash-like") << QString::fromUtf8("foo\357\274\217bar") << false; // U+FF0F FULLWIDTH SOLIDUS + + // The following should be invalid but isn't + // the DIVISON SLASH doesn't case-fold to a slash + // is this a problem with RFC 3490? + //QTest::newRow("slash-like2") << QString::fromUtf8("foo\342\210\225bar") << false; // U+2215 DIVISION SLASH +} + +void tst_QUrl::std3violations() +{ + QFETCH(QString, source); + + { + QString prepped = source; + qt_nameprep(&prepped, 0); + QVERIFY(!qt_check_std3rules(prepped.constData(), prepped.length())); + } + + if (source.contains('.')) + return; // this test ends here + + QUrl url; + url.setHost(source); + QVERIFY(url.host().isEmpty()); + + QFETCH(bool, validUrl); + if (validUrl) + return; // test ends here for these cases + + url = QUrl("http://" + source + "/some/path"); + QVERIFY(!url.isValid()); } void tst_QUrl::tldRestrictions_data() diff --git a/tests/auto/qvector/qvector.pro b/tests/auto/qvector/qvector.pro index 8138272..df3ee2d 100644 --- a/tests/auto/qvector/qvector.pro +++ b/tests/auto/qvector/qvector.pro @@ -1,5 +1,4 @@ load(qttest_p4) -QT = core SOURCES += tst_qvector.cpp diff --git a/tests/auto/qxmlquery/tst_qxmlquery.cpp b/tests/auto/qxmlquery/tst_qxmlquery.cpp index 30b3f50..5c14329 100644 --- a/tests/auto/qxmlquery/tst_qxmlquery.cpp +++ b/tests/auto/qxmlquery/tst_qxmlquery.cpp @@ -222,6 +222,11 @@ private Q_SLOTS: void bindVariableQXmlNameQXmlQuerySignature() const; void bindVariableQXmlNameQXmlQuery() const; void bindVariableQXmlQueryInvalidate() const; + void unknownSourceLocation() const; + + void identityConstraintSuccess() const; + void identityConstraintFailure() const; + void identityConstraintFailure_data() const; // TODO call all URI resolving functions where 1) the URI resolver return a null QUrl(); 2) resolves into valid, existing URI, 3) invalid, non-existing URI. // TODO bind stringlists, variant lists, both ways. @@ -2972,6 +2977,9 @@ void tst_QXmlQuery::enumQueryLanguage() const /* These enum values should be possible to OR for future plans. */ QCOMPARE(int(QXmlQuery::XQuery10), 1); QCOMPARE(int(QXmlQuery::XSLT20), 2); + QCOMPARE(int(QXmlQuery::XmlSchema11IdentityConstraintSelector), 1024); + QCOMPARE(int(QXmlQuery::XmlSchema11IdentityConstraintField), 2048); + QCOMPARE(int(QXmlQuery::XPath20), 4096); } void tst_QXmlQuery::setInitialTemplateNameQXmlName() const @@ -3274,6 +3282,174 @@ void tst_QXmlQuery::bindVariableQXmlQueryInvalidate() const QVERIFY(!query.isValid()); } +void tst_QXmlQuery::unknownSourceLocation() const +{ + QBuffer b; + b.setData("<a><b/><b/></a>"); + b.open(QIODevice::ReadOnly); + + MessageSilencer silencer; + QXmlQuery query; + query.bindVariable(QLatin1String("inputDocument"), &b); + query.setMessageHandler(&silencer); + + query.setQuery(QLatin1String("doc($inputDocument)/a/(let $v := b/string() return if ($v) then $v else ())")); + + QString output; + query.evaluateTo(&output); +} + +void tst_QXmlQuery::identityConstraintSuccess() const +{ + QXmlQuery::QueryLanguage queryLanguage = QXmlQuery::XmlSchema11IdentityConstraintSelector; + + /* We run this code for Selector and Field. */ + for(int i = 0; i < 3; ++i) + { + QXmlNamePool namePool; + QXmlResultItems result; + QXmlItem node; + + { + QXmlQuery nodeSource(namePool); + nodeSource.setQuery(QLatin1String("<e/>")); + + nodeSource.evaluateTo(&result); + node = result.next(); + } + + /* Basic use: + * 1. The focus is undefined, but it's still valid. + * 2. We never evaluate. */ + { + QXmlQuery query(queryLanguage); + query.setQuery(QLatin1String("a")); + QVERIFY(query.isValid()); + } + + /* Basic use: + * 1. The focus is undefined, but it's still valid. + * 2. We afterwards set the focus. */ + { + QXmlQuery query(queryLanguage, namePool); + query.setQuery(QLatin1String("a")); + query.setFocus(node); + QVERIFY(query.isValid()); + } + + /* Basic use: + * 1. The focus is undefined, but it's still valid. + * 2. We afterwards set the focus. + * 3. We evaluate. */ + { + QXmlQuery query(queryLanguage, namePool); + query.setQuery(QString(QLatin1Char('.'))); + query.setFocus(node); + QVERIFY(query.isValid()); + + QString result; + QVERIFY(query.evaluateTo(&result)); + QCOMPARE(result, QString::fromLatin1("<e/>\n")); + } + + /* A slightly more complex Field. */ + { + QXmlQuery query(queryLanguage); + query.setQuery(QLatin1String("* | .//xml:*/.")); + QVERIFY(query.isValid()); + } + + /* @ is only allowed in Field. */ + if(queryLanguage == QXmlQuery::XmlSchema11IdentityConstraintField) + { + QXmlQuery query(QXmlQuery::XmlSchema11IdentityConstraintField); + query.setQuery(QLatin1String("@abc")); + QVERIFY(query.isValid()); + } + + /* Field allows attribute:: and child:: .*/ + if(queryLanguage == QXmlQuery::XmlSchema11IdentityConstraintField) + { + QXmlQuery query(QXmlQuery::XmlSchema11IdentityConstraintField); + query.setQuery(QLatin1String("attribute::name | child::name")); + QVERIFY(query.isValid()); + } + + /* Selector allows only child:: .*/ + { + QXmlQuery query(QXmlQuery::XmlSchema11IdentityConstraintSelector); + query.setQuery(QLatin1String("child::name")); + QVERIFY(query.isValid()); + } + + if(i == 0) + queryLanguage = QXmlQuery::XmlSchema11IdentityConstraintField; + else if(i == 1) + queryLanguage = QXmlQuery::XPath20; + } +} + +Q_DECLARE_METATYPE(QXmlQuery::QueryLanguage); + +/*! + We just do some basic tests for boot strapping and sanity checking. The actual regression + testing is in the Schema suite. + */ +void tst_QXmlQuery::identityConstraintFailure() const +{ + QFETCH(QXmlQuery::QueryLanguage, queryLanguage); + QFETCH(QString, inputQuery); + + QXmlQuery query(queryLanguage); + MessageSilencer silencer; + query.setMessageHandler(&silencer); + + query.setQuery(inputQuery); + QVERIFY(!query.isValid()); +} + +void tst_QXmlQuery::identityConstraintFailure_data() const +{ + QTest::addColumn<QXmlQuery::QueryLanguage>("queryLanguage"); + QTest::addColumn<QString>("inputQuery"); + + QTest::newRow("We don't have element constructors in identity constraint pattern, " + "it's an XQuery feature(Selector).") + << QXmlQuery::XmlSchema11IdentityConstraintSelector + << QString::fromLatin1("<e/>"); + + QTest::newRow("We don't have functions in identity constraint pattern, " + "it's an XPath feature(Selector).") + << QXmlQuery::XmlSchema11IdentityConstraintSelector + << QString::fromLatin1("current-time()"); + + QTest::newRow("We don't have element constructors in identity constraint pattern, " + "it's an XQuery feature(Field).") + << QXmlQuery::XmlSchema11IdentityConstraintSelector + << QString::fromLatin1("<e/>"); + + QTest::newRow("We don't have functions in identity constraint pattern, " + "it's an XPath feature(Field).") + << QXmlQuery::XmlSchema11IdentityConstraintSelector + << QString::fromLatin1("current-time()"); + + QTest::newRow("@attributeName is disallowed for the selector.") + << QXmlQuery::XmlSchema11IdentityConstraintSelector + << QString::fromLatin1("@abc"); + + QTest::newRow("attribute:: is disallowed for the selector.") + << QXmlQuery::XmlSchema11IdentityConstraintSelector + << QString::fromLatin1("attribute::name"); + + QTest::newRow("ancestor::name is disallowed for the selector.") + << QXmlQuery::XmlSchema11IdentityConstraintSelector + << QString::fromLatin1("ancestor::name"); + + QTest::newRow("ancestor::name is disallowed for the field.") + << QXmlQuery::XmlSchema11IdentityConstraintField + << QString::fromLatin1("ancestor::name"); +} + QTEST_MAIN(tst_QXmlQuery) #include "tst_qxmlquery.moc" diff --git a/tests/auto/qxmlschema/.gitignore b/tests/auto/qxmlschema/.gitignore new file mode 100644 index 0000000..5cf52a0 --- /dev/null +++ b/tests/auto/qxmlschema/.gitignore @@ -0,0 +1 @@ +tst_qxmlschema diff --git a/tests/auto/qxmlschema/qxmlschema.pro b/tests/auto/qxmlschema/qxmlschema.pro new file mode 100644 index 0000000..9dd7469 --- /dev/null +++ b/tests/auto/qxmlschema/qxmlschema.pro @@ -0,0 +1,4 @@ +load(qttest_p4) +SOURCES += tst_qxmlschema.cpp + +include (../xmlpatterns.pri) diff --git a/tests/auto/qxmlschema/tst_qxmlschema.cpp b/tests/auto/qxmlschema/tst_qxmlschema.cpp new file mode 100644 index 0000000..33978e8 --- /dev/null +++ b/tests/auto/qxmlschema/tst_qxmlschema.cpp @@ -0,0 +1,372 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +****************************************************************************/ + +#include <QtTest/QtTest> + +#ifdef QTEST_XMLPATTERNS + +#include <QAbstractMessageHandler> +#include <QAbstractUriResolver> +#include <QtNetwork/QNetworkAccessManager> +#include <QXmlName> +#include <QXmlSchema> + +#include "../qabstracturiresolver/TestURIResolver.h" +#include "../qxmlquery/MessageSilencer.h" + +/*! + \class tst_QXmlSchema + \internal + \brief Tests class QXmlSchema. + + This test is not intended for testing the engine, but the functionality specific + to the QXmlSchema class. + */ +class tst_QXmlSchema : public QObject +{ + Q_OBJECT + +private Q_SLOTS: + void defaultConstructor() const; + void copyConstructor() const; + void constructorQXmlNamePool() const; + void copyMutationTest() const; + + void isValid() const; + void documentUri() const; + + void loadSchemaUrlSuccess() const; + void loadSchemaUrlFail() const; + void loadSchemaDeviceSuccess() const; + void loadSchemaDeviceFail() const; + void loadSchemaDataSuccess() const; + void loadSchemaDataFail() const; + + void networkAccessManagerSignature() const; + void networkAccessManagerDefaultValue() const; + void networkAccessManager() const; + + void messageHandlerSignature() const; + void messageHandlerDefaultValue() const; + void messageHandler() const; + + void uriResolverSignature() const; + void uriResolverDefaultValue() const; + void uriResolver() const; +}; + +void tst_QXmlSchema::defaultConstructor() const +{ + /* Allocate instance in different orders. */ + { + QXmlSchema schema; + } + + { + QXmlSchema schema1; + QXmlSchema schema2; + } + + { + QXmlSchema schema1; + QXmlSchema schema2; + QXmlSchema schema3; + } +} + +void tst_QXmlSchema::copyConstructor() const +{ + /* Verify that we can take a const reference, and simply do a copy of a default constructed object. */ + { + const QXmlSchema schema1; + QXmlSchema schema2(schema1); + } + + /* Copy twice. */ + { + const QXmlSchema schema1; + QXmlSchema schema2(schema1); + QXmlSchema schema3(schema2); + } + + /* Verify that copying default values works. */ + { + const QXmlSchema schema1; + const QXmlSchema schema2(schema1); + QCOMPARE(schema2.messageHandler(), schema1.messageHandler()); + QCOMPARE(schema2.uriResolver(), schema1.uriResolver()); + QCOMPARE(schema2.networkAccessManager(), schema1.networkAccessManager()); + QCOMPARE(schema2.isValid(), schema1.isValid()); + } +} + +void tst_QXmlSchema::constructorQXmlNamePool() const +{ + QXmlSchema schema; + + QXmlNamePool np = schema.namePool(); + + const QXmlName name(np, QLatin1String("localName"), + QLatin1String("http://example.com/"), + QLatin1String("prefix")); + + QXmlNamePool np2(schema.namePool()); + QCOMPARE(name.namespaceUri(np2), QString::fromLatin1("http://example.com/")); + QCOMPARE(name.localName(np2), QString::fromLatin1("localName")); + QCOMPARE(name.prefix(np2), QString::fromLatin1("prefix")); + + // make sure namePool() is const + const QXmlSchema constSchema; + np = constSchema.namePool(); +} + +void tst_QXmlSchema::copyMutationTest() const +{ + QXmlSchema schema1; + QXmlSchema schema2(schema1); + + // check that everything is equal + QVERIFY(schema2.messageHandler() == schema1.messageHandler()); + QVERIFY(schema2.uriResolver() == schema1.uriResolver()); + QVERIFY(schema2.networkAccessManager() == schema1.networkAccessManager()); + + MessageSilencer handler; + const TestURIResolver resolver; + QNetworkAccessManager manager; + + // modify schema1 + schema1.setMessageHandler(&handler); + schema1.setUriResolver(&resolver); + schema1.setNetworkAccessManager(&manager); + + // check that schema2 is not effected by the modifications of schema1 + QVERIFY(schema2.messageHandler() != schema1.messageHandler()); + QVERIFY(schema2.uriResolver() != schema1.uriResolver()); + QVERIFY(schema2.networkAccessManager() != schema1.networkAccessManager()); + + // modify schema1 further + const QByteArray data( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<xsd:schema" + " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"" + " xmlns=\"http://www.qtsoftware.com/xmlschematest\"" + " targetNamespace=\"http://www.qtsoftware.com/xmlschematest\"" + " version=\"1.0\"" + " elementFormDefault=\"qualified\">" + "</xsd:schema>" ); + + const QUrl documentUri("http://www.qtsoftware.com/xmlschematest"); + schema1.load(data, documentUri); + + QVERIFY(schema2.isValid() != schema1.isValid()); +} + +void tst_QXmlSchema::isValid() const +{ + /* Check default value. */ + QXmlSchema schema; + QVERIFY(!schema.isValid()); +} + +void tst_QXmlSchema::documentUri() const +{ + const QByteArray data( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<xsd:schema" + " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"" + " xmlns=\"http://www.qtsoftware.com/xmlschematest\"" + " targetNamespace=\"http://www.qtsoftware.com/xmlschematest\"" + " version=\"1.0\"" + " elementFormDefault=\"qualified\">" + "</xsd:schema>" ); + + const QUrl documentUri("http://www.qtsoftware.com/xmlschematest"); + QXmlSchema schema; + schema.load(data, documentUri); + + QCOMPARE(documentUri, schema.documentUri()); +} + +void tst_QXmlSchema::loadSchemaUrlSuccess() const +{ +/** + TODO: put valid schema file on given url and enable test + const QUrl url("http://notavailable/"); + + QXmlSchema schema; + QVERIFY(!schema.load(url)); +*/ +} + +void tst_QXmlSchema::loadSchemaUrlFail() const +{ + const QUrl url("http://notavailable/"); + + QXmlSchema schema; + QVERIFY(!schema.load(url)); +} + +void tst_QXmlSchema::loadSchemaDeviceSuccess() const +{ + QByteArray data( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<xsd:schema" + " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"" + " xmlns=\"http://www.qtsoftware.com/xmlschematest\"" + " targetNamespace=\"http://www.qtsoftware.com/xmlschematest\"" + " version=\"1.0\"" + " elementFormDefault=\"qualified\">" + "</xsd:schema>" ); + + QBuffer buffer(&data); + buffer.open(QIODevice::ReadOnly); + + QXmlSchema schema; + QVERIFY(schema.load(&buffer)); +} + +void tst_QXmlSchema::loadSchemaDeviceFail() const +{ + QByteArray data( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<xsd:schema" + " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"" + " xmlns=\"http://www.qtsoftware.com/xmlschematest\"" + " targetNamespace=\"http://www.qtsoftware.com/xmlschematest\"" + " version=\"1.0\"" + " elementFormDefault=\"qualified\">" + "</xsd:schema>" ); + + QBuffer buffer(&data); + // a closed device can not be loaded + + QXmlSchema schema; + QVERIFY(!schema.load(&buffer)); +} + +void tst_QXmlSchema::loadSchemaDataSuccess() const +{ + const QByteArray data( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<xsd:schema" + " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"" + " xmlns=\"http://www.qtsoftware.com/xmlschematest\"" + " targetNamespace=\"http://www.qtsoftware.com/xmlschematest\"" + " version=\"1.0\"" + " elementFormDefault=\"qualified\">" + "</xsd:schema>" ); + QXmlSchema schema; + QVERIFY(schema.load(data)); +} + +void tst_QXmlSchema::loadSchemaDataFail() const +{ + // empty schema can not be loaded + const QByteArray data; + + QXmlSchema schema; + QVERIFY(!schema.load(data)); +} + + +void tst_QXmlSchema::networkAccessManagerSignature() const +{ + /* Const object. */ + const QXmlSchema schema; + + /* The function should be const. */ + schema.networkAccessManager(); +} + +void tst_QXmlSchema::networkAccessManagerDefaultValue() const +{ + /* Test that the default value of network access manager is not empty. */ + { + QXmlSchema schema; + QVERIFY(schema.networkAccessManager() != static_cast<QNetworkAccessManager*>(0)); + } +} + +void tst_QXmlSchema::networkAccessManager() const +{ + /* Test that we return the network manager that was set. */ + { + QNetworkAccessManager manager; + QXmlSchema schema; + schema.setNetworkAccessManager(&manager); + QCOMPARE(schema.networkAccessManager(), &manager); + } +} + +void tst_QXmlSchema::messageHandlerSignature() const +{ + /* Const object. */ + const QXmlSchema schema; + + /* The function should be const. */ + schema.messageHandler(); +} + +void tst_QXmlSchema::messageHandlerDefaultValue() const +{ + /* Test that the default value of message handler is not empty. */ + { + QXmlSchema schema; + QVERIFY(schema.messageHandler() != static_cast<QAbstractMessageHandler*>(0)); + } +} + +void tst_QXmlSchema::messageHandler() const +{ + /* Test that we return the message handler that was set. */ + { + MessageSilencer handler; + + QXmlSchema schema; + schema.setMessageHandler(&handler); + QCOMPARE(schema.messageHandler(), &handler); + } +} + +void tst_QXmlSchema::uriResolverSignature() const +{ + /* Const object. */ + const QXmlSchema schema; + + /* The function should be const. */ + schema.uriResolver(); + + /* Const object. */ + const TestURIResolver resolver; + + /* This should compile */ + QXmlSchema schema2; + schema2.setUriResolver(&resolver); +} + +void tst_QXmlSchema::uriResolverDefaultValue() const +{ + /* Test that the default value of uri resolver is empty. */ + { + QXmlSchema schema; + QVERIFY(schema.uriResolver() == static_cast<QAbstractUriResolver*>(0)); + } +} + +void tst_QXmlSchema::uriResolver() const +{ + /* Test that we return the uri resolver that was set. */ + { + TestURIResolver resolver; + + QXmlSchema schema; + schema.setUriResolver(&resolver); + QCOMPARE(schema.uriResolver(), &resolver); + } +} + +QTEST_MAIN(tst_QXmlSchema) + +#include "tst_qxmlschema.moc" +#else //QTEST_PATTERNIST +QTEST_NOOP_MAIN +#endif diff --git a/tests/auto/qxmlschemavalidator/.gitignore b/tests/auto/qxmlschemavalidator/.gitignore new file mode 100644 index 0000000..8857212 --- /dev/null +++ b/tests/auto/qxmlschemavalidator/.gitignore @@ -0,0 +1 @@ +tst_qxmlschemavalidator diff --git a/tests/auto/qxmlschemavalidator/qxmlschemavalidator.pro b/tests/auto/qxmlschemavalidator/qxmlschemavalidator.pro new file mode 100644 index 0000000..88ef317 --- /dev/null +++ b/tests/auto/qxmlschemavalidator/qxmlschemavalidator.pro @@ -0,0 +1,4 @@ +load(qttest_p4) +SOURCES += tst_qxmlschemavalidator.cpp + +include (../xmlpatterns.pri) diff --git a/tests/auto/qxmlschemavalidator/tst_qxmlschemavalidator.cpp b/tests/auto/qxmlschemavalidator/tst_qxmlschemavalidator.cpp new file mode 100644 index 0000000..0f15bc8 --- /dev/null +++ b/tests/auto/qxmlschemavalidator/tst_qxmlschemavalidator.cpp @@ -0,0 +1,445 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +****************************************************************************/ + +#include <QtTest/QtTest> + +#ifdef QTEST_XMLPATTERNS + +#include <QAbstractMessageHandler> +#include <QAbstractUriResolver> +#include <QtNetwork/QNetworkAccessManager> +#include <QXmlName> +#include <QXmlSchema> +#include <QXmlSchemaValidator> + +#include "../qabstracturiresolver/TestURIResolver.h" +#include "../qxmlquery/MessageSilencer.h" + +/*! + \class tst_QXmlSchemaValidatorValidator + \internal + \brief Tests class QXmlSchemaValidator. + + This test is not intended for testing the engine, but the functionality specific + to the QXmlSchemaValidator class. + */ +class tst_QXmlSchemaValidator : public QObject +{ + Q_OBJECT + +private Q_SLOTS: + void defaultConstructor() const; + void constructorQXmlNamePool() const; + void propertyInitialization() const; + void resetSchemaNamePool() const; + + void loadInstanceUrlSuccess() const; + void loadInstanceUrlFail() const; + void loadInstanceDeviceSuccess() const; + void loadInstanceDeviceFail() const; + void loadInstanceDataSuccess() const; + void loadInstanceDataFail() const; + + void networkAccessManagerSignature() const; + void networkAccessManagerDefaultValue() const; + void networkAccessManager() const; + + void messageHandlerSignature() const; + void messageHandlerDefaultValue() const; + void messageHandler() const; + + void uriResolverSignature() const; + void uriResolverDefaultValue() const; + void uriResolver() const; +}; + +static QXmlSchema createValidSchema() +{ + const QByteArray data( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<xsd:schema" + " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"" + " xmlns=\"http://www.qtsoftware.com/xmlschematest\"" + " targetNamespace=\"http://www.qtsoftware.com/xmlschematest\"" + " version=\"1.0\"" + " elementFormDefault=\"qualified\">" + " <xsd:element name=\"myRoot\" type=\"xsd:string\"/>" + "</xsd:schema>" ); + + const QUrl documentUri("http://www.qtsoftware.com/xmlschematest"); + + QXmlSchema schema; + schema.load(data, documentUri); + + return schema; +} + +void tst_QXmlSchemaValidator::defaultConstructor() const +{ + /* Allocate instance in different orders. */ + { + QXmlSchema schema; + QXmlSchemaValidator validator(schema); + } + + { + QXmlSchema schema1; + QXmlSchema schema2; + + QXmlSchemaValidator validator1(schema1); + QXmlSchemaValidator validator2(schema2); + } + + { + QXmlSchema schema; + + QXmlSchemaValidator validator1(schema); + QXmlSchemaValidator validator2(schema); + } +} + +void tst_QXmlSchemaValidator::propertyInitialization() const +{ + /* Verify that properties set in the schema are used as default values for the validator */ + { + MessageSilencer handler; + TestURIResolver resolver; + QNetworkAccessManager manager; + + QXmlSchema schema; + schema.setMessageHandler(&handler); + schema.setUriResolver(&resolver); + schema.setNetworkAccessManager(&manager); + + QXmlSchemaValidator validator(schema); + QCOMPARE(validator.messageHandler(), &handler); + QCOMPARE(validator.uriResolver(), &resolver); + QCOMPARE(validator.networkAccessManager(), &manager); + } +} + +void tst_QXmlSchemaValidator::constructorQXmlNamePool() const +{ + // test that the name pool from the schema is used by + // the schema validator as well + QXmlSchema schema; + + QXmlNamePool np = schema.namePool(); + + const QXmlName name(np, QLatin1String("localName"), + QLatin1String("http://example.com/"), + QLatin1String("prefix")); + + QXmlSchemaValidator validator(schema); + + QXmlNamePool np2(validator.namePool()); + QCOMPARE(name.namespaceUri(np2), QString::fromLatin1("http://example.com/")); + QCOMPARE(name.localName(np2), QString::fromLatin1("localName")); + QCOMPARE(name.prefix(np2), QString::fromLatin1("prefix")); + + // make sure namePool() is const + const QXmlSchemaValidator constValidator(schema); + np = constValidator.namePool(); +} + +void tst_QXmlSchemaValidator::resetSchemaNamePool() const +{ + QXmlSchema schema1; + QXmlNamePool np1 = schema1.namePool(); + + const QXmlName name1(np1, QLatin1String("localName"), + QLatin1String("http://example.com/"), + QLatin1String("prefix")); + + QXmlSchemaValidator validator(schema1); + + { + QXmlNamePool compNamePool(validator.namePool()); + QCOMPARE(name1.namespaceUri(compNamePool), QString::fromLatin1("http://example.com/")); + QCOMPARE(name1.localName(compNamePool), QString::fromLatin1("localName")); + QCOMPARE(name1.prefix(compNamePool), QString::fromLatin1("prefix")); + } + + QXmlSchema schema2; + QXmlNamePool np2 = schema2.namePool(); + + const QXmlName name2(np2, QLatin1String("remoteName"), + QLatin1String("http://trolltech.com/"), + QLatin1String("suffix")); + + // make sure that after re-setting the schema, the new namepool is used + validator.setSchema(schema2); + + { + QXmlNamePool compNamePool(validator.namePool()); + QCOMPARE(name2.namespaceUri(compNamePool), QString::fromLatin1("http://trolltech.com/")); + QCOMPARE(name2.localName(compNamePool), QString::fromLatin1("remoteName")); + QCOMPARE(name2.prefix(compNamePool), QString::fromLatin1("suffix")); + } +} + +void tst_QXmlSchemaValidator::loadInstanceUrlSuccess() const +{ +/* + TODO: put valid schema file on given url and enable test + const QXmlSchema schema(createValidSchema()); + const QUrl url("http://notavailable/"); + + QXmlSchemaValidator validator(schema); + QVERIFY(!validator.validate(url)); +*/ +} + +void tst_QXmlSchemaValidator::loadInstanceUrlFail() const +{ + const QXmlSchema schema(createValidSchema()); + const QUrl url("http://notavailable/"); + + QXmlSchemaValidator validator(schema); + QVERIFY(!validator.validate(url)); +} + +void tst_QXmlSchemaValidator::loadInstanceDeviceSuccess() const +{ + const QXmlSchema schema(createValidSchema()); + + QByteArray data( "<myRoot xmlns=\"http://www.qtsoftware.com/xmlschematest\">Testme</myRoot>" ); + QBuffer buffer(&data); + buffer.open(QIODevice::ReadOnly); + + QXmlSchemaValidator validator(schema); + QVERIFY(validator.validate(&buffer)); +} + +void tst_QXmlSchemaValidator::loadInstanceDeviceFail() const +{ + const QXmlSchema schema(createValidSchema()); + + QByteArray data( "<myRoot xmlns=\"http://www.qtsoftware.com/xmlschematest\">Testme</myRoot>" ); + QBuffer buffer(&data); + // a closed device can not be loaded + + QXmlSchemaValidator validator(schema); + QVERIFY(!validator.validate(&buffer)); +} + +void tst_QXmlSchemaValidator::loadInstanceDataSuccess() const +{ + const QXmlSchema schema(createValidSchema()); + + const QByteArray data( "<myRoot xmlns=\"http://www.qtsoftware.com/xmlschematest\">Testme</myRoot>" ); + + QXmlSchemaValidator validator(schema); + QVERIFY(validator.validate(data)); +} + +void tst_QXmlSchemaValidator::loadInstanceDataFail() const +{ + const QXmlSchema schema(createValidSchema()); + + // empty instance can not be loaded + const QByteArray data; + + QXmlSchemaValidator validator(schema); + QVERIFY(!validator.validate(data)); +} + +void tst_QXmlSchemaValidator::networkAccessManagerSignature() const +{ + const QXmlSchema schema; + + /* Const object. */ + const QXmlSchemaValidator validator(schema); + + /* The function should be const. */ + validator.networkAccessManager(); +} + +void tst_QXmlSchemaValidator::networkAccessManagerDefaultValue() const +{ + /* Test that the default value of network access manager is equal to the one from the schema. */ + { + const QXmlSchema schema; + const QXmlSchemaValidator validator(schema); + QVERIFY(validator.networkAccessManager() == schema.networkAccessManager()); + } + + /* Test that the default value of network access manager is equal to the one from the schema. */ + { + QXmlSchema schema; + + QNetworkAccessManager manager; + schema.setNetworkAccessManager(&manager); + + const QXmlSchemaValidator validator(schema); + QVERIFY(validator.networkAccessManager() == schema.networkAccessManager()); + } +} + +void tst_QXmlSchemaValidator::networkAccessManager() const +{ + /* Test that we return the network access manager that was set. */ + { + QNetworkAccessManager manager; + + const QXmlSchema schema; + QXmlSchemaValidator validator(schema); + + validator.setNetworkAccessManager(&manager); + QCOMPARE(validator.networkAccessManager(), &manager); + } + + /* Test that we return the network access manager that was set, even if the schema changed in between. */ + { + QNetworkAccessManager manager; + + const QXmlSchema schema; + QXmlSchemaValidator validator(schema); + + validator.setNetworkAccessManager(&manager); + + const QXmlSchema schema2; + validator.setSchema(schema2); + + QCOMPARE(validator.networkAccessManager(), &manager); + } +} + +void tst_QXmlSchemaValidator::messageHandlerSignature() const +{ + const QXmlSchema schema; + + /* Const object. */ + const QXmlSchemaValidator validator(schema); + + /* The function should be const. */ + validator.messageHandler(); +} + +void tst_QXmlSchemaValidator::messageHandlerDefaultValue() const +{ + /* Test that the default value of message handler is equal to the one from the schema. */ + { + const QXmlSchema schema; + const QXmlSchemaValidator validator(schema); + QVERIFY(validator.messageHandler() == schema.messageHandler()); + } + + /* Test that the default value of network access manager is equal to the one from the schema. */ + { + QXmlSchema schema; + + MessageSilencer handler; + schema.setMessageHandler(&handler); + + const QXmlSchemaValidator validator(schema); + QVERIFY(validator.messageHandler() == schema.messageHandler()); + } +} + +void tst_QXmlSchemaValidator::messageHandler() const +{ + /* Test that we return the message handler that was set. */ + { + MessageSilencer handler; + + const QXmlSchema schema; + QXmlSchemaValidator validator(schema); + + validator.setMessageHandler(&handler); + QCOMPARE(validator.messageHandler(), &handler); + } + + /* Test that we return the message handler that was set, even if the schema changed in between. */ + { + MessageSilencer handler; + + const QXmlSchema schema; + QXmlSchemaValidator validator(schema); + + validator.setMessageHandler(&handler); + + const QXmlSchema schema2; + validator.setSchema(schema2); + + QCOMPARE(validator.messageHandler(), &handler); + } +} + +void tst_QXmlSchemaValidator::uriResolverSignature() const +{ + const QXmlSchema schema; + + /* Const object. */ + const QXmlSchemaValidator validator(schema); + + /* The function should be const. */ + validator.uriResolver(); + + /* Const object. */ + const TestURIResolver resolver; + + /* This should compile */ + QXmlSchema schema2; + schema2.setUriResolver(&resolver); +} + +void tst_QXmlSchemaValidator::uriResolverDefaultValue() const +{ + /* Test that the default value of uri resolver is equal to the one from the schema. */ + { + const QXmlSchema schema; + const QXmlSchemaValidator validator(schema); + QVERIFY(validator.uriResolver() == schema.uriResolver()); + } + + /* Test that the default value of uri resolver is equal to the one from the schema. */ + { + QXmlSchema schema; + + TestURIResolver resolver; + schema.setUriResolver(&resolver); + + const QXmlSchemaValidator validator(schema); + QVERIFY(validator.uriResolver() == schema.uriResolver()); + } +} + +void tst_QXmlSchemaValidator::uriResolver() const +{ + /* Test that we return the uri resolver that was set. */ + { + TestURIResolver resolver; + + const QXmlSchema schema; + QXmlSchemaValidator validator(schema); + + validator.setUriResolver(&resolver); + QCOMPARE(validator.uriResolver(), &resolver); + } + + /* Test that we return the uri resolver that was set, even if the schema changed in between. */ + { + TestURIResolver resolver; + + const QXmlSchema schema; + QXmlSchemaValidator validator(schema); + + validator.setUriResolver(&resolver); + + const QXmlSchema schema2; + validator.setSchema(schema2); + + QCOMPARE(validator.uriResolver(), &resolver); + } +} + +QTEST_MAIN(tst_QXmlSchemaValidator) + +#include "tst_qxmlschemavalidator.moc" +#else //QTEST_PATTERNIST +QTEST_NOOP_MAIN +#endif diff --git a/tests/auto/runQtXmlPatternsTests.sh b/tests/auto/runQtXmlPatternsTests.sh index 49ea840..41d6c83 100755 --- a/tests/auto/runQtXmlPatternsTests.sh +++ b/tests/auto/runQtXmlPatternsTests.sh @@ -34,6 +34,8 @@ qxmlserializer \ xmlpatterns \ xmlpatternsxqts \ xmlpatternsdiagnosticsts \ +xmlpatternsschema \ +xmlpatternsschemats \ xmlpatternsview \ xmlpatternsxslts" diff --git a/tests/auto/selftests/expected_crashes_3.txt b/tests/auto/selftests/expected_crashes_3.txt new file mode 100644 index 0000000..55cd0b4 --- /dev/null +++ b/tests/auto/selftests/expected_crashes_3.txt @@ -0,0 +1,8 @@ +********* Start testing of tst_Crashes ********* +Config: Using QTest library 4.6.0, Qt 4.6.0 +PASS : tst_Crashes::initTestCase() +QFATAL : tst_Crashes::crash() Received signal 11 +FAIL! : tst_Crashes::crash() Received a fatal error. + Loc: [Unknown file(0)] +Totals: 1 passed, 1 failed, 0 skipped +********* Finished testing of tst_Crashes ********* diff --git a/tests/auto/selftests/selftests.qrc b/tests/auto/selftests/selftests.qrc index 9dc9dd0..3d78bf5 100644 --- a/tests/auto/selftests/selftests.qrc +++ b/tests/auto/selftests/selftests.qrc @@ -14,6 +14,7 @@ <file>expected_fetchbogus.txt</file> <file>expected_crashes_1.txt</file> <file>expected_crashes_2.txt</file> + <file>expected_crashes_3.txt</file> <file>expected_multiexec.txt</file> <file>expected_failinit.txt</file> <file>expected_failinitdata.txt</file> diff --git a/tests/auto/selftests/tst_selftests.cpp b/tests/auto/selftests/tst_selftests.cpp index ba17ccb..8eb7fe1 100644 --- a/tests/auto/selftests/tst_selftests.cpp +++ b/tests/auto/selftests/tst_selftests.cpp @@ -297,7 +297,9 @@ void tst_Selftests::runSubTest() void tst_Selftests::initTestCase() { - m_checkXMLBlacklist.append("crashes"); // This test crashes +#ifndef Q_OS_UNIX + m_checkXMLBlacklist.append("crashes"); // This test crashes (XML valid on Unix only) +#endif m_checkXMLBlacklist.append("waitwithoutgui"); // This test is not a QTestLib test. /* Output from several tests is broken with the XML output method, diff --git a/tests/auto/selftests/xunit/xunit.pro b/tests/auto/selftests/xunit/xunit.pro index 81ca157..55aca4a 100644 --- a/tests/auto/selftests/xunit/xunit.pro +++ b/tests/auto/selftests/xunit/xunit.pro @@ -1,15 +1,8 @@ load(qttest_p4) SOURCES += tst_xunit.cpp -wince*: { - addImages.sources = images/* - addImages.path = images - DEPLOYMENT += addImages - DEFINES += SRCDIR=\\\".\\\" -} else { - contains(QT_CONFIG, qt3support): QT += qt3support - DEFINES += SRCDIR=\\\"$$PWD\\\" -} +mac:CONFIG -= app_bundle +CONFIG -= debug_and_release_target TARGET = xunit diff --git a/tests/auto/test.pl b/tests/auto/test.pl index 9fd5c9d..a9e3da8 100755 --- a/tests/auto/test.pl +++ b/tests/auto/test.pl @@ -1,4 +1,4 @@ -#!/usr/bin/perl +#!/usr/bin/env perl use strict; use Cwd; diff --git a/tests/auto/uiloader/baseline/css_scrollarea_base.ui b/tests/auto/uiloader/baseline/css_scrollarea_base.ui new file mode 100644 index 0000000..495401f --- /dev/null +++ b/tests/auto/uiloader/baseline/css_scrollarea_base.ui @@ -0,0 +1,197 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>Form</class> + <widget class="QWidget" name="Form"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>407</width> + <height>339</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <property name="styleSheet"> + <string notr="true">QAbstractScrollArea { border: 2px dashed #e12; } +QHeaderView { border-color: blue; } + +</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QPlainTextEdit" name="plainTextEdit"> + <property name="plainText"> + <string>Note that the task 257517 requires to scroll down, and check that the backgroud is still filled with the base color (white by default) + +x +x + +x +x + +x +x + +x +x + +</string> + </property> + </widget> + </item> + <item> + <widget class="QTableWidget" name="tableWidget"> + <row> + <property name="text"> + <string>New Row</string> + </property> + </row> + <row> + <property name="text"> + <string>New Row</string> + </property> + </row> + <row> + <property name="text"> + <string>New Row</string> + </property> + </row> + <row> + <property name="text"> + <string>New Row</string> + </property> + </row> + <row> + <property name="text"> + <string>New Row</string> + </property> + </row> + <row> + <property name="text"> + <string>New Row</string> + </property> + </row> + <row> + <property name="text"> + <string>New Row</string> + </property> + </row> + <row> + <property name="text"> + <string>New Row</string> + </property> + </row> + <row> + <property name="text"> + <string>New Row</string> + </property> + </row> + <row> + <property name="text"> + <string>New Row</string> + </property> + </row> + <row> + <property name="text"> + <string>New Row</string> + </property> + </row> + <row> + <property name="text"> + <string>New Row</string> + </property> + </row> + <row> + <property name="text"> + <string>New Row</string> + </property> + </row> + <row> + <property name="text"> + <string>New Row</string> + </property> + </row> + <column> + <property name="text"> + <string>New Column</string> + </property> + </column> + <column> + <property name="text"> + <string>New Column</string> + </property> + </column> + <column> + <property name="text"> + <string>New Column</string> + </property> + </column> + <column> + <property name="text"> + <string>New Column</string> + </property> + </column> + <column> + <property name="text"> + <string>New Column</string> + </property> + </column> + <column> + <property name="text"> + <string>New Column</string> + </property> + </column> + <column> + <property name="text"> + <string>New Column</string> + </property> + </column> + <column> + <property name="text"> + <string>New Column</string> + </property> + </column> + <column> + <property name="text"> + <string>New Column</string> + </property> + </column> + <column> + <property name="text"> + <string>New Column</string> + </property> + </column> + </widget> + </item> + <item> + <widget class="QTextEdit" name="textEdit"> + <property name="html"> + <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'DejaVu Sans'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">x</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">x</p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">x</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">x</p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">x</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">x</p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">x</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">x</p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">x</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">x</p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html></string> + </property> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/tests/auto/xmlpatterns.pri b/tests/auto/xmlpatterns.pri index bf13c3b..7cdd67f 100644 --- a/tests/auto/xmlpatterns.pri +++ b/tests/auto/xmlpatterns.pri @@ -19,3 +19,17 @@ if(!debug_and_release|build_pass):CONFIG(debug, debug|release) { else: XMLPATTERNS_SDK = $${XMLPATTERNS_SDK}_debug } +INCLUDEPATH += \ + $$QT_SOURCE_TREE/src/xmlpatterns/acceltree \ + $$QT_SOURCE_TREE/src/xmlpatterns/api \ + $$QT_SOURCE_TREE/src/xmlpatterns/data \ + $$QT_SOURCE_TREE/src/xmlpatterns/environment \ + $$QT_SOURCE_TREE/src/xmlpatterns/expr \ + $$QT_SOURCE_TREE/src/xmlpatterns/functions \ + $$QT_SOURCE_TREE/src/xmlpatterns/iterators \ + $$QT_SOURCE_TREE/src/xmlpatterns/janitors \ + $$QT_SOURCE_TREE/src/xmlpatterns/parser \ + $$QT_SOURCE_TREE/src/xmlpatterns/projection \ + $$QT_SOURCE_TREE/src/xmlpatterns/schema \ + $$QT_SOURCE_TREE/src/xmlpatterns/type \ + $$QT_SOURCE_TREE/src/xmlpatterns/utils diff --git a/tests/auto/xmlpatternsdiagnosticsts/test/tst_xmlpatternsdiagnosticsts.cpp b/tests/auto/xmlpatternsdiagnosticsts/test/tst_xmlpatternsdiagnosticsts.cpp index f3df426..07e1fed 100644 --- a/tests/auto/xmlpatternsdiagnosticsts/test/tst_xmlpatternsdiagnosticsts.cpp +++ b/tests/auto/xmlpatternsdiagnosticsts/test/tst_xmlpatternsdiagnosticsts.cpp @@ -61,7 +61,7 @@ protected: virtual void catalogPath(QString &write) const; }; -tst_XmlPatternsXSLTS::tst_XmlPatternsXSLTS() : tst_SuiteTest(false, true) +tst_XmlPatternsXSLTS::tst_XmlPatternsXSLTS() : tst_SuiteTest(tst_SuiteTest::XQuerySuite, true) { } diff --git a/tests/auto/xmlpatternsschema/.gitignore b/tests/auto/xmlpatternsschema/.gitignore new file mode 100644 index 0000000..a37a2b7 --- /dev/null +++ b/tests/auto/xmlpatternsschema/.gitignore @@ -0,0 +1 @@ +tst_xmlpatternsschema diff --git a/tests/auto/xmlpatternsschema/tst_xmlpatternsschema.cpp b/tests/auto/xmlpatternsschema/tst_xmlpatternsschema.cpp new file mode 100644 index 0000000..030e9c0 --- /dev/null +++ b/tests/auto/xmlpatternsschema/tst_xmlpatternsschema.cpp @@ -0,0 +1,988 @@ + +#include <QtTest/QtTest> + +#include "qxsdstatemachine_p.h" +#include "qxsdschematoken_p.h" + +using namespace QPatternist; + +class tst_XMLPatternsSchema : public QObject +{ + Q_OBJECT + + public slots: + void init(); + void cleanup(); + + private slots: + void stateMachineTest1(); + void stateMachineTest2(); + void stateMachineTest3(); + void stateMachineTest4(); + void stateMachineTest5(); + void stateMachineTest6(); + void stateMachineTest7(); + void stateMachineTest8(); + void stateMachineTest9(); + void stateMachineTest10(); + void stateMachineTest11(); + void stateMachineTest12(); + void stateMachineTest13(); + void stateMachineTest14(); + void stateMachineTest15(); + void stateMachineTest16(); + void stateMachineTest17(); + void stateMachineTest18(); + void stateMachineTest19(); + + private: + bool runTest(const QVector<XsdSchemaToken::NodeName> &list, XsdStateMachine<XsdSchemaToken::NodeName> &machine); +}; + +void tst_XMLPatternsSchema::init() +{ +} + +void tst_XMLPatternsSchema::cleanup() +{ +} + +bool tst_XMLPatternsSchema::runTest(const QVector<XsdSchemaToken::NodeName> &list, XsdStateMachine<XsdSchemaToken::NodeName> &machine) +{ + machine.reset(); + for (int i = 0; i < list.count(); ++i) { + if (!machine.proceed(list.at(i))) + return false; + } + if (!machine.inEndState()) + return false; + + return true; +} + +void tst_XMLPatternsSchema::stateMachineTest1() +{ + XsdStateMachine<XsdSchemaToken::NodeName> machine; + + // setup state machine for (annotation?, simpleType?) : attribute + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + + machine.addTransition(startState, XsdSchemaToken::Annotation, s1); + machine.addTransition(startState, XsdSchemaToken::SimpleType, s2); + machine.addTransition(s1, XsdSchemaToken::SimpleType, s2); + + QVERIFY(machine.inEndState() == true); + QVERIFY(machine.proceed(XsdSchemaToken::Annotation) == true); + QVERIFY(machine.inEndState() == true); + QVERIFY(machine.proceed(XsdSchemaToken::SimpleType) == true); + QVERIFY(machine.inEndState() == true); + QVERIFY(machine.proceed(XsdSchemaToken::SimpleType) == false); + QVERIFY(machine.proceed(XsdSchemaToken::Annotation) == false); + machine.reset(); + QVERIFY(machine.proceed(XsdSchemaToken::SimpleType) == true); + QVERIFY(machine.inEndState() == true); + QVERIFY(machine.proceed(XsdSchemaToken::Annotation) == false); +} + +void tst_XMLPatternsSchema::stateMachineTest2() +{ + XsdStateMachine<XsdSchemaToken::NodeName> machine; + + // setup state machine for (annotation?, ((simpleType | complexType)?, (unique | key | keyref)*)) : element + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s3 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s4 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s5 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s6 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + + machine.addTransition(startState, XsdSchemaToken::Annotation, s1); + machine.addTransition(startState, XsdSchemaToken::SimpleType, s2); + machine.addTransition(startState, XsdSchemaToken::ComplexType, s3); + machine.addTransition(startState, XsdSchemaToken::Unique, s4); + machine.addTransition(startState, XsdSchemaToken::Key, s5); + machine.addTransition(startState, XsdSchemaToken::Keyref, s6); + + machine.addTransition(s1, XsdSchemaToken::SimpleType, s2); + machine.addTransition(s1, XsdSchemaToken::ComplexType, s3); + machine.addTransition(s1, XsdSchemaToken::Unique, s4); + machine.addTransition(s1, XsdSchemaToken::Key, s5); + machine.addTransition(s1, XsdSchemaToken::Keyref, s6); + + machine.addTransition(s2, XsdSchemaToken::Unique, s4); + machine.addTransition(s2, XsdSchemaToken::Key, s5); + machine.addTransition(s2, XsdSchemaToken::Keyref, s6); + + machine.addTransition(s3, XsdSchemaToken::Unique, s4); + machine.addTransition(s3, XsdSchemaToken::Key, s5); + machine.addTransition(s3, XsdSchemaToken::Keyref, s6); + + machine.addTransition(s4, XsdSchemaToken::Unique, s4); + machine.addTransition(s4, XsdSchemaToken::Key, s5); + machine.addTransition(s4, XsdSchemaToken::Keyref, s6); + + machine.addTransition(s5, XsdSchemaToken::Unique, s4); + machine.addTransition(s5, XsdSchemaToken::Key, s5); + machine.addTransition(s5, XsdSchemaToken::Keyref, s6); + + machine.addTransition(s6, XsdSchemaToken::Unique, s4); + machine.addTransition(s6, XsdSchemaToken::Key, s5); + machine.addTransition(s6, XsdSchemaToken::Keyref, s6); + + QVector<XsdSchemaToken::NodeName> data1, data2, data3; + + data1 << XsdSchemaToken::Annotation + << XsdSchemaToken::SimpleType + << XsdSchemaToken::Unique + << XsdSchemaToken::Keyref; + + data2 << XsdSchemaToken::Annotation + << XsdSchemaToken::SimpleType + << XsdSchemaToken::Annotation + << XsdSchemaToken::Keyref; + + data3 << XsdSchemaToken::Annotation + << XsdSchemaToken::SimpleType + << XsdSchemaToken::SimpleType; + + QVERIFY(runTest(data1, machine) == true); + QVERIFY(runTest(data2, machine) == false); + QVERIFY(runTest(data3, machine) == false); +} + +void tst_XMLPatternsSchema::stateMachineTest3() +{ + XsdStateMachine<XsdSchemaToken::NodeName> machine; + + // setup state machine for (annotation?, (simpleContent | complexContent | ((group | all | choice | sequence)?, ((attribute | attributeGroup)*, anyAttribute?)))) : complexType + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s3 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s4 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s5 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s6 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s7 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s8 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s9 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s10 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + + machine.addTransition(startState, XsdSchemaToken::Annotation, s1); + machine.addTransition(startState, XsdSchemaToken::SimpleContent, s2); + machine.addTransition(startState, XsdSchemaToken::ComplexContent, s3); + machine.addTransition(startState, XsdSchemaToken::Group, s4); + machine.addTransition(startState, XsdSchemaToken::All, s5); + machine.addTransition(startState, XsdSchemaToken::Choice, s6); + machine.addTransition(startState, XsdSchemaToken::Sequence, s7); + machine.addTransition(startState, XsdSchemaToken::Attribute, s8); + machine.addTransition(startState, XsdSchemaToken::AttributeGroup, s9); + machine.addTransition(startState, XsdSchemaToken::AnyAttribute, s10); + + machine.addTransition(s1, XsdSchemaToken::SimpleContent, s2); + machine.addTransition(s1, XsdSchemaToken::ComplexContent, s3); + machine.addTransition(s1, XsdSchemaToken::Group, s4); + machine.addTransition(s1, XsdSchemaToken::All, s5); + machine.addTransition(s1, XsdSchemaToken::Choice, s6); + machine.addTransition(s1, XsdSchemaToken::Sequence, s7); + machine.addTransition(s1, XsdSchemaToken::Attribute, s8); + machine.addTransition(s1, XsdSchemaToken::AttributeGroup, s9); + machine.addTransition(s1, XsdSchemaToken::AnyAttribute, s10); + + machine.addTransition(s4, XsdSchemaToken::Attribute, s8); + machine.addTransition(s4, XsdSchemaToken::AttributeGroup, s9); + machine.addTransition(s4, XsdSchemaToken::AnyAttribute, s10); + + machine.addTransition(s5, XsdSchemaToken::Attribute, s8); + machine.addTransition(s5, XsdSchemaToken::AttributeGroup, s9); + machine.addTransition(s5, XsdSchemaToken::AnyAttribute, s10); + + machine.addTransition(s6, XsdSchemaToken::Attribute, s8); + machine.addTransition(s6, XsdSchemaToken::AttributeGroup, s9); + machine.addTransition(s6, XsdSchemaToken::AnyAttribute, s10); + + machine.addTransition(s7, XsdSchemaToken::Attribute, s8); + machine.addTransition(s7, XsdSchemaToken::AttributeGroup, s9); + machine.addTransition(s7, XsdSchemaToken::AnyAttribute, s10); + + machine.addTransition(s8, XsdSchemaToken::Attribute, s8); + machine.addTransition(s8, XsdSchemaToken::AttributeGroup, s9); + machine.addTransition(s8, XsdSchemaToken::AnyAttribute, s10); + + QVector<XsdSchemaToken::NodeName> data1, data2, data3, data4; + + data1 << XsdSchemaToken::Annotation + << XsdSchemaToken::SimpleContent; + + data2 << XsdSchemaToken::Group + << XsdSchemaToken::Attribute + << XsdSchemaToken::Attribute + << XsdSchemaToken::AnyAttribute; + + data3 << XsdSchemaToken::Group + << XsdSchemaToken::Choice + << XsdSchemaToken::Attribute + << XsdSchemaToken::AnyAttribute; + + data4 << XsdSchemaToken::Annotation + << XsdSchemaToken::Sequence + << XsdSchemaToken::AnyAttribute; + + QVERIFY(runTest(data1, machine) == true); + QVERIFY(runTest(data2, machine) == true); + QVERIFY(runTest(data3, machine) == false); + QVERIFY(runTest(data4, machine) == true); +} + +void tst_XMLPatternsSchema::stateMachineTest4() +{ + XsdStateMachine<XsdSchemaToken::NodeName> machine; + + // setup state machine for (annotation?, ((attribute | attributeGroup)*, anyAttribute?)) : named attribute group/simple content extension/ + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s3 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s4 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + + machine.addTransition(startState, XsdSchemaToken::Annotation, s1); + machine.addTransition(startState, XsdSchemaToken::Attribute, s2); + machine.addTransition(startState, XsdSchemaToken::AttributeGroup, s3); + machine.addTransition(startState, XsdSchemaToken::AnyAttribute, s4); + + machine.addTransition(s1, XsdSchemaToken::Attribute, s2); + machine.addTransition(s1, XsdSchemaToken::AttributeGroup, s3); + machine.addTransition(s1, XsdSchemaToken::AnyAttribute, s4); + + machine.addTransition(s2, XsdSchemaToken::Attribute, s2); + machine.addTransition(s2, XsdSchemaToken::AttributeGroup, s3); + machine.addTransition(s2, XsdSchemaToken::AnyAttribute, s4); + + machine.addTransition(s3, XsdSchemaToken::Attribute, s2); + machine.addTransition(s3, XsdSchemaToken::AttributeGroup, s3); + machine.addTransition(s3, XsdSchemaToken::AnyAttribute, s4); + + QVector<XsdSchemaToken::NodeName> data1, data2, data3, data4; + + data1 << XsdSchemaToken::Annotation; + + data2 << XsdSchemaToken::Attribute + << XsdSchemaToken::Attribute + << XsdSchemaToken::Attribute + << XsdSchemaToken::AnyAttribute; + + data3 << XsdSchemaToken::Group + << XsdSchemaToken::Attribute + << XsdSchemaToken::AnyAttribute; + + data4 << XsdSchemaToken::Attribute + << XsdSchemaToken::AnyAttribute + << XsdSchemaToken::Attribute; + + QVERIFY(runTest(data1, machine) == true); + QVERIFY(runTest(data2, machine) == true); + QVERIFY(runTest(data3, machine) == false); + QVERIFY(runTest(data4, machine) == false); +} + +void tst_XMLPatternsSchema::stateMachineTest5() +{ + XsdStateMachine<XsdSchemaToken::NodeName> machine; + + // setup state machine for (annotation?, (all | choice | sequence)?) : group + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s3 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s4 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + + machine.addTransition(startState, XsdSchemaToken::Annotation, s1); + machine.addTransition(startState, XsdSchemaToken::All, s2); + machine.addTransition(startState, XsdSchemaToken::Choice, s3); + machine.addTransition(startState, XsdSchemaToken::Sequence, s4); + + machine.addTransition(s1, XsdSchemaToken::All, s2); + machine.addTransition(s1, XsdSchemaToken::Choice, s3); + machine.addTransition(s1, XsdSchemaToken::Sequence, s4); + + QVector<XsdSchemaToken::NodeName> data1, data2, data3, data4, data5, data6, data7, data8, data9; + + data1 << XsdSchemaToken::Annotation; + data2 << XsdSchemaToken::Annotation << XsdSchemaToken::All; + data3 << XsdSchemaToken::Annotation << XsdSchemaToken::Choice; + data4 << XsdSchemaToken::Annotation << XsdSchemaToken::Sequence; + data5 << XsdSchemaToken::All; + data6 << XsdSchemaToken::Choice; + data7 << XsdSchemaToken::Sequence; + data8 << XsdSchemaToken::Sequence << XsdSchemaToken::All; + + QVERIFY(runTest(data1, machine) == true); + QVERIFY(runTest(data2, machine) == true); + QVERIFY(runTest(data3, machine) == true); + QVERIFY(runTest(data4, machine) == true); + QVERIFY(runTest(data5, machine) == true); + QVERIFY(runTest(data6, machine) == true); + QVERIFY(runTest(data7, machine) == true); + QVERIFY(runTest(data8, machine) == false); + QVERIFY(runTest(data9, machine) == true); +} + +void tst_XMLPatternsSchema::stateMachineTest6() +{ + XsdStateMachine<XsdSchemaToken::NodeName> machine; + + // setup state machine for (annotation?, element*) : all + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + + machine.addTransition(startState, XsdSchemaToken::Annotation, s1); + machine.addTransition(startState, XsdSchemaToken::Element, s2); + + machine.addTransition(s1, XsdSchemaToken::Element, s2); + + machine.addTransition(s2, XsdSchemaToken::Element, s2); + + QVector<XsdSchemaToken::NodeName> data1, data2, data3, data4, data5, data6, data7, data8, data9; + + data1 << XsdSchemaToken::Annotation; + data2 << XsdSchemaToken::Annotation << XsdSchemaToken::Element; + data3 << XsdSchemaToken::Element; + data4 << XsdSchemaToken::Element << XsdSchemaToken::Sequence; + data5 << XsdSchemaToken::Annotation << XsdSchemaToken::Element << XsdSchemaToken::Annotation; + data6 << XsdSchemaToken::Annotation << XsdSchemaToken::Annotation << XsdSchemaToken::Element; + + QVERIFY(runTest(data1, machine) == true); + QVERIFY(runTest(data2, machine) == true); + QVERIFY(runTest(data3, machine) == true); + QVERIFY(runTest(data4, machine) == false); + QVERIFY(runTest(data5, machine) == false); + QVERIFY(runTest(data6, machine) == false); +} + +void tst_XMLPatternsSchema::stateMachineTest7() +{ + XsdStateMachine<XsdSchemaToken::NodeName> machine; + + // setup state machine for (annotation?, (element | group | choice | sequence | any)*) : choice sequence + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s3 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s4 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s5 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s6 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + + machine.addTransition(startState, XsdSchemaToken::Annotation, s1); + machine.addTransition(startState, XsdSchemaToken::Element, s2); + machine.addTransition(startState, XsdSchemaToken::Group, s3); + machine.addTransition(startState, XsdSchemaToken::Choice, s4); + machine.addTransition(startState, XsdSchemaToken::Sequence, s5); + machine.addTransition(startState, XsdSchemaToken::Any, s6); + + machine.addTransition(s1, XsdSchemaToken::Element, s2); + machine.addTransition(s1, XsdSchemaToken::Group, s3); + machine.addTransition(s1, XsdSchemaToken::Choice, s4); + machine.addTransition(s1, XsdSchemaToken::Sequence, s5); + machine.addTransition(s1, XsdSchemaToken::Any, s6); + + machine.addTransition(s2, XsdSchemaToken::Element, s2); + machine.addTransition(s2, XsdSchemaToken::Group, s3); + machine.addTransition(s2, XsdSchemaToken::Choice, s4); + machine.addTransition(s2, XsdSchemaToken::Sequence, s5); + machine.addTransition(s2, XsdSchemaToken::Any, s6); + + machine.addTransition(s3, XsdSchemaToken::Element, s2); + machine.addTransition(s3, XsdSchemaToken::Group, s3); + machine.addTransition(s3, XsdSchemaToken::Choice, s4); + machine.addTransition(s3, XsdSchemaToken::Sequence, s5); + machine.addTransition(s3, XsdSchemaToken::Any, s6); + + machine.addTransition(s4, XsdSchemaToken::Element, s2); + machine.addTransition(s4, XsdSchemaToken::Group, s3); + machine.addTransition(s4, XsdSchemaToken::Choice, s4); + machine.addTransition(s4, XsdSchemaToken::Sequence, s5); + machine.addTransition(s4, XsdSchemaToken::Any, s6); + + machine.addTransition(s5, XsdSchemaToken::Element, s2); + machine.addTransition(s5, XsdSchemaToken::Group, s3); + machine.addTransition(s5, XsdSchemaToken::Choice, s4); + machine.addTransition(s5, XsdSchemaToken::Sequence, s5); + machine.addTransition(s5, XsdSchemaToken::Any, s6); + + machine.addTransition(s6, XsdSchemaToken::Element, s2); + machine.addTransition(s6, XsdSchemaToken::Group, s3); + machine.addTransition(s6, XsdSchemaToken::Choice, s4); + machine.addTransition(s6, XsdSchemaToken::Sequence, s5); + machine.addTransition(s6, XsdSchemaToken::Any, s6); + + QVector<XsdSchemaToken::NodeName> data1, data2, data3, data4, data5, data6, data7, data8, data9; + + data1 << XsdSchemaToken::Annotation; + data2 << XsdSchemaToken::Annotation << XsdSchemaToken::Element << XsdSchemaToken::Sequence << XsdSchemaToken::Choice; + data3 << XsdSchemaToken::Group; + data4 << XsdSchemaToken::Element << XsdSchemaToken::Sequence << XsdSchemaToken::Annotation; + + QVERIFY(runTest(data1, machine) == true); + QVERIFY(runTest(data2, machine) == true); + QVERIFY(runTest(data3, machine) == true); + QVERIFY(runTest(data4, machine) == false); +} + +void tst_XMLPatternsSchema::stateMachineTest8() +{ + XsdStateMachine<XsdSchemaToken::NodeName> machine; + + // setup state machine for (annotation?) : any/selector/field/notation/include/import/referred attribute group/anyAttribute/all facets + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + + machine.addTransition(startState, XsdSchemaToken::Annotation, s1); + + QVector<XsdSchemaToken::NodeName> data1, data2, data3, data4; + + data1 << XsdSchemaToken::Annotation; + data2 << XsdSchemaToken::Annotation << XsdSchemaToken::Element; + data3 << XsdSchemaToken::Group; + + QVERIFY(runTest(data1, machine) == true); + QVERIFY(runTest(data2, machine) == false); + QVERIFY(runTest(data3, machine) == false); + QVERIFY(runTest(data4, machine) == true); +} + +void tst_XMLPatternsSchema::stateMachineTest9() +{ + XsdStateMachine<XsdSchemaToken::NodeName> machine; + + // setup state machine for (annotation?, (selector, field+)) : unique/key/keyref + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::InternalState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::InternalState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s3 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + + machine.addTransition(startState, XsdSchemaToken::Annotation, s1); + machine.addTransition(startState, XsdSchemaToken::Selector, s2); + + machine.addTransition(s1, XsdSchemaToken::Selector, s2); + machine.addTransition(s2, XsdSchemaToken::Field, s3); + machine.addTransition(s3, XsdSchemaToken::Field, s3); + + QVector<XsdSchemaToken::NodeName> data1, data2, data3, data4, data5; + + data1 << XsdSchemaToken::Annotation; + data2 << XsdSchemaToken::Annotation << XsdSchemaToken::Selector; + data3 << XsdSchemaToken::Annotation << XsdSchemaToken::Selector << XsdSchemaToken::Field; + data4 << XsdSchemaToken::Selector << XsdSchemaToken::Field; + data5 << XsdSchemaToken::Selector << XsdSchemaToken::Field << XsdSchemaToken::Field; + + QVERIFY(runTest(data1, machine) == false); + QVERIFY(runTest(data2, machine) == false); + QVERIFY(runTest(data3, machine) == true); + QVERIFY(runTest(data4, machine) == true); + QVERIFY(runTest(data5, machine) == true); +} + +void tst_XMLPatternsSchema::stateMachineTest10() +{ + XsdStateMachine<XsdSchemaToken::NodeName> machine; + + // setup state machine for (appinfo | documentation)* : annotation + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + + machine.addTransition(startState, XsdSchemaToken::Appinfo, s1); + machine.addTransition(startState, XsdSchemaToken::Documentation, s2); + + machine.addTransition(s1, XsdSchemaToken::Appinfo, s1); + machine.addTransition(s1, XsdSchemaToken::Documentation, s2); + + machine.addTransition(s2, XsdSchemaToken::Appinfo, s1); + machine.addTransition(s2, XsdSchemaToken::Documentation, s2); + + QVector<XsdSchemaToken::NodeName> data1, data2, data3, data4, data5; + + data1 << XsdSchemaToken::Appinfo; + data2 << XsdSchemaToken::Appinfo << XsdSchemaToken::Appinfo; + data3 << XsdSchemaToken::Documentation << XsdSchemaToken::Appinfo << XsdSchemaToken::Documentation; + data4 << XsdSchemaToken::Selector << XsdSchemaToken::Field; + + QVERIFY(runTest(data1, machine) == true); + QVERIFY(runTest(data2, machine) == true); + QVERIFY(runTest(data3, machine) == true); + QVERIFY(runTest(data4, machine) == false); + QVERIFY(runTest(data5, machine) == true); +} + +void tst_XMLPatternsSchema::stateMachineTest11() +{ + XsdStateMachine<XsdSchemaToken::NodeName> machine; + + // setup state machine for (annotation?, (restriction | list | union)) : simpleType + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::InternalState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s3 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s4 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + + machine.addTransition(startState, XsdSchemaToken::Annotation, s1); + machine.addTransition(startState, XsdSchemaToken::Restriction, s2); + machine.addTransition(startState, XsdSchemaToken::List, s3); + machine.addTransition(startState, XsdSchemaToken::Union, s4); + + machine.addTransition(s1, XsdSchemaToken::Restriction, s2); + machine.addTransition(s1, XsdSchemaToken::List, s3); + machine.addTransition(s1, XsdSchemaToken::Union, s4); + + QVector<XsdSchemaToken::NodeName> data1, data2, data3, data4, data5, data6, data7, data8; + + data1 << XsdSchemaToken::Annotation; + data2 << XsdSchemaToken::Annotation << XsdSchemaToken::Restriction; + data3 << XsdSchemaToken::Annotation << XsdSchemaToken::List; + data4 << XsdSchemaToken::Annotation << XsdSchemaToken::Union; + data5 << XsdSchemaToken::Restriction; + data6 << XsdSchemaToken::List; + data7 << XsdSchemaToken::Union; + data8 << XsdSchemaToken::Union << XsdSchemaToken::Union; + + QVERIFY(runTest(data1, machine) == false); + QVERIFY(runTest(data2, machine) == true); + QVERIFY(runTest(data3, machine) == true); + QVERIFY(runTest(data4, machine) == true); + QVERIFY(runTest(data5, machine) == true); + QVERIFY(runTest(data6, machine) == true); + QVERIFY(runTest(data7, machine) == true); + QVERIFY(runTest(data8, machine) == false); +} + +void tst_XMLPatternsSchema::stateMachineTest12() +{ + XsdStateMachine<XsdSchemaToken::NodeName> machine; + + // setup state machine for (annotation?, (simpleType?, (minExclusive | minInclusive | maxExclusive | maxInclusive | totalDigits | fractionDigits | length | minLength | maxLength | enumeration | whiteSpace | pattern)*)) : simple type restriction + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s3 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + + machine.addTransition(startState, XsdSchemaToken::Annotation, s1); + machine.addTransition(startState, XsdSchemaToken::SimpleType, s2); + machine.addTransition(startState, XsdSchemaToken::MinExclusive, s3); + machine.addTransition(startState, XsdSchemaToken::MinInclusive, s3); + machine.addTransition(startState, XsdSchemaToken::MaxExclusive, s3); + machine.addTransition(startState, XsdSchemaToken::MaxInclusive, s3); + machine.addTransition(startState, XsdSchemaToken::TotalDigits, s3); + machine.addTransition(startState, XsdSchemaToken::FractionDigits, s3); + machine.addTransition(startState, XsdSchemaToken::Length, s3); + machine.addTransition(startState, XsdSchemaToken::MinLength, s3); + machine.addTransition(startState, XsdSchemaToken::MaxLength, s3); + machine.addTransition(startState, XsdSchemaToken::Enumeration, s3); + machine.addTransition(startState, XsdSchemaToken::WhiteSpace, s3); + machine.addTransition(startState, XsdSchemaToken::Pattern, s3); + + machine.addTransition(s1, XsdSchemaToken::SimpleType, s2); + machine.addTransition(s1, XsdSchemaToken::MinExclusive, s3); + machine.addTransition(s1, XsdSchemaToken::MinInclusive, s3); + machine.addTransition(s1, XsdSchemaToken::MaxExclusive, s3); + machine.addTransition(s1, XsdSchemaToken::MaxInclusive, s3); + machine.addTransition(s1, XsdSchemaToken::TotalDigits, s3); + machine.addTransition(s1, XsdSchemaToken::FractionDigits, s3); + machine.addTransition(s1, XsdSchemaToken::Length, s3); + machine.addTransition(s1, XsdSchemaToken::MinLength, s3); + machine.addTransition(s1, XsdSchemaToken::MaxLength, s3); + machine.addTransition(s1, XsdSchemaToken::Enumeration, s3); + machine.addTransition(s1, XsdSchemaToken::WhiteSpace, s3); + machine.addTransition(s1, XsdSchemaToken::Pattern, s3); + + machine.addTransition(s2, XsdSchemaToken::MinExclusive, s3); + machine.addTransition(s2, XsdSchemaToken::MinInclusive, s3); + machine.addTransition(s2, XsdSchemaToken::MaxExclusive, s3); + machine.addTransition(s2, XsdSchemaToken::MaxInclusive, s3); + machine.addTransition(s2, XsdSchemaToken::TotalDigits, s3); + machine.addTransition(s2, XsdSchemaToken::FractionDigits, s3); + machine.addTransition(s2, XsdSchemaToken::Length, s3); + machine.addTransition(s2, XsdSchemaToken::MinLength, s3); + machine.addTransition(s2, XsdSchemaToken::MaxLength, s3); + machine.addTransition(s2, XsdSchemaToken::Enumeration, s3); + machine.addTransition(s2, XsdSchemaToken::WhiteSpace, s3); + machine.addTransition(s2, XsdSchemaToken::Pattern, s3); + + machine.addTransition(s3, XsdSchemaToken::MinExclusive, s3); + machine.addTransition(s3, XsdSchemaToken::MinInclusive, s3); + machine.addTransition(s3, XsdSchemaToken::MaxExclusive, s3); + machine.addTransition(s3, XsdSchemaToken::MaxInclusive, s3); + machine.addTransition(s3, XsdSchemaToken::TotalDigits, s3); + machine.addTransition(s3, XsdSchemaToken::FractionDigits, s3); + machine.addTransition(s3, XsdSchemaToken::Length, s3); + machine.addTransition(s3, XsdSchemaToken::MinLength, s3); + machine.addTransition(s3, XsdSchemaToken::MaxLength, s3); + machine.addTransition(s3, XsdSchemaToken::Enumeration, s3); + machine.addTransition(s3, XsdSchemaToken::WhiteSpace, s3); + machine.addTransition(s3, XsdSchemaToken::Pattern, s3); + + QVector<XsdSchemaToken::NodeName> data1, data2, data3, data4, data5; + + data1 << XsdSchemaToken::Annotation; + data2 << XsdSchemaToken::Annotation << XsdSchemaToken::Length << XsdSchemaToken::MaxLength; + data3 << XsdSchemaToken::Annotation << XsdSchemaToken::List; + data4 << XsdSchemaToken::SimpleType << XsdSchemaToken::Pattern; + + QVERIFY(runTest(data1, machine) == true); + QVERIFY(runTest(data2, machine) == true); + QVERIFY(runTest(data3, machine) == false); + QVERIFY(runTest(data4, machine) == true); + QVERIFY(runTest(data5, machine) == true); +} + +void tst_XMLPatternsSchema::stateMachineTest13() +{ + XsdStateMachine<XsdSchemaToken::NodeName> machine; + + // setup state machine for (annotation?, simpleType?) : list + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + + machine.addTransition(startState, XsdSchemaToken::Annotation, s1); + machine.addTransition(startState, XsdSchemaToken::SimpleType, s2); + + machine.addTransition(s1, XsdSchemaToken::SimpleType, s2); + + QVector<XsdSchemaToken::NodeName> data1, data2, data3, data4, data5; + + data1 << XsdSchemaToken::Annotation; + data2 << XsdSchemaToken::Annotation << XsdSchemaToken::SimpleType; + data3 << XsdSchemaToken::SimpleType; + data4 << XsdSchemaToken::SimpleType << XsdSchemaToken::SimpleType; + + QVERIFY(runTest(data1, machine) == true); + QVERIFY(runTest(data2, machine) == true); + QVERIFY(runTest(data3, machine) == true); + QVERIFY(runTest(data4, machine) == false); + QVERIFY(runTest(data5, machine) == true); +} + +void tst_XMLPatternsSchema::stateMachineTest14() +{ + XsdStateMachine<XsdSchemaToken::NodeName> machine; + + // setup state machine for (annotation?, simpleType*) : union + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + + machine.addTransition(startState, XsdSchemaToken::Annotation, s1); + machine.addTransition(startState, XsdSchemaToken::SimpleType, s2); + + machine.addTransition(s1, XsdSchemaToken::SimpleType, s2); + machine.addTransition(s2, XsdSchemaToken::SimpleType, s2); + + QVector<XsdSchemaToken::NodeName> data1, data2, data3, data4, data5, data6; + + data1 << XsdSchemaToken::Annotation; + data2 << XsdSchemaToken::Annotation << XsdSchemaToken::SimpleType; + data3 << XsdSchemaToken::SimpleType; + data4 << XsdSchemaToken::SimpleType << XsdSchemaToken::SimpleType; + data6 << XsdSchemaToken::Annotation << XsdSchemaToken::Annotation; + + QVERIFY(runTest(data1, machine) == true); + QVERIFY(runTest(data2, machine) == true); + QVERIFY(runTest(data3, machine) == true); + QVERIFY(runTest(data4, machine) == true); + QVERIFY(runTest(data5, machine) == true); + QVERIFY(runTest(data6, machine) == false); +} + +void tst_XMLPatternsSchema::stateMachineTest15() +{ + XsdStateMachine<XsdSchemaToken::NodeName> machine; + + // setup state machine for ((include | import | redefine | annotation)*, (((simpleType | complexType | group | attributeGroup) | element | attribute | notation), annotation*)*) : schema + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s3 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + + machine.addTransition(startState, XsdSchemaToken::Include, s1); + machine.addTransition(startState, XsdSchemaToken::Import, s1); + machine.addTransition(startState, XsdSchemaToken::Redefine, s1); + machine.addTransition(startState, XsdSchemaToken::Annotation, s1); + machine.addTransition(startState, XsdSchemaToken::SimpleType, s2); + machine.addTransition(startState, XsdSchemaToken::ComplexType, s2); + machine.addTransition(startState, XsdSchemaToken::Group, s2); + machine.addTransition(startState, XsdSchemaToken::AttributeGroup, s2); + machine.addTransition(startState, XsdSchemaToken::Element, s2); + machine.addTransition(startState, XsdSchemaToken::Attribute, s2); + machine.addTransition(startState, XsdSchemaToken::Notation, s2); + + machine.addTransition(s1, XsdSchemaToken::Include, s1); + machine.addTransition(s1, XsdSchemaToken::Import, s1); + machine.addTransition(s1, XsdSchemaToken::Redefine, s1); + machine.addTransition(s1, XsdSchemaToken::Annotation, s1); + machine.addTransition(s1, XsdSchemaToken::SimpleType, s2); + machine.addTransition(s1, XsdSchemaToken::ComplexType, s2); + machine.addTransition(s1, XsdSchemaToken::Group, s2); + machine.addTransition(s1, XsdSchemaToken::AttributeGroup, s2); + machine.addTransition(s1, XsdSchemaToken::Element, s2); + machine.addTransition(s1, XsdSchemaToken::Attribute, s2); + machine.addTransition(s1, XsdSchemaToken::Notation, s2); + + machine.addTransition(s2, XsdSchemaToken::SimpleType, s2); + machine.addTransition(s2, XsdSchemaToken::ComplexType, s2); + machine.addTransition(s2, XsdSchemaToken::Group, s2); + machine.addTransition(s2, XsdSchemaToken::AttributeGroup, s2); + machine.addTransition(s2, XsdSchemaToken::Element, s2); + machine.addTransition(s2, XsdSchemaToken::Attribute, s2); + machine.addTransition(s2, XsdSchemaToken::Notation, s2); + machine.addTransition(s2, XsdSchemaToken::Annotation, s3); + + machine.addTransition(s3, XsdSchemaToken::SimpleType, s2); + machine.addTransition(s3, XsdSchemaToken::ComplexType, s2); + machine.addTransition(s3, XsdSchemaToken::Group, s2); + machine.addTransition(s3, XsdSchemaToken::AttributeGroup, s2); + machine.addTransition(s3, XsdSchemaToken::Element, s2); + machine.addTransition(s3, XsdSchemaToken::Attribute, s2); + machine.addTransition(s3, XsdSchemaToken::Notation, s2); + machine.addTransition(s3, XsdSchemaToken::Annotation, s3); + + QVector<XsdSchemaToken::NodeName> data1, data2, data3, data4, data5, data6; + + data1 << XsdSchemaToken::Annotation << XsdSchemaToken::Import << XsdSchemaToken::SimpleType << XsdSchemaToken::Annotation; + data2 << XsdSchemaToken::SimpleType; + data3 << XsdSchemaToken::Annotation << XsdSchemaToken::Import << XsdSchemaToken::Include << XsdSchemaToken::Import; + data4 << XsdSchemaToken::SimpleType << XsdSchemaToken::ComplexType << XsdSchemaToken::Annotation << XsdSchemaToken::Attribute; + data5 << XsdSchemaToken::SimpleType << XsdSchemaToken::Include << XsdSchemaToken::Annotation << XsdSchemaToken::Attribute; + + QVERIFY(runTest(data1, machine) == true); + QVERIFY(runTest(data2, machine) == true); + QVERIFY(runTest(data3, machine) == true); + QVERIFY(runTest(data4, machine) == true); + QVERIFY(runTest(data5, machine) == false); + QVERIFY(runTest(data6, machine) == true); +} + +void tst_XMLPatternsSchema::stateMachineTest16() +{ + XsdStateMachine<XsdSchemaToken::NodeName> machine; + + // setup state machine for (annotation | (simpleType | complexType | group | attributeGroup))* : redefine + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + + machine.addTransition(startState, XsdSchemaToken::Annotation, s1); + machine.addTransition(startState, XsdSchemaToken::SimpleType, s1); + machine.addTransition(startState, XsdSchemaToken::ComplexType, s1); + machine.addTransition(startState, XsdSchemaToken::Group, s1); + machine.addTransition(startState, XsdSchemaToken::AttributeGroup, s1); + + machine.addTransition(s1, XsdSchemaToken::Annotation, s1); + machine.addTransition(s1, XsdSchemaToken::SimpleType, s1); + machine.addTransition(s1, XsdSchemaToken::ComplexType, s1); + machine.addTransition(s1, XsdSchemaToken::Group, s1); + machine.addTransition(s1, XsdSchemaToken::AttributeGroup, s1); + + QVector<XsdSchemaToken::NodeName> data1, data2, data3, data4, data5, data6; + + data1 << XsdSchemaToken::Annotation; + data2 << XsdSchemaToken::Annotation << XsdSchemaToken::SimpleType; + data3 << XsdSchemaToken::SimpleType; + data4 << XsdSchemaToken::SimpleType << XsdSchemaToken::SimpleType; + data6 << XsdSchemaToken::Annotation << XsdSchemaToken::Annotation; + + QVERIFY(runTest(data1, machine) == true); + QVERIFY(runTest(data2, machine) == true); + QVERIFY(runTest(data3, machine) == true); + QVERIFY(runTest(data4, machine) == true); + QVERIFY(runTest(data5, machine) == true); + QVERIFY(runTest(data6, machine) == true); +} + +void tst_XMLPatternsSchema::stateMachineTest17() +{ + XsdStateMachine<XsdSchemaToken::NodeName> machine; + + // setup state machine for (annotation?, (restriction | extension)) : simpleContent + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::InternalState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + + machine.addTransition(startState, XsdSchemaToken::Annotation, s1); + machine.addTransition(startState, XsdSchemaToken::Restriction, s2); + machine.addTransition(startState, XsdSchemaToken::Extension, s2); + + machine.addTransition(s1, XsdSchemaToken::Restriction, s2); + machine.addTransition(s1, XsdSchemaToken::Extension, s2); + + QVector<XsdSchemaToken::NodeName> data1, data2, data3, data4, data5, data6; + + data1 << XsdSchemaToken::Annotation; + data2 << XsdSchemaToken::Annotation << XsdSchemaToken::Extension; + data3 << XsdSchemaToken::Restriction; + data4 << XsdSchemaToken::Extension << XsdSchemaToken::Restriction; + data5 << XsdSchemaToken::Annotation << XsdSchemaToken::Annotation; + + QVERIFY(runTest(data1, machine) == false); + QVERIFY(runTest(data2, machine) == true); + QVERIFY(runTest(data3, machine) == true); + QVERIFY(runTest(data4, machine) == false); + QVERIFY(runTest(data5, machine) == false); + QVERIFY(runTest(data6, machine) == false); +} + +void tst_XMLPatternsSchema::stateMachineTest18() +{ + XsdStateMachine<XsdSchemaToken::NodeName> machine; + + // setup state machine for (annotation?, (simpleType?, (minExclusive | minInclusive | maxExclusive | maxInclusive | totalDigits | fractionDigits | length | minLength | maxLength | enumeration | whiteSpace | pattern)*)?, ((attribute | attributeGroup)*, anyAttribute?)) : simpleContent restriction + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s3 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s4 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s5 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + + machine.addTransition(startState, XsdSchemaToken::Annotation, s1); + machine.addTransition(startState, XsdSchemaToken::SimpleType, s2); + machine.addTransition(startState, XsdSchemaToken::MinExclusive, s3); + machine.addTransition(startState, XsdSchemaToken::MinInclusive, s3); + machine.addTransition(startState, XsdSchemaToken::MaxExclusive, s3); + machine.addTransition(startState, XsdSchemaToken::MaxInclusive, s3); + machine.addTransition(startState, XsdSchemaToken::TotalDigits, s3); + machine.addTransition(startState, XsdSchemaToken::FractionDigits, s3); + machine.addTransition(startState, XsdSchemaToken::Length, s3); + machine.addTransition(startState, XsdSchemaToken::MinLength, s3); + machine.addTransition(startState, XsdSchemaToken::MaxLength, s3); + machine.addTransition(startState, XsdSchemaToken::Enumeration, s3); + machine.addTransition(startState, XsdSchemaToken::WhiteSpace, s3); + machine.addTransition(startState, XsdSchemaToken::Pattern, s3); + machine.addTransition(startState, XsdSchemaToken::Attribute, s4); + machine.addTransition(startState, XsdSchemaToken::AttributeGroup, s4); + machine.addTransition(startState, XsdSchemaToken::AnyAttribute, s5); + + machine.addTransition(s1, XsdSchemaToken::SimpleType, s2); + machine.addTransition(s1, XsdSchemaToken::MinExclusive, s3); + machine.addTransition(s1, XsdSchemaToken::MinInclusive, s3); + machine.addTransition(s1, XsdSchemaToken::MaxExclusive, s3); + machine.addTransition(s1, XsdSchemaToken::MaxInclusive, s3); + machine.addTransition(s1, XsdSchemaToken::TotalDigits, s3); + machine.addTransition(s1, XsdSchemaToken::FractionDigits, s3); + machine.addTransition(s1, XsdSchemaToken::Length, s3); + machine.addTransition(s1, XsdSchemaToken::MinLength, s3); + machine.addTransition(s1, XsdSchemaToken::MaxLength, s3); + machine.addTransition(s1, XsdSchemaToken::Enumeration, s3); + machine.addTransition(s1, XsdSchemaToken::WhiteSpace, s3); + machine.addTransition(s1, XsdSchemaToken::Pattern, s3); + machine.addTransition(s1, XsdSchemaToken::Attribute, s4); + machine.addTransition(s1, XsdSchemaToken::AttributeGroup, s4); + machine.addTransition(s1, XsdSchemaToken::AnyAttribute, s5); + + machine.addTransition(s2, XsdSchemaToken::MinExclusive, s3); + machine.addTransition(s2, XsdSchemaToken::MinInclusive, s3); + machine.addTransition(s2, XsdSchemaToken::MaxExclusive, s3); + machine.addTransition(s2, XsdSchemaToken::MaxInclusive, s3); + machine.addTransition(s2, XsdSchemaToken::TotalDigits, s3); + machine.addTransition(s2, XsdSchemaToken::FractionDigits, s3); + machine.addTransition(s2, XsdSchemaToken::Length, s3); + machine.addTransition(s2, XsdSchemaToken::MinLength, s3); + machine.addTransition(s2, XsdSchemaToken::MaxLength, s3); + machine.addTransition(s2, XsdSchemaToken::Enumeration, s3); + machine.addTransition(s2, XsdSchemaToken::WhiteSpace, s3); + machine.addTransition(s2, XsdSchemaToken::Pattern, s3); + machine.addTransition(s2, XsdSchemaToken::Attribute, s4); + machine.addTransition(s2, XsdSchemaToken::AttributeGroup, s4); + machine.addTransition(s2, XsdSchemaToken::AnyAttribute, s5); + + machine.addTransition(s3, XsdSchemaToken::MinExclusive, s3); + machine.addTransition(s3, XsdSchemaToken::MinInclusive, s3); + machine.addTransition(s3, XsdSchemaToken::MaxExclusive, s3); + machine.addTransition(s3, XsdSchemaToken::MaxInclusive, s3); + machine.addTransition(s3, XsdSchemaToken::TotalDigits, s3); + machine.addTransition(s3, XsdSchemaToken::FractionDigits, s3); + machine.addTransition(s3, XsdSchemaToken::Length, s3); + machine.addTransition(s3, XsdSchemaToken::MinLength, s3); + machine.addTransition(s3, XsdSchemaToken::MaxLength, s3); + machine.addTransition(s3, XsdSchemaToken::Enumeration, s3); + machine.addTransition(s3, XsdSchemaToken::WhiteSpace, s3); + machine.addTransition(s3, XsdSchemaToken::Pattern, s3); + machine.addTransition(s3, XsdSchemaToken::Attribute, s4); + machine.addTransition(s3, XsdSchemaToken::AttributeGroup, s4); + machine.addTransition(s3, XsdSchemaToken::AnyAttribute, s5); + + machine.addTransition(s4, XsdSchemaToken::Attribute, s4); + machine.addTransition(s4, XsdSchemaToken::AttributeGroup, s4); + machine.addTransition(s4, XsdSchemaToken::AnyAttribute, s5); + + QVector<XsdSchemaToken::NodeName> data1, data2, data3, data4, data5, data6; + + data1 << XsdSchemaToken::Annotation; + data2 << XsdSchemaToken::SimpleType << XsdSchemaToken::MinExclusive << XsdSchemaToken::MaxExclusive; + data3 << XsdSchemaToken::AnyAttribute << XsdSchemaToken::Attribute; + data4 << XsdSchemaToken::MinExclusive << XsdSchemaToken::TotalDigits << XsdSchemaToken::Enumeration; + data5 << XsdSchemaToken::Annotation << XsdSchemaToken::Annotation; + + QVERIFY(runTest(data1, machine) == true); + QVERIFY(runTest(data2, machine) == true); + QVERIFY(runTest(data3, machine) == false); + QVERIFY(runTest(data4, machine) == true); + QVERIFY(runTest(data5, machine) == false); + QVERIFY(runTest(data6, machine) == true); +} + +void tst_XMLPatternsSchema::stateMachineTest19() +{ + XsdStateMachine<XsdSchemaToken::NodeName> machine; + + // setup state machine for (annotation?, (group | all | choice | sequence)?, ((attribute | attributeGroup)*, anyAttribute?)) : complex content restriction/complex content extension + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId startState = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::StartEndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s1 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s2 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s3 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + const XsdStateMachine<XsdSchemaToken::NodeName>::StateId s4 = machine.addState(XsdStateMachine<XsdSchemaToken::NodeName>::EndState); + + machine.addTransition(startState, XsdSchemaToken::Annotation, s1); + machine.addTransition(startState, XsdSchemaToken::Group, s2); + machine.addTransition(startState, XsdSchemaToken::All, s2); + machine.addTransition(startState, XsdSchemaToken::Choice, s2); + machine.addTransition(startState, XsdSchemaToken::Sequence, s2); + machine.addTransition(startState, XsdSchemaToken::Attribute, s3); + machine.addTransition(startState, XsdSchemaToken::AttributeGroup, s3); + machine.addTransition(startState, XsdSchemaToken::AnyAttribute, s4); + + machine.addTransition(s1, XsdSchemaToken::Group, s2); + machine.addTransition(s1, XsdSchemaToken::All, s2); + machine.addTransition(s1, XsdSchemaToken::Choice, s2); + machine.addTransition(s1, XsdSchemaToken::Sequence, s2); + machine.addTransition(s1, XsdSchemaToken::Attribute, s3); + machine.addTransition(s1, XsdSchemaToken::AttributeGroup, s3); + machine.addTransition(s1, XsdSchemaToken::AnyAttribute, s4); + + machine.addTransition(s2, XsdSchemaToken::Attribute, s3); + machine.addTransition(s2, XsdSchemaToken::AttributeGroup, s3); + machine.addTransition(s2, XsdSchemaToken::AnyAttribute, s4); + + machine.addTransition(s3, XsdSchemaToken::Attribute, s3); + machine.addTransition(s3, XsdSchemaToken::AttributeGroup, s3); + machine.addTransition(s3, XsdSchemaToken::AnyAttribute, s4); + + QVector<XsdSchemaToken::NodeName> data1, data2, data3, data4, data5, data6; + + data1 << XsdSchemaToken::Annotation; + data2 << XsdSchemaToken::Annotation << XsdSchemaToken::Group; + data3 << XsdSchemaToken::Annotation << XsdSchemaToken::Group << XsdSchemaToken::Sequence; + data4 << XsdSchemaToken::Attribute << XsdSchemaToken::Attribute; + data5 << XsdSchemaToken::Attribute << XsdSchemaToken::Sequence; + data6 << XsdSchemaToken::Annotation << XsdSchemaToken::Annotation; + + QVERIFY(runTest(data1, machine) == true); + QVERIFY(runTest(data2, machine) == true); + QVERIFY(runTest(data3, machine) == false); + QVERIFY(runTest(data4, machine) == true); + QVERIFY(runTest(data5, machine) == false); + QVERIFY(runTest(data6, machine) == false); +} + +QTEST_MAIN(tst_XMLPatternsSchema) +#include "tst_xmlpatternsschema.moc" diff --git a/tests/auto/xmlpatternsschema/xmlpatternsschema.pro b/tests/auto/xmlpatternsschema/xmlpatternsschema.pro new file mode 100644 index 0000000..2ba869a --- /dev/null +++ b/tests/auto/xmlpatternsschema/xmlpatternsschema.pro @@ -0,0 +1,6 @@ +load(qttest_p4) +SOURCES += tst_xmlpatternsschema.cpp \ + +include (../xmlpatterns.pri) + +INCLUDEPATH += $$QT_BUILD_TREE/include/QtXmlPatterns/private diff --git a/tests/auto/xmlpatternsschemats/.gitignore b/tests/auto/xmlpatternsschemats/.gitignore new file mode 100644 index 0000000..5fd11f8 --- /dev/null +++ b/tests/auto/xmlpatternsschemats/.gitignore @@ -0,0 +1,4 @@ +CandidateBaseline.xml +runTests +tst_xmlpatternsschemats +runTests diff --git a/tests/auto/xmlpatternsschemats/Baseline.xml b/tests/auto/xmlpatternsschemats/Baseline.xml new file mode 100644 index 0000000..9baef9c --- /dev/null +++ b/tests/auto/xmlpatternsschemats/Baseline.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<test-suite-result xmlns="http://www.w3.org/2005/02/query-test-XQTSResult"><implementation name="Patternist" version="0.1"><organization name="K Desktop Environment(KDE)" website="http://www.kde.org/"/><submittor name="Frans Englich" email="fenglich@trolltech.com"/><description><p>Patternist is an implementation written in C++ and with the Qt/KDE libraries. It is licensed under GNU LGPL and part of KDE, the K Desktop Environment.</p></description></implementation><syntax>XQuery</syntax><test-run dateRun="2009-02-24"><test-suite version=""/></test-run><test-case name="1NISTSchema-SV-IV-atomic-decimal-minExclusive-1 tokoe:valid" result="pass"/><test-case name="2NISTXML-SV-IV-atomic-decimal-minExclusive-1-1 tokoe:valid" result="fail"/><test-case name="3NISTXML-SV-IV-atomic-decimal-minExclusive-1-2 tokoe:valid" result="pass"/><test-case name="4NISTXML-SV-IV-atomic-decimal-minExclusive-1-3 tokoe:valid" result="pass"/><test-case name="5NISTXML-SV-IV-atomic-decimal-minExclusive-1-4 tokoe:valid" result="pass"/><test-case name="6NISTXML-SV-IV-atomic-decimal-minExclusive-1-5 tokoe:valid" result="pass"/><test-case name="7NISTSchema-SV-IV-atomic-decimal-minExclusive-2 tokoe:valid" result="pass"/><test-case name="8NISTXML-SV-IV-atomic-decimal-minExclusive-2-1 tokoe:valid" result="fail"/><test-case name="9NISTXML-SV-IV-atomic-decimal-minExclusive-2-2 tokoe:valid" result="pass"/><test-case name="10NISTXML-SV-IV-atomic-decimal-minExclusive-2-3 tokoe:valid" result="pass"/><test-case name="11NISTXML-SV-IV-atomic-decimal-minExclusive-2-4 tokoe:valid" result="pass"/><test-case name="12NISTXML-SV-IV-atomic-decimal-minExclusive-2-5 tokoe:valid" result="pass"/><test-case name="13NISTSchema-SV-IV-atomic-decimal-minExclusive-3 tokoe:valid" result="pass"/><test-case name="14NISTXML-SV-IV-atomic-decimal-minExclusive-3-1 tokoe:valid" result="fail"/><test-case name="15NISTXML-SV-IV-atomic-decimal-minExclusive-3-2 tokoe:valid" result="pass"/><test-case name="16NISTXML-SV-IV-atomic-decimal-minExclusive-3-3 tokoe:valid" result="pass"/><test-case name="17NISTXML-SV-IV-atomic-decimal-minExclusive-3-4 tokoe:valid" result="pass"/><test-case name="18NISTXML-SV-IV-atomic-decimal-minExclusive-3-5 tokoe:valid" result="pass"/><test-case name="19NISTSchema-SV-IV-atomic-decimal-minExclusive-4 tokoe:valid" result="pass"/><test-case name="20NISTXML-SV-IV-atomic-decimal-minExclusive-4-1 tokoe:valid" result="fail"/><test-case name="21NISTXML-SV-IV-atomic-decimal-minExclusive-4-2 tokoe:valid" result="pass"/><test-case name="22NISTXML-SV-IV-atomic-decimal-minExclusive-4-3 tokoe:valid" result="pass"/><test-case name="23NISTXML-SV-IV-atomic-decimal-minExclusive-4-4 tokoe:valid" result="pass"/><test-case name="24NISTXML-SV-IV-atomic-decimal-minExclusive-4-5 tokoe:valid" result="pass"/><test-case name="25NISTSchema-SV-IV-atomic-decimal-minExclusive-5 tokoe:valid" result="pass"/><test-case name="26NISTXML-SV-IV-atomic-decimal-minExclusive-5-1 tokoe:valid" result="fail"/><test-case name="27NISTSchema-SV-IV-atomic-decimal-minInclusive-1 tokoe:valid" result="pass"/><test-case name="28NISTXML-SV-IV-atomic-decimal-minInclusive-1-1 tokoe:valid" result="pass"/><test-case name="29NISTXML-SV-IV-atomic-decimal-minInclusive-1-2 tokoe:valid" result="pass"/><test-case name="30NISTXML-SV-IV-atomic-decimal-minInclusive-1-3 tokoe:valid" result="pass"/><test-case name="31NISTXML-SV-IV-atomic-decimal-minInclusive-1-4 tokoe:valid" result="pass"/><test-case name="32NISTXML-SV-IV-atomic-decimal-minInclusive-1-5 tokoe:valid" result="pass"/><test-case name="33NISTSchema-SV-IV-atomic-decimal-minInclusive-2 tokoe:valid" result="pass"/><test-case name="34NISTXML-SV-IV-atomic-decimal-minInclusive-2-1 tokoe:valid" result="pass"/><test-case name="35NISTXML-SV-IV-atomic-decimal-minInclusive-2-2 tokoe:valid" result="pass"/><test-case name="36NISTXML-SV-IV-atomic-decimal-minInclusive-2-3 tokoe:valid" result="pass"/><test-case name="37NISTXML-SV-IV-atomic-decimal-minInclusive-2-4 tokoe:valid" result="pass"/><test-case name="38NISTXML-SV-IV-atomic-decimal-minInclusive-2-5 tokoe:valid" result="pass"/><test-case name="39NISTSchema-SV-IV-atomic-decimal-minInclusive-3 tokoe:valid" result="pass"/><test-case name="40NISTXML-SV-IV-atomic-decimal-minInclusive-3-1 tokoe:valid" result="pass"/><test-case name="41NISTXML-SV-IV-atomic-decimal-minInclusive-3-2 tokoe:valid" result="pass"/><test-case name="42NISTXML-SV-IV-atomic-decimal-minInclusive-3-3 tokoe:valid" result="pass"/><test-case name="43NISTXML-SV-IV-atomic-decimal-minInclusive-3-4 tokoe:valid" result="pass"/><test-case name="44NISTXML-SV-IV-atomic-decimal-minInclusive-3-5 tokoe:valid" result="pass"/><test-case name="45NISTSchema-SV-IV-atomic-decimal-minInclusive-4 tokoe:valid" result="pass"/><test-case name="46NISTXML-SV-IV-atomic-decimal-minInclusive-4-1 tokoe:valid" result="pass"/><test-case name="47NISTXML-SV-IV-atomic-decimal-minInclusive-4-2 tokoe:valid" result="pass"/><test-case name="48NISTXML-SV-IV-atomic-decimal-minInclusive-4-3 tokoe:valid" result="pass"/><test-case name="49NISTXML-SV-IV-atomic-decimal-minInclusive-4-4 tokoe:valid" result="pass"/><test-case name="50NISTXML-SV-IV-atomic-decimal-minInclusive-4-5 tokoe:valid" result="pass"/><test-case name="51NISTSchema-SV-IV-atomic-decimal-minInclusive-5 tokoe:valid" result="pass"/><test-case name="52NISTXML-SV-IV-atomic-decimal-minInclusive-5-1 tokoe:valid" result="pass"/><test-case name="53NISTSchema-SV-IV-atomic-decimal-maxExclusive-1 tokoe:valid" result="pass"/><test-case name="54NISTXML-SV-IV-atomic-decimal-maxExclusive-1-1 tokoe:valid" result="fail"/><test-case name="55NISTSchema-SV-IV-atomic-decimal-maxExclusive-2 tokoe:valid" result="pass"/><test-case name="56NISTXML-SV-IV-atomic-decimal-maxExclusive-2-1 tokoe:valid" result="pass"/><test-case name="57NISTXML-SV-IV-atomic-decimal-maxExclusive-2-2 tokoe:valid" result="pass"/><test-case name="58NISTXML-SV-IV-atomic-decimal-maxExclusive-2-3 tokoe:valid" result="pass"/><test-case name="59NISTXML-SV-IV-atomic-decimal-maxExclusive-2-4 tokoe:valid" result="pass"/><test-case name="60NISTXML-SV-IV-atomic-decimal-maxExclusive-2-5 tokoe:valid" result="fail"/><test-case name="61NISTSchema-SV-IV-atomic-decimal-maxExclusive-3 tokoe:valid" result="pass"/><test-case name="62NISTXML-SV-IV-atomic-decimal-maxExclusive-3-1 tokoe:valid" result="pass"/><test-case name="63NISTXML-SV-IV-atomic-decimal-maxExclusive-3-2 tokoe:valid" result="pass"/><test-case name="64NISTXML-SV-IV-atomic-decimal-maxExclusive-3-3 tokoe:valid" result="pass"/><test-case name="65NISTXML-SV-IV-atomic-decimal-maxExclusive-3-4 tokoe:valid" result="pass"/><test-case name="66NISTXML-SV-IV-atomic-decimal-maxExclusive-3-5 tokoe:valid" result="fail"/><test-case name="67NISTSchema-SV-IV-atomic-decimal-maxExclusive-4 tokoe:valid" result="pass"/><test-case name="68NISTXML-SV-IV-atomic-decimal-maxExclusive-4-1 tokoe:valid" result="pass"/><test-case name="69NISTXML-SV-IV-atomic-decimal-maxExclusive-4-2 tokoe:valid" result="pass"/><test-case name="70NISTXML-SV-IV-atomic-decimal-maxExclusive-4-3 tokoe:valid" result="pass"/><test-case name="71NISTXML-SV-IV-atomic-decimal-maxExclusive-4-4 tokoe:valid" result="pass"/><test-case name="72NISTXML-SV-IV-atomic-decimal-maxExclusive-4-5 tokoe:valid" result="fail"/><test-case name="73NISTSchema-SV-IV-atomic-decimal-maxExclusive-5 tokoe:valid" result="pass"/><test-case name="74NISTXML-SV-IV-atomic-decimal-maxExclusive-5-1 tokoe:valid" result="pass"/><test-case name="75NISTXML-SV-IV-atomic-decimal-maxExclusive-5-2 tokoe:valid" result="pass"/><test-case name="76NISTXML-SV-IV-atomic-decimal-maxExclusive-5-3 tokoe:valid" result="pass"/><test-case name="77NISTXML-SV-IV-atomic-decimal-maxExclusive-5-4 tokoe:valid" result="pass"/><test-case name="78NISTXML-SV-IV-atomic-decimal-maxExclusive-5-5 tokoe:valid" result="fail"/><test-case name="79NISTSchema-SV-IV-atomic-decimal-maxInclusive-1 tokoe:valid" result="pass"/><test-case name="80NISTXML-SV-IV-atomic-decimal-maxInclusive-1-1 tokoe:valid" result="pass"/><test-case name="81NISTSchema-SV-IV-atomic-decimal-maxInclusive-2 tokoe:valid" result="pass"/><test-case name="82NISTXML-SV-IV-atomic-decimal-maxInclusive-2-1 tokoe:valid" result="pass"/><test-case name="83NISTXML-SV-IV-atomic-decimal-maxInclusive-2-2 tokoe:valid" result="pass"/><test-case name="84NISTXML-SV-IV-atomic-decimal-maxInclusive-2-3 tokoe:valid" result="pass"/><test-case name="85NISTXML-SV-IV-atomic-decimal-maxInclusive-2-4 tokoe:valid" result="pass"/><test-case name="86NISTXML-SV-IV-atomic-decimal-maxInclusive-2-5 tokoe:valid" result="pass"/><test-case name="87NISTSchema-SV-IV-atomic-decimal-maxInclusive-3 tokoe:valid" result="pass"/><test-case name="88NISTXML-SV-IV-atomic-decimal-maxInclusive-3-1 tokoe:valid" result="pass"/><test-case name="89NISTXML-SV-IV-atomic-decimal-maxInclusive-3-2 tokoe:valid" result="pass"/><test-case name="90NISTXML-SV-IV-atomic-decimal-maxInclusive-3-3 tokoe:valid" result="pass"/><test-case name="91NISTXML-SV-IV-atomic-decimal-maxInclusive-3-4 tokoe:valid" result="pass"/><test-case name="92NISTXML-SV-IV-atomic-decimal-maxInclusive-3-5 tokoe:valid" result="pass"/><test-case name="93NISTSchema-SV-IV-atomic-decimal-maxInclusive-4 tokoe:valid" result="pass"/><test-case name="94NISTXML-SV-IV-atomic-decimal-maxInclusive-4-1 tokoe:valid" result="pass"/><test-case name="95NISTXML-SV-IV-atomic-decimal-maxInclusive-4-2 tokoe:valid" result="pass"/><test-case name="96NISTXML-SV-IV-atomic-decimal-maxInclusive-4-3 tokoe:valid" result="pass"/><test-case name="97NISTXML-SV-IV-atomic-decimal-maxInclusive-4-4 tokoe:valid" result="pass"/><test-case name="98NISTXML-SV-IV-atomic-decimal-maxInclusive-4-5 tokoe:valid" result="pass"/><test-case name="99NISTSchema-SV-IV-atomic-decimal-maxInclusive-5 tokoe:valid" result="pass"/><test-case name="100NISTXML-SV-IV-atomic-decimal-maxInclusive-5-1 tokoe:valid" result="pass"/><test-case name="101NISTXML-SV-IV-atomic-decimal-maxInclusive-5-2 tokoe:valid" result="pass"/><test-case name="102NISTXML-SV-IV-atomic-decimal-maxInclusive-5-3 tokoe:valid" result="pass"/><test-case name="103NISTXML-SV-IV-atomic-decimal-maxInclusive-5-4 tokoe:valid" result="pass"/><test-case name="104NISTXML-SV-IV-atomic-decimal-maxInclusive-5-5 tokoe:valid" result="pass"/><test-case name="105NISTSchema-SV-IV-atomic-decimal-fractionDigits-1 tokoe:valid" result="pass"/><test-case name="106NISTXML-SV-IV-atomic-decimal-fractionDigits-1-1 tokoe:valid" result="pass"/><test-case name="107NISTXML-SV-IV-atomic-decimal-fractionDigits-1-2 tokoe:valid" result="pass"/><test-case name="108NISTXML-SV-IV-atomic-decimal-fractionDigits-1-3 tokoe:valid" result="pass"/><test-case name="109NISTXML-SV-IV-atomic-decimal-fractionDigits-1-4 tokoe:valid" result="pass"/><test-case name="110NISTXML-SV-IV-atomic-decimal-fractionDigits-1-5 tokoe:valid" result="pass"/><test-case name="111NISTSchema-SV-IV-atomic-decimal-fractionDigits-2 tokoe:valid" result="pass"/><test-case name="112NISTXML-SV-IV-atomic-decimal-fractionDigits-2-1 tokoe:valid" result="pass"/><test-case name="113NISTXML-SV-IV-atomic-decimal-fractionDigits-2-2 tokoe:valid" result="pass"/><test-case name="114NISTXML-SV-IV-atomic-decimal-fractionDigits-2-3 tokoe:valid" result="pass"/><test-case name="115NISTXML-SV-IV-atomic-decimal-fractionDigits-2-4 tokoe:valid" result="pass"/><test-case name="116NISTXML-SV-IV-atomic-decimal-fractionDigits-2-5 tokoe:valid" result="pass"/><test-case name="117NISTSchema-SV-IV-atomic-decimal-fractionDigits-3 tokoe:valid" result="pass"/><test-case name="118NISTXML-SV-IV-atomic-decimal-fractionDigits-3-1 tokoe:valid" result="pass"/><test-case name="119NISTXML-SV-IV-atomic-decimal-fractionDigits-3-2 tokoe:valid" result="pass"/><test-case name="120NISTXML-SV-IV-atomic-decimal-fractionDigits-3-3 tokoe:valid" result="pass"/><test-case name="121NISTXML-SV-IV-atomic-decimal-fractionDigits-3-4 tokoe:valid" result="pass"/><test-case name="122NISTXML-SV-IV-atomic-decimal-fractionDigits-3-5 tokoe:valid" result="pass"/><test-case name="123NISTSchema-SV-IV-atomic-decimal-fractionDigits-4 tokoe:valid" result="pass"/><test-case name="124NISTXML-SV-IV-atomic-decimal-fractionDigits-4-1 tokoe:valid" result="pass"/><test-case name="125NISTXML-SV-IV-atomic-decimal-fractionDigits-4-2 tokoe:valid" result="pass"/><test-case name="126NISTXML-SV-IV-atomic-decimal-fractionDigits-4-3 tokoe:valid" result="pass"/><test-case name="127NISTXML-SV-IV-atomic-decimal-fractionDigits-4-4 tokoe:valid" result="pass"/><test-case name="128NISTXML-SV-IV-atomic-decimal-fractionDigits-4-5 tokoe:valid" result="pass"/><test-case name="129NISTSchema-SV-IV-atomic-decimal-fractionDigits-5 tokoe:valid" result="pass"/><test-case name="130NISTXML-SV-IV-atomic-decimal-fractionDigits-5-1 tokoe:valid" result="pass"/><test-case name="131NISTXML-SV-IV-atomic-decimal-fractionDigits-5-2 tokoe:valid" result="pass"/><test-case name="132NISTXML-SV-IV-atomic-decimal-fractionDigits-5-3 tokoe:valid" result="pass"/><test-case name="133NISTXML-SV-IV-atomic-decimal-fractionDigits-5-4 tokoe:valid" result="pass"/><test-case name="134NISTXML-SV-IV-atomic-decimal-fractionDigits-5-5 tokoe:valid" result="pass"/><test-case name="135NISTSchema-SV-IV-atomic-decimal-totalDigits-1 tokoe:valid" result="pass"/><test-case name="136NISTXML-SV-IV-atomic-decimal-totalDigits-1-1 tokoe:valid" result="pass"/><test-case name="137NISTXML-SV-IV-atomic-decimal-totalDigits-1-2 tokoe:valid" result="pass"/><test-case name="138NISTXML-SV-IV-atomic-decimal-totalDigits-1-3 tokoe:valid" result="pass"/><test-case name="139NISTXML-SV-IV-atomic-decimal-totalDigits-1-4 tokoe:valid" result="pass"/><test-case name="140NISTXML-SV-IV-atomic-decimal-totalDigits-1-5 tokoe:valid" result="pass"/><test-case name="141NISTSchema-SV-IV-atomic-decimal-totalDigits-2 tokoe:valid" result="pass"/><test-case name="142NISTXML-SV-IV-atomic-decimal-totalDigits-2-1 tokoe:valid" result="pass"/><test-case name="143NISTXML-SV-IV-atomic-decimal-totalDigits-2-2 tokoe:valid" result="pass"/><test-case name="144NISTXML-SV-IV-atomic-decimal-totalDigits-2-3 tokoe:valid" result="pass"/><test-case name="145NISTXML-SV-IV-atomic-decimal-totalDigits-2-4 tokoe:valid" result="pass"/><test-case name="146NISTXML-SV-IV-atomic-decimal-totalDigits-2-5 tokoe:valid" result="pass"/><test-case name="147NISTSchema-SV-IV-atomic-decimal-totalDigits-3 tokoe:valid" result="pass"/><test-case name="148NISTXML-SV-IV-atomic-decimal-totalDigits-3-1 tokoe:valid" result="pass"/><test-case name="149NISTXML-SV-IV-atomic-decimal-totalDigits-3-2 tokoe:valid" result="pass"/><test-case name="150NISTXML-SV-IV-atomic-decimal-totalDigits-3-3 tokoe:valid" result="pass"/><test-case name="151NISTXML-SV-IV-atomic-decimal-totalDigits-3-4 tokoe:valid" result="pass"/><test-case name="152NISTXML-SV-IV-atomic-decimal-totalDigits-3-5 tokoe:valid" result="pass"/><test-case name="153NISTSchema-SV-IV-atomic-decimal-totalDigits-4 tokoe:valid" result="pass"/><test-case name="154NISTXML-SV-IV-atomic-decimal-totalDigits-4-1 tokoe:valid" result="pass"/><test-case name="155NISTXML-SV-IV-atomic-decimal-totalDigits-4-2 tokoe:valid" result="pass"/><test-case name="156NISTXML-SV-IV-atomic-decimal-totalDigits-4-3 tokoe:valid" result="pass"/><test-case name="157NISTXML-SV-IV-atomic-decimal-totalDigits-4-4 tokoe:valid" result="pass"/><test-case name="158NISTXML-SV-IV-atomic-decimal-totalDigits-4-5 tokoe:valid" result="pass"/><test-case name="159NISTSchema-SV-IV-atomic-decimal-totalDigits-5 tokoe:valid" result="pass"/><test-case name="160NISTXML-SV-IV-atomic-decimal-totalDigits-5-1 tokoe:valid" result="pass"/><test-case name="161NISTXML-SV-IV-atomic-decimal-totalDigits-5-2 tokoe:valid" result="pass"/><test-case name="162NISTXML-SV-IV-atomic-decimal-totalDigits-5-3 tokoe:valid" result="pass"/><test-case name="163NISTXML-SV-IV-atomic-decimal-totalDigits-5-4 tokoe:valid" result="pass"/><test-case name="164NISTXML-SV-IV-atomic-decimal-totalDigits-5-5 tokoe:valid" result="pass"/><test-case name="165NISTSchema-SV-IV-atomic-decimal-pattern-1 tokoe:valid" result="pass"/><test-case name="166NISTXML-SV-IV-atomic-decimal-pattern-1-1 tokoe:valid" result="pass"/><test-case name="167NISTXML-SV-IV-atomic-decimal-pattern-1-2 tokoe:valid" result="pass"/><test-case name="168NISTXML-SV-IV-atomic-decimal-pattern-1-3 tokoe:valid" result="pass"/><test-case name="169NISTXML-SV-IV-atomic-decimal-pattern-1-4 tokoe:valid" result="pass"/><test-case name="170NISTXML-SV-IV-atomic-decimal-pattern-1-5 tokoe:valid" result="pass"/><test-case name="171NISTSchema-SV-IV-atomic-decimal-pattern-2 tokoe:valid" result="pass"/><test-case name="172NISTXML-SV-IV-atomic-decimal-pattern-2-1 tokoe:valid" result="pass"/><test-case name="173NISTXML-SV-IV-atomic-decimal-pattern-2-2 tokoe:valid" result="pass"/><test-case name="174NISTXML-SV-IV-atomic-decimal-pattern-2-3 tokoe:valid" result="pass"/><test-case name="175NISTXML-SV-IV-atomic-decimal-pattern-2-4 tokoe:valid" result="pass"/><test-case name="176NISTXML-SV-IV-atomic-decimal-pattern-2-5 tokoe:valid" result="pass"/><test-case name="177NISTSchema-SV-IV-atomic-decimal-pattern-3 tokoe:valid" result="pass"/><test-case name="178NISTXML-SV-IV-atomic-decimal-pattern-3-1 tokoe:valid" result="pass"/><test-case name="179NISTXML-SV-IV-atomic-decimal-pattern-3-2 tokoe:valid" result="pass"/><test-case name="180NISTXML-SV-IV-atomic-decimal-pattern-3-3 tokoe:valid" result="pass"/><test-case name="181NISTXML-SV-IV-atomic-decimal-pattern-3-4 tokoe:valid" result="pass"/><test-case name="182NISTXML-SV-IV-atomic-decimal-pattern-3-5 tokoe:valid" result="pass"/><test-case name="183NISTSchema-SV-IV-atomic-decimal-pattern-4 tokoe:valid" result="pass"/><test-case name="184NISTXML-SV-IV-atomic-decimal-pattern-4-1 tokoe:valid" result="pass"/><test-case name="185NISTXML-SV-IV-atomic-decimal-pattern-4-2 tokoe:valid" result="pass"/><test-case name="186NISTXML-SV-IV-atomic-decimal-pattern-4-3 tokoe:valid" result="pass"/><test-case name="187NISTXML-SV-IV-atomic-decimal-pattern-4-4 tokoe:valid" result="pass"/><test-case name="188NISTXML-SV-IV-atomic-decimal-pattern-4-5 tokoe:valid" result="pass"/><test-case name="189NISTSchema-SV-IV-atomic-decimal-pattern-5 tokoe:valid" result="pass"/><test-case name="190NISTXML-SV-IV-atomic-decimal-pattern-5-1 tokoe:valid" result="pass"/><test-case name="191NISTXML-SV-IV-atomic-decimal-pattern-5-2 tokoe:valid" result="pass"/><test-case name="192NISTXML-SV-IV-atomic-decimal-pattern-5-3 tokoe:valid" result="pass"/><test-case name="193NISTXML-SV-IV-atomic-decimal-pattern-5-4 tokoe:valid" result="pass"/><test-case name="194NISTXML-SV-IV-atomic-decimal-pattern-5-5 tokoe:valid" result="pass"/><test-case name="195NISTSchema-SV-IV-atomic-decimal-enumeration-1 tokoe:valid" result="pass"/><test-case name="196NISTXML-SV-IV-atomic-decimal-enumeration-1-1 tokoe:valid" result="fail"/><test-case name="197NISTXML-SV-IV-atomic-decimal-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="198NISTXML-SV-IV-atomic-decimal-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="199NISTXML-SV-IV-atomic-decimal-enumeration-1-4 tokoe:valid" result="fail"/><test-case name="200NISTXML-SV-IV-atomic-decimal-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="201NISTSchema-SV-IV-atomic-decimal-enumeration-2 tokoe:valid" result="pass"/><test-case name="202NISTXML-SV-IV-atomic-decimal-enumeration-2-1 tokoe:valid" result="fail"/><test-case name="203NISTXML-SV-IV-atomic-decimal-enumeration-2-2 tokoe:valid" result="fail"/><test-case name="204NISTXML-SV-IV-atomic-decimal-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="205NISTXML-SV-IV-atomic-decimal-enumeration-2-4 tokoe:valid" result="fail"/><test-case name="206NISTXML-SV-IV-atomic-decimal-enumeration-2-5 tokoe:valid" result="fail"/><test-case name="207NISTSchema-SV-IV-atomic-decimal-enumeration-3 tokoe:valid" result="pass"/><test-case name="208NISTXML-SV-IV-atomic-decimal-enumeration-3-1 tokoe:valid" result="fail"/><test-case name="209NISTXML-SV-IV-atomic-decimal-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="210NISTXML-SV-IV-atomic-decimal-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="211NISTXML-SV-IV-atomic-decimal-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="212NISTXML-SV-IV-atomic-decimal-enumeration-3-5 tokoe:valid" result="fail"/><test-case name="213NISTSchema-SV-IV-atomic-decimal-enumeration-4 tokoe:valid" result="pass"/><test-case name="214NISTXML-SV-IV-atomic-decimal-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="215NISTXML-SV-IV-atomic-decimal-enumeration-4-2 tokoe:valid" result="fail"/><test-case name="216NISTXML-SV-IV-atomic-decimal-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="217NISTXML-SV-IV-atomic-decimal-enumeration-4-4 tokoe:valid" result="fail"/><test-case name="218NISTXML-SV-IV-atomic-decimal-enumeration-4-5 tokoe:valid" result="fail"/><test-case name="219NISTSchema-SV-IV-atomic-decimal-enumeration-5 tokoe:valid" result="pass"/><test-case name="220NISTXML-SV-IV-atomic-decimal-enumeration-5-1 tokoe:valid" result="fail"/><test-case name="221NISTXML-SV-IV-atomic-decimal-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="222NISTXML-SV-IV-atomic-decimal-enumeration-5-3 tokoe:valid" result="fail"/><test-case name="223NISTXML-SV-IV-atomic-decimal-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="224NISTXML-SV-IV-atomic-decimal-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="225NISTSchema-SV-IV-atomic-decimal-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="226NISTXML-SV-IV-atomic-decimal-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="227NISTXML-SV-IV-atomic-decimal-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="228NISTXML-SV-IV-atomic-decimal-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="229NISTXML-SV-IV-atomic-decimal-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="230NISTXML-SV-IV-atomic-decimal-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="231NISTSchema-SV-IV-atomic-integer-minExclusive-1 tokoe:valid" result="pass"/><test-case name="232NISTXML-SV-IV-atomic-integer-minExclusive-1-1 tokoe:valid" result="pass"/><test-case name="233NISTXML-SV-IV-atomic-integer-minExclusive-1-2 tokoe:valid" result="pass"/><test-case name="234NISTXML-SV-IV-atomic-integer-minExclusive-1-3 tokoe:valid" result="pass"/><test-case name="235NISTXML-SV-IV-atomic-integer-minExclusive-1-4 tokoe:valid" result="pass"/><test-case name="236NISTXML-SV-IV-atomic-integer-minExclusive-1-5 tokoe:valid" result="pass"/><test-case name="237NISTSchema-SV-IV-atomic-integer-minExclusive-2 tokoe:valid" result="pass"/><test-case name="238NISTXML-SV-IV-atomic-integer-minExclusive-2-1 tokoe:valid" result="pass"/><test-case name="239NISTXML-SV-IV-atomic-integer-minExclusive-2-2 tokoe:valid" result="pass"/><test-case name="240NISTXML-SV-IV-atomic-integer-minExclusive-2-3 tokoe:valid" result="pass"/><test-case name="241NISTXML-SV-IV-atomic-integer-minExclusive-2-4 tokoe:valid" result="pass"/><test-case name="242NISTXML-SV-IV-atomic-integer-minExclusive-2-5 tokoe:valid" result="pass"/><test-case name="243NISTSchema-SV-IV-atomic-integer-minExclusive-3 tokoe:valid" result="pass"/><test-case name="244NISTXML-SV-IV-atomic-integer-minExclusive-3-1 tokoe:valid" result="pass"/><test-case name="245NISTXML-SV-IV-atomic-integer-minExclusive-3-2 tokoe:valid" result="pass"/><test-case name="246NISTXML-SV-IV-atomic-integer-minExclusive-3-3 tokoe:valid" result="pass"/><test-case name="247NISTXML-SV-IV-atomic-integer-minExclusive-3-4 tokoe:valid" result="pass"/><test-case name="248NISTXML-SV-IV-atomic-integer-minExclusive-3-5 tokoe:valid" result="pass"/><test-case name="249NISTSchema-SV-IV-atomic-integer-minExclusive-4 tokoe:valid" result="pass"/><test-case name="250NISTXML-SV-IV-atomic-integer-minExclusive-4-1 tokoe:valid" result="pass"/><test-case name="251NISTXML-SV-IV-atomic-integer-minExclusive-4-2 tokoe:valid" result="pass"/><test-case name="252NISTXML-SV-IV-atomic-integer-minExclusive-4-3 tokoe:valid" result="pass"/><test-case name="253NISTXML-SV-IV-atomic-integer-minExclusive-4-4 tokoe:valid" result="pass"/><test-case name="254NISTXML-SV-IV-atomic-integer-minExclusive-4-5 tokoe:valid" result="pass"/><test-case name="255NISTSchema-SV-IV-atomic-integer-minExclusive-5 tokoe:valid" result="pass"/><test-case name="256NISTXML-SV-IV-atomic-integer-minExclusive-5-1 tokoe:valid" result="pass"/><test-case name="257NISTSchema-SV-IV-atomic-integer-minInclusive-1 tokoe:valid" result="pass"/><test-case name="258NISTXML-SV-IV-atomic-integer-minInclusive-1-1 tokoe:valid" result="pass"/><test-case name="259NISTXML-SV-IV-atomic-integer-minInclusive-1-2 tokoe:valid" result="pass"/><test-case name="260NISTXML-SV-IV-atomic-integer-minInclusive-1-3 tokoe:valid" result="pass"/><test-case name="261NISTXML-SV-IV-atomic-integer-minInclusive-1-4 tokoe:valid" result="pass"/><test-case name="262NISTXML-SV-IV-atomic-integer-minInclusive-1-5 tokoe:valid" result="pass"/><test-case name="263NISTSchema-SV-IV-atomic-integer-minInclusive-2 tokoe:valid" result="pass"/><test-case name="264NISTXML-SV-IV-atomic-integer-minInclusive-2-1 tokoe:valid" result="pass"/><test-case name="265NISTXML-SV-IV-atomic-integer-minInclusive-2-2 tokoe:valid" result="pass"/><test-case name="266NISTXML-SV-IV-atomic-integer-minInclusive-2-3 tokoe:valid" result="pass"/><test-case name="267NISTXML-SV-IV-atomic-integer-minInclusive-2-4 tokoe:valid" result="pass"/><test-case name="268NISTXML-SV-IV-atomic-integer-minInclusive-2-5 tokoe:valid" result="pass"/><test-case name="269NISTSchema-SV-IV-atomic-integer-minInclusive-3 tokoe:valid" result="pass"/><test-case name="270NISTXML-SV-IV-atomic-integer-minInclusive-3-1 tokoe:valid" result="pass"/><test-case name="271NISTXML-SV-IV-atomic-integer-minInclusive-3-2 tokoe:valid" result="pass"/><test-case name="272NISTXML-SV-IV-atomic-integer-minInclusive-3-3 tokoe:valid" result="pass"/><test-case name="273NISTXML-SV-IV-atomic-integer-minInclusive-3-4 tokoe:valid" result="pass"/><test-case name="274NISTXML-SV-IV-atomic-integer-minInclusive-3-5 tokoe:valid" result="pass"/><test-case name="275NISTSchema-SV-IV-atomic-integer-minInclusive-4 tokoe:valid" result="pass"/><test-case name="276NISTXML-SV-IV-atomic-integer-minInclusive-4-1 tokoe:valid" result="pass"/><test-case name="277NISTXML-SV-IV-atomic-integer-minInclusive-4-2 tokoe:valid" result="pass"/><test-case name="278NISTXML-SV-IV-atomic-integer-minInclusive-4-3 tokoe:valid" result="pass"/><test-case name="279NISTXML-SV-IV-atomic-integer-minInclusive-4-4 tokoe:valid" result="pass"/><test-case name="280NISTXML-SV-IV-atomic-integer-minInclusive-4-5 tokoe:valid" result="pass"/><test-case name="281NISTSchema-SV-IV-atomic-integer-minInclusive-5 tokoe:valid" result="pass"/><test-case name="282NISTXML-SV-IV-atomic-integer-minInclusive-5-1 tokoe:valid" result="pass"/><test-case name="283NISTSchema-SV-IV-atomic-integer-maxExclusive-1 tokoe:valid" result="pass"/><test-case name="284NISTXML-SV-IV-atomic-integer-maxExclusive-1-1 tokoe:valid" result="pass"/><test-case name="285NISTSchema-SV-IV-atomic-integer-maxExclusive-2 tokoe:valid" result="pass"/><test-case name="286NISTXML-SV-IV-atomic-integer-maxExclusive-2-1 tokoe:valid" result="pass"/><test-case name="287NISTXML-SV-IV-atomic-integer-maxExclusive-2-2 tokoe:valid" result="pass"/><test-case name="288NISTXML-SV-IV-atomic-integer-maxExclusive-2-3 tokoe:valid" result="pass"/><test-case name="289NISTXML-SV-IV-atomic-integer-maxExclusive-2-4 tokoe:valid" result="pass"/><test-case name="290NISTXML-SV-IV-atomic-integer-maxExclusive-2-5 tokoe:valid" result="pass"/><test-case name="291NISTSchema-SV-IV-atomic-integer-maxExclusive-3 tokoe:valid" result="pass"/><test-case name="292NISTXML-SV-IV-atomic-integer-maxExclusive-3-1 tokoe:valid" result="pass"/><test-case name="293NISTXML-SV-IV-atomic-integer-maxExclusive-3-2 tokoe:valid" result="pass"/><test-case name="294NISTXML-SV-IV-atomic-integer-maxExclusive-3-3 tokoe:valid" result="pass"/><test-case name="295NISTXML-SV-IV-atomic-integer-maxExclusive-3-4 tokoe:valid" result="pass"/><test-case name="296NISTXML-SV-IV-atomic-integer-maxExclusive-3-5 tokoe:valid" result="pass"/><test-case name="297NISTSchema-SV-IV-atomic-integer-maxExclusive-4 tokoe:valid" result="pass"/><test-case name="298NISTXML-SV-IV-atomic-integer-maxExclusive-4-1 tokoe:valid" result="pass"/><test-case name="299NISTXML-SV-IV-atomic-integer-maxExclusive-4-2 tokoe:valid" result="pass"/><test-case name="300NISTXML-SV-IV-atomic-integer-maxExclusive-4-3 tokoe:valid" result="pass"/><test-case name="301NISTXML-SV-IV-atomic-integer-maxExclusive-4-4 tokoe:valid" result="pass"/><test-case name="302NISTXML-SV-IV-atomic-integer-maxExclusive-4-5 tokoe:valid" result="pass"/><test-case name="303NISTSchema-SV-IV-atomic-integer-maxExclusive-5 tokoe:valid" result="pass"/><test-case name="304NISTXML-SV-IV-atomic-integer-maxExclusive-5-1 tokoe:valid" result="pass"/><test-case name="305NISTXML-SV-IV-atomic-integer-maxExclusive-5-2 tokoe:valid" result="pass"/><test-case name="306NISTXML-SV-IV-atomic-integer-maxExclusive-5-3 tokoe:valid" result="pass"/><test-case name="307NISTXML-SV-IV-atomic-integer-maxExclusive-5-4 tokoe:valid" result="pass"/><test-case name="308NISTXML-SV-IV-atomic-integer-maxExclusive-5-5 tokoe:valid" result="pass"/><test-case name="309NISTSchema-SV-IV-atomic-integer-maxInclusive-1 tokoe:valid" result="pass"/><test-case name="310NISTXML-SV-IV-atomic-integer-maxInclusive-1-1 tokoe:valid" result="pass"/><test-case name="311NISTSchema-SV-IV-atomic-integer-maxInclusive-2 tokoe:valid" result="pass"/><test-case name="312NISTXML-SV-IV-atomic-integer-maxInclusive-2-1 tokoe:valid" result="pass"/><test-case name="313NISTXML-SV-IV-atomic-integer-maxInclusive-2-2 tokoe:valid" result="pass"/><test-case name="314NISTXML-SV-IV-atomic-integer-maxInclusive-2-3 tokoe:valid" result="pass"/><test-case name="315NISTXML-SV-IV-atomic-integer-maxInclusive-2-4 tokoe:valid" result="pass"/><test-case name="316NISTXML-SV-IV-atomic-integer-maxInclusive-2-5 tokoe:valid" result="pass"/><test-case name="317NISTSchema-SV-IV-atomic-integer-maxInclusive-3 tokoe:valid" result="pass"/><test-case name="318NISTXML-SV-IV-atomic-integer-maxInclusive-3-1 tokoe:valid" result="pass"/><test-case name="319NISTXML-SV-IV-atomic-integer-maxInclusive-3-2 tokoe:valid" result="pass"/><test-case name="320NISTXML-SV-IV-atomic-integer-maxInclusive-3-3 tokoe:valid" result="pass"/><test-case name="321NISTXML-SV-IV-atomic-integer-maxInclusive-3-4 tokoe:valid" result="pass"/><test-case name="322NISTXML-SV-IV-atomic-integer-maxInclusive-3-5 tokoe:valid" result="pass"/><test-case name="323NISTSchema-SV-IV-atomic-integer-maxInclusive-4 tokoe:valid" result="pass"/><test-case name="324NISTXML-SV-IV-atomic-integer-maxInclusive-4-1 tokoe:valid" result="pass"/><test-case name="325NISTXML-SV-IV-atomic-integer-maxInclusive-4-2 tokoe:valid" result="pass"/><test-case name="326NISTXML-SV-IV-atomic-integer-maxInclusive-4-3 tokoe:valid" result="pass"/><test-case name="327NISTXML-SV-IV-atomic-integer-maxInclusive-4-4 tokoe:valid" result="pass"/><test-case name="328NISTXML-SV-IV-atomic-integer-maxInclusive-4-5 tokoe:valid" result="pass"/><test-case name="329NISTSchema-SV-IV-atomic-integer-maxInclusive-5 tokoe:valid" result="pass"/><test-case name="330NISTXML-SV-IV-atomic-integer-maxInclusive-5-1 tokoe:valid" result="pass"/><test-case name="331NISTXML-SV-IV-atomic-integer-maxInclusive-5-2 tokoe:valid" result="pass"/><test-case name="332NISTXML-SV-IV-atomic-integer-maxInclusive-5-3 tokoe:valid" result="pass"/><test-case name="333NISTXML-SV-IV-atomic-integer-maxInclusive-5-4 tokoe:valid" result="pass"/><test-case name="334NISTXML-SV-IV-atomic-integer-maxInclusive-5-5 tokoe:valid" result="pass"/><test-case name="335NISTSchema-SV-IV-atomic-integer-fractionDigits-1 tokoe:valid" result="pass"/><test-case name="336NISTXML-SV-IV-atomic-integer-fractionDigits-1-1 tokoe:valid" result="pass"/><test-case name="337NISTXML-SV-IV-atomic-integer-fractionDigits-1-2 tokoe:valid" result="pass"/><test-case name="338NISTXML-SV-IV-atomic-integer-fractionDigits-1-3 tokoe:valid" result="pass"/><test-case name="339NISTXML-SV-IV-atomic-integer-fractionDigits-1-4 tokoe:valid" result="pass"/><test-case name="340NISTXML-SV-IV-atomic-integer-fractionDigits-1-5 tokoe:valid" result="pass"/><test-case name="341NISTSchema-SV-IV-atomic-integer-totalDigits-1 tokoe:valid" result="pass"/><test-case name="342NISTXML-SV-IV-atomic-integer-totalDigits-1-1 tokoe:valid" result="pass"/><test-case name="343NISTXML-SV-IV-atomic-integer-totalDigits-1-2 tokoe:valid" result="pass"/><test-case name="344NISTXML-SV-IV-atomic-integer-totalDigits-1-3 tokoe:valid" result="pass"/><test-case name="345NISTXML-SV-IV-atomic-integer-totalDigits-1-4 tokoe:valid" result="pass"/><test-case name="346NISTXML-SV-IV-atomic-integer-totalDigits-1-5 tokoe:valid" result="pass"/><test-case name="347NISTSchema-SV-IV-atomic-integer-totalDigits-2 tokoe:valid" result="pass"/><test-case name="348NISTXML-SV-IV-atomic-integer-totalDigits-2-1 tokoe:valid" result="pass"/><test-case name="349NISTXML-SV-IV-atomic-integer-totalDigits-2-2 tokoe:valid" result="pass"/><test-case name="350NISTXML-SV-IV-atomic-integer-totalDigits-2-3 tokoe:valid" result="pass"/><test-case name="351NISTXML-SV-IV-atomic-integer-totalDigits-2-4 tokoe:valid" result="pass"/><test-case name="352NISTXML-SV-IV-atomic-integer-totalDigits-2-5 tokoe:valid" result="pass"/><test-case name="353NISTSchema-SV-IV-atomic-integer-totalDigits-3 tokoe:valid" result="pass"/><test-case name="354NISTXML-SV-IV-atomic-integer-totalDigits-3-1 tokoe:valid" result="pass"/><test-case name="355NISTXML-SV-IV-atomic-integer-totalDigits-3-2 tokoe:valid" result="pass"/><test-case name="356NISTXML-SV-IV-atomic-integer-totalDigits-3-3 tokoe:valid" result="pass"/><test-case name="357NISTXML-SV-IV-atomic-integer-totalDigits-3-4 tokoe:valid" result="pass"/><test-case name="358NISTXML-SV-IV-atomic-integer-totalDigits-3-5 tokoe:valid" result="pass"/><test-case name="359NISTSchema-SV-IV-atomic-integer-totalDigits-4 tokoe:valid" result="pass"/><test-case name="360NISTXML-SV-IV-atomic-integer-totalDigits-4-1 tokoe:valid" result="pass"/><test-case name="361NISTXML-SV-IV-atomic-integer-totalDigits-4-2 tokoe:valid" result="pass"/><test-case name="362NISTXML-SV-IV-atomic-integer-totalDigits-4-3 tokoe:valid" result="pass"/><test-case name="363NISTXML-SV-IV-atomic-integer-totalDigits-4-4 tokoe:valid" result="pass"/><test-case name="364NISTXML-SV-IV-atomic-integer-totalDigits-4-5 tokoe:valid" result="pass"/><test-case name="365NISTSchema-SV-IV-atomic-integer-totalDigits-5 tokoe:valid" result="pass"/><test-case name="366NISTXML-SV-IV-atomic-integer-totalDigits-5-1 tokoe:valid" result="pass"/><test-case name="367NISTXML-SV-IV-atomic-integer-totalDigits-5-2 tokoe:valid" result="pass"/><test-case name="368NISTXML-SV-IV-atomic-integer-totalDigits-5-3 tokoe:valid" result="pass"/><test-case name="369NISTXML-SV-IV-atomic-integer-totalDigits-5-4 tokoe:valid" result="pass"/><test-case name="370NISTXML-SV-IV-atomic-integer-totalDigits-5-5 tokoe:valid" result="pass"/><test-case name="371NISTSchema-SV-IV-atomic-integer-pattern-1 tokoe:valid" result="pass"/><test-case name="372NISTXML-SV-IV-atomic-integer-pattern-1-1 tokoe:valid" result="pass"/><test-case name="373NISTXML-SV-IV-atomic-integer-pattern-1-2 tokoe:valid" result="pass"/><test-case name="374NISTXML-SV-IV-atomic-integer-pattern-1-3 tokoe:valid" result="pass"/><test-case name="375NISTXML-SV-IV-atomic-integer-pattern-1-4 tokoe:valid" result="pass"/><test-case name="376NISTXML-SV-IV-atomic-integer-pattern-1-5 tokoe:valid" result="pass"/><test-case name="377NISTSchema-SV-IV-atomic-integer-pattern-2 tokoe:valid" result="pass"/><test-case name="378NISTXML-SV-IV-atomic-integer-pattern-2-1 tokoe:valid" result="pass"/><test-case name="379NISTXML-SV-IV-atomic-integer-pattern-2-2 tokoe:valid" result="pass"/><test-case name="380NISTXML-SV-IV-atomic-integer-pattern-2-3 tokoe:valid" result="pass"/><test-case name="381NISTXML-SV-IV-atomic-integer-pattern-2-4 tokoe:valid" result="pass"/><test-case name="382NISTXML-SV-IV-atomic-integer-pattern-2-5 tokoe:valid" result="pass"/><test-case name="383NISTSchema-SV-IV-atomic-integer-pattern-3 tokoe:valid" result="pass"/><test-case name="384NISTXML-SV-IV-atomic-integer-pattern-3-1 tokoe:valid" result="pass"/><test-case name="385NISTXML-SV-IV-atomic-integer-pattern-3-2 tokoe:valid" result="pass"/><test-case name="386NISTXML-SV-IV-atomic-integer-pattern-3-3 tokoe:valid" result="pass"/><test-case name="387NISTXML-SV-IV-atomic-integer-pattern-3-4 tokoe:valid" result="pass"/><test-case name="388NISTXML-SV-IV-atomic-integer-pattern-3-5 tokoe:valid" result="pass"/><test-case name="389NISTSchema-SV-IV-atomic-integer-pattern-4 tokoe:valid" result="pass"/><test-case name="390NISTXML-SV-IV-atomic-integer-pattern-4-1 tokoe:valid" result="pass"/><test-case name="391NISTXML-SV-IV-atomic-integer-pattern-4-2 tokoe:valid" result="pass"/><test-case name="392NISTXML-SV-IV-atomic-integer-pattern-4-3 tokoe:valid" result="pass"/><test-case name="393NISTXML-SV-IV-atomic-integer-pattern-4-4 tokoe:valid" result="pass"/><test-case name="394NISTXML-SV-IV-atomic-integer-pattern-4-5 tokoe:valid" result="pass"/><test-case name="395NISTSchema-SV-IV-atomic-integer-pattern-5 tokoe:valid" result="pass"/><test-case name="396NISTXML-SV-IV-atomic-integer-pattern-5-1 tokoe:valid" result="pass"/><test-case name="397NISTXML-SV-IV-atomic-integer-pattern-5-2 tokoe:valid" result="pass"/><test-case name="398NISTXML-SV-IV-atomic-integer-pattern-5-3 tokoe:valid" result="pass"/><test-case name="399NISTXML-SV-IV-atomic-integer-pattern-5-4 tokoe:valid" result="pass"/><test-case name="400NISTXML-SV-IV-atomic-integer-pattern-5-5 tokoe:valid" result="pass"/><test-case name="401NISTSchema-SV-IV-atomic-integer-enumeration-1 tokoe:valid" result="pass"/><test-case name="402NISTXML-SV-IV-atomic-integer-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="403NISTXML-SV-IV-atomic-integer-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="404NISTXML-SV-IV-atomic-integer-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="405NISTXML-SV-IV-atomic-integer-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="406NISTXML-SV-IV-atomic-integer-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="407NISTSchema-SV-IV-atomic-integer-enumeration-2 tokoe:valid" result="pass"/><test-case name="408NISTXML-SV-IV-atomic-integer-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="409NISTXML-SV-IV-atomic-integer-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="410NISTXML-SV-IV-atomic-integer-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="411NISTXML-SV-IV-atomic-integer-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="412NISTXML-SV-IV-atomic-integer-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="413NISTSchema-SV-IV-atomic-integer-enumeration-3 tokoe:valid" result="pass"/><test-case name="414NISTXML-SV-IV-atomic-integer-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="415NISTXML-SV-IV-atomic-integer-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="416NISTXML-SV-IV-atomic-integer-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="417NISTXML-SV-IV-atomic-integer-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="418NISTXML-SV-IV-atomic-integer-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="419NISTSchema-SV-IV-atomic-integer-enumeration-4 tokoe:valid" result="pass"/><test-case name="420NISTXML-SV-IV-atomic-integer-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="421NISTXML-SV-IV-atomic-integer-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="422NISTXML-SV-IV-atomic-integer-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="423NISTXML-SV-IV-atomic-integer-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="424NISTXML-SV-IV-atomic-integer-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="425NISTSchema-SV-IV-atomic-integer-enumeration-5 tokoe:valid" result="pass"/><test-case name="426NISTXML-SV-IV-atomic-integer-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="427NISTXML-SV-IV-atomic-integer-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="428NISTXML-SV-IV-atomic-integer-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="429NISTXML-SV-IV-atomic-integer-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="430NISTXML-SV-IV-atomic-integer-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="431NISTSchema-SV-IV-atomic-integer-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="432NISTXML-SV-IV-atomic-integer-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="433NISTXML-SV-IV-atomic-integer-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="434NISTXML-SV-IV-atomic-integer-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="435NISTXML-SV-IV-atomic-integer-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="436NISTXML-SV-IV-atomic-integer-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="437NISTSchema-SV-IV-atomic-nonPositiveInteger-minExclusive-1 tokoe:valid" result="pass"/><test-case name="438NISTXML-SV-IV-atomic-nonPositiveInteger-minExclusive-1-1 tokoe:valid" result="pass"/><test-case name="439NISTXML-SV-IV-atomic-nonPositiveInteger-minExclusive-1-2 tokoe:valid" result="pass"/><test-case name="440NISTXML-SV-IV-atomic-nonPositiveInteger-minExclusive-1-3 tokoe:valid" result="pass"/><test-case name="441NISTXML-SV-IV-atomic-nonPositiveInteger-minExclusive-1-4 tokoe:valid" result="pass"/><test-case name="442NISTXML-SV-IV-atomic-nonPositiveInteger-minExclusive-1-5 tokoe:valid" result="pass"/><test-case name="443NISTSchema-SV-IV-atomic-nonPositiveInteger-minExclusive-2 tokoe:valid" result="pass"/><test-case name="444NISTXML-SV-IV-atomic-nonPositiveInteger-minExclusive-2-1 tokoe:valid" result="pass"/><test-case name="445NISTXML-SV-IV-atomic-nonPositiveInteger-minExclusive-2-2 tokoe:valid" result="pass"/><test-case name="446NISTXML-SV-IV-atomic-nonPositiveInteger-minExclusive-2-3 tokoe:valid" result="pass"/><test-case name="447NISTXML-SV-IV-atomic-nonPositiveInteger-minExclusive-2-4 tokoe:valid" result="pass"/><test-case name="448NISTXML-SV-IV-atomic-nonPositiveInteger-minExclusive-2-5 tokoe:valid" result="pass"/><test-case name="449NISTSchema-SV-IV-atomic-nonPositiveInteger-minExclusive-3 tokoe:valid" result="pass"/><test-case name="450NISTXML-SV-IV-atomic-nonPositiveInteger-minExclusive-3-1 tokoe:valid" result="pass"/><test-case name="451NISTXML-SV-IV-atomic-nonPositiveInteger-minExclusive-3-2 tokoe:valid" result="pass"/><test-case name="452NISTXML-SV-IV-atomic-nonPositiveInteger-minExclusive-3-3 tokoe:valid" result="pass"/><test-case name="453NISTXML-SV-IV-atomic-nonPositiveInteger-minExclusive-3-4 tokoe:valid" result="pass"/><test-case name="454NISTXML-SV-IV-atomic-nonPositiveInteger-minExclusive-3-5 tokoe:valid" result="pass"/><test-case name="455NISTSchema-SV-IV-atomic-nonPositiveInteger-minExclusive-4 tokoe:valid" result="pass"/><test-case name="456NISTXML-SV-IV-atomic-nonPositiveInteger-minExclusive-4-1 tokoe:valid" result="pass"/><test-case name="457NISTXML-SV-IV-atomic-nonPositiveInteger-minExclusive-4-2 tokoe:valid" result="pass"/><test-case name="458NISTXML-SV-IV-atomic-nonPositiveInteger-minExclusive-4-3 tokoe:valid" result="pass"/><test-case name="459NISTXML-SV-IV-atomic-nonPositiveInteger-minExclusive-4-4 tokoe:valid" result="pass"/><test-case name="460NISTXML-SV-IV-atomic-nonPositiveInteger-minExclusive-4-5 tokoe:valid" result="pass"/><test-case name="461NISTSchema-SV-IV-atomic-nonPositiveInteger-minExclusive-5 tokoe:valid" result="pass"/><test-case name="462NISTXML-SV-IV-atomic-nonPositiveInteger-minExclusive-5-1 tokoe:valid" result="pass"/><test-case name="463NISTSchema-SV-IV-atomic-nonPositiveInteger-minInclusive-1 tokoe:valid" result="pass"/><test-case name="464NISTXML-SV-IV-atomic-nonPositiveInteger-minInclusive-1-1 tokoe:valid" result="pass"/><test-case name="465NISTXML-SV-IV-atomic-nonPositiveInteger-minInclusive-1-2 tokoe:valid" result="pass"/><test-case name="466NISTXML-SV-IV-atomic-nonPositiveInteger-minInclusive-1-3 tokoe:valid" result="pass"/><test-case name="467NISTXML-SV-IV-atomic-nonPositiveInteger-minInclusive-1-4 tokoe:valid" result="pass"/><test-case name="468NISTXML-SV-IV-atomic-nonPositiveInteger-minInclusive-1-5 tokoe:valid" result="pass"/><test-case name="469NISTSchema-SV-IV-atomic-nonPositiveInteger-minInclusive-2 tokoe:valid" result="pass"/><test-case name="470NISTXML-SV-IV-atomic-nonPositiveInteger-minInclusive-2-1 tokoe:valid" result="pass"/><test-case name="471NISTXML-SV-IV-atomic-nonPositiveInteger-minInclusive-2-2 tokoe:valid" result="pass"/><test-case name="472NISTXML-SV-IV-atomic-nonPositiveInteger-minInclusive-2-3 tokoe:valid" result="pass"/><test-case name="473NISTXML-SV-IV-atomic-nonPositiveInteger-minInclusive-2-4 tokoe:valid" result="pass"/><test-case name="474NISTXML-SV-IV-atomic-nonPositiveInteger-minInclusive-2-5 tokoe:valid" result="pass"/><test-case name="475NISTSchema-SV-IV-atomic-nonPositiveInteger-minInclusive-3 tokoe:valid" result="pass"/><test-case name="476NISTXML-SV-IV-atomic-nonPositiveInteger-minInclusive-3-1 tokoe:valid" result="pass"/><test-case name="477NISTXML-SV-IV-atomic-nonPositiveInteger-minInclusive-3-2 tokoe:valid" result="pass"/><test-case name="478NISTXML-SV-IV-atomic-nonPositiveInteger-minInclusive-3-3 tokoe:valid" result="pass"/><test-case name="479NISTXML-SV-IV-atomic-nonPositiveInteger-minInclusive-3-4 tokoe:valid" result="pass"/><test-case name="480NISTXML-SV-IV-atomic-nonPositiveInteger-minInclusive-3-5 tokoe:valid" result="pass"/><test-case name="481NISTSchema-SV-IV-atomic-nonPositiveInteger-minInclusive-4 tokoe:valid" result="pass"/><test-case name="482NISTXML-SV-IV-atomic-nonPositiveInteger-minInclusive-4-1 tokoe:valid" result="pass"/><test-case name="483NISTXML-SV-IV-atomic-nonPositiveInteger-minInclusive-4-2 tokoe:valid" result="pass"/><test-case name="484NISTXML-SV-IV-atomic-nonPositiveInteger-minInclusive-4-3 tokoe:valid" result="pass"/><test-case name="485NISTXML-SV-IV-atomic-nonPositiveInteger-minInclusive-4-4 tokoe:valid" result="pass"/><test-case name="486NISTXML-SV-IV-atomic-nonPositiveInteger-minInclusive-4-5 tokoe:valid" result="pass"/><test-case name="487NISTSchema-SV-IV-atomic-nonPositiveInteger-minInclusive-5 tokoe:valid" result="pass"/><test-case name="488NISTXML-SV-IV-atomic-nonPositiveInteger-minInclusive-5-1 tokoe:valid" result="pass"/><test-case name="489NISTSchema-SV-IV-atomic-nonPositiveInteger-maxExclusive-1 tokoe:valid" result="pass"/><test-case name="490NISTXML-SV-IV-atomic-nonPositiveInteger-maxExclusive-1-1 tokoe:valid" result="pass"/><test-case name="491NISTSchema-SV-IV-atomic-nonPositiveInteger-maxExclusive-2 tokoe:valid" result="pass"/><test-case name="492NISTXML-SV-IV-atomic-nonPositiveInteger-maxExclusive-2-1 tokoe:valid" result="pass"/><test-case name="493NISTXML-SV-IV-atomic-nonPositiveInteger-maxExclusive-2-2 tokoe:valid" result="pass"/><test-case name="494NISTXML-SV-IV-atomic-nonPositiveInteger-maxExclusive-2-3 tokoe:valid" result="pass"/><test-case name="495NISTXML-SV-IV-atomic-nonPositiveInteger-maxExclusive-2-4 tokoe:valid" result="pass"/><test-case name="496NISTXML-SV-IV-atomic-nonPositiveInteger-maxExclusive-2-5 tokoe:valid" result="pass"/><test-case name="497NISTSchema-SV-IV-atomic-nonPositiveInteger-maxExclusive-3 tokoe:valid" result="pass"/><test-case name="498NISTXML-SV-IV-atomic-nonPositiveInteger-maxExclusive-3-1 tokoe:valid" result="pass"/><test-case name="499NISTXML-SV-IV-atomic-nonPositiveInteger-maxExclusive-3-2 tokoe:valid" result="pass"/><test-case name="500NISTXML-SV-IV-atomic-nonPositiveInteger-maxExclusive-3-3 tokoe:valid" result="pass"/><test-case name="501NISTXML-SV-IV-atomic-nonPositiveInteger-maxExclusive-3-4 tokoe:valid" result="pass"/><test-case name="502NISTXML-SV-IV-atomic-nonPositiveInteger-maxExclusive-3-5 tokoe:valid" result="pass"/><test-case name="503NISTSchema-SV-IV-atomic-nonPositiveInteger-maxExclusive-4 tokoe:valid" result="pass"/><test-case name="504NISTXML-SV-IV-atomic-nonPositiveInteger-maxExclusive-4-1 tokoe:valid" result="pass"/><test-case name="505NISTXML-SV-IV-atomic-nonPositiveInteger-maxExclusive-4-2 tokoe:valid" result="pass"/><test-case name="506NISTXML-SV-IV-atomic-nonPositiveInteger-maxExclusive-4-3 tokoe:valid" result="pass"/><test-case name="507NISTXML-SV-IV-atomic-nonPositiveInteger-maxExclusive-4-4 tokoe:valid" result="pass"/><test-case name="508NISTXML-SV-IV-atomic-nonPositiveInteger-maxExclusive-4-5 tokoe:valid" result="pass"/><test-case name="509NISTSchema-SV-IV-atomic-nonPositiveInteger-maxExclusive-5 tokoe:valid" result="pass"/><test-case name="510NISTXML-SV-IV-atomic-nonPositiveInteger-maxExclusive-5-1 tokoe:valid" result="pass"/><test-case name="511NISTXML-SV-IV-atomic-nonPositiveInteger-maxExclusive-5-2 tokoe:valid" result="pass"/><test-case name="512NISTXML-SV-IV-atomic-nonPositiveInteger-maxExclusive-5-3 tokoe:valid" result="pass"/><test-case name="513NISTXML-SV-IV-atomic-nonPositiveInteger-maxExclusive-5-4 tokoe:valid" result="pass"/><test-case name="514NISTXML-SV-IV-atomic-nonPositiveInteger-maxExclusive-5-5 tokoe:valid" result="pass"/><test-case name="515NISTSchema-SV-IV-atomic-nonPositiveInteger-maxInclusive-1 tokoe:valid" result="pass"/><test-case name="516NISTXML-SV-IV-atomic-nonPositiveInteger-maxInclusive-1-1 tokoe:valid" result="pass"/><test-case name="517NISTSchema-SV-IV-atomic-nonPositiveInteger-maxInclusive-2 tokoe:valid" result="pass"/><test-case name="518NISTXML-SV-IV-atomic-nonPositiveInteger-maxInclusive-2-1 tokoe:valid" result="pass"/><test-case name="519NISTXML-SV-IV-atomic-nonPositiveInteger-maxInclusive-2-2 tokoe:valid" result="pass"/><test-case name="520NISTXML-SV-IV-atomic-nonPositiveInteger-maxInclusive-2-3 tokoe:valid" result="pass"/><test-case name="521NISTXML-SV-IV-atomic-nonPositiveInteger-maxInclusive-2-4 tokoe:valid" result="pass"/><test-case name="522NISTXML-SV-IV-atomic-nonPositiveInteger-maxInclusive-2-5 tokoe:valid" result="pass"/><test-case name="523NISTSchema-SV-IV-atomic-nonPositiveInteger-maxInclusive-3 tokoe:valid" result="pass"/><test-case name="524NISTXML-SV-IV-atomic-nonPositiveInteger-maxInclusive-3-1 tokoe:valid" result="pass"/><test-case name="525NISTXML-SV-IV-atomic-nonPositiveInteger-maxInclusive-3-2 tokoe:valid" result="pass"/><test-case name="526NISTXML-SV-IV-atomic-nonPositiveInteger-maxInclusive-3-3 tokoe:valid" result="pass"/><test-case name="527NISTXML-SV-IV-atomic-nonPositiveInteger-maxInclusive-3-4 tokoe:valid" result="pass"/><test-case name="528NISTXML-SV-IV-atomic-nonPositiveInteger-maxInclusive-3-5 tokoe:valid" result="pass"/><test-case name="529NISTSchema-SV-IV-atomic-nonPositiveInteger-maxInclusive-4 tokoe:valid" result="pass"/><test-case name="530NISTXML-SV-IV-atomic-nonPositiveInteger-maxInclusive-4-1 tokoe:valid" result="pass"/><test-case name="531NISTXML-SV-IV-atomic-nonPositiveInteger-maxInclusive-4-2 tokoe:valid" result="pass"/><test-case name="532NISTXML-SV-IV-atomic-nonPositiveInteger-maxInclusive-4-3 tokoe:valid" result="pass"/><test-case name="533NISTXML-SV-IV-atomic-nonPositiveInteger-maxInclusive-4-4 tokoe:valid" result="pass"/><test-case name="534NISTXML-SV-IV-atomic-nonPositiveInteger-maxInclusive-4-5 tokoe:valid" result="pass"/><test-case name="535NISTSchema-SV-IV-atomic-nonPositiveInteger-maxInclusive-5 tokoe:valid" result="pass"/><test-case name="536NISTXML-SV-IV-atomic-nonPositiveInteger-maxInclusive-5-1 tokoe:valid" result="pass"/><test-case name="537NISTXML-SV-IV-atomic-nonPositiveInteger-maxInclusive-5-2 tokoe:valid" result="pass"/><test-case name="538NISTXML-SV-IV-atomic-nonPositiveInteger-maxInclusive-5-3 tokoe:valid" result="pass"/><test-case name="539NISTXML-SV-IV-atomic-nonPositiveInteger-maxInclusive-5-4 tokoe:valid" result="pass"/><test-case name="540NISTXML-SV-IV-atomic-nonPositiveInteger-maxInclusive-5-5 tokoe:valid" result="pass"/><test-case name="541NISTSchema-SV-IV-atomic-nonPositiveInteger-fractionDigits-1 tokoe:valid" result="pass"/><test-case name="542NISTXML-SV-IV-atomic-nonPositiveInteger-fractionDigits-1-1 tokoe:valid" result="pass"/><test-case name="543NISTXML-SV-IV-atomic-nonPositiveInteger-fractionDigits-1-2 tokoe:valid" result="pass"/><test-case name="544NISTXML-SV-IV-atomic-nonPositiveInteger-fractionDigits-1-3 tokoe:valid" result="pass"/><test-case name="545NISTXML-SV-IV-atomic-nonPositiveInteger-fractionDigits-1-4 tokoe:valid" result="pass"/><test-case name="546NISTXML-SV-IV-atomic-nonPositiveInteger-fractionDigits-1-5 tokoe:valid" result="pass"/><test-case name="547NISTSchema-SV-IV-atomic-nonPositiveInteger-totalDigits-1 tokoe:valid" result="pass"/><test-case name="548NISTXML-SV-IV-atomic-nonPositiveInteger-totalDigits-1-1 tokoe:valid" result="pass"/><test-case name="549NISTXML-SV-IV-atomic-nonPositiveInteger-totalDigits-1-2 tokoe:valid" result="pass"/><test-case name="550NISTXML-SV-IV-atomic-nonPositiveInteger-totalDigits-1-3 tokoe:valid" result="pass"/><test-case name="551NISTXML-SV-IV-atomic-nonPositiveInteger-totalDigits-1-4 tokoe:valid" result="pass"/><test-case name="552NISTXML-SV-IV-atomic-nonPositiveInteger-totalDigits-1-5 tokoe:valid" result="pass"/><test-case name="553NISTSchema-SV-IV-atomic-nonPositiveInteger-totalDigits-2 tokoe:valid" result="pass"/><test-case name="554NISTXML-SV-IV-atomic-nonPositiveInteger-totalDigits-2-1 tokoe:valid" result="pass"/><test-case name="555NISTXML-SV-IV-atomic-nonPositiveInteger-totalDigits-2-2 tokoe:valid" result="pass"/><test-case name="556NISTXML-SV-IV-atomic-nonPositiveInteger-totalDigits-2-3 tokoe:valid" result="pass"/><test-case name="557NISTXML-SV-IV-atomic-nonPositiveInteger-totalDigits-2-4 tokoe:valid" result="pass"/><test-case name="558NISTXML-SV-IV-atomic-nonPositiveInteger-totalDigits-2-5 tokoe:valid" result="pass"/><test-case name="559NISTSchema-SV-IV-atomic-nonPositiveInteger-totalDigits-3 tokoe:valid" result="pass"/><test-case name="560NISTXML-SV-IV-atomic-nonPositiveInteger-totalDigits-3-1 tokoe:valid" result="pass"/><test-case name="561NISTXML-SV-IV-atomic-nonPositiveInteger-totalDigits-3-2 tokoe:valid" result="pass"/><test-case name="562NISTXML-SV-IV-atomic-nonPositiveInteger-totalDigits-3-3 tokoe:valid" result="pass"/><test-case name="563NISTXML-SV-IV-atomic-nonPositiveInteger-totalDigits-3-4 tokoe:valid" result="pass"/><test-case name="564NISTXML-SV-IV-atomic-nonPositiveInteger-totalDigits-3-5 tokoe:valid" result="pass"/><test-case name="565NISTSchema-SV-IV-atomic-nonPositiveInteger-totalDigits-4 tokoe:valid" result="pass"/><test-case name="566NISTXML-SV-IV-atomic-nonPositiveInteger-totalDigits-4-1 tokoe:valid" result="pass"/><test-case name="567NISTXML-SV-IV-atomic-nonPositiveInteger-totalDigits-4-2 tokoe:valid" result="pass"/><test-case name="568NISTXML-SV-IV-atomic-nonPositiveInteger-totalDigits-4-3 tokoe:valid" result="pass"/><test-case name="569NISTXML-SV-IV-atomic-nonPositiveInteger-totalDigits-4-4 tokoe:valid" result="pass"/><test-case name="570NISTXML-SV-IV-atomic-nonPositiveInteger-totalDigits-4-5 tokoe:valid" result="pass"/><test-case name="571NISTSchema-SV-IV-atomic-nonPositiveInteger-totalDigits-5 tokoe:valid" result="pass"/><test-case name="572NISTXML-SV-IV-atomic-nonPositiveInteger-totalDigits-5-1 tokoe:valid" result="pass"/><test-case name="573NISTXML-SV-IV-atomic-nonPositiveInteger-totalDigits-5-2 tokoe:valid" result="pass"/><test-case name="574NISTXML-SV-IV-atomic-nonPositiveInteger-totalDigits-5-3 tokoe:valid" result="pass"/><test-case name="575NISTXML-SV-IV-atomic-nonPositiveInteger-totalDigits-5-4 tokoe:valid" result="pass"/><test-case name="576NISTXML-SV-IV-atomic-nonPositiveInteger-totalDigits-5-5 tokoe:valid" result="pass"/><test-case name="577NISTSchema-SV-IV-atomic-nonPositiveInteger-pattern-1 tokoe:valid" result="pass"/><test-case name="578NISTXML-SV-IV-atomic-nonPositiveInteger-pattern-1-1 tokoe:valid" result="pass"/><test-case name="579NISTXML-SV-IV-atomic-nonPositiveInteger-pattern-1-2 tokoe:valid" result="pass"/><test-case name="580NISTXML-SV-IV-atomic-nonPositiveInteger-pattern-1-3 tokoe:valid" result="pass"/><test-case name="581NISTXML-SV-IV-atomic-nonPositiveInteger-pattern-1-4 tokoe:valid" result="pass"/><test-case name="582NISTXML-SV-IV-atomic-nonPositiveInteger-pattern-1-5 tokoe:valid" result="pass"/><test-case name="583NISTSchema-SV-IV-atomic-nonPositiveInteger-pattern-2 tokoe:valid" result="pass"/><test-case name="584NISTXML-SV-IV-atomic-nonPositiveInteger-pattern-2-1 tokoe:valid" result="pass"/><test-case name="585NISTXML-SV-IV-atomic-nonPositiveInteger-pattern-2-2 tokoe:valid" result="pass"/><test-case name="586NISTXML-SV-IV-atomic-nonPositiveInteger-pattern-2-3 tokoe:valid" result="pass"/><test-case name="587NISTXML-SV-IV-atomic-nonPositiveInteger-pattern-2-4 tokoe:valid" result="pass"/><test-case name="588NISTXML-SV-IV-atomic-nonPositiveInteger-pattern-2-5 tokoe:valid" result="pass"/><test-case name="589NISTSchema-SV-IV-atomic-nonPositiveInteger-pattern-3 tokoe:valid" result="pass"/><test-case name="590NISTXML-SV-IV-atomic-nonPositiveInteger-pattern-3-1 tokoe:valid" result="pass"/><test-case name="591NISTXML-SV-IV-atomic-nonPositiveInteger-pattern-3-2 tokoe:valid" result="pass"/><test-case name="592NISTXML-SV-IV-atomic-nonPositiveInteger-pattern-3-3 tokoe:valid" result="pass"/><test-case name="593NISTXML-SV-IV-atomic-nonPositiveInteger-pattern-3-4 tokoe:valid" result="pass"/><test-case name="594NISTXML-SV-IV-atomic-nonPositiveInteger-pattern-3-5 tokoe:valid" result="pass"/><test-case name="595NISTSchema-SV-IV-atomic-nonPositiveInteger-pattern-4 tokoe:valid" result="pass"/><test-case name="596NISTXML-SV-IV-atomic-nonPositiveInteger-pattern-4-1 tokoe:valid" result="pass"/><test-case name="597NISTXML-SV-IV-atomic-nonPositiveInteger-pattern-4-2 tokoe:valid" result="pass"/><test-case name="598NISTXML-SV-IV-atomic-nonPositiveInteger-pattern-4-3 tokoe:valid" result="pass"/><test-case name="599NISTXML-SV-IV-atomic-nonPositiveInteger-pattern-4-4 tokoe:valid" result="pass"/><test-case name="600NISTXML-SV-IV-atomic-nonPositiveInteger-pattern-4-5 tokoe:valid" result="pass"/><test-case name="601NISTSchema-SV-IV-atomic-nonPositiveInteger-pattern-5 tokoe:valid" result="pass"/><test-case name="602NISTXML-SV-IV-atomic-nonPositiveInteger-pattern-5-1 tokoe:valid" result="pass"/><test-case name="603NISTXML-SV-IV-atomic-nonPositiveInteger-pattern-5-2 tokoe:valid" result="pass"/><test-case name="604NISTXML-SV-IV-atomic-nonPositiveInteger-pattern-5-3 tokoe:valid" result="pass"/><test-case name="605NISTXML-SV-IV-atomic-nonPositiveInteger-pattern-5-4 tokoe:valid" result="pass"/><test-case name="606NISTXML-SV-IV-atomic-nonPositiveInteger-pattern-5-5 tokoe:valid" result="pass"/><test-case name="607NISTSchema-SV-IV-atomic-nonPositiveInteger-enumeration-1 tokoe:valid" result="pass"/><test-case name="608NISTXML-SV-IV-atomic-nonPositiveInteger-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="609NISTXML-SV-IV-atomic-nonPositiveInteger-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="610NISTXML-SV-IV-atomic-nonPositiveInteger-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="611NISTXML-SV-IV-atomic-nonPositiveInteger-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="612NISTXML-SV-IV-atomic-nonPositiveInteger-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="613NISTSchema-SV-IV-atomic-nonPositiveInteger-enumeration-2 tokoe:valid" result="pass"/><test-case name="614NISTXML-SV-IV-atomic-nonPositiveInteger-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="615NISTXML-SV-IV-atomic-nonPositiveInteger-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="616NISTXML-SV-IV-atomic-nonPositiveInteger-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="617NISTXML-SV-IV-atomic-nonPositiveInteger-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="618NISTXML-SV-IV-atomic-nonPositiveInteger-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="619NISTSchema-SV-IV-atomic-nonPositiveInteger-enumeration-3 tokoe:valid" result="pass"/><test-case name="620NISTXML-SV-IV-atomic-nonPositiveInteger-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="621NISTXML-SV-IV-atomic-nonPositiveInteger-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="622NISTXML-SV-IV-atomic-nonPositiveInteger-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="623NISTXML-SV-IV-atomic-nonPositiveInteger-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="624NISTXML-SV-IV-atomic-nonPositiveInteger-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="625NISTSchema-SV-IV-atomic-nonPositiveInteger-enumeration-4 tokoe:valid" result="pass"/><test-case name="626NISTXML-SV-IV-atomic-nonPositiveInteger-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="627NISTXML-SV-IV-atomic-nonPositiveInteger-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="628NISTXML-SV-IV-atomic-nonPositiveInteger-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="629NISTXML-SV-IV-atomic-nonPositiveInteger-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="630NISTXML-SV-IV-atomic-nonPositiveInteger-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="631NISTSchema-SV-IV-atomic-nonPositiveInteger-enumeration-5 tokoe:valid" result="pass"/><test-case name="632NISTXML-SV-IV-atomic-nonPositiveInteger-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="633NISTXML-SV-IV-atomic-nonPositiveInteger-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="634NISTXML-SV-IV-atomic-nonPositiveInteger-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="635NISTXML-SV-IV-atomic-nonPositiveInteger-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="636NISTXML-SV-IV-atomic-nonPositiveInteger-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="637NISTSchema-SV-IV-atomic-nonPositiveInteger-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="638NISTXML-SV-IV-atomic-nonPositiveInteger-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="639NISTXML-SV-IV-atomic-nonPositiveInteger-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="640NISTXML-SV-IV-atomic-nonPositiveInteger-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="641NISTXML-SV-IV-atomic-nonPositiveInteger-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="642NISTXML-SV-IV-atomic-nonPositiveInteger-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="643NISTSchema-SV-IV-atomic-negativeInteger-minExclusive-1 tokoe:valid" result="pass"/><test-case name="644NISTXML-SV-IV-atomic-negativeInteger-minExclusive-1-1 tokoe:valid" result="pass"/><test-case name="645NISTXML-SV-IV-atomic-negativeInteger-minExclusive-1-2 tokoe:valid" result="pass"/><test-case name="646NISTXML-SV-IV-atomic-negativeInteger-minExclusive-1-3 tokoe:valid" result="pass"/><test-case name="647NISTXML-SV-IV-atomic-negativeInteger-minExclusive-1-4 tokoe:valid" result="pass"/><test-case name="648NISTXML-SV-IV-atomic-negativeInteger-minExclusive-1-5 tokoe:valid" result="pass"/><test-case name="649NISTSchema-SV-IV-atomic-negativeInteger-minExclusive-2 tokoe:valid" result="pass"/><test-case name="650NISTXML-SV-IV-atomic-negativeInteger-minExclusive-2-1 tokoe:valid" result="pass"/><test-case name="651NISTXML-SV-IV-atomic-negativeInteger-minExclusive-2-2 tokoe:valid" result="pass"/><test-case name="652NISTXML-SV-IV-atomic-negativeInteger-minExclusive-2-3 tokoe:valid" result="pass"/><test-case name="653NISTXML-SV-IV-atomic-negativeInteger-minExclusive-2-4 tokoe:valid" result="pass"/><test-case name="654NISTXML-SV-IV-atomic-negativeInteger-minExclusive-2-5 tokoe:valid" result="pass"/><test-case name="655NISTSchema-SV-IV-atomic-negativeInteger-minExclusive-3 tokoe:valid" result="pass"/><test-case name="656NISTXML-SV-IV-atomic-negativeInteger-minExclusive-3-1 tokoe:valid" result="pass"/><test-case name="657NISTXML-SV-IV-atomic-negativeInteger-minExclusive-3-2 tokoe:valid" result="pass"/><test-case name="658NISTXML-SV-IV-atomic-negativeInteger-minExclusive-3-3 tokoe:valid" result="pass"/><test-case name="659NISTXML-SV-IV-atomic-negativeInteger-minExclusive-3-4 tokoe:valid" result="pass"/><test-case name="660NISTXML-SV-IV-atomic-negativeInteger-minExclusive-3-5 tokoe:valid" result="pass"/><test-case name="661NISTSchema-SV-IV-atomic-negativeInteger-minExclusive-4 tokoe:valid" result="pass"/><test-case name="662NISTXML-SV-IV-atomic-negativeInteger-minExclusive-4-1 tokoe:valid" result="pass"/><test-case name="663NISTXML-SV-IV-atomic-negativeInteger-minExclusive-4-2 tokoe:valid" result="pass"/><test-case name="664NISTXML-SV-IV-atomic-negativeInteger-minExclusive-4-3 tokoe:valid" result="pass"/><test-case name="665NISTXML-SV-IV-atomic-negativeInteger-minExclusive-4-4 tokoe:valid" result="pass"/><test-case name="666NISTXML-SV-IV-atomic-negativeInteger-minExclusive-4-5 tokoe:valid" result="pass"/><test-case name="667NISTSchema-SV-IV-atomic-negativeInteger-minExclusive-5 tokoe:valid" result="pass"/><test-case name="668NISTXML-SV-IV-atomic-negativeInteger-minExclusive-5-1 tokoe:valid" result="pass"/><test-case name="669NISTSchema-SV-IV-atomic-negativeInteger-minInclusive-1 tokoe:valid" result="pass"/><test-case name="670NISTXML-SV-IV-atomic-negativeInteger-minInclusive-1-1 tokoe:valid" result="pass"/><test-case name="671NISTXML-SV-IV-atomic-negativeInteger-minInclusive-1-2 tokoe:valid" result="pass"/><test-case name="672NISTXML-SV-IV-atomic-negativeInteger-minInclusive-1-3 tokoe:valid" result="pass"/><test-case name="673NISTXML-SV-IV-atomic-negativeInteger-minInclusive-1-4 tokoe:valid" result="pass"/><test-case name="674NISTXML-SV-IV-atomic-negativeInteger-minInclusive-1-5 tokoe:valid" result="pass"/><test-case name="675NISTSchema-SV-IV-atomic-negativeInteger-minInclusive-2 tokoe:valid" result="pass"/><test-case name="676NISTXML-SV-IV-atomic-negativeInteger-minInclusive-2-1 tokoe:valid" result="pass"/><test-case name="677NISTXML-SV-IV-atomic-negativeInteger-minInclusive-2-2 tokoe:valid" result="pass"/><test-case name="678NISTXML-SV-IV-atomic-negativeInteger-minInclusive-2-3 tokoe:valid" result="pass"/><test-case name="679NISTXML-SV-IV-atomic-negativeInteger-minInclusive-2-4 tokoe:valid" result="pass"/><test-case name="680NISTXML-SV-IV-atomic-negativeInteger-minInclusive-2-5 tokoe:valid" result="pass"/><test-case name="681NISTSchema-SV-IV-atomic-negativeInteger-minInclusive-3 tokoe:valid" result="pass"/><test-case name="682NISTXML-SV-IV-atomic-negativeInteger-minInclusive-3-1 tokoe:valid" result="pass"/><test-case name="683NISTXML-SV-IV-atomic-negativeInteger-minInclusive-3-2 tokoe:valid" result="pass"/><test-case name="684NISTXML-SV-IV-atomic-negativeInteger-minInclusive-3-3 tokoe:valid" result="pass"/><test-case name="685NISTXML-SV-IV-atomic-negativeInteger-minInclusive-3-4 tokoe:valid" result="pass"/><test-case name="686NISTXML-SV-IV-atomic-negativeInteger-minInclusive-3-5 tokoe:valid" result="pass"/><test-case name="687NISTSchema-SV-IV-atomic-negativeInteger-minInclusive-4 tokoe:valid" result="pass"/><test-case name="688NISTXML-SV-IV-atomic-negativeInteger-minInclusive-4-1 tokoe:valid" result="pass"/><test-case name="689NISTXML-SV-IV-atomic-negativeInteger-minInclusive-4-2 tokoe:valid" result="pass"/><test-case name="690NISTXML-SV-IV-atomic-negativeInteger-minInclusive-4-3 tokoe:valid" result="pass"/><test-case name="691NISTXML-SV-IV-atomic-negativeInteger-minInclusive-4-4 tokoe:valid" result="pass"/><test-case name="692NISTXML-SV-IV-atomic-negativeInteger-minInclusive-4-5 tokoe:valid" result="pass"/><test-case name="693NISTSchema-SV-IV-atomic-negativeInteger-minInclusive-5 tokoe:valid" result="pass"/><test-case name="694NISTXML-SV-IV-atomic-negativeInteger-minInclusive-5-1 tokoe:valid" result="pass"/><test-case name="695NISTSchema-SV-IV-atomic-negativeInteger-maxExclusive-1 tokoe:valid" result="pass"/><test-case name="696NISTXML-SV-IV-atomic-negativeInteger-maxExclusive-1-1 tokoe:valid" result="pass"/><test-case name="697NISTSchema-SV-IV-atomic-negativeInteger-maxExclusive-2 tokoe:valid" result="pass"/><test-case name="698NISTXML-SV-IV-atomic-negativeInteger-maxExclusive-2-1 tokoe:valid" result="pass"/><test-case name="699NISTXML-SV-IV-atomic-negativeInteger-maxExclusive-2-2 tokoe:valid" result="pass"/><test-case name="700NISTXML-SV-IV-atomic-negativeInteger-maxExclusive-2-3 tokoe:valid" result="pass"/><test-case name="701NISTXML-SV-IV-atomic-negativeInteger-maxExclusive-2-4 tokoe:valid" result="pass"/><test-case name="702NISTXML-SV-IV-atomic-negativeInteger-maxExclusive-2-5 tokoe:valid" result="pass"/><test-case name="703NISTSchema-SV-IV-atomic-negativeInteger-maxExclusive-3 tokoe:valid" result="pass"/><test-case name="704NISTXML-SV-IV-atomic-negativeInteger-maxExclusive-3-1 tokoe:valid" result="pass"/><test-case name="705NISTXML-SV-IV-atomic-negativeInteger-maxExclusive-3-2 tokoe:valid" result="pass"/><test-case name="706NISTXML-SV-IV-atomic-negativeInteger-maxExclusive-3-3 tokoe:valid" result="pass"/><test-case name="707NISTXML-SV-IV-atomic-negativeInteger-maxExclusive-3-4 tokoe:valid" result="pass"/><test-case name="708NISTXML-SV-IV-atomic-negativeInteger-maxExclusive-3-5 tokoe:valid" result="pass"/><test-case name="709NISTSchema-SV-IV-atomic-negativeInteger-maxExclusive-4 tokoe:valid" result="pass"/><test-case name="710NISTXML-SV-IV-atomic-negativeInteger-maxExclusive-4-1 tokoe:valid" result="pass"/><test-case name="711NISTXML-SV-IV-atomic-negativeInteger-maxExclusive-4-2 tokoe:valid" result="pass"/><test-case name="712NISTXML-SV-IV-atomic-negativeInteger-maxExclusive-4-3 tokoe:valid" result="pass"/><test-case name="713NISTXML-SV-IV-atomic-negativeInteger-maxExclusive-4-4 tokoe:valid" result="pass"/><test-case name="714NISTXML-SV-IV-atomic-negativeInteger-maxExclusive-4-5 tokoe:valid" result="pass"/><test-case name="715NISTSchema-SV-IV-atomic-negativeInteger-maxExclusive-5 tokoe:valid" result="pass"/><test-case name="716NISTXML-SV-IV-atomic-negativeInteger-maxExclusive-5-1 tokoe:valid" result="pass"/><test-case name="717NISTXML-SV-IV-atomic-negativeInteger-maxExclusive-5-2 tokoe:valid" result="pass"/><test-case name="718NISTXML-SV-IV-atomic-negativeInteger-maxExclusive-5-3 tokoe:valid" result="pass"/><test-case name="719NISTXML-SV-IV-atomic-negativeInteger-maxExclusive-5-4 tokoe:valid" result="pass"/><test-case name="720NISTXML-SV-IV-atomic-negativeInteger-maxExclusive-5-5 tokoe:valid" result="pass"/><test-case name="721NISTSchema-SV-IV-atomic-negativeInteger-maxInclusive-1 tokoe:valid" result="pass"/><test-case name="722NISTXML-SV-IV-atomic-negativeInteger-maxInclusive-1-1 tokoe:valid" result="pass"/><test-case name="723NISTSchema-SV-IV-atomic-negativeInteger-maxInclusive-2 tokoe:valid" result="pass"/><test-case name="724NISTXML-SV-IV-atomic-negativeInteger-maxInclusive-2-1 tokoe:valid" result="pass"/><test-case name="725NISTXML-SV-IV-atomic-negativeInteger-maxInclusive-2-2 tokoe:valid" result="pass"/><test-case name="726NISTXML-SV-IV-atomic-negativeInteger-maxInclusive-2-3 tokoe:valid" result="pass"/><test-case name="727NISTXML-SV-IV-atomic-negativeInteger-maxInclusive-2-4 tokoe:valid" result="pass"/><test-case name="728NISTXML-SV-IV-atomic-negativeInteger-maxInclusive-2-5 tokoe:valid" result="pass"/><test-case name="729NISTSchema-SV-IV-atomic-negativeInteger-maxInclusive-3 tokoe:valid" result="pass"/><test-case name="730NISTXML-SV-IV-atomic-negativeInteger-maxInclusive-3-1 tokoe:valid" result="pass"/><test-case name="731NISTXML-SV-IV-atomic-negativeInteger-maxInclusive-3-2 tokoe:valid" result="pass"/><test-case name="732NISTXML-SV-IV-atomic-negativeInteger-maxInclusive-3-3 tokoe:valid" result="pass"/><test-case name="733NISTXML-SV-IV-atomic-negativeInteger-maxInclusive-3-4 tokoe:valid" result="pass"/><test-case name="734NISTXML-SV-IV-atomic-negativeInteger-maxInclusive-3-5 tokoe:valid" result="pass"/><test-case name="735NISTSchema-SV-IV-atomic-negativeInteger-maxInclusive-4 tokoe:valid" result="pass"/><test-case name="736NISTXML-SV-IV-atomic-negativeInteger-maxInclusive-4-1 tokoe:valid" result="pass"/><test-case name="737NISTXML-SV-IV-atomic-negativeInteger-maxInclusive-4-2 tokoe:valid" result="pass"/><test-case name="738NISTXML-SV-IV-atomic-negativeInteger-maxInclusive-4-3 tokoe:valid" result="pass"/><test-case name="739NISTXML-SV-IV-atomic-negativeInteger-maxInclusive-4-4 tokoe:valid" result="pass"/><test-case name="740NISTXML-SV-IV-atomic-negativeInteger-maxInclusive-4-5 tokoe:valid" result="pass"/><test-case name="741NISTSchema-SV-IV-atomic-negativeInteger-maxInclusive-5 tokoe:valid" result="pass"/><test-case name="742NISTXML-SV-IV-atomic-negativeInteger-maxInclusive-5-1 tokoe:valid" result="pass"/><test-case name="743NISTXML-SV-IV-atomic-negativeInteger-maxInclusive-5-2 tokoe:valid" result="pass"/><test-case name="744NISTXML-SV-IV-atomic-negativeInteger-maxInclusive-5-3 tokoe:valid" result="pass"/><test-case name="745NISTXML-SV-IV-atomic-negativeInteger-maxInclusive-5-4 tokoe:valid" result="pass"/><test-case name="746NISTXML-SV-IV-atomic-negativeInteger-maxInclusive-5-5 tokoe:valid" result="pass"/><test-case name="747NISTSchema-SV-IV-atomic-negativeInteger-fractionDigits-1 tokoe:valid" result="pass"/><test-case name="748NISTXML-SV-IV-atomic-negativeInteger-fractionDigits-1-1 tokoe:valid" result="pass"/><test-case name="749NISTXML-SV-IV-atomic-negativeInteger-fractionDigits-1-2 tokoe:valid" result="pass"/><test-case name="750NISTXML-SV-IV-atomic-negativeInteger-fractionDigits-1-3 tokoe:valid" result="pass"/><test-case name="751NISTXML-SV-IV-atomic-negativeInteger-fractionDigits-1-4 tokoe:valid" result="pass"/><test-case name="752NISTXML-SV-IV-atomic-negativeInteger-fractionDigits-1-5 tokoe:valid" result="pass"/><test-case name="753NISTSchema-SV-IV-atomic-negativeInteger-totalDigits-1 tokoe:valid" result="pass"/><test-case name="754NISTXML-SV-IV-atomic-negativeInteger-totalDigits-1-1 tokoe:valid" result="pass"/><test-case name="755NISTXML-SV-IV-atomic-negativeInteger-totalDigits-1-2 tokoe:valid" result="pass"/><test-case name="756NISTXML-SV-IV-atomic-negativeInteger-totalDigits-1-3 tokoe:valid" result="pass"/><test-case name="757NISTXML-SV-IV-atomic-negativeInteger-totalDigits-1-4 tokoe:valid" result="pass"/><test-case name="758NISTXML-SV-IV-atomic-negativeInteger-totalDigits-1-5 tokoe:valid" result="pass"/><test-case name="759NISTSchema-SV-IV-atomic-negativeInteger-totalDigits-2 tokoe:valid" result="pass"/><test-case name="760NISTXML-SV-IV-atomic-negativeInteger-totalDigits-2-1 tokoe:valid" result="pass"/><test-case name="761NISTXML-SV-IV-atomic-negativeInteger-totalDigits-2-2 tokoe:valid" result="pass"/><test-case name="762NISTXML-SV-IV-atomic-negativeInteger-totalDigits-2-3 tokoe:valid" result="pass"/><test-case name="763NISTXML-SV-IV-atomic-negativeInteger-totalDigits-2-4 tokoe:valid" result="pass"/><test-case name="764NISTXML-SV-IV-atomic-negativeInteger-totalDigits-2-5 tokoe:valid" result="pass"/><test-case name="765NISTSchema-SV-IV-atomic-negativeInteger-totalDigits-3 tokoe:valid" result="pass"/><test-case name="766NISTXML-SV-IV-atomic-negativeInteger-totalDigits-3-1 tokoe:valid" result="pass"/><test-case name="767NISTXML-SV-IV-atomic-negativeInteger-totalDigits-3-2 tokoe:valid" result="pass"/><test-case name="768NISTXML-SV-IV-atomic-negativeInteger-totalDigits-3-3 tokoe:valid" result="pass"/><test-case name="769NISTXML-SV-IV-atomic-negativeInteger-totalDigits-3-4 tokoe:valid" result="pass"/><test-case name="770NISTXML-SV-IV-atomic-negativeInteger-totalDigits-3-5 tokoe:valid" result="pass"/><test-case name="771NISTSchema-SV-IV-atomic-negativeInteger-totalDigits-4 tokoe:valid" result="pass"/><test-case name="772NISTXML-SV-IV-atomic-negativeInteger-totalDigits-4-1 tokoe:valid" result="pass"/><test-case name="773NISTXML-SV-IV-atomic-negativeInteger-totalDigits-4-2 tokoe:valid" result="pass"/><test-case name="774NISTXML-SV-IV-atomic-negativeInteger-totalDigits-4-3 tokoe:valid" result="pass"/><test-case name="775NISTXML-SV-IV-atomic-negativeInteger-totalDigits-4-4 tokoe:valid" result="pass"/><test-case name="776NISTXML-SV-IV-atomic-negativeInteger-totalDigits-4-5 tokoe:valid" result="pass"/><test-case name="777NISTSchema-SV-IV-atomic-negativeInteger-totalDigits-5 tokoe:valid" result="pass"/><test-case name="778NISTXML-SV-IV-atomic-negativeInteger-totalDigits-5-1 tokoe:valid" result="pass"/><test-case name="779NISTXML-SV-IV-atomic-negativeInteger-totalDigits-5-2 tokoe:valid" result="pass"/><test-case name="780NISTXML-SV-IV-atomic-negativeInteger-totalDigits-5-3 tokoe:valid" result="pass"/><test-case name="781NISTXML-SV-IV-atomic-negativeInteger-totalDigits-5-4 tokoe:valid" result="pass"/><test-case name="782NISTXML-SV-IV-atomic-negativeInteger-totalDigits-5-5 tokoe:valid" result="pass"/><test-case name="783NISTSchema-SV-IV-atomic-negativeInteger-pattern-1 tokoe:valid" result="pass"/><test-case name="784NISTXML-SV-IV-atomic-negativeInteger-pattern-1-1 tokoe:valid" result="pass"/><test-case name="785NISTXML-SV-IV-atomic-negativeInteger-pattern-1-2 tokoe:valid" result="pass"/><test-case name="786NISTXML-SV-IV-atomic-negativeInteger-pattern-1-3 tokoe:valid" result="pass"/><test-case name="787NISTXML-SV-IV-atomic-negativeInteger-pattern-1-4 tokoe:valid" result="pass"/><test-case name="788NISTXML-SV-IV-atomic-negativeInteger-pattern-1-5 tokoe:valid" result="pass"/><test-case name="789NISTSchema-SV-IV-atomic-negativeInteger-pattern-2 tokoe:valid" result="pass"/><test-case name="790NISTXML-SV-IV-atomic-negativeInteger-pattern-2-1 tokoe:valid" result="pass"/><test-case name="791NISTXML-SV-IV-atomic-negativeInteger-pattern-2-2 tokoe:valid" result="pass"/><test-case name="792NISTXML-SV-IV-atomic-negativeInteger-pattern-2-3 tokoe:valid" result="pass"/><test-case name="793NISTXML-SV-IV-atomic-negativeInteger-pattern-2-4 tokoe:valid" result="pass"/><test-case name="794NISTXML-SV-IV-atomic-negativeInteger-pattern-2-5 tokoe:valid" result="pass"/><test-case name="795NISTSchema-SV-IV-atomic-negativeInteger-pattern-3 tokoe:valid" result="pass"/><test-case name="796NISTXML-SV-IV-atomic-negativeInteger-pattern-3-1 tokoe:valid" result="pass"/><test-case name="797NISTXML-SV-IV-atomic-negativeInteger-pattern-3-2 tokoe:valid" result="pass"/><test-case name="798NISTXML-SV-IV-atomic-negativeInteger-pattern-3-3 tokoe:valid" result="pass"/><test-case name="799NISTXML-SV-IV-atomic-negativeInteger-pattern-3-4 tokoe:valid" result="pass"/><test-case name="800NISTXML-SV-IV-atomic-negativeInteger-pattern-3-5 tokoe:valid" result="pass"/><test-case name="801NISTSchema-SV-IV-atomic-negativeInteger-pattern-4 tokoe:valid" result="pass"/><test-case name="802NISTXML-SV-IV-atomic-negativeInteger-pattern-4-1 tokoe:valid" result="pass"/><test-case name="803NISTXML-SV-IV-atomic-negativeInteger-pattern-4-2 tokoe:valid" result="pass"/><test-case name="804NISTXML-SV-IV-atomic-negativeInteger-pattern-4-3 tokoe:valid" result="pass"/><test-case name="805NISTXML-SV-IV-atomic-negativeInteger-pattern-4-4 tokoe:valid" result="pass"/><test-case name="806NISTXML-SV-IV-atomic-negativeInteger-pattern-4-5 tokoe:valid" result="pass"/><test-case name="807NISTSchema-SV-IV-atomic-negativeInteger-pattern-5 tokoe:valid" result="pass"/><test-case name="808NISTXML-SV-IV-atomic-negativeInteger-pattern-5-1 tokoe:valid" result="pass"/><test-case name="809NISTXML-SV-IV-atomic-negativeInteger-pattern-5-2 tokoe:valid" result="pass"/><test-case name="810NISTXML-SV-IV-atomic-negativeInteger-pattern-5-3 tokoe:valid" result="pass"/><test-case name="811NISTXML-SV-IV-atomic-negativeInteger-pattern-5-4 tokoe:valid" result="pass"/><test-case name="812NISTXML-SV-IV-atomic-negativeInteger-pattern-5-5 tokoe:valid" result="pass"/><test-case name="813NISTSchema-SV-IV-atomic-negativeInteger-enumeration-1 tokoe:valid" result="pass"/><test-case name="814NISTXML-SV-IV-atomic-negativeInteger-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="815NISTXML-SV-IV-atomic-negativeInteger-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="816NISTXML-SV-IV-atomic-negativeInteger-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="817NISTXML-SV-IV-atomic-negativeInteger-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="818NISTXML-SV-IV-atomic-negativeInteger-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="819NISTSchema-SV-IV-atomic-negativeInteger-enumeration-2 tokoe:valid" result="pass"/><test-case name="820NISTXML-SV-IV-atomic-negativeInteger-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="821NISTXML-SV-IV-atomic-negativeInteger-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="822NISTXML-SV-IV-atomic-negativeInteger-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="823NISTXML-SV-IV-atomic-negativeInteger-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="824NISTXML-SV-IV-atomic-negativeInteger-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="825NISTSchema-SV-IV-atomic-negativeInteger-enumeration-3 tokoe:valid" result="pass"/><test-case name="826NISTXML-SV-IV-atomic-negativeInteger-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="827NISTXML-SV-IV-atomic-negativeInteger-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="828NISTXML-SV-IV-atomic-negativeInteger-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="829NISTXML-SV-IV-atomic-negativeInteger-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="830NISTXML-SV-IV-atomic-negativeInteger-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="831NISTSchema-SV-IV-atomic-negativeInteger-enumeration-4 tokoe:valid" result="pass"/><test-case name="832NISTXML-SV-IV-atomic-negativeInteger-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="833NISTXML-SV-IV-atomic-negativeInteger-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="834NISTXML-SV-IV-atomic-negativeInteger-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="835NISTXML-SV-IV-atomic-negativeInteger-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="836NISTXML-SV-IV-atomic-negativeInteger-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="837NISTSchema-SV-IV-atomic-negativeInteger-enumeration-5 tokoe:valid" result="pass"/><test-case name="838NISTXML-SV-IV-atomic-negativeInteger-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="839NISTXML-SV-IV-atomic-negativeInteger-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="840NISTXML-SV-IV-atomic-negativeInteger-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="841NISTXML-SV-IV-atomic-negativeInteger-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="842NISTXML-SV-IV-atomic-negativeInteger-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="843NISTSchema-SV-IV-atomic-negativeInteger-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="844NISTXML-SV-IV-atomic-negativeInteger-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="845NISTXML-SV-IV-atomic-negativeInteger-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="846NISTXML-SV-IV-atomic-negativeInteger-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="847NISTXML-SV-IV-atomic-negativeInteger-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="848NISTXML-SV-IV-atomic-negativeInteger-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="849NISTSchema-SV-IV-atomic-long-minExclusive-1 tokoe:valid" result="pass"/><test-case name="850NISTXML-SV-IV-atomic-long-minExclusive-1-1 tokoe:valid" result="pass"/><test-case name="851NISTXML-SV-IV-atomic-long-minExclusive-1-2 tokoe:valid" result="pass"/><test-case name="852NISTXML-SV-IV-atomic-long-minExclusive-1-3 tokoe:valid" result="pass"/><test-case name="853NISTXML-SV-IV-atomic-long-minExclusive-1-4 tokoe:valid" result="pass"/><test-case name="854NISTXML-SV-IV-atomic-long-minExclusive-1-5 tokoe:valid" result="pass"/><test-case name="855NISTSchema-SV-IV-atomic-long-minExclusive-2 tokoe:valid" result="pass"/><test-case name="856NISTXML-SV-IV-atomic-long-minExclusive-2-1 tokoe:valid" result="pass"/><test-case name="857NISTXML-SV-IV-atomic-long-minExclusive-2-2 tokoe:valid" result="pass"/><test-case name="858NISTXML-SV-IV-atomic-long-minExclusive-2-3 tokoe:valid" result="pass"/><test-case name="859NISTXML-SV-IV-atomic-long-minExclusive-2-4 tokoe:valid" result="pass"/><test-case name="860NISTXML-SV-IV-atomic-long-minExclusive-2-5 tokoe:valid" result="pass"/><test-case name="861NISTSchema-SV-IV-atomic-long-minExclusive-3 tokoe:valid" result="pass"/><test-case name="862NISTXML-SV-IV-atomic-long-minExclusive-3-1 tokoe:valid" result="pass"/><test-case name="863NISTXML-SV-IV-atomic-long-minExclusive-3-2 tokoe:valid" result="pass"/><test-case name="864NISTXML-SV-IV-atomic-long-minExclusive-3-3 tokoe:valid" result="pass"/><test-case name="865NISTXML-SV-IV-atomic-long-minExclusive-3-4 tokoe:valid" result="pass"/><test-case name="866NISTXML-SV-IV-atomic-long-minExclusive-3-5 tokoe:valid" result="pass"/><test-case name="867NISTSchema-SV-IV-atomic-long-minExclusive-4 tokoe:valid" result="pass"/><test-case name="868NISTXML-SV-IV-atomic-long-minExclusive-4-1 tokoe:valid" result="pass"/><test-case name="869NISTXML-SV-IV-atomic-long-minExclusive-4-2 tokoe:valid" result="pass"/><test-case name="870NISTXML-SV-IV-atomic-long-minExclusive-4-3 tokoe:valid" result="pass"/><test-case name="871NISTXML-SV-IV-atomic-long-minExclusive-4-4 tokoe:valid" result="pass"/><test-case name="872NISTXML-SV-IV-atomic-long-minExclusive-4-5 tokoe:valid" result="pass"/><test-case name="873NISTSchema-SV-IV-atomic-long-minExclusive-5 tokoe:valid" result="pass"/><test-case name="874NISTXML-SV-IV-atomic-long-minExclusive-5-1 tokoe:valid" result="pass"/><test-case name="875NISTSchema-SV-IV-atomic-long-minInclusive-1 tokoe:valid" result="pass"/><test-case name="876NISTXML-SV-IV-atomic-long-minInclusive-1-1 tokoe:valid" result="pass"/><test-case name="877NISTXML-SV-IV-atomic-long-minInclusive-1-2 tokoe:valid" result="pass"/><test-case name="878NISTXML-SV-IV-atomic-long-minInclusive-1-3 tokoe:valid" result="pass"/><test-case name="879NISTXML-SV-IV-atomic-long-minInclusive-1-4 tokoe:valid" result="pass"/><test-case name="880NISTXML-SV-IV-atomic-long-minInclusive-1-5 tokoe:valid" result="pass"/><test-case name="881NISTSchema-SV-IV-atomic-long-minInclusive-2 tokoe:valid" result="pass"/><test-case name="882NISTXML-SV-IV-atomic-long-minInclusive-2-1 tokoe:valid" result="pass"/><test-case name="883NISTXML-SV-IV-atomic-long-minInclusive-2-2 tokoe:valid" result="pass"/><test-case name="884NISTXML-SV-IV-atomic-long-minInclusive-2-3 tokoe:valid" result="pass"/><test-case name="885NISTXML-SV-IV-atomic-long-minInclusive-2-4 tokoe:valid" result="pass"/><test-case name="886NISTXML-SV-IV-atomic-long-minInclusive-2-5 tokoe:valid" result="pass"/><test-case name="887NISTSchema-SV-IV-atomic-long-minInclusive-3 tokoe:valid" result="pass"/><test-case name="888NISTXML-SV-IV-atomic-long-minInclusive-3-1 tokoe:valid" result="pass"/><test-case name="889NISTXML-SV-IV-atomic-long-minInclusive-3-2 tokoe:valid" result="pass"/><test-case name="890NISTXML-SV-IV-atomic-long-minInclusive-3-3 tokoe:valid" result="pass"/><test-case name="891NISTXML-SV-IV-atomic-long-minInclusive-3-4 tokoe:valid" result="pass"/><test-case name="892NISTXML-SV-IV-atomic-long-minInclusive-3-5 tokoe:valid" result="pass"/><test-case name="893NISTSchema-SV-IV-atomic-long-minInclusive-4 tokoe:valid" result="pass"/><test-case name="894NISTXML-SV-IV-atomic-long-minInclusive-4-1 tokoe:valid" result="pass"/><test-case name="895NISTXML-SV-IV-atomic-long-minInclusive-4-2 tokoe:valid" result="pass"/><test-case name="896NISTXML-SV-IV-atomic-long-minInclusive-4-3 tokoe:valid" result="pass"/><test-case name="897NISTXML-SV-IV-atomic-long-minInclusive-4-4 tokoe:valid" result="pass"/><test-case name="898NISTXML-SV-IV-atomic-long-minInclusive-4-5 tokoe:valid" result="pass"/><test-case name="899NISTSchema-SV-IV-atomic-long-minInclusive-5 tokoe:valid" result="pass"/><test-case name="900NISTXML-SV-IV-atomic-long-minInclusive-5-1 tokoe:valid" result="pass"/><test-case name="901NISTSchema-SV-IV-atomic-long-maxExclusive-1 tokoe:valid" result="pass"/><test-case name="902NISTXML-SV-IV-atomic-long-maxExclusive-1-1 tokoe:valid" result="pass"/><test-case name="903NISTSchema-SV-IV-atomic-long-maxExclusive-2 tokoe:valid" result="pass"/><test-case name="904NISTXML-SV-IV-atomic-long-maxExclusive-2-1 tokoe:valid" result="pass"/><test-case name="905NISTXML-SV-IV-atomic-long-maxExclusive-2-2 tokoe:valid" result="pass"/><test-case name="906NISTXML-SV-IV-atomic-long-maxExclusive-2-3 tokoe:valid" result="pass"/><test-case name="907NISTXML-SV-IV-atomic-long-maxExclusive-2-4 tokoe:valid" result="pass"/><test-case name="908NISTXML-SV-IV-atomic-long-maxExclusive-2-5 tokoe:valid" result="pass"/><test-case name="909NISTSchema-SV-IV-atomic-long-maxExclusive-3 tokoe:valid" result="pass"/><test-case name="910NISTXML-SV-IV-atomic-long-maxExclusive-3-1 tokoe:valid" result="pass"/><test-case name="911NISTXML-SV-IV-atomic-long-maxExclusive-3-2 tokoe:valid" result="pass"/><test-case name="912NISTXML-SV-IV-atomic-long-maxExclusive-3-3 tokoe:valid" result="pass"/><test-case name="913NISTXML-SV-IV-atomic-long-maxExclusive-3-4 tokoe:valid" result="pass"/><test-case name="914NISTXML-SV-IV-atomic-long-maxExclusive-3-5 tokoe:valid" result="pass"/><test-case name="915NISTSchema-SV-IV-atomic-long-maxExclusive-4 tokoe:valid" result="pass"/><test-case name="916NISTXML-SV-IV-atomic-long-maxExclusive-4-1 tokoe:valid" result="pass"/><test-case name="917NISTXML-SV-IV-atomic-long-maxExclusive-4-2 tokoe:valid" result="pass"/><test-case name="918NISTXML-SV-IV-atomic-long-maxExclusive-4-3 tokoe:valid" result="pass"/><test-case name="919NISTXML-SV-IV-atomic-long-maxExclusive-4-4 tokoe:valid" result="pass"/><test-case name="920NISTXML-SV-IV-atomic-long-maxExclusive-4-5 tokoe:valid" result="pass"/><test-case name="921NISTSchema-SV-IV-atomic-long-maxExclusive-5 tokoe:valid" result="pass"/><test-case name="922NISTXML-SV-IV-atomic-long-maxExclusive-5-1 tokoe:valid" result="pass"/><test-case name="923NISTXML-SV-IV-atomic-long-maxExclusive-5-2 tokoe:valid" result="pass"/><test-case name="924NISTXML-SV-IV-atomic-long-maxExclusive-5-3 tokoe:valid" result="pass"/><test-case name="925NISTXML-SV-IV-atomic-long-maxExclusive-5-4 tokoe:valid" result="pass"/><test-case name="926NISTXML-SV-IV-atomic-long-maxExclusive-5-5 tokoe:valid" result="pass"/><test-case name="927NISTSchema-SV-IV-atomic-long-maxInclusive-1 tokoe:valid" result="pass"/><test-case name="928NISTXML-SV-IV-atomic-long-maxInclusive-1-1 tokoe:valid" result="pass"/><test-case name="929NISTSchema-SV-IV-atomic-long-maxInclusive-2 tokoe:valid" result="pass"/><test-case name="930NISTXML-SV-IV-atomic-long-maxInclusive-2-1 tokoe:valid" result="pass"/><test-case name="931NISTXML-SV-IV-atomic-long-maxInclusive-2-2 tokoe:valid" result="pass"/><test-case name="932NISTXML-SV-IV-atomic-long-maxInclusive-2-3 tokoe:valid" result="pass"/><test-case name="933NISTXML-SV-IV-atomic-long-maxInclusive-2-4 tokoe:valid" result="pass"/><test-case name="934NISTXML-SV-IV-atomic-long-maxInclusive-2-5 tokoe:valid" result="pass"/><test-case name="935NISTSchema-SV-IV-atomic-long-maxInclusive-3 tokoe:valid" result="pass"/><test-case name="936NISTXML-SV-IV-atomic-long-maxInclusive-3-1 tokoe:valid" result="pass"/><test-case name="937NISTXML-SV-IV-atomic-long-maxInclusive-3-2 tokoe:valid" result="pass"/><test-case name="938NISTXML-SV-IV-atomic-long-maxInclusive-3-3 tokoe:valid" result="pass"/><test-case name="939NISTXML-SV-IV-atomic-long-maxInclusive-3-4 tokoe:valid" result="pass"/><test-case name="940NISTXML-SV-IV-atomic-long-maxInclusive-3-5 tokoe:valid" result="pass"/><test-case name="941NISTSchema-SV-IV-atomic-long-maxInclusive-4 tokoe:valid" result="pass"/><test-case name="942NISTXML-SV-IV-atomic-long-maxInclusive-4-1 tokoe:valid" result="pass"/><test-case name="943NISTXML-SV-IV-atomic-long-maxInclusive-4-2 tokoe:valid" result="pass"/><test-case name="944NISTXML-SV-IV-atomic-long-maxInclusive-4-3 tokoe:valid" result="pass"/><test-case name="945NISTXML-SV-IV-atomic-long-maxInclusive-4-4 tokoe:valid" result="pass"/><test-case name="946NISTXML-SV-IV-atomic-long-maxInclusive-4-5 tokoe:valid" result="pass"/><test-case name="947NISTSchema-SV-IV-atomic-long-maxInclusive-5 tokoe:valid" result="pass"/><test-case name="948NISTXML-SV-IV-atomic-long-maxInclusive-5-1 tokoe:valid" result="pass"/><test-case name="949NISTXML-SV-IV-atomic-long-maxInclusive-5-2 tokoe:valid" result="pass"/><test-case name="950NISTXML-SV-IV-atomic-long-maxInclusive-5-3 tokoe:valid" result="pass"/><test-case name="951NISTXML-SV-IV-atomic-long-maxInclusive-5-4 tokoe:valid" result="pass"/><test-case name="952NISTXML-SV-IV-atomic-long-maxInclusive-5-5 tokoe:valid" result="pass"/><test-case name="953NISTSchema-SV-IV-atomic-long-fractionDigits-1 tokoe:valid" result="pass"/><test-case name="954NISTXML-SV-IV-atomic-long-fractionDigits-1-1 tokoe:valid" result="pass"/><test-case name="955NISTXML-SV-IV-atomic-long-fractionDigits-1-2 tokoe:valid" result="pass"/><test-case name="956NISTXML-SV-IV-atomic-long-fractionDigits-1-3 tokoe:valid" result="pass"/><test-case name="957NISTXML-SV-IV-atomic-long-fractionDigits-1-4 tokoe:valid" result="pass"/><test-case name="958NISTXML-SV-IV-atomic-long-fractionDigits-1-5 tokoe:valid" result="pass"/><test-case name="959NISTSchema-SV-IV-atomic-long-totalDigits-1 tokoe:valid" result="pass"/><test-case name="960NISTXML-SV-IV-atomic-long-totalDigits-1-1 tokoe:valid" result="pass"/><test-case name="961NISTXML-SV-IV-atomic-long-totalDigits-1-2 tokoe:valid" result="pass"/><test-case name="962NISTXML-SV-IV-atomic-long-totalDigits-1-3 tokoe:valid" result="pass"/><test-case name="963NISTXML-SV-IV-atomic-long-totalDigits-1-4 tokoe:valid" result="pass"/><test-case name="964NISTXML-SV-IV-atomic-long-totalDigits-1-5 tokoe:valid" result="pass"/><test-case name="965NISTSchema-SV-IV-atomic-long-totalDigits-2 tokoe:valid" result="pass"/><test-case name="966NISTXML-SV-IV-atomic-long-totalDigits-2-1 tokoe:valid" result="pass"/><test-case name="967NISTXML-SV-IV-atomic-long-totalDigits-2-2 tokoe:valid" result="pass"/><test-case name="968NISTXML-SV-IV-atomic-long-totalDigits-2-3 tokoe:valid" result="pass"/><test-case name="969NISTXML-SV-IV-atomic-long-totalDigits-2-4 tokoe:valid" result="pass"/><test-case name="970NISTXML-SV-IV-atomic-long-totalDigits-2-5 tokoe:valid" result="pass"/><test-case name="971NISTSchema-SV-IV-atomic-long-totalDigits-3 tokoe:valid" result="pass"/><test-case name="972NISTXML-SV-IV-atomic-long-totalDigits-3-1 tokoe:valid" result="pass"/><test-case name="973NISTXML-SV-IV-atomic-long-totalDigits-3-2 tokoe:valid" result="pass"/><test-case name="974NISTXML-SV-IV-atomic-long-totalDigits-3-3 tokoe:valid" result="pass"/><test-case name="975NISTXML-SV-IV-atomic-long-totalDigits-3-4 tokoe:valid" result="pass"/><test-case name="976NISTXML-SV-IV-atomic-long-totalDigits-3-5 tokoe:valid" result="pass"/><test-case name="977NISTSchema-SV-IV-atomic-long-totalDigits-4 tokoe:valid" result="pass"/><test-case name="978NISTXML-SV-IV-atomic-long-totalDigits-4-1 tokoe:valid" result="pass"/><test-case name="979NISTXML-SV-IV-atomic-long-totalDigits-4-2 tokoe:valid" result="pass"/><test-case name="980NISTXML-SV-IV-atomic-long-totalDigits-4-3 tokoe:valid" result="pass"/><test-case name="981NISTXML-SV-IV-atomic-long-totalDigits-4-4 tokoe:valid" result="pass"/><test-case name="982NISTXML-SV-IV-atomic-long-totalDigits-4-5 tokoe:valid" result="pass"/><test-case name="983NISTSchema-SV-IV-atomic-long-totalDigits-5 tokoe:valid" result="pass"/><test-case name="984NISTXML-SV-IV-atomic-long-totalDigits-5-1 tokoe:valid" result="pass"/><test-case name="985NISTXML-SV-IV-atomic-long-totalDigits-5-2 tokoe:valid" result="pass"/><test-case name="986NISTXML-SV-IV-atomic-long-totalDigits-5-3 tokoe:valid" result="pass"/><test-case name="987NISTXML-SV-IV-atomic-long-totalDigits-5-4 tokoe:valid" result="pass"/><test-case name="988NISTXML-SV-IV-atomic-long-totalDigits-5-5 tokoe:valid" result="pass"/><test-case name="989NISTSchema-SV-IV-atomic-long-pattern-1 tokoe:valid" result="pass"/><test-case name="990NISTXML-SV-IV-atomic-long-pattern-1-1 tokoe:valid" result="pass"/><test-case name="991NISTXML-SV-IV-atomic-long-pattern-1-2 tokoe:valid" result="pass"/><test-case name="992NISTXML-SV-IV-atomic-long-pattern-1-3 tokoe:valid" result="pass"/><test-case name="993NISTXML-SV-IV-atomic-long-pattern-1-4 tokoe:valid" result="pass"/><test-case name="994NISTXML-SV-IV-atomic-long-pattern-1-5 tokoe:valid" result="pass"/><test-case name="995NISTSchema-SV-IV-atomic-long-pattern-2 tokoe:valid" result="pass"/><test-case name="996NISTXML-SV-IV-atomic-long-pattern-2-1 tokoe:valid" result="pass"/><test-case name="997NISTXML-SV-IV-atomic-long-pattern-2-2 tokoe:valid" result="pass"/><test-case name="998NISTXML-SV-IV-atomic-long-pattern-2-3 tokoe:valid" result="pass"/><test-case name="999NISTXML-SV-IV-atomic-long-pattern-2-4 tokoe:valid" result="pass"/><test-case name="1000NISTXML-SV-IV-atomic-long-pattern-2-5 tokoe:valid" result="pass"/><test-case name="1001NISTSchema-SV-IV-atomic-long-pattern-3 tokoe:valid" result="pass"/><test-case name="1002NISTXML-SV-IV-atomic-long-pattern-3-1 tokoe:valid" result="pass"/><test-case name="1003NISTXML-SV-IV-atomic-long-pattern-3-2 tokoe:valid" result="pass"/><test-case name="1004NISTXML-SV-IV-atomic-long-pattern-3-3 tokoe:valid" result="pass"/><test-case name="1005NISTXML-SV-IV-atomic-long-pattern-3-4 tokoe:valid" result="pass"/><test-case name="1006NISTXML-SV-IV-atomic-long-pattern-3-5 tokoe:valid" result="pass"/><test-case name="1007NISTSchema-SV-IV-atomic-long-pattern-4 tokoe:valid" result="pass"/><test-case name="1008NISTXML-SV-IV-atomic-long-pattern-4-1 tokoe:valid" result="pass"/><test-case name="1009NISTXML-SV-IV-atomic-long-pattern-4-2 tokoe:valid" result="pass"/><test-case name="1010NISTXML-SV-IV-atomic-long-pattern-4-3 tokoe:valid" result="pass"/><test-case name="1011NISTXML-SV-IV-atomic-long-pattern-4-4 tokoe:valid" result="pass"/><test-case name="1012NISTXML-SV-IV-atomic-long-pattern-4-5 tokoe:valid" result="pass"/><test-case name="1013NISTSchema-SV-IV-atomic-long-pattern-5 tokoe:valid" result="pass"/><test-case name="1014NISTXML-SV-IV-atomic-long-pattern-5-1 tokoe:valid" result="pass"/><test-case name="1015NISTXML-SV-IV-atomic-long-pattern-5-2 tokoe:valid" result="pass"/><test-case name="1016NISTXML-SV-IV-atomic-long-pattern-5-3 tokoe:valid" result="pass"/><test-case name="1017NISTXML-SV-IV-atomic-long-pattern-5-4 tokoe:valid" result="pass"/><test-case name="1018NISTXML-SV-IV-atomic-long-pattern-5-5 tokoe:valid" result="pass"/><test-case name="1019NISTSchema-SV-IV-atomic-long-enumeration-1 tokoe:valid" result="pass"/><test-case name="1020NISTXML-SV-IV-atomic-long-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="1021NISTXML-SV-IV-atomic-long-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="1022NISTXML-SV-IV-atomic-long-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="1023NISTXML-SV-IV-atomic-long-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="1024NISTXML-SV-IV-atomic-long-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="1025NISTSchema-SV-IV-atomic-long-enumeration-2 tokoe:valid" result="pass"/><test-case name="1026NISTXML-SV-IV-atomic-long-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="1027NISTXML-SV-IV-atomic-long-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="1028NISTXML-SV-IV-atomic-long-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="1029NISTXML-SV-IV-atomic-long-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="1030NISTXML-SV-IV-atomic-long-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="1031NISTSchema-SV-IV-atomic-long-enumeration-3 tokoe:valid" result="pass"/><test-case name="1032NISTXML-SV-IV-atomic-long-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="1033NISTXML-SV-IV-atomic-long-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="1034NISTXML-SV-IV-atomic-long-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="1035NISTXML-SV-IV-atomic-long-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="1036NISTXML-SV-IV-atomic-long-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="1037NISTSchema-SV-IV-atomic-long-enumeration-4 tokoe:valid" result="pass"/><test-case name="1038NISTXML-SV-IV-atomic-long-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="1039NISTXML-SV-IV-atomic-long-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="1040NISTXML-SV-IV-atomic-long-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="1041NISTXML-SV-IV-atomic-long-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="1042NISTXML-SV-IV-atomic-long-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="1043NISTSchema-SV-IV-atomic-long-enumeration-5 tokoe:valid" result="pass"/><test-case name="1044NISTXML-SV-IV-atomic-long-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="1045NISTXML-SV-IV-atomic-long-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="1046NISTXML-SV-IV-atomic-long-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="1047NISTXML-SV-IV-atomic-long-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="1048NISTXML-SV-IV-atomic-long-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="1049NISTSchema-SV-IV-atomic-long-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="1050NISTXML-SV-IV-atomic-long-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="1051NISTXML-SV-IV-atomic-long-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="1052NISTXML-SV-IV-atomic-long-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="1053NISTXML-SV-IV-atomic-long-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="1054NISTXML-SV-IV-atomic-long-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="1055NISTSchema-SV-IV-atomic-int-minExclusive-1 tokoe:valid" result="pass"/><test-case name="1056NISTXML-SV-IV-atomic-int-minExclusive-1-1 tokoe:valid" result="pass"/><test-case name="1057NISTXML-SV-IV-atomic-int-minExclusive-1-2 tokoe:valid" result="pass"/><test-case name="1058NISTXML-SV-IV-atomic-int-minExclusive-1-3 tokoe:valid" result="pass"/><test-case name="1059NISTXML-SV-IV-atomic-int-minExclusive-1-4 tokoe:valid" result="pass"/><test-case name="1060NISTXML-SV-IV-atomic-int-minExclusive-1-5 tokoe:valid" result="pass"/><test-case name="1061NISTSchema-SV-IV-atomic-int-minExclusive-2 tokoe:valid" result="pass"/><test-case name="1062NISTXML-SV-IV-atomic-int-minExclusive-2-1 tokoe:valid" result="pass"/><test-case name="1063NISTXML-SV-IV-atomic-int-minExclusive-2-2 tokoe:valid" result="pass"/><test-case name="1064NISTXML-SV-IV-atomic-int-minExclusive-2-3 tokoe:valid" result="pass"/><test-case name="1065NISTXML-SV-IV-atomic-int-minExclusive-2-4 tokoe:valid" result="pass"/><test-case name="1066NISTXML-SV-IV-atomic-int-minExclusive-2-5 tokoe:valid" result="pass"/><test-case name="1067NISTSchema-SV-IV-atomic-int-minExclusive-3 tokoe:valid" result="pass"/><test-case name="1068NISTXML-SV-IV-atomic-int-minExclusive-3-1 tokoe:valid" result="pass"/><test-case name="1069NISTXML-SV-IV-atomic-int-minExclusive-3-2 tokoe:valid" result="pass"/><test-case name="1070NISTXML-SV-IV-atomic-int-minExclusive-3-3 tokoe:valid" result="pass"/><test-case name="1071NISTXML-SV-IV-atomic-int-minExclusive-3-4 tokoe:valid" result="pass"/><test-case name="1072NISTXML-SV-IV-atomic-int-minExclusive-3-5 tokoe:valid" result="pass"/><test-case name="1073NISTSchema-SV-IV-atomic-int-minExclusive-4 tokoe:valid" result="pass"/><test-case name="1074NISTXML-SV-IV-atomic-int-minExclusive-4-1 tokoe:valid" result="pass"/><test-case name="1075NISTXML-SV-IV-atomic-int-minExclusive-4-2 tokoe:valid" result="pass"/><test-case name="1076NISTXML-SV-IV-atomic-int-minExclusive-4-3 tokoe:valid" result="pass"/><test-case name="1077NISTXML-SV-IV-atomic-int-minExclusive-4-4 tokoe:valid" result="pass"/><test-case name="1078NISTXML-SV-IV-atomic-int-minExclusive-4-5 tokoe:valid" result="pass"/><test-case name="1079NISTSchema-SV-IV-atomic-int-minExclusive-5 tokoe:valid" result="pass"/><test-case name="1080NISTXML-SV-IV-atomic-int-minExclusive-5-1 tokoe:valid" result="pass"/><test-case name="1081NISTSchema-SV-IV-atomic-int-minInclusive-1 tokoe:valid" result="pass"/><test-case name="1082NISTXML-SV-IV-atomic-int-minInclusive-1-1 tokoe:valid" result="pass"/><test-case name="1083NISTXML-SV-IV-atomic-int-minInclusive-1-2 tokoe:valid" result="pass"/><test-case name="1084NISTXML-SV-IV-atomic-int-minInclusive-1-3 tokoe:valid" result="pass"/><test-case name="1085NISTXML-SV-IV-atomic-int-minInclusive-1-4 tokoe:valid" result="pass"/><test-case name="1086NISTXML-SV-IV-atomic-int-minInclusive-1-5 tokoe:valid" result="pass"/><test-case name="1087NISTSchema-SV-IV-atomic-int-minInclusive-2 tokoe:valid" result="pass"/><test-case name="1088NISTXML-SV-IV-atomic-int-minInclusive-2-1 tokoe:valid" result="pass"/><test-case name="1089NISTXML-SV-IV-atomic-int-minInclusive-2-2 tokoe:valid" result="pass"/><test-case name="1090NISTXML-SV-IV-atomic-int-minInclusive-2-3 tokoe:valid" result="pass"/><test-case name="1091NISTXML-SV-IV-atomic-int-minInclusive-2-4 tokoe:valid" result="pass"/><test-case name="1092NISTXML-SV-IV-atomic-int-minInclusive-2-5 tokoe:valid" result="pass"/><test-case name="1093NISTSchema-SV-IV-atomic-int-minInclusive-3 tokoe:valid" result="pass"/><test-case name="1094NISTXML-SV-IV-atomic-int-minInclusive-3-1 tokoe:valid" result="pass"/><test-case name="1095NISTXML-SV-IV-atomic-int-minInclusive-3-2 tokoe:valid" result="pass"/><test-case name="1096NISTXML-SV-IV-atomic-int-minInclusive-3-3 tokoe:valid" result="pass"/><test-case name="1097NISTXML-SV-IV-atomic-int-minInclusive-3-4 tokoe:valid" result="pass"/><test-case name="1098NISTXML-SV-IV-atomic-int-minInclusive-3-5 tokoe:valid" result="pass"/><test-case name="1099NISTSchema-SV-IV-atomic-int-minInclusive-4 tokoe:valid" result="pass"/><test-case name="1100NISTXML-SV-IV-atomic-int-minInclusive-4-1 tokoe:valid" result="pass"/><test-case name="1101NISTXML-SV-IV-atomic-int-minInclusive-4-2 tokoe:valid" result="pass"/><test-case name="1102NISTXML-SV-IV-atomic-int-minInclusive-4-3 tokoe:valid" result="pass"/><test-case name="1103NISTXML-SV-IV-atomic-int-minInclusive-4-4 tokoe:valid" result="pass"/><test-case name="1104NISTXML-SV-IV-atomic-int-minInclusive-4-5 tokoe:valid" result="pass"/><test-case name="1105NISTSchema-SV-IV-atomic-int-minInclusive-5 tokoe:valid" result="pass"/><test-case name="1106NISTXML-SV-IV-atomic-int-minInclusive-5-1 tokoe:valid" result="pass"/><test-case name="1107NISTSchema-SV-IV-atomic-int-maxExclusive-1 tokoe:valid" result="pass"/><test-case name="1108NISTXML-SV-IV-atomic-int-maxExclusive-1-1 tokoe:valid" result="pass"/><test-case name="1109NISTSchema-SV-IV-atomic-int-maxExclusive-2 tokoe:valid" result="pass"/><test-case name="1110NISTXML-SV-IV-atomic-int-maxExclusive-2-1 tokoe:valid" result="pass"/><test-case name="1111NISTXML-SV-IV-atomic-int-maxExclusive-2-2 tokoe:valid" result="pass"/><test-case name="1112NISTXML-SV-IV-atomic-int-maxExclusive-2-3 tokoe:valid" result="pass"/><test-case name="1113NISTXML-SV-IV-atomic-int-maxExclusive-2-4 tokoe:valid" result="pass"/><test-case name="1114NISTXML-SV-IV-atomic-int-maxExclusive-2-5 tokoe:valid" result="pass"/><test-case name="1115NISTSchema-SV-IV-atomic-int-maxExclusive-3 tokoe:valid" result="pass"/><test-case name="1116NISTXML-SV-IV-atomic-int-maxExclusive-3-1 tokoe:valid" result="pass"/><test-case name="1117NISTXML-SV-IV-atomic-int-maxExclusive-3-2 tokoe:valid" result="pass"/><test-case name="1118NISTXML-SV-IV-atomic-int-maxExclusive-3-3 tokoe:valid" result="pass"/><test-case name="1119NISTXML-SV-IV-atomic-int-maxExclusive-3-4 tokoe:valid" result="pass"/><test-case name="1120NISTXML-SV-IV-atomic-int-maxExclusive-3-5 tokoe:valid" result="pass"/><test-case name="1121NISTSchema-SV-IV-atomic-int-maxExclusive-4 tokoe:valid" result="pass"/><test-case name="1122NISTXML-SV-IV-atomic-int-maxExclusive-4-1 tokoe:valid" result="pass"/><test-case name="1123NISTXML-SV-IV-atomic-int-maxExclusive-4-2 tokoe:valid" result="pass"/><test-case name="1124NISTXML-SV-IV-atomic-int-maxExclusive-4-3 tokoe:valid" result="pass"/><test-case name="1125NISTXML-SV-IV-atomic-int-maxExclusive-4-4 tokoe:valid" result="pass"/><test-case name="1126NISTXML-SV-IV-atomic-int-maxExclusive-4-5 tokoe:valid" result="pass"/><test-case name="1127NISTSchema-SV-IV-atomic-int-maxExclusive-5 tokoe:valid" result="pass"/><test-case name="1128NISTXML-SV-IV-atomic-int-maxExclusive-5-1 tokoe:valid" result="pass"/><test-case name="1129NISTXML-SV-IV-atomic-int-maxExclusive-5-2 tokoe:valid" result="pass"/><test-case name="1130NISTXML-SV-IV-atomic-int-maxExclusive-5-3 tokoe:valid" result="pass"/><test-case name="1131NISTXML-SV-IV-atomic-int-maxExclusive-5-4 tokoe:valid" result="pass"/><test-case name="1132NISTXML-SV-IV-atomic-int-maxExclusive-5-5 tokoe:valid" result="pass"/><test-case name="1133NISTSchema-SV-IV-atomic-int-maxInclusive-1 tokoe:valid" result="pass"/><test-case name="1134NISTXML-SV-IV-atomic-int-maxInclusive-1-1 tokoe:valid" result="pass"/><test-case name="1135NISTSchema-SV-IV-atomic-int-maxInclusive-2 tokoe:valid" result="pass"/><test-case name="1136NISTXML-SV-IV-atomic-int-maxInclusive-2-1 tokoe:valid" result="pass"/><test-case name="1137NISTXML-SV-IV-atomic-int-maxInclusive-2-2 tokoe:valid" result="pass"/><test-case name="1138NISTXML-SV-IV-atomic-int-maxInclusive-2-3 tokoe:valid" result="pass"/><test-case name="1139NISTXML-SV-IV-atomic-int-maxInclusive-2-4 tokoe:valid" result="pass"/><test-case name="1140NISTXML-SV-IV-atomic-int-maxInclusive-2-5 tokoe:valid" result="pass"/><test-case name="1141NISTSchema-SV-IV-atomic-int-maxInclusive-3 tokoe:valid" result="pass"/><test-case name="1142NISTXML-SV-IV-atomic-int-maxInclusive-3-1 tokoe:valid" result="pass"/><test-case name="1143NISTXML-SV-IV-atomic-int-maxInclusive-3-2 tokoe:valid" result="pass"/><test-case name="1144NISTXML-SV-IV-atomic-int-maxInclusive-3-3 tokoe:valid" result="pass"/><test-case name="1145NISTXML-SV-IV-atomic-int-maxInclusive-3-4 tokoe:valid" result="pass"/><test-case name="1146NISTXML-SV-IV-atomic-int-maxInclusive-3-5 tokoe:valid" result="pass"/><test-case name="1147NISTSchema-SV-IV-atomic-int-maxInclusive-4 tokoe:valid" result="pass"/><test-case name="1148NISTXML-SV-IV-atomic-int-maxInclusive-4-1 tokoe:valid" result="pass"/><test-case name="1149NISTXML-SV-IV-atomic-int-maxInclusive-4-2 tokoe:valid" result="pass"/><test-case name="1150NISTXML-SV-IV-atomic-int-maxInclusive-4-3 tokoe:valid" result="pass"/><test-case name="1151NISTXML-SV-IV-atomic-int-maxInclusive-4-4 tokoe:valid" result="pass"/><test-case name="1152NISTXML-SV-IV-atomic-int-maxInclusive-4-5 tokoe:valid" result="pass"/><test-case name="1153NISTSchema-SV-IV-atomic-int-maxInclusive-5 tokoe:valid" result="pass"/><test-case name="1154NISTXML-SV-IV-atomic-int-maxInclusive-5-1 tokoe:valid" result="pass"/><test-case name="1155NISTXML-SV-IV-atomic-int-maxInclusive-5-2 tokoe:valid" result="pass"/><test-case name="1156NISTXML-SV-IV-atomic-int-maxInclusive-5-3 tokoe:valid" result="pass"/><test-case name="1157NISTXML-SV-IV-atomic-int-maxInclusive-5-4 tokoe:valid" result="pass"/><test-case name="1158NISTXML-SV-IV-atomic-int-maxInclusive-5-5 tokoe:valid" result="pass"/><test-case name="1159NISTSchema-SV-IV-atomic-int-fractionDigits-1 tokoe:valid" result="pass"/><test-case name="1160NISTXML-SV-IV-atomic-int-fractionDigits-1-1 tokoe:valid" result="pass"/><test-case name="1161NISTXML-SV-IV-atomic-int-fractionDigits-1-2 tokoe:valid" result="pass"/><test-case name="1162NISTXML-SV-IV-atomic-int-fractionDigits-1-3 tokoe:valid" result="pass"/><test-case name="1163NISTXML-SV-IV-atomic-int-fractionDigits-1-4 tokoe:valid" result="pass"/><test-case name="1164NISTXML-SV-IV-atomic-int-fractionDigits-1-5 tokoe:valid" result="pass"/><test-case name="1165NISTSchema-SV-IV-atomic-int-totalDigits-1 tokoe:valid" result="pass"/><test-case name="1166NISTXML-SV-IV-atomic-int-totalDigits-1-1 tokoe:valid" result="pass"/><test-case name="1167NISTXML-SV-IV-atomic-int-totalDigits-1-2 tokoe:valid" result="pass"/><test-case name="1168NISTXML-SV-IV-atomic-int-totalDigits-1-3 tokoe:valid" result="pass"/><test-case name="1169NISTXML-SV-IV-atomic-int-totalDigits-1-4 tokoe:valid" result="pass"/><test-case name="1170NISTXML-SV-IV-atomic-int-totalDigits-1-5 tokoe:valid" result="pass"/><test-case name="1171NISTSchema-SV-IV-atomic-int-totalDigits-2 tokoe:valid" result="pass"/><test-case name="1172NISTXML-SV-IV-atomic-int-totalDigits-2-1 tokoe:valid" result="pass"/><test-case name="1173NISTXML-SV-IV-atomic-int-totalDigits-2-2 tokoe:valid" result="pass"/><test-case name="1174NISTXML-SV-IV-atomic-int-totalDigits-2-3 tokoe:valid" result="pass"/><test-case name="1175NISTXML-SV-IV-atomic-int-totalDigits-2-4 tokoe:valid" result="pass"/><test-case name="1176NISTXML-SV-IV-atomic-int-totalDigits-2-5 tokoe:valid" result="pass"/><test-case name="1177NISTSchema-SV-IV-atomic-int-totalDigits-3 tokoe:valid" result="pass"/><test-case name="1178NISTXML-SV-IV-atomic-int-totalDigits-3-1 tokoe:valid" result="pass"/><test-case name="1179NISTXML-SV-IV-atomic-int-totalDigits-3-2 tokoe:valid" result="pass"/><test-case name="1180NISTXML-SV-IV-atomic-int-totalDigits-3-3 tokoe:valid" result="pass"/><test-case name="1181NISTXML-SV-IV-atomic-int-totalDigits-3-4 tokoe:valid" result="pass"/><test-case name="1182NISTXML-SV-IV-atomic-int-totalDigits-3-5 tokoe:valid" result="pass"/><test-case name="1183NISTSchema-SV-IV-atomic-int-totalDigits-4 tokoe:valid" result="pass"/><test-case name="1184NISTXML-SV-IV-atomic-int-totalDigits-4-1 tokoe:valid" result="pass"/><test-case name="1185NISTXML-SV-IV-atomic-int-totalDigits-4-2 tokoe:valid" result="pass"/><test-case name="1186NISTXML-SV-IV-atomic-int-totalDigits-4-3 tokoe:valid" result="pass"/><test-case name="1187NISTXML-SV-IV-atomic-int-totalDigits-4-4 tokoe:valid" result="pass"/><test-case name="1188NISTXML-SV-IV-atomic-int-totalDigits-4-5 tokoe:valid" result="pass"/><test-case name="1189NISTSchema-SV-IV-atomic-int-totalDigits-5 tokoe:valid" result="pass"/><test-case name="1190NISTXML-SV-IV-atomic-int-totalDigits-5-1 tokoe:valid" result="pass"/><test-case name="1191NISTXML-SV-IV-atomic-int-totalDigits-5-2 tokoe:valid" result="pass"/><test-case name="1192NISTXML-SV-IV-atomic-int-totalDigits-5-3 tokoe:valid" result="pass"/><test-case name="1193NISTXML-SV-IV-atomic-int-totalDigits-5-4 tokoe:valid" result="pass"/><test-case name="1194NISTXML-SV-IV-atomic-int-totalDigits-5-5 tokoe:valid" result="pass"/><test-case name="1195NISTSchema-SV-IV-atomic-int-pattern-1 tokoe:valid" result="pass"/><test-case name="1196NISTXML-SV-IV-atomic-int-pattern-1-1 tokoe:valid" result="pass"/><test-case name="1197NISTXML-SV-IV-atomic-int-pattern-1-2 tokoe:valid" result="pass"/><test-case name="1198NISTXML-SV-IV-atomic-int-pattern-1-3 tokoe:valid" result="pass"/><test-case name="1199NISTXML-SV-IV-atomic-int-pattern-1-4 tokoe:valid" result="pass"/><test-case name="1200NISTXML-SV-IV-atomic-int-pattern-1-5 tokoe:valid" result="pass"/><test-case name="1201NISTSchema-SV-IV-atomic-int-pattern-2 tokoe:valid" result="pass"/><test-case name="1202NISTXML-SV-IV-atomic-int-pattern-2-1 tokoe:valid" result="pass"/><test-case name="1203NISTXML-SV-IV-atomic-int-pattern-2-2 tokoe:valid" result="pass"/><test-case name="1204NISTXML-SV-IV-atomic-int-pattern-2-3 tokoe:valid" result="pass"/><test-case name="1205NISTXML-SV-IV-atomic-int-pattern-2-4 tokoe:valid" result="pass"/><test-case name="1206NISTXML-SV-IV-atomic-int-pattern-2-5 tokoe:valid" result="pass"/><test-case name="1207NISTSchema-SV-IV-atomic-int-pattern-3 tokoe:valid" result="pass"/><test-case name="1208NISTXML-SV-IV-atomic-int-pattern-3-1 tokoe:valid" result="pass"/><test-case name="1209NISTXML-SV-IV-atomic-int-pattern-3-2 tokoe:valid" result="pass"/><test-case name="1210NISTXML-SV-IV-atomic-int-pattern-3-3 tokoe:valid" result="pass"/><test-case name="1211NISTXML-SV-IV-atomic-int-pattern-3-4 tokoe:valid" result="pass"/><test-case name="1212NISTXML-SV-IV-atomic-int-pattern-3-5 tokoe:valid" result="pass"/><test-case name="1213NISTSchema-SV-IV-atomic-int-pattern-4 tokoe:valid" result="pass"/><test-case name="1214NISTXML-SV-IV-atomic-int-pattern-4-1 tokoe:valid" result="pass"/><test-case name="1215NISTXML-SV-IV-atomic-int-pattern-4-2 tokoe:valid" result="pass"/><test-case name="1216NISTXML-SV-IV-atomic-int-pattern-4-3 tokoe:valid" result="pass"/><test-case name="1217NISTXML-SV-IV-atomic-int-pattern-4-4 tokoe:valid" result="pass"/><test-case name="1218NISTXML-SV-IV-atomic-int-pattern-4-5 tokoe:valid" result="pass"/><test-case name="1219NISTSchema-SV-IV-atomic-int-pattern-5 tokoe:valid" result="pass"/><test-case name="1220NISTXML-SV-IV-atomic-int-pattern-5-1 tokoe:valid" result="pass"/><test-case name="1221NISTXML-SV-IV-atomic-int-pattern-5-2 tokoe:valid" result="pass"/><test-case name="1222NISTXML-SV-IV-atomic-int-pattern-5-3 tokoe:valid" result="pass"/><test-case name="1223NISTXML-SV-IV-atomic-int-pattern-5-4 tokoe:valid" result="pass"/><test-case name="1224NISTXML-SV-IV-atomic-int-pattern-5-5 tokoe:valid" result="pass"/><test-case name="1225NISTSchema-SV-IV-atomic-int-enumeration-1 tokoe:valid" result="pass"/><test-case name="1226NISTXML-SV-IV-atomic-int-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="1227NISTXML-SV-IV-atomic-int-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="1228NISTXML-SV-IV-atomic-int-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="1229NISTXML-SV-IV-atomic-int-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="1230NISTXML-SV-IV-atomic-int-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="1231NISTSchema-SV-IV-atomic-int-enumeration-2 tokoe:valid" result="pass"/><test-case name="1232NISTXML-SV-IV-atomic-int-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="1233NISTXML-SV-IV-atomic-int-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="1234NISTXML-SV-IV-atomic-int-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="1235NISTXML-SV-IV-atomic-int-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="1236NISTXML-SV-IV-atomic-int-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="1237NISTSchema-SV-IV-atomic-int-enumeration-3 tokoe:valid" result="pass"/><test-case name="1238NISTXML-SV-IV-atomic-int-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="1239NISTXML-SV-IV-atomic-int-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="1240NISTXML-SV-IV-atomic-int-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="1241NISTXML-SV-IV-atomic-int-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="1242NISTXML-SV-IV-atomic-int-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="1243NISTSchema-SV-IV-atomic-int-enumeration-4 tokoe:valid" result="pass"/><test-case name="1244NISTXML-SV-IV-atomic-int-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="1245NISTXML-SV-IV-atomic-int-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="1246NISTXML-SV-IV-atomic-int-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="1247NISTXML-SV-IV-atomic-int-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="1248NISTXML-SV-IV-atomic-int-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="1249NISTSchema-SV-IV-atomic-int-enumeration-5 tokoe:valid" result="pass"/><test-case name="1250NISTXML-SV-IV-atomic-int-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="1251NISTXML-SV-IV-atomic-int-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="1252NISTXML-SV-IV-atomic-int-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="1253NISTXML-SV-IV-atomic-int-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="1254NISTXML-SV-IV-atomic-int-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="1255NISTSchema-SV-IV-atomic-int-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="1256NISTXML-SV-IV-atomic-int-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="1257NISTXML-SV-IV-atomic-int-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="1258NISTXML-SV-IV-atomic-int-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="1259NISTXML-SV-IV-atomic-int-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="1260NISTXML-SV-IV-atomic-int-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="1261NISTSchema-SV-IV-atomic-short-minExclusive-1 tokoe:valid" result="pass"/><test-case name="1262NISTXML-SV-IV-atomic-short-minExclusive-1-1 tokoe:valid" result="pass"/><test-case name="1263NISTXML-SV-IV-atomic-short-minExclusive-1-2 tokoe:valid" result="pass"/><test-case name="1264NISTXML-SV-IV-atomic-short-minExclusive-1-3 tokoe:valid" result="pass"/><test-case name="1265NISTXML-SV-IV-atomic-short-minExclusive-1-4 tokoe:valid" result="pass"/><test-case name="1266NISTXML-SV-IV-atomic-short-minExclusive-1-5 tokoe:valid" result="pass"/><test-case name="1267NISTSchema-SV-IV-atomic-short-minExclusive-2 tokoe:valid" result="pass"/><test-case name="1268NISTXML-SV-IV-atomic-short-minExclusive-2-1 tokoe:valid" result="pass"/><test-case name="1269NISTXML-SV-IV-atomic-short-minExclusive-2-2 tokoe:valid" result="pass"/><test-case name="1270NISTXML-SV-IV-atomic-short-minExclusive-2-3 tokoe:valid" result="pass"/><test-case name="1271NISTXML-SV-IV-atomic-short-minExclusive-2-4 tokoe:valid" result="pass"/><test-case name="1272NISTXML-SV-IV-atomic-short-minExclusive-2-5 tokoe:valid" result="pass"/><test-case name="1273NISTSchema-SV-IV-atomic-short-minExclusive-3 tokoe:valid" result="pass"/><test-case name="1274NISTXML-SV-IV-atomic-short-minExclusive-3-1 tokoe:valid" result="pass"/><test-case name="1275NISTXML-SV-IV-atomic-short-minExclusive-3-2 tokoe:valid" result="pass"/><test-case name="1276NISTXML-SV-IV-atomic-short-minExclusive-3-3 tokoe:valid" result="pass"/><test-case name="1277NISTXML-SV-IV-atomic-short-minExclusive-3-4 tokoe:valid" result="pass"/><test-case name="1278NISTXML-SV-IV-atomic-short-minExclusive-3-5 tokoe:valid" result="pass"/><test-case name="1279NISTSchema-SV-IV-atomic-short-minExclusive-4 tokoe:valid" result="pass"/><test-case name="1280NISTXML-SV-IV-atomic-short-minExclusive-4-1 tokoe:valid" result="pass"/><test-case name="1281NISTXML-SV-IV-atomic-short-minExclusive-4-2 tokoe:valid" result="pass"/><test-case name="1282NISTXML-SV-IV-atomic-short-minExclusive-4-3 tokoe:valid" result="pass"/><test-case name="1283NISTXML-SV-IV-atomic-short-minExclusive-4-4 tokoe:valid" result="pass"/><test-case name="1284NISTXML-SV-IV-atomic-short-minExclusive-4-5 tokoe:valid" result="pass"/><test-case name="1285NISTSchema-SV-IV-atomic-short-minExclusive-5 tokoe:valid" result="pass"/><test-case name="1286NISTXML-SV-IV-atomic-short-minExclusive-5-1 tokoe:valid" result="pass"/><test-case name="1287NISTSchema-SV-IV-atomic-short-minInclusive-1 tokoe:valid" result="pass"/><test-case name="1288NISTXML-SV-IV-atomic-short-minInclusive-1-1 tokoe:valid" result="pass"/><test-case name="1289NISTXML-SV-IV-atomic-short-minInclusive-1-2 tokoe:valid" result="pass"/><test-case name="1290NISTXML-SV-IV-atomic-short-minInclusive-1-3 tokoe:valid" result="pass"/><test-case name="1291NISTXML-SV-IV-atomic-short-minInclusive-1-4 tokoe:valid" result="pass"/><test-case name="1292NISTXML-SV-IV-atomic-short-minInclusive-1-5 tokoe:valid" result="pass"/><test-case name="1293NISTSchema-SV-IV-atomic-short-minInclusive-2 tokoe:valid" result="pass"/><test-case name="1294NISTXML-SV-IV-atomic-short-minInclusive-2-1 tokoe:valid" result="pass"/><test-case name="1295NISTXML-SV-IV-atomic-short-minInclusive-2-2 tokoe:valid" result="pass"/><test-case name="1296NISTXML-SV-IV-atomic-short-minInclusive-2-3 tokoe:valid" result="pass"/><test-case name="1297NISTXML-SV-IV-atomic-short-minInclusive-2-4 tokoe:valid" result="pass"/><test-case name="1298NISTXML-SV-IV-atomic-short-minInclusive-2-5 tokoe:valid" result="pass"/><test-case name="1299NISTSchema-SV-IV-atomic-short-minInclusive-3 tokoe:valid" result="pass"/><test-case name="1300NISTXML-SV-IV-atomic-short-minInclusive-3-1 tokoe:valid" result="pass"/><test-case name="1301NISTXML-SV-IV-atomic-short-minInclusive-3-2 tokoe:valid" result="pass"/><test-case name="1302NISTXML-SV-IV-atomic-short-minInclusive-3-3 tokoe:valid" result="pass"/><test-case name="1303NISTXML-SV-IV-atomic-short-minInclusive-3-4 tokoe:valid" result="pass"/><test-case name="1304NISTXML-SV-IV-atomic-short-minInclusive-3-5 tokoe:valid" result="pass"/><test-case name="1305NISTSchema-SV-IV-atomic-short-minInclusive-4 tokoe:valid" result="pass"/><test-case name="1306NISTXML-SV-IV-atomic-short-minInclusive-4-1 tokoe:valid" result="pass"/><test-case name="1307NISTXML-SV-IV-atomic-short-minInclusive-4-2 tokoe:valid" result="pass"/><test-case name="1308NISTXML-SV-IV-atomic-short-minInclusive-4-3 tokoe:valid" result="pass"/><test-case name="1309NISTXML-SV-IV-atomic-short-minInclusive-4-4 tokoe:valid" result="pass"/><test-case name="1310NISTXML-SV-IV-atomic-short-minInclusive-4-5 tokoe:valid" result="pass"/><test-case name="1311NISTSchema-SV-IV-atomic-short-minInclusive-5 tokoe:valid" result="pass"/><test-case name="1312NISTXML-SV-IV-atomic-short-minInclusive-5-1 tokoe:valid" result="pass"/><test-case name="1313NISTSchema-SV-IV-atomic-short-maxExclusive-1 tokoe:valid" result="pass"/><test-case name="1314NISTXML-SV-IV-atomic-short-maxExclusive-1-1 tokoe:valid" result="pass"/><test-case name="1315NISTSchema-SV-IV-atomic-short-maxExclusive-2 tokoe:valid" result="pass"/><test-case name="1316NISTXML-SV-IV-atomic-short-maxExclusive-2-1 tokoe:valid" result="pass"/><test-case name="1317NISTXML-SV-IV-atomic-short-maxExclusive-2-2 tokoe:valid" result="pass"/><test-case name="1318NISTXML-SV-IV-atomic-short-maxExclusive-2-3 tokoe:valid" result="pass"/><test-case name="1319NISTXML-SV-IV-atomic-short-maxExclusive-2-4 tokoe:valid" result="pass"/><test-case name="1320NISTXML-SV-IV-atomic-short-maxExclusive-2-5 tokoe:valid" result="pass"/><test-case name="1321NISTSchema-SV-IV-atomic-short-maxExclusive-3 tokoe:valid" result="pass"/><test-case name="1322NISTXML-SV-IV-atomic-short-maxExclusive-3-1 tokoe:valid" result="pass"/><test-case name="1323NISTXML-SV-IV-atomic-short-maxExclusive-3-2 tokoe:valid" result="pass"/><test-case name="1324NISTXML-SV-IV-atomic-short-maxExclusive-3-3 tokoe:valid" result="pass"/><test-case name="1325NISTXML-SV-IV-atomic-short-maxExclusive-3-4 tokoe:valid" result="pass"/><test-case name="1326NISTXML-SV-IV-atomic-short-maxExclusive-3-5 tokoe:valid" result="pass"/><test-case name="1327NISTSchema-SV-IV-atomic-short-maxExclusive-4 tokoe:valid" result="pass"/><test-case name="1328NISTXML-SV-IV-atomic-short-maxExclusive-4-1 tokoe:valid" result="pass"/><test-case name="1329NISTXML-SV-IV-atomic-short-maxExclusive-4-2 tokoe:valid" result="pass"/><test-case name="1330NISTXML-SV-IV-atomic-short-maxExclusive-4-3 tokoe:valid" result="pass"/><test-case name="1331NISTXML-SV-IV-atomic-short-maxExclusive-4-4 tokoe:valid" result="pass"/><test-case name="1332NISTXML-SV-IV-atomic-short-maxExclusive-4-5 tokoe:valid" result="pass"/><test-case name="1333NISTSchema-SV-IV-atomic-short-maxExclusive-5 tokoe:valid" result="pass"/><test-case name="1334NISTXML-SV-IV-atomic-short-maxExclusive-5-1 tokoe:valid" result="pass"/><test-case name="1335NISTXML-SV-IV-atomic-short-maxExclusive-5-2 tokoe:valid" result="pass"/><test-case name="1336NISTXML-SV-IV-atomic-short-maxExclusive-5-3 tokoe:valid" result="pass"/><test-case name="1337NISTXML-SV-IV-atomic-short-maxExclusive-5-4 tokoe:valid" result="pass"/><test-case name="1338NISTXML-SV-IV-atomic-short-maxExclusive-5-5 tokoe:valid" result="pass"/><test-case name="1339NISTSchema-SV-IV-atomic-short-maxInclusive-1 tokoe:valid" result="pass"/><test-case name="1340NISTXML-SV-IV-atomic-short-maxInclusive-1-1 tokoe:valid" result="pass"/><test-case name="1341NISTSchema-SV-IV-atomic-short-maxInclusive-2 tokoe:valid" result="pass"/><test-case name="1342NISTXML-SV-IV-atomic-short-maxInclusive-2-1 tokoe:valid" result="pass"/><test-case name="1343NISTXML-SV-IV-atomic-short-maxInclusive-2-2 tokoe:valid" result="pass"/><test-case name="1344NISTXML-SV-IV-atomic-short-maxInclusive-2-3 tokoe:valid" result="pass"/><test-case name="1345NISTXML-SV-IV-atomic-short-maxInclusive-2-4 tokoe:valid" result="pass"/><test-case name="1346NISTXML-SV-IV-atomic-short-maxInclusive-2-5 tokoe:valid" result="pass"/><test-case name="1347NISTSchema-SV-IV-atomic-short-maxInclusive-3 tokoe:valid" result="pass"/><test-case name="1348NISTXML-SV-IV-atomic-short-maxInclusive-3-1 tokoe:valid" result="pass"/><test-case name="1349NISTXML-SV-IV-atomic-short-maxInclusive-3-2 tokoe:valid" result="pass"/><test-case name="1350NISTXML-SV-IV-atomic-short-maxInclusive-3-3 tokoe:valid" result="pass"/><test-case name="1351NISTXML-SV-IV-atomic-short-maxInclusive-3-4 tokoe:valid" result="pass"/><test-case name="1352NISTXML-SV-IV-atomic-short-maxInclusive-3-5 tokoe:valid" result="pass"/><test-case name="1353NISTSchema-SV-IV-atomic-short-maxInclusive-4 tokoe:valid" result="pass"/><test-case name="1354NISTXML-SV-IV-atomic-short-maxInclusive-4-1 tokoe:valid" result="pass"/><test-case name="1355NISTXML-SV-IV-atomic-short-maxInclusive-4-2 tokoe:valid" result="pass"/><test-case name="1356NISTXML-SV-IV-atomic-short-maxInclusive-4-3 tokoe:valid" result="pass"/><test-case name="1357NISTXML-SV-IV-atomic-short-maxInclusive-4-4 tokoe:valid" result="pass"/><test-case name="1358NISTXML-SV-IV-atomic-short-maxInclusive-4-5 tokoe:valid" result="pass"/><test-case name="1359NISTSchema-SV-IV-atomic-short-maxInclusive-5 tokoe:valid" result="pass"/><test-case name="1360NISTXML-SV-IV-atomic-short-maxInclusive-5-1 tokoe:valid" result="pass"/><test-case name="1361NISTXML-SV-IV-atomic-short-maxInclusive-5-2 tokoe:valid" result="pass"/><test-case name="1362NISTXML-SV-IV-atomic-short-maxInclusive-5-3 tokoe:valid" result="pass"/><test-case name="1363NISTXML-SV-IV-atomic-short-maxInclusive-5-4 tokoe:valid" result="pass"/><test-case name="1364NISTXML-SV-IV-atomic-short-maxInclusive-5-5 tokoe:valid" result="pass"/><test-case name="1365NISTSchema-SV-IV-atomic-short-fractionDigits-1 tokoe:valid" result="pass"/><test-case name="1366NISTXML-SV-IV-atomic-short-fractionDigits-1-1 tokoe:valid" result="pass"/><test-case name="1367NISTXML-SV-IV-atomic-short-fractionDigits-1-2 tokoe:valid" result="pass"/><test-case name="1368NISTXML-SV-IV-atomic-short-fractionDigits-1-3 tokoe:valid" result="pass"/><test-case name="1369NISTXML-SV-IV-atomic-short-fractionDigits-1-4 tokoe:valid" result="pass"/><test-case name="1370NISTXML-SV-IV-atomic-short-fractionDigits-1-5 tokoe:valid" result="pass"/><test-case name="1371NISTSchema-SV-IV-atomic-short-totalDigits-1 tokoe:valid" result="pass"/><test-case name="1372NISTXML-SV-IV-atomic-short-totalDigits-1-1 tokoe:valid" result="pass"/><test-case name="1373NISTXML-SV-IV-atomic-short-totalDigits-1-2 tokoe:valid" result="pass"/><test-case name="1374NISTXML-SV-IV-atomic-short-totalDigits-1-3 tokoe:valid" result="pass"/><test-case name="1375NISTXML-SV-IV-atomic-short-totalDigits-1-4 tokoe:valid" result="pass"/><test-case name="1376NISTXML-SV-IV-atomic-short-totalDigits-1-5 tokoe:valid" result="pass"/><test-case name="1377NISTSchema-SV-IV-atomic-short-totalDigits-2 tokoe:valid" result="pass"/><test-case name="1378NISTXML-SV-IV-atomic-short-totalDigits-2-1 tokoe:valid" result="pass"/><test-case name="1379NISTXML-SV-IV-atomic-short-totalDigits-2-2 tokoe:valid" result="pass"/><test-case name="1380NISTXML-SV-IV-atomic-short-totalDigits-2-3 tokoe:valid" result="pass"/><test-case name="1381NISTXML-SV-IV-atomic-short-totalDigits-2-4 tokoe:valid" result="pass"/><test-case name="1382NISTXML-SV-IV-atomic-short-totalDigits-2-5 tokoe:valid" result="pass"/><test-case name="1383NISTSchema-SV-IV-atomic-short-totalDigits-3 tokoe:valid" result="pass"/><test-case name="1384NISTXML-SV-IV-atomic-short-totalDigits-3-1 tokoe:valid" result="pass"/><test-case name="1385NISTXML-SV-IV-atomic-short-totalDigits-3-2 tokoe:valid" result="pass"/><test-case name="1386NISTXML-SV-IV-atomic-short-totalDigits-3-3 tokoe:valid" result="pass"/><test-case name="1387NISTXML-SV-IV-atomic-short-totalDigits-3-4 tokoe:valid" result="pass"/><test-case name="1388NISTXML-SV-IV-atomic-short-totalDigits-3-5 tokoe:valid" result="pass"/><test-case name="1389NISTSchema-SV-IV-atomic-short-totalDigits-4 tokoe:valid" result="pass"/><test-case name="1390NISTXML-SV-IV-atomic-short-totalDigits-4-1 tokoe:valid" result="pass"/><test-case name="1391NISTXML-SV-IV-atomic-short-totalDigits-4-2 tokoe:valid" result="pass"/><test-case name="1392NISTXML-SV-IV-atomic-short-totalDigits-4-3 tokoe:valid" result="pass"/><test-case name="1393NISTXML-SV-IV-atomic-short-totalDigits-4-4 tokoe:valid" result="pass"/><test-case name="1394NISTXML-SV-IV-atomic-short-totalDigits-4-5 tokoe:valid" result="pass"/><test-case name="1395NISTSchema-SV-IV-atomic-short-totalDigits-5 tokoe:valid" result="pass"/><test-case name="1396NISTXML-SV-IV-atomic-short-totalDigits-5-1 tokoe:valid" result="pass"/><test-case name="1397NISTXML-SV-IV-atomic-short-totalDigits-5-2 tokoe:valid" result="pass"/><test-case name="1398NISTXML-SV-IV-atomic-short-totalDigits-5-3 tokoe:valid" result="pass"/><test-case name="1399NISTXML-SV-IV-atomic-short-totalDigits-5-4 tokoe:valid" result="pass"/><test-case name="1400NISTXML-SV-IV-atomic-short-totalDigits-5-5 tokoe:valid" result="pass"/><test-case name="1401NISTSchema-SV-IV-atomic-short-pattern-1 tokoe:valid" result="pass"/><test-case name="1402NISTXML-SV-IV-atomic-short-pattern-1-1 tokoe:valid" result="pass"/><test-case name="1403NISTXML-SV-IV-atomic-short-pattern-1-2 tokoe:valid" result="pass"/><test-case name="1404NISTXML-SV-IV-atomic-short-pattern-1-3 tokoe:valid" result="pass"/><test-case name="1405NISTXML-SV-IV-atomic-short-pattern-1-4 tokoe:valid" result="pass"/><test-case name="1406NISTXML-SV-IV-atomic-short-pattern-1-5 tokoe:valid" result="pass"/><test-case name="1407NISTSchema-SV-IV-atomic-short-pattern-2 tokoe:valid" result="pass"/><test-case name="1408NISTXML-SV-IV-atomic-short-pattern-2-1 tokoe:valid" result="pass"/><test-case name="1409NISTXML-SV-IV-atomic-short-pattern-2-2 tokoe:valid" result="pass"/><test-case name="1410NISTXML-SV-IV-atomic-short-pattern-2-3 tokoe:valid" result="pass"/><test-case name="1411NISTXML-SV-IV-atomic-short-pattern-2-4 tokoe:valid" result="pass"/><test-case name="1412NISTXML-SV-IV-atomic-short-pattern-2-5 tokoe:valid" result="pass"/><test-case name="1413NISTSchema-SV-IV-atomic-short-pattern-3 tokoe:valid" result="pass"/><test-case name="1414NISTXML-SV-IV-atomic-short-pattern-3-1 tokoe:valid" result="pass"/><test-case name="1415NISTXML-SV-IV-atomic-short-pattern-3-2 tokoe:valid" result="pass"/><test-case name="1416NISTXML-SV-IV-atomic-short-pattern-3-3 tokoe:valid" result="pass"/><test-case name="1417NISTXML-SV-IV-atomic-short-pattern-3-4 tokoe:valid" result="pass"/><test-case name="1418NISTXML-SV-IV-atomic-short-pattern-3-5 tokoe:valid" result="pass"/><test-case name="1419NISTSchema-SV-IV-atomic-short-pattern-4 tokoe:valid" result="pass"/><test-case name="1420NISTXML-SV-IV-atomic-short-pattern-4-1 tokoe:valid" result="pass"/><test-case name="1421NISTXML-SV-IV-atomic-short-pattern-4-2 tokoe:valid" result="pass"/><test-case name="1422NISTXML-SV-IV-atomic-short-pattern-4-3 tokoe:valid" result="pass"/><test-case name="1423NISTXML-SV-IV-atomic-short-pattern-4-4 tokoe:valid" result="pass"/><test-case name="1424NISTXML-SV-IV-atomic-short-pattern-4-5 tokoe:valid" result="pass"/><test-case name="1425NISTSchema-SV-IV-atomic-short-pattern-5 tokoe:valid" result="pass"/><test-case name="1426NISTXML-SV-IV-atomic-short-pattern-5-1 tokoe:valid" result="pass"/><test-case name="1427NISTXML-SV-IV-atomic-short-pattern-5-2 tokoe:valid" result="pass"/><test-case name="1428NISTXML-SV-IV-atomic-short-pattern-5-3 tokoe:valid" result="pass"/><test-case name="1429NISTXML-SV-IV-atomic-short-pattern-5-4 tokoe:valid" result="pass"/><test-case name="1430NISTXML-SV-IV-atomic-short-pattern-5-5 tokoe:valid" result="pass"/><test-case name="1431NISTSchema-SV-IV-atomic-short-enumeration-1 tokoe:valid" result="pass"/><test-case name="1432NISTXML-SV-IV-atomic-short-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="1433NISTXML-SV-IV-atomic-short-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="1434NISTXML-SV-IV-atomic-short-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="1435NISTXML-SV-IV-atomic-short-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="1436NISTXML-SV-IV-atomic-short-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="1437NISTSchema-SV-IV-atomic-short-enumeration-2 tokoe:valid" result="pass"/><test-case name="1438NISTXML-SV-IV-atomic-short-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="1439NISTXML-SV-IV-atomic-short-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="1440NISTXML-SV-IV-atomic-short-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="1441NISTXML-SV-IV-atomic-short-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="1442NISTXML-SV-IV-atomic-short-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="1443NISTSchema-SV-IV-atomic-short-enumeration-3 tokoe:valid" result="pass"/><test-case name="1444NISTXML-SV-IV-atomic-short-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="1445NISTXML-SV-IV-atomic-short-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="1446NISTXML-SV-IV-atomic-short-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="1447NISTXML-SV-IV-atomic-short-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="1448NISTXML-SV-IV-atomic-short-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="1449NISTSchema-SV-IV-atomic-short-enumeration-4 tokoe:valid" result="pass"/><test-case name="1450NISTXML-SV-IV-atomic-short-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="1451NISTXML-SV-IV-atomic-short-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="1452NISTXML-SV-IV-atomic-short-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="1453NISTXML-SV-IV-atomic-short-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="1454NISTXML-SV-IV-atomic-short-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="1455NISTSchema-SV-IV-atomic-short-enumeration-5 tokoe:valid" result="pass"/><test-case name="1456NISTXML-SV-IV-atomic-short-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="1457NISTXML-SV-IV-atomic-short-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="1458NISTXML-SV-IV-atomic-short-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="1459NISTXML-SV-IV-atomic-short-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="1460NISTXML-SV-IV-atomic-short-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="1461NISTSchema-SV-IV-atomic-short-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="1462NISTXML-SV-IV-atomic-short-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="1463NISTXML-SV-IV-atomic-short-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="1464NISTXML-SV-IV-atomic-short-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="1465NISTXML-SV-IV-atomic-short-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="1466NISTXML-SV-IV-atomic-short-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="1467NISTSchema-SV-IV-atomic-byte-minExclusive-1 tokoe:valid" result="pass"/><test-case name="1468NISTXML-SV-IV-atomic-byte-minExclusive-1-1 tokoe:valid" result="pass"/><test-case name="1469NISTXML-SV-IV-atomic-byte-minExclusive-1-2 tokoe:valid" result="pass"/><test-case name="1470NISTXML-SV-IV-atomic-byte-minExclusive-1-3 tokoe:valid" result="pass"/><test-case name="1471NISTXML-SV-IV-atomic-byte-minExclusive-1-4 tokoe:valid" result="pass"/><test-case name="1472NISTXML-SV-IV-atomic-byte-minExclusive-1-5 tokoe:valid" result="pass"/><test-case name="1473NISTSchema-SV-IV-atomic-byte-minExclusive-2 tokoe:valid" result="pass"/><test-case name="1474NISTXML-SV-IV-atomic-byte-minExclusive-2-1 tokoe:valid" result="pass"/><test-case name="1475NISTXML-SV-IV-atomic-byte-minExclusive-2-2 tokoe:valid" result="pass"/><test-case name="1476NISTXML-SV-IV-atomic-byte-minExclusive-2-3 tokoe:valid" result="pass"/><test-case name="1477NISTXML-SV-IV-atomic-byte-minExclusive-2-4 tokoe:valid" result="pass"/><test-case name="1478NISTXML-SV-IV-atomic-byte-minExclusive-2-5 tokoe:valid" result="pass"/><test-case name="1479NISTSchema-SV-IV-atomic-byte-minExclusive-3 tokoe:valid" result="pass"/><test-case name="1480NISTXML-SV-IV-atomic-byte-minExclusive-3-1 tokoe:valid" result="pass"/><test-case name="1481NISTXML-SV-IV-atomic-byte-minExclusive-3-2 tokoe:valid" result="pass"/><test-case name="1482NISTXML-SV-IV-atomic-byte-minExclusive-3-3 tokoe:valid" result="pass"/><test-case name="1483NISTXML-SV-IV-atomic-byte-minExclusive-3-4 tokoe:valid" result="pass"/><test-case name="1484NISTXML-SV-IV-atomic-byte-minExclusive-3-5 tokoe:valid" result="pass"/><test-case name="1485NISTSchema-SV-IV-atomic-byte-minExclusive-4 tokoe:valid" result="pass"/><test-case name="1486NISTXML-SV-IV-atomic-byte-minExclusive-4-1 tokoe:valid" result="pass"/><test-case name="1487NISTXML-SV-IV-atomic-byte-minExclusive-4-2 tokoe:valid" result="pass"/><test-case name="1488NISTXML-SV-IV-atomic-byte-minExclusive-4-3 tokoe:valid" result="pass"/><test-case name="1489NISTXML-SV-IV-atomic-byte-minExclusive-4-4 tokoe:valid" result="pass"/><test-case name="1490NISTXML-SV-IV-atomic-byte-minExclusive-4-5 tokoe:valid" result="pass"/><test-case name="1491NISTSchema-SV-IV-atomic-byte-minExclusive-5 tokoe:valid" result="pass"/><test-case name="1492NISTXML-SV-IV-atomic-byte-minExclusive-5-1 tokoe:valid" result="pass"/><test-case name="1493NISTSchema-SV-IV-atomic-byte-minInclusive-1 tokoe:valid" result="pass"/><test-case name="1494NISTXML-SV-IV-atomic-byte-minInclusive-1-1 tokoe:valid" result="pass"/><test-case name="1495NISTXML-SV-IV-atomic-byte-minInclusive-1-2 tokoe:valid" result="pass"/><test-case name="1496NISTXML-SV-IV-atomic-byte-minInclusive-1-3 tokoe:valid" result="pass"/><test-case name="1497NISTXML-SV-IV-atomic-byte-minInclusive-1-4 tokoe:valid" result="pass"/><test-case name="1498NISTXML-SV-IV-atomic-byte-minInclusive-1-5 tokoe:valid" result="pass"/><test-case name="1499NISTSchema-SV-IV-atomic-byte-minInclusive-2 tokoe:valid" result="pass"/><test-case name="1500NISTXML-SV-IV-atomic-byte-minInclusive-2-1 tokoe:valid" result="pass"/><test-case name="1501NISTXML-SV-IV-atomic-byte-minInclusive-2-2 tokoe:valid" result="pass"/><test-case name="1502NISTXML-SV-IV-atomic-byte-minInclusive-2-3 tokoe:valid" result="pass"/><test-case name="1503NISTXML-SV-IV-atomic-byte-minInclusive-2-4 tokoe:valid" result="pass"/><test-case name="1504NISTXML-SV-IV-atomic-byte-minInclusive-2-5 tokoe:valid" result="pass"/><test-case name="1505NISTSchema-SV-IV-atomic-byte-minInclusive-3 tokoe:valid" result="pass"/><test-case name="1506NISTXML-SV-IV-atomic-byte-minInclusive-3-1 tokoe:valid" result="pass"/><test-case name="1507NISTXML-SV-IV-atomic-byte-minInclusive-3-2 tokoe:valid" result="pass"/><test-case name="1508NISTXML-SV-IV-atomic-byte-minInclusive-3-3 tokoe:valid" result="pass"/><test-case name="1509NISTXML-SV-IV-atomic-byte-minInclusive-3-4 tokoe:valid" result="pass"/><test-case name="1510NISTXML-SV-IV-atomic-byte-minInclusive-3-5 tokoe:valid" result="pass"/><test-case name="1511NISTSchema-SV-IV-atomic-byte-minInclusive-4 tokoe:valid" result="pass"/><test-case name="1512NISTXML-SV-IV-atomic-byte-minInclusive-4-1 tokoe:valid" result="pass"/><test-case name="1513NISTXML-SV-IV-atomic-byte-minInclusive-4-2 tokoe:valid" result="pass"/><test-case name="1514NISTXML-SV-IV-atomic-byte-minInclusive-4-3 tokoe:valid" result="pass"/><test-case name="1515NISTXML-SV-IV-atomic-byte-minInclusive-4-4 tokoe:valid" result="pass"/><test-case name="1516NISTXML-SV-IV-atomic-byte-minInclusive-4-5 tokoe:valid" result="pass"/><test-case name="1517NISTSchema-SV-IV-atomic-byte-minInclusive-5 tokoe:valid" result="pass"/><test-case name="1518NISTXML-SV-IV-atomic-byte-minInclusive-5-1 tokoe:valid" result="pass"/><test-case name="1519NISTSchema-SV-IV-atomic-byte-maxExclusive-1 tokoe:valid" result="pass"/><test-case name="1520NISTXML-SV-IV-atomic-byte-maxExclusive-1-1 tokoe:valid" result="pass"/><test-case name="1521NISTSchema-SV-IV-atomic-byte-maxExclusive-2 tokoe:valid" result="pass"/><test-case name="1522NISTXML-SV-IV-atomic-byte-maxExclusive-2-1 tokoe:valid" result="pass"/><test-case name="1523NISTXML-SV-IV-atomic-byte-maxExclusive-2-2 tokoe:valid" result="pass"/><test-case name="1524NISTXML-SV-IV-atomic-byte-maxExclusive-2-3 tokoe:valid" result="pass"/><test-case name="1525NISTXML-SV-IV-atomic-byte-maxExclusive-2-4 tokoe:valid" result="pass"/><test-case name="1526NISTXML-SV-IV-atomic-byte-maxExclusive-2-5 tokoe:valid" result="pass"/><test-case name="1527NISTSchema-SV-IV-atomic-byte-maxExclusive-3 tokoe:valid" result="pass"/><test-case name="1528NISTXML-SV-IV-atomic-byte-maxExclusive-3-1 tokoe:valid" result="pass"/><test-case name="1529NISTXML-SV-IV-atomic-byte-maxExclusive-3-2 tokoe:valid" result="pass"/><test-case name="1530NISTXML-SV-IV-atomic-byte-maxExclusive-3-3 tokoe:valid" result="pass"/><test-case name="1531NISTXML-SV-IV-atomic-byte-maxExclusive-3-4 tokoe:valid" result="pass"/><test-case name="1532NISTXML-SV-IV-atomic-byte-maxExclusive-3-5 tokoe:valid" result="pass"/><test-case name="1533NISTSchema-SV-IV-atomic-byte-maxExclusive-4 tokoe:valid" result="pass"/><test-case name="1534NISTXML-SV-IV-atomic-byte-maxExclusive-4-1 tokoe:valid" result="pass"/><test-case name="1535NISTXML-SV-IV-atomic-byte-maxExclusive-4-2 tokoe:valid" result="pass"/><test-case name="1536NISTXML-SV-IV-atomic-byte-maxExclusive-4-3 tokoe:valid" result="pass"/><test-case name="1537NISTXML-SV-IV-atomic-byte-maxExclusive-4-4 tokoe:valid" result="pass"/><test-case name="1538NISTXML-SV-IV-atomic-byte-maxExclusive-4-5 tokoe:valid" result="pass"/><test-case name="1539NISTSchema-SV-IV-atomic-byte-maxExclusive-5 tokoe:valid" result="pass"/><test-case name="1540NISTXML-SV-IV-atomic-byte-maxExclusive-5-1 tokoe:valid" result="pass"/><test-case name="1541NISTXML-SV-IV-atomic-byte-maxExclusive-5-2 tokoe:valid" result="pass"/><test-case name="1542NISTXML-SV-IV-atomic-byte-maxExclusive-5-3 tokoe:valid" result="pass"/><test-case name="1543NISTXML-SV-IV-atomic-byte-maxExclusive-5-4 tokoe:valid" result="pass"/><test-case name="1544NISTXML-SV-IV-atomic-byte-maxExclusive-5-5 tokoe:valid" result="pass"/><test-case name="1545NISTSchema-SV-IV-atomic-byte-maxInclusive-1 tokoe:valid" result="pass"/><test-case name="1546NISTXML-SV-IV-atomic-byte-maxInclusive-1-1 tokoe:valid" result="pass"/><test-case name="1547NISTSchema-SV-IV-atomic-byte-maxInclusive-2 tokoe:valid" result="pass"/><test-case name="1548NISTXML-SV-IV-atomic-byte-maxInclusive-2-1 tokoe:valid" result="pass"/><test-case name="1549NISTXML-SV-IV-atomic-byte-maxInclusive-2-2 tokoe:valid" result="pass"/><test-case name="1550NISTXML-SV-IV-atomic-byte-maxInclusive-2-3 tokoe:valid" result="pass"/><test-case name="1551NISTXML-SV-IV-atomic-byte-maxInclusive-2-4 tokoe:valid" result="pass"/><test-case name="1552NISTXML-SV-IV-atomic-byte-maxInclusive-2-5 tokoe:valid" result="pass"/><test-case name="1553NISTSchema-SV-IV-atomic-byte-maxInclusive-3 tokoe:valid" result="pass"/><test-case name="1554NISTXML-SV-IV-atomic-byte-maxInclusive-3-1 tokoe:valid" result="pass"/><test-case name="1555NISTXML-SV-IV-atomic-byte-maxInclusive-3-2 tokoe:valid" result="pass"/><test-case name="1556NISTXML-SV-IV-atomic-byte-maxInclusive-3-3 tokoe:valid" result="pass"/><test-case name="1557NISTXML-SV-IV-atomic-byte-maxInclusive-3-4 tokoe:valid" result="pass"/><test-case name="1558NISTXML-SV-IV-atomic-byte-maxInclusive-3-5 tokoe:valid" result="pass"/><test-case name="1559NISTSchema-SV-IV-atomic-byte-maxInclusive-4 tokoe:valid" result="pass"/><test-case name="1560NISTXML-SV-IV-atomic-byte-maxInclusive-4-1 tokoe:valid" result="pass"/><test-case name="1561NISTXML-SV-IV-atomic-byte-maxInclusive-4-2 tokoe:valid" result="pass"/><test-case name="1562NISTXML-SV-IV-atomic-byte-maxInclusive-4-3 tokoe:valid" result="pass"/><test-case name="1563NISTXML-SV-IV-atomic-byte-maxInclusive-4-4 tokoe:valid" result="pass"/><test-case name="1564NISTXML-SV-IV-atomic-byte-maxInclusive-4-5 tokoe:valid" result="pass"/><test-case name="1565NISTSchema-SV-IV-atomic-byte-maxInclusive-5 tokoe:valid" result="pass"/><test-case name="1566NISTXML-SV-IV-atomic-byte-maxInclusive-5-1 tokoe:valid" result="pass"/><test-case name="1567NISTXML-SV-IV-atomic-byte-maxInclusive-5-2 tokoe:valid" result="pass"/><test-case name="1568NISTXML-SV-IV-atomic-byte-maxInclusive-5-3 tokoe:valid" result="pass"/><test-case name="1569NISTXML-SV-IV-atomic-byte-maxInclusive-5-4 tokoe:valid" result="pass"/><test-case name="1570NISTXML-SV-IV-atomic-byte-maxInclusive-5-5 tokoe:valid" result="pass"/><test-case name="1571NISTSchema-SV-IV-atomic-byte-fractionDigits-1 tokoe:valid" result="pass"/><test-case name="1572NISTXML-SV-IV-atomic-byte-fractionDigits-1-1 tokoe:valid" result="pass"/><test-case name="1573NISTXML-SV-IV-atomic-byte-fractionDigits-1-2 tokoe:valid" result="pass"/><test-case name="1574NISTXML-SV-IV-atomic-byte-fractionDigits-1-3 tokoe:valid" result="pass"/><test-case name="1575NISTXML-SV-IV-atomic-byte-fractionDigits-1-4 tokoe:valid" result="pass"/><test-case name="1576NISTXML-SV-IV-atomic-byte-fractionDigits-1-5 tokoe:valid" result="pass"/><test-case name="1577NISTSchema-SV-IV-atomic-byte-totalDigits-1 tokoe:valid" result="pass"/><test-case name="1578NISTXML-SV-IV-atomic-byte-totalDigits-1-1 tokoe:valid" result="pass"/><test-case name="1579NISTXML-SV-IV-atomic-byte-totalDigits-1-2 tokoe:valid" result="pass"/><test-case name="1580NISTXML-SV-IV-atomic-byte-totalDigits-1-3 tokoe:valid" result="pass"/><test-case name="1581NISTXML-SV-IV-atomic-byte-totalDigits-1-4 tokoe:valid" result="pass"/><test-case name="1582NISTXML-SV-IV-atomic-byte-totalDigits-1-5 tokoe:valid" result="pass"/><test-case name="1583NISTSchema-SV-IV-atomic-byte-totalDigits-2 tokoe:valid" result="pass"/><test-case name="1584NISTXML-SV-IV-atomic-byte-totalDigits-2-1 tokoe:valid" result="pass"/><test-case name="1585NISTXML-SV-IV-atomic-byte-totalDigits-2-2 tokoe:valid" result="pass"/><test-case name="1586NISTXML-SV-IV-atomic-byte-totalDigits-2-3 tokoe:valid" result="pass"/><test-case name="1587NISTXML-SV-IV-atomic-byte-totalDigits-2-4 tokoe:valid" result="pass"/><test-case name="1588NISTXML-SV-IV-atomic-byte-totalDigits-2-5 tokoe:valid" result="pass"/><test-case name="1589NISTSchema-SV-IV-atomic-byte-totalDigits-3 tokoe:valid" result="pass"/><test-case name="1590NISTXML-SV-IV-atomic-byte-totalDigits-3-1 tokoe:valid" result="pass"/><test-case name="1591NISTXML-SV-IV-atomic-byte-totalDigits-3-2 tokoe:valid" result="pass"/><test-case name="1592NISTXML-SV-IV-atomic-byte-totalDigits-3-3 tokoe:valid" result="pass"/><test-case name="1593NISTXML-SV-IV-atomic-byte-totalDigits-3-4 tokoe:valid" result="pass"/><test-case name="1594NISTXML-SV-IV-atomic-byte-totalDigits-3-5 tokoe:valid" result="pass"/><test-case name="1595NISTSchema-SV-IV-atomic-byte-pattern-1 tokoe:valid" result="pass"/><test-case name="1596NISTXML-SV-IV-atomic-byte-pattern-1-1 tokoe:valid" result="pass"/><test-case name="1597NISTXML-SV-IV-atomic-byte-pattern-1-2 tokoe:valid" result="pass"/><test-case name="1598NISTXML-SV-IV-atomic-byte-pattern-1-3 tokoe:valid" result="pass"/><test-case name="1599NISTXML-SV-IV-atomic-byte-pattern-1-4 tokoe:valid" result="pass"/><test-case name="1600NISTXML-SV-IV-atomic-byte-pattern-1-5 tokoe:valid" result="pass"/><test-case name="1601NISTSchema-SV-IV-atomic-byte-pattern-2 tokoe:valid" result="pass"/><test-case name="1602NISTXML-SV-IV-atomic-byte-pattern-2-1 tokoe:valid" result="pass"/><test-case name="1603NISTXML-SV-IV-atomic-byte-pattern-2-2 tokoe:valid" result="pass"/><test-case name="1604NISTXML-SV-IV-atomic-byte-pattern-2-3 tokoe:valid" result="pass"/><test-case name="1605NISTXML-SV-IV-atomic-byte-pattern-2-4 tokoe:valid" result="pass"/><test-case name="1606NISTXML-SV-IV-atomic-byte-pattern-2-5 tokoe:valid" result="pass"/><test-case name="1607NISTSchema-SV-IV-atomic-byte-pattern-3 tokoe:valid" result="pass"/><test-case name="1608NISTXML-SV-IV-atomic-byte-pattern-3-1 tokoe:valid" result="pass"/><test-case name="1609NISTXML-SV-IV-atomic-byte-pattern-3-2 tokoe:valid" result="pass"/><test-case name="1610NISTXML-SV-IV-atomic-byte-pattern-3-3 tokoe:valid" result="pass"/><test-case name="1611NISTXML-SV-IV-atomic-byte-pattern-3-4 tokoe:valid" result="pass"/><test-case name="1612NISTXML-SV-IV-atomic-byte-pattern-3-5 tokoe:valid" result="pass"/><test-case name="1613NISTSchema-SV-IV-atomic-byte-pattern-4 tokoe:valid" result="pass"/><test-case name="1614NISTXML-SV-IV-atomic-byte-pattern-4-1 tokoe:valid" result="pass"/><test-case name="1615NISTXML-SV-IV-atomic-byte-pattern-4-2 tokoe:valid" result="pass"/><test-case name="1616NISTXML-SV-IV-atomic-byte-pattern-4-3 tokoe:valid" result="pass"/><test-case name="1617NISTXML-SV-IV-atomic-byte-pattern-4-4 tokoe:valid" result="pass"/><test-case name="1618NISTXML-SV-IV-atomic-byte-pattern-4-5 tokoe:valid" result="pass"/><test-case name="1619NISTSchema-SV-IV-atomic-byte-pattern-5 tokoe:valid" result="pass"/><test-case name="1620NISTXML-SV-IV-atomic-byte-pattern-5-1 tokoe:valid" result="pass"/><test-case name="1621NISTXML-SV-IV-atomic-byte-pattern-5-2 tokoe:valid" result="pass"/><test-case name="1622NISTXML-SV-IV-atomic-byte-pattern-5-3 tokoe:valid" result="pass"/><test-case name="1623NISTXML-SV-IV-atomic-byte-pattern-5-4 tokoe:valid" result="pass"/><test-case name="1624NISTXML-SV-IV-atomic-byte-pattern-5-5 tokoe:valid" result="pass"/><test-case name="1625NISTSchema-SV-IV-atomic-byte-enumeration-1 tokoe:valid" result="pass"/><test-case name="1626NISTXML-SV-IV-atomic-byte-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="1627NISTXML-SV-IV-atomic-byte-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="1628NISTXML-SV-IV-atomic-byte-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="1629NISTXML-SV-IV-atomic-byte-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="1630NISTXML-SV-IV-atomic-byte-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="1631NISTSchema-SV-IV-atomic-byte-enumeration-2 tokoe:valid" result="pass"/><test-case name="1632NISTXML-SV-IV-atomic-byte-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="1633NISTXML-SV-IV-atomic-byte-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="1634NISTXML-SV-IV-atomic-byte-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="1635NISTXML-SV-IV-atomic-byte-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="1636NISTXML-SV-IV-atomic-byte-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="1637NISTSchema-SV-IV-atomic-byte-enumeration-3 tokoe:valid" result="pass"/><test-case name="1638NISTXML-SV-IV-atomic-byte-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="1639NISTXML-SV-IV-atomic-byte-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="1640NISTXML-SV-IV-atomic-byte-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="1641NISTXML-SV-IV-atomic-byte-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="1642NISTXML-SV-IV-atomic-byte-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="1643NISTSchema-SV-IV-atomic-byte-enumeration-4 tokoe:valid" result="pass"/><test-case name="1644NISTXML-SV-IV-atomic-byte-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="1645NISTXML-SV-IV-atomic-byte-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="1646NISTXML-SV-IV-atomic-byte-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="1647NISTXML-SV-IV-atomic-byte-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="1648NISTXML-SV-IV-atomic-byte-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="1649NISTSchema-SV-IV-atomic-byte-enumeration-5 tokoe:valid" result="pass"/><test-case name="1650NISTXML-SV-IV-atomic-byte-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="1651NISTXML-SV-IV-atomic-byte-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="1652NISTXML-SV-IV-atomic-byte-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="1653NISTXML-SV-IV-atomic-byte-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="1654NISTXML-SV-IV-atomic-byte-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="1655NISTSchema-SV-IV-atomic-byte-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="1656NISTXML-SV-IV-atomic-byte-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="1657NISTXML-SV-IV-atomic-byte-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="1658NISTXML-SV-IV-atomic-byte-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="1659NISTXML-SV-IV-atomic-byte-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="1660NISTXML-SV-IV-atomic-byte-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="1661NISTSchema-SV-IV-atomic-nonNegativeInteger-minExclusive-1 tokoe:valid" result="pass"/><test-case name="1662NISTXML-SV-IV-atomic-nonNegativeInteger-minExclusive-1-1 tokoe:valid" result="pass"/><test-case name="1663NISTXML-SV-IV-atomic-nonNegativeInteger-minExclusive-1-2 tokoe:valid" result="pass"/><test-case name="1664NISTXML-SV-IV-atomic-nonNegativeInteger-minExclusive-1-3 tokoe:valid" result="pass"/><test-case name="1665NISTXML-SV-IV-atomic-nonNegativeInteger-minExclusive-1-4 tokoe:valid" result="pass"/><test-case name="1666NISTXML-SV-IV-atomic-nonNegativeInteger-minExclusive-1-5 tokoe:valid" result="pass"/><test-case name="1667NISTSchema-SV-IV-atomic-nonNegativeInteger-minExclusive-2 tokoe:valid" result="pass"/><test-case name="1668NISTXML-SV-IV-atomic-nonNegativeInteger-minExclusive-2-1 tokoe:valid" result="pass"/><test-case name="1669NISTXML-SV-IV-atomic-nonNegativeInteger-minExclusive-2-2 tokoe:valid" result="pass"/><test-case name="1670NISTXML-SV-IV-atomic-nonNegativeInteger-minExclusive-2-3 tokoe:valid" result="pass"/><test-case name="1671NISTXML-SV-IV-atomic-nonNegativeInteger-minExclusive-2-4 tokoe:valid" result="pass"/><test-case name="1672NISTXML-SV-IV-atomic-nonNegativeInteger-minExclusive-2-5 tokoe:valid" result="pass"/><test-case name="1673NISTSchema-SV-IV-atomic-nonNegativeInteger-minExclusive-3 tokoe:valid" result="pass"/><test-case name="1674NISTXML-SV-IV-atomic-nonNegativeInteger-minExclusive-3-1 tokoe:valid" result="pass"/><test-case name="1675NISTXML-SV-IV-atomic-nonNegativeInteger-minExclusive-3-2 tokoe:valid" result="pass"/><test-case name="1676NISTXML-SV-IV-atomic-nonNegativeInteger-minExclusive-3-3 tokoe:valid" result="pass"/><test-case name="1677NISTXML-SV-IV-atomic-nonNegativeInteger-minExclusive-3-4 tokoe:valid" result="pass"/><test-case name="1678NISTXML-SV-IV-atomic-nonNegativeInteger-minExclusive-3-5 tokoe:valid" result="pass"/><test-case name="1679NISTSchema-SV-IV-atomic-nonNegativeInteger-minExclusive-4 tokoe:valid" result="pass"/><test-case name="1680NISTXML-SV-IV-atomic-nonNegativeInteger-minExclusive-4-1 tokoe:valid" result="pass"/><test-case name="1681NISTXML-SV-IV-atomic-nonNegativeInteger-minExclusive-4-2 tokoe:valid" result="pass"/><test-case name="1682NISTXML-SV-IV-atomic-nonNegativeInteger-minExclusive-4-3 tokoe:valid" result="pass"/><test-case name="1683NISTXML-SV-IV-atomic-nonNegativeInteger-minExclusive-4-4 tokoe:valid" result="pass"/><test-case name="1684NISTXML-SV-IV-atomic-nonNegativeInteger-minExclusive-4-5 tokoe:valid" result="pass"/><test-case name="1685NISTSchema-SV-IV-atomic-nonNegativeInteger-minExclusive-5 tokoe:valid" result="pass"/><test-case name="1686NISTXML-SV-IV-atomic-nonNegativeInteger-minExclusive-5-1 tokoe:valid" result="pass"/><test-case name="1687NISTSchema-SV-IV-atomic-nonNegativeInteger-minInclusive-1 tokoe:valid" result="pass"/><test-case name="1688NISTXML-SV-IV-atomic-nonNegativeInteger-minInclusive-1-1 tokoe:valid" result="pass"/><test-case name="1689NISTXML-SV-IV-atomic-nonNegativeInteger-minInclusive-1-2 tokoe:valid" result="pass"/><test-case name="1690NISTXML-SV-IV-atomic-nonNegativeInteger-minInclusive-1-3 tokoe:valid" result="pass"/><test-case name="1691NISTXML-SV-IV-atomic-nonNegativeInteger-minInclusive-1-4 tokoe:valid" result="pass"/><test-case name="1692NISTXML-SV-IV-atomic-nonNegativeInteger-minInclusive-1-5 tokoe:valid" result="pass"/><test-case name="1693NISTSchema-SV-IV-atomic-nonNegativeInteger-minInclusive-2 tokoe:valid" result="pass"/><test-case name="1694NISTXML-SV-IV-atomic-nonNegativeInteger-minInclusive-2-1 tokoe:valid" result="pass"/><test-case name="1695NISTXML-SV-IV-atomic-nonNegativeInteger-minInclusive-2-2 tokoe:valid" result="pass"/><test-case name="1696NISTXML-SV-IV-atomic-nonNegativeInteger-minInclusive-2-3 tokoe:valid" result="pass"/><test-case name="1697NISTXML-SV-IV-atomic-nonNegativeInteger-minInclusive-2-4 tokoe:valid" result="pass"/><test-case name="1698NISTXML-SV-IV-atomic-nonNegativeInteger-minInclusive-2-5 tokoe:valid" result="pass"/><test-case name="1699NISTSchema-SV-IV-atomic-nonNegativeInteger-minInclusive-3 tokoe:valid" result="pass"/><test-case name="1700NISTXML-SV-IV-atomic-nonNegativeInteger-minInclusive-3-1 tokoe:valid" result="pass"/><test-case name="1701NISTXML-SV-IV-atomic-nonNegativeInteger-minInclusive-3-2 tokoe:valid" result="pass"/><test-case name="1702NISTXML-SV-IV-atomic-nonNegativeInteger-minInclusive-3-3 tokoe:valid" result="pass"/><test-case name="1703NISTXML-SV-IV-atomic-nonNegativeInteger-minInclusive-3-4 tokoe:valid" result="pass"/><test-case name="1704NISTXML-SV-IV-atomic-nonNegativeInteger-minInclusive-3-5 tokoe:valid" result="pass"/><test-case name="1705NISTSchema-SV-IV-atomic-nonNegativeInteger-minInclusive-4 tokoe:valid" result="pass"/><test-case name="1706NISTXML-SV-IV-atomic-nonNegativeInteger-minInclusive-4-1 tokoe:valid" result="pass"/><test-case name="1707NISTXML-SV-IV-atomic-nonNegativeInteger-minInclusive-4-2 tokoe:valid" result="pass"/><test-case name="1708NISTXML-SV-IV-atomic-nonNegativeInteger-minInclusive-4-3 tokoe:valid" result="pass"/><test-case name="1709NISTXML-SV-IV-atomic-nonNegativeInteger-minInclusive-4-4 tokoe:valid" result="pass"/><test-case name="1710NISTXML-SV-IV-atomic-nonNegativeInteger-minInclusive-4-5 tokoe:valid" result="pass"/><test-case name="1711NISTSchema-SV-IV-atomic-nonNegativeInteger-minInclusive-5 tokoe:valid" result="pass"/><test-case name="1712NISTXML-SV-IV-atomic-nonNegativeInteger-minInclusive-5-1 tokoe:valid" result="pass"/><test-case name="1713NISTSchema-SV-IV-atomic-nonNegativeInteger-maxExclusive-1 tokoe:valid" result="pass"/><test-case name="1714NISTXML-SV-IV-atomic-nonNegativeInteger-maxExclusive-1-1 tokoe:valid" result="pass"/><test-case name="1715NISTSchema-SV-IV-atomic-nonNegativeInteger-maxExclusive-2 tokoe:valid" result="pass"/><test-case name="1716NISTXML-SV-IV-atomic-nonNegativeInteger-maxExclusive-2-1 tokoe:valid" result="pass"/><test-case name="1717NISTXML-SV-IV-atomic-nonNegativeInteger-maxExclusive-2-2 tokoe:valid" result="pass"/><test-case name="1718NISTXML-SV-IV-atomic-nonNegativeInteger-maxExclusive-2-3 tokoe:valid" result="pass"/><test-case name="1719NISTXML-SV-IV-atomic-nonNegativeInteger-maxExclusive-2-4 tokoe:valid" result="pass"/><test-case name="1720NISTXML-SV-IV-atomic-nonNegativeInteger-maxExclusive-2-5 tokoe:valid" result="pass"/><test-case name="1721NISTSchema-SV-IV-atomic-nonNegativeInteger-maxExclusive-3 tokoe:valid" result="pass"/><test-case name="1722NISTXML-SV-IV-atomic-nonNegativeInteger-maxExclusive-3-1 tokoe:valid" result="pass"/><test-case name="1723NISTXML-SV-IV-atomic-nonNegativeInteger-maxExclusive-3-2 tokoe:valid" result="pass"/><test-case name="1724NISTXML-SV-IV-atomic-nonNegativeInteger-maxExclusive-3-3 tokoe:valid" result="pass"/><test-case name="1725NISTXML-SV-IV-atomic-nonNegativeInteger-maxExclusive-3-4 tokoe:valid" result="pass"/><test-case name="1726NISTXML-SV-IV-atomic-nonNegativeInteger-maxExclusive-3-5 tokoe:valid" result="pass"/><test-case name="1727NISTSchema-SV-IV-atomic-nonNegativeInteger-maxExclusive-4 tokoe:valid" result="pass"/><test-case name="1728NISTXML-SV-IV-atomic-nonNegativeInteger-maxExclusive-4-1 tokoe:valid" result="pass"/><test-case name="1729NISTXML-SV-IV-atomic-nonNegativeInteger-maxExclusive-4-2 tokoe:valid" result="pass"/><test-case name="1730NISTXML-SV-IV-atomic-nonNegativeInteger-maxExclusive-4-3 tokoe:valid" result="pass"/><test-case name="1731NISTXML-SV-IV-atomic-nonNegativeInteger-maxExclusive-4-4 tokoe:valid" result="pass"/><test-case name="1732NISTXML-SV-IV-atomic-nonNegativeInteger-maxExclusive-4-5 tokoe:valid" result="pass"/><test-case name="1733NISTSchema-SV-IV-atomic-nonNegativeInteger-maxExclusive-5 tokoe:valid" result="pass"/><test-case name="1734NISTXML-SV-IV-atomic-nonNegativeInteger-maxExclusive-5-1 tokoe:valid" result="pass"/><test-case name="1735NISTXML-SV-IV-atomic-nonNegativeInteger-maxExclusive-5-2 tokoe:valid" result="pass"/><test-case name="1736NISTXML-SV-IV-atomic-nonNegativeInteger-maxExclusive-5-3 tokoe:valid" result="pass"/><test-case name="1737NISTXML-SV-IV-atomic-nonNegativeInteger-maxExclusive-5-4 tokoe:valid" result="pass"/><test-case name="1738NISTXML-SV-IV-atomic-nonNegativeInteger-maxExclusive-5-5 tokoe:valid" result="pass"/><test-case name="1739NISTSchema-SV-IV-atomic-nonNegativeInteger-maxInclusive-1 tokoe:valid" result="pass"/><test-case name="1740NISTXML-SV-IV-atomic-nonNegativeInteger-maxInclusive-1-1 tokoe:valid" result="pass"/><test-case name="1741NISTSchema-SV-IV-atomic-nonNegativeInteger-maxInclusive-2 tokoe:valid" result="pass"/><test-case name="1742NISTXML-SV-IV-atomic-nonNegativeInteger-maxInclusive-2-1 tokoe:valid" result="pass"/><test-case name="1743NISTXML-SV-IV-atomic-nonNegativeInteger-maxInclusive-2-2 tokoe:valid" result="pass"/><test-case name="1744NISTXML-SV-IV-atomic-nonNegativeInteger-maxInclusive-2-3 tokoe:valid" result="pass"/><test-case name="1745NISTXML-SV-IV-atomic-nonNegativeInteger-maxInclusive-2-4 tokoe:valid" result="pass"/><test-case name="1746NISTXML-SV-IV-atomic-nonNegativeInteger-maxInclusive-2-5 tokoe:valid" result="pass"/><test-case name="1747NISTSchema-SV-IV-atomic-nonNegativeInteger-maxInclusive-3 tokoe:valid" result="pass"/><test-case name="1748NISTXML-SV-IV-atomic-nonNegativeInteger-maxInclusive-3-1 tokoe:valid" result="pass"/><test-case name="1749NISTXML-SV-IV-atomic-nonNegativeInteger-maxInclusive-3-2 tokoe:valid" result="pass"/><test-case name="1750NISTXML-SV-IV-atomic-nonNegativeInteger-maxInclusive-3-3 tokoe:valid" result="pass"/><test-case name="1751NISTXML-SV-IV-atomic-nonNegativeInteger-maxInclusive-3-4 tokoe:valid" result="pass"/><test-case name="1752NISTXML-SV-IV-atomic-nonNegativeInteger-maxInclusive-3-5 tokoe:valid" result="pass"/><test-case name="1753NISTSchema-SV-IV-atomic-nonNegativeInteger-maxInclusive-4 tokoe:valid" result="pass"/><test-case name="1754NISTXML-SV-IV-atomic-nonNegativeInteger-maxInclusive-4-1 tokoe:valid" result="pass"/><test-case name="1755NISTXML-SV-IV-atomic-nonNegativeInteger-maxInclusive-4-2 tokoe:valid" result="pass"/><test-case name="1756NISTXML-SV-IV-atomic-nonNegativeInteger-maxInclusive-4-3 tokoe:valid" result="pass"/><test-case name="1757NISTXML-SV-IV-atomic-nonNegativeInteger-maxInclusive-4-4 tokoe:valid" result="pass"/><test-case name="1758NISTXML-SV-IV-atomic-nonNegativeInteger-maxInclusive-4-5 tokoe:valid" result="pass"/><test-case name="1759NISTSchema-SV-IV-atomic-nonNegativeInteger-maxInclusive-5 tokoe:valid" result="pass"/><test-case name="1760NISTXML-SV-IV-atomic-nonNegativeInteger-maxInclusive-5-1 tokoe:valid" result="pass"/><test-case name="1761NISTXML-SV-IV-atomic-nonNegativeInteger-maxInclusive-5-2 tokoe:valid" result="pass"/><test-case name="1762NISTXML-SV-IV-atomic-nonNegativeInteger-maxInclusive-5-3 tokoe:valid" result="pass"/><test-case name="1763NISTXML-SV-IV-atomic-nonNegativeInteger-maxInclusive-5-4 tokoe:valid" result="pass"/><test-case name="1764NISTXML-SV-IV-atomic-nonNegativeInteger-maxInclusive-5-5 tokoe:valid" result="pass"/><test-case name="1765NISTSchema-SV-IV-atomic-nonNegativeInteger-fractionDigits-1 tokoe:valid" result="pass"/><test-case name="1766NISTXML-SV-IV-atomic-nonNegativeInteger-fractionDigits-1-1 tokoe:valid" result="pass"/><test-case name="1767NISTXML-SV-IV-atomic-nonNegativeInteger-fractionDigits-1-2 tokoe:valid" result="pass"/><test-case name="1768NISTXML-SV-IV-atomic-nonNegativeInteger-fractionDigits-1-3 tokoe:valid" result="pass"/><test-case name="1769NISTXML-SV-IV-atomic-nonNegativeInteger-fractionDigits-1-4 tokoe:valid" result="pass"/><test-case name="1770NISTXML-SV-IV-atomic-nonNegativeInteger-fractionDigits-1-5 tokoe:valid" result="pass"/><test-case name="1771NISTSchema-SV-IV-atomic-nonNegativeInteger-totalDigits-1 tokoe:valid" result="pass"/><test-case name="1772NISTXML-SV-IV-atomic-nonNegativeInteger-totalDigits-1-1 tokoe:valid" result="pass"/><test-case name="1773NISTXML-SV-IV-atomic-nonNegativeInteger-totalDigits-1-2 tokoe:valid" result="pass"/><test-case name="1774NISTXML-SV-IV-atomic-nonNegativeInteger-totalDigits-1-3 tokoe:valid" result="pass"/><test-case name="1775NISTXML-SV-IV-atomic-nonNegativeInteger-totalDigits-1-4 tokoe:valid" result="pass"/><test-case name="1776NISTXML-SV-IV-atomic-nonNegativeInteger-totalDigits-1-5 tokoe:valid" result="pass"/><test-case name="1777NISTSchema-SV-IV-atomic-nonNegativeInteger-totalDigits-2 tokoe:valid" result="pass"/><test-case name="1778NISTXML-SV-IV-atomic-nonNegativeInteger-totalDigits-2-1 tokoe:valid" result="pass"/><test-case name="1779NISTXML-SV-IV-atomic-nonNegativeInteger-totalDigits-2-2 tokoe:valid" result="pass"/><test-case name="1780NISTXML-SV-IV-atomic-nonNegativeInteger-totalDigits-2-3 tokoe:valid" result="pass"/><test-case name="1781NISTXML-SV-IV-atomic-nonNegativeInteger-totalDigits-2-4 tokoe:valid" result="pass"/><test-case name="1782NISTXML-SV-IV-atomic-nonNegativeInteger-totalDigits-2-5 tokoe:valid" result="pass"/><test-case name="1783NISTSchema-SV-IV-atomic-nonNegativeInteger-totalDigits-3 tokoe:valid" result="pass"/><test-case name="1784NISTXML-SV-IV-atomic-nonNegativeInteger-totalDigits-3-1 tokoe:valid" result="pass"/><test-case name="1785NISTXML-SV-IV-atomic-nonNegativeInteger-totalDigits-3-2 tokoe:valid" result="pass"/><test-case name="1786NISTXML-SV-IV-atomic-nonNegativeInteger-totalDigits-3-3 tokoe:valid" result="pass"/><test-case name="1787NISTXML-SV-IV-atomic-nonNegativeInteger-totalDigits-3-4 tokoe:valid" result="pass"/><test-case name="1788NISTXML-SV-IV-atomic-nonNegativeInteger-totalDigits-3-5 tokoe:valid" result="pass"/><test-case name="1789NISTSchema-SV-IV-atomic-nonNegativeInteger-totalDigits-4 tokoe:valid" result="pass"/><test-case name="1790NISTXML-SV-IV-atomic-nonNegativeInteger-totalDigits-4-1 tokoe:valid" result="pass"/><test-case name="1791NISTXML-SV-IV-atomic-nonNegativeInteger-totalDigits-4-2 tokoe:valid" result="pass"/><test-case name="1792NISTXML-SV-IV-atomic-nonNegativeInteger-totalDigits-4-3 tokoe:valid" result="pass"/><test-case name="1793NISTXML-SV-IV-atomic-nonNegativeInteger-totalDigits-4-4 tokoe:valid" result="pass"/><test-case name="1794NISTXML-SV-IV-atomic-nonNegativeInteger-totalDigits-4-5 tokoe:valid" result="pass"/><test-case name="1795NISTSchema-SV-IV-atomic-nonNegativeInteger-totalDigits-5 tokoe:valid" result="pass"/><test-case name="1796NISTXML-SV-IV-atomic-nonNegativeInteger-totalDigits-5-1 tokoe:valid" result="pass"/><test-case name="1797NISTXML-SV-IV-atomic-nonNegativeInteger-totalDigits-5-2 tokoe:valid" result="pass"/><test-case name="1798NISTXML-SV-IV-atomic-nonNegativeInteger-totalDigits-5-3 tokoe:valid" result="pass"/><test-case name="1799NISTXML-SV-IV-atomic-nonNegativeInteger-totalDigits-5-4 tokoe:valid" result="pass"/><test-case name="1800NISTXML-SV-IV-atomic-nonNegativeInteger-totalDigits-5-5 tokoe:valid" result="pass"/><test-case name="1801NISTSchema-SV-IV-atomic-nonNegativeInteger-pattern-1 tokoe:valid" result="pass"/><test-case name="1802NISTXML-SV-IV-atomic-nonNegativeInteger-pattern-1-1 tokoe:valid" result="pass"/><test-case name="1803NISTXML-SV-IV-atomic-nonNegativeInteger-pattern-1-2 tokoe:valid" result="pass"/><test-case name="1804NISTXML-SV-IV-atomic-nonNegativeInteger-pattern-1-3 tokoe:valid" result="pass"/><test-case name="1805NISTXML-SV-IV-atomic-nonNegativeInteger-pattern-1-4 tokoe:valid" result="pass"/><test-case name="1806NISTXML-SV-IV-atomic-nonNegativeInteger-pattern-1-5 tokoe:valid" result="pass"/><test-case name="1807NISTSchema-SV-IV-atomic-nonNegativeInteger-pattern-2 tokoe:valid" result="pass"/><test-case name="1808NISTXML-SV-IV-atomic-nonNegativeInteger-pattern-2-1 tokoe:valid" result="pass"/><test-case name="1809NISTXML-SV-IV-atomic-nonNegativeInteger-pattern-2-2 tokoe:valid" result="pass"/><test-case name="1810NISTXML-SV-IV-atomic-nonNegativeInteger-pattern-2-3 tokoe:valid" result="pass"/><test-case name="1811NISTXML-SV-IV-atomic-nonNegativeInteger-pattern-2-4 tokoe:valid" result="pass"/><test-case name="1812NISTXML-SV-IV-atomic-nonNegativeInteger-pattern-2-5 tokoe:valid" result="pass"/><test-case name="1813NISTSchema-SV-IV-atomic-nonNegativeInteger-pattern-3 tokoe:valid" result="pass"/><test-case name="1814NISTXML-SV-IV-atomic-nonNegativeInteger-pattern-3-1 tokoe:valid" result="pass"/><test-case name="1815NISTXML-SV-IV-atomic-nonNegativeInteger-pattern-3-2 tokoe:valid" result="pass"/><test-case name="1816NISTXML-SV-IV-atomic-nonNegativeInteger-pattern-3-3 tokoe:valid" result="pass"/><test-case name="1817NISTXML-SV-IV-atomic-nonNegativeInteger-pattern-3-4 tokoe:valid" result="pass"/><test-case name="1818NISTXML-SV-IV-atomic-nonNegativeInteger-pattern-3-5 tokoe:valid" result="pass"/><test-case name="1819NISTSchema-SV-IV-atomic-nonNegativeInteger-pattern-4 tokoe:valid" result="pass"/><test-case name="1820NISTXML-SV-IV-atomic-nonNegativeInteger-pattern-4-1 tokoe:valid" result="pass"/><test-case name="1821NISTXML-SV-IV-atomic-nonNegativeInteger-pattern-4-2 tokoe:valid" result="pass"/><test-case name="1822NISTXML-SV-IV-atomic-nonNegativeInteger-pattern-4-3 tokoe:valid" result="pass"/><test-case name="1823NISTXML-SV-IV-atomic-nonNegativeInteger-pattern-4-4 tokoe:valid" result="pass"/><test-case name="1824NISTXML-SV-IV-atomic-nonNegativeInteger-pattern-4-5 tokoe:valid" result="pass"/><test-case name="1825NISTSchema-SV-IV-atomic-nonNegativeInteger-pattern-5 tokoe:valid" result="pass"/><test-case name="1826NISTXML-SV-IV-atomic-nonNegativeInteger-pattern-5-1 tokoe:valid" result="pass"/><test-case name="1827NISTXML-SV-IV-atomic-nonNegativeInteger-pattern-5-2 tokoe:valid" result="pass"/><test-case name="1828NISTXML-SV-IV-atomic-nonNegativeInteger-pattern-5-3 tokoe:valid" result="pass"/><test-case name="1829NISTXML-SV-IV-atomic-nonNegativeInteger-pattern-5-4 tokoe:valid" result="pass"/><test-case name="1830NISTXML-SV-IV-atomic-nonNegativeInteger-pattern-5-5 tokoe:valid" result="pass"/><test-case name="1831NISTSchema-SV-IV-atomic-nonNegativeInteger-enumeration-1 tokoe:valid" result="pass"/><test-case name="1832NISTXML-SV-IV-atomic-nonNegativeInteger-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="1833NISTXML-SV-IV-atomic-nonNegativeInteger-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="1834NISTXML-SV-IV-atomic-nonNegativeInteger-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="1835NISTXML-SV-IV-atomic-nonNegativeInteger-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="1836NISTXML-SV-IV-atomic-nonNegativeInteger-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="1837NISTSchema-SV-IV-atomic-nonNegativeInteger-enumeration-2 tokoe:valid" result="pass"/><test-case name="1838NISTXML-SV-IV-atomic-nonNegativeInteger-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="1839NISTXML-SV-IV-atomic-nonNegativeInteger-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="1840NISTXML-SV-IV-atomic-nonNegativeInteger-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="1841NISTXML-SV-IV-atomic-nonNegativeInteger-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="1842NISTXML-SV-IV-atomic-nonNegativeInteger-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="1843NISTSchema-SV-IV-atomic-nonNegativeInteger-enumeration-3 tokoe:valid" result="pass"/><test-case name="1844NISTXML-SV-IV-atomic-nonNegativeInteger-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="1845NISTXML-SV-IV-atomic-nonNegativeInteger-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="1846NISTXML-SV-IV-atomic-nonNegativeInteger-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="1847NISTXML-SV-IV-atomic-nonNegativeInteger-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="1848NISTXML-SV-IV-atomic-nonNegativeInteger-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="1849NISTSchema-SV-IV-atomic-nonNegativeInteger-enumeration-4 tokoe:valid" result="pass"/><test-case name="1850NISTXML-SV-IV-atomic-nonNegativeInteger-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="1851NISTXML-SV-IV-atomic-nonNegativeInteger-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="1852NISTXML-SV-IV-atomic-nonNegativeInteger-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="1853NISTXML-SV-IV-atomic-nonNegativeInteger-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="1854NISTXML-SV-IV-atomic-nonNegativeInteger-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="1855NISTSchema-SV-IV-atomic-nonNegativeInteger-enumeration-5 tokoe:valid" result="pass"/><test-case name="1856NISTXML-SV-IV-atomic-nonNegativeInteger-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="1857NISTXML-SV-IV-atomic-nonNegativeInteger-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="1858NISTXML-SV-IV-atomic-nonNegativeInteger-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="1859NISTXML-SV-IV-atomic-nonNegativeInteger-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="1860NISTXML-SV-IV-atomic-nonNegativeInteger-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="1861NISTSchema-SV-IV-atomic-nonNegativeInteger-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="1862NISTXML-SV-IV-atomic-nonNegativeInteger-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="1863NISTXML-SV-IV-atomic-nonNegativeInteger-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="1864NISTXML-SV-IV-atomic-nonNegativeInteger-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="1865NISTXML-SV-IV-atomic-nonNegativeInteger-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="1866NISTXML-SV-IV-atomic-nonNegativeInteger-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="1867NISTSchema-SV-IV-atomic-unsignedLong-minExclusive-1 tokoe:valid" result="pass"/><test-case name="1868NISTXML-SV-IV-atomic-unsignedLong-minExclusive-1-1 tokoe:valid" result="pass"/><test-case name="1869NISTXML-SV-IV-atomic-unsignedLong-minExclusive-1-2 tokoe:valid" result="pass"/><test-case name="1870NISTXML-SV-IV-atomic-unsignedLong-minExclusive-1-3 tokoe:valid" result="pass"/><test-case name="1871NISTXML-SV-IV-atomic-unsignedLong-minExclusive-1-4 tokoe:valid" result="pass"/><test-case name="1872NISTXML-SV-IV-atomic-unsignedLong-minExclusive-1-5 tokoe:valid" result="pass"/><test-case name="1873NISTSchema-SV-IV-atomic-unsignedLong-minExclusive-2 tokoe:valid" result="pass"/><test-case name="1874NISTXML-SV-IV-atomic-unsignedLong-minExclusive-2-1 tokoe:valid" result="pass"/><test-case name="1875NISTXML-SV-IV-atomic-unsignedLong-minExclusive-2-2 tokoe:valid" result="pass"/><test-case name="1876NISTXML-SV-IV-atomic-unsignedLong-minExclusive-2-3 tokoe:valid" result="pass"/><test-case name="1877NISTXML-SV-IV-atomic-unsignedLong-minExclusive-2-4 tokoe:valid" result="pass"/><test-case name="1878NISTXML-SV-IV-atomic-unsignedLong-minExclusive-2-5 tokoe:valid" result="pass"/><test-case name="1879NISTSchema-SV-IV-atomic-unsignedLong-minExclusive-3 tokoe:valid" result="pass"/><test-case name="1880NISTXML-SV-IV-atomic-unsignedLong-minExclusive-3-1 tokoe:valid" result="pass"/><test-case name="1881NISTXML-SV-IV-atomic-unsignedLong-minExclusive-3-2 tokoe:valid" result="pass"/><test-case name="1882NISTXML-SV-IV-atomic-unsignedLong-minExclusive-3-3 tokoe:valid" result="pass"/><test-case name="1883NISTXML-SV-IV-atomic-unsignedLong-minExclusive-3-4 tokoe:valid" result="pass"/><test-case name="1884NISTXML-SV-IV-atomic-unsignedLong-minExclusive-3-5 tokoe:valid" result="pass"/><test-case name="1885NISTSchema-SV-IV-atomic-unsignedLong-minExclusive-4 tokoe:valid" result="pass"/><test-case name="1886NISTXML-SV-IV-atomic-unsignedLong-minExclusive-4-1 tokoe:valid" result="pass"/><test-case name="1887NISTXML-SV-IV-atomic-unsignedLong-minExclusive-4-2 tokoe:valid" result="pass"/><test-case name="1888NISTXML-SV-IV-atomic-unsignedLong-minExclusive-4-3 tokoe:valid" result="pass"/><test-case name="1889NISTXML-SV-IV-atomic-unsignedLong-minExclusive-4-4 tokoe:valid" result="pass"/><test-case name="1890NISTXML-SV-IV-atomic-unsignedLong-minExclusive-4-5 tokoe:valid" result="pass"/><test-case name="1891NISTSchema-SV-IV-atomic-unsignedLong-minExclusive-5 tokoe:valid" result="pass"/><test-case name="1892NISTXML-SV-IV-atomic-unsignedLong-minExclusive-5-1 tokoe:valid" result="pass"/><test-case name="1893NISTSchema-SV-IV-atomic-unsignedLong-minInclusive-1 tokoe:valid" result="pass"/><test-case name="1894NISTXML-SV-IV-atomic-unsignedLong-minInclusive-1-1 tokoe:valid" result="pass"/><test-case name="1895NISTXML-SV-IV-atomic-unsignedLong-minInclusive-1-2 tokoe:valid" result="pass"/><test-case name="1896NISTXML-SV-IV-atomic-unsignedLong-minInclusive-1-3 tokoe:valid" result="pass"/><test-case name="1897NISTXML-SV-IV-atomic-unsignedLong-minInclusive-1-4 tokoe:valid" result="pass"/><test-case name="1898NISTXML-SV-IV-atomic-unsignedLong-minInclusive-1-5 tokoe:valid" result="pass"/><test-case name="1899NISTSchema-SV-IV-atomic-unsignedLong-minInclusive-2 tokoe:valid" result="pass"/><test-case name="1900NISTXML-SV-IV-atomic-unsignedLong-minInclusive-2-1 tokoe:valid" result="pass"/><test-case name="1901NISTXML-SV-IV-atomic-unsignedLong-minInclusive-2-2 tokoe:valid" result="pass"/><test-case name="1902NISTXML-SV-IV-atomic-unsignedLong-minInclusive-2-3 tokoe:valid" result="pass"/><test-case name="1903NISTXML-SV-IV-atomic-unsignedLong-minInclusive-2-4 tokoe:valid" result="pass"/><test-case name="1904NISTXML-SV-IV-atomic-unsignedLong-minInclusive-2-5 tokoe:valid" result="pass"/><test-case name="1905NISTSchema-SV-IV-atomic-unsignedLong-minInclusive-3 tokoe:valid" result="pass"/><test-case name="1906NISTXML-SV-IV-atomic-unsignedLong-minInclusive-3-1 tokoe:valid" result="pass"/><test-case name="1907NISTXML-SV-IV-atomic-unsignedLong-minInclusive-3-2 tokoe:valid" result="pass"/><test-case name="1908NISTXML-SV-IV-atomic-unsignedLong-minInclusive-3-3 tokoe:valid" result="pass"/><test-case name="1909NISTXML-SV-IV-atomic-unsignedLong-minInclusive-3-4 tokoe:valid" result="pass"/><test-case name="1910NISTXML-SV-IV-atomic-unsignedLong-minInclusive-3-5 tokoe:valid" result="pass"/><test-case name="1911NISTSchema-SV-IV-atomic-unsignedLong-minInclusive-4 tokoe:valid" result="pass"/><test-case name="1912NISTXML-SV-IV-atomic-unsignedLong-minInclusive-4-1 tokoe:valid" result="pass"/><test-case name="1913NISTXML-SV-IV-atomic-unsignedLong-minInclusive-4-2 tokoe:valid" result="pass"/><test-case name="1914NISTXML-SV-IV-atomic-unsignedLong-minInclusive-4-3 tokoe:valid" result="pass"/><test-case name="1915NISTXML-SV-IV-atomic-unsignedLong-minInclusive-4-4 tokoe:valid" result="pass"/><test-case name="1916NISTXML-SV-IV-atomic-unsignedLong-minInclusive-4-5 tokoe:valid" result="pass"/><test-case name="1917NISTSchema-SV-IV-atomic-unsignedLong-minInclusive-5 tokoe:valid" result="pass"/><test-case name="1918NISTXML-SV-IV-atomic-unsignedLong-minInclusive-5-1 tokoe:valid" result="pass"/><test-case name="1919NISTSchema-SV-IV-atomic-unsignedLong-maxExclusive-1 tokoe:valid" result="pass"/><test-case name="1920NISTXML-SV-IV-atomic-unsignedLong-maxExclusive-1-1 tokoe:valid" result="pass"/><test-case name="1921NISTSchema-SV-IV-atomic-unsignedLong-maxExclusive-2 tokoe:valid" result="pass"/><test-case name="1922NISTXML-SV-IV-atomic-unsignedLong-maxExclusive-2-1 tokoe:valid" result="pass"/><test-case name="1923NISTXML-SV-IV-atomic-unsignedLong-maxExclusive-2-2 tokoe:valid" result="pass"/><test-case name="1924NISTXML-SV-IV-atomic-unsignedLong-maxExclusive-2-3 tokoe:valid" result="pass"/><test-case name="1925NISTXML-SV-IV-atomic-unsignedLong-maxExclusive-2-4 tokoe:valid" result="pass"/><test-case name="1926NISTXML-SV-IV-atomic-unsignedLong-maxExclusive-2-5 tokoe:valid" result="pass"/><test-case name="1927NISTSchema-SV-IV-atomic-unsignedLong-maxExclusive-3 tokoe:valid" result="pass"/><test-case name="1928NISTXML-SV-IV-atomic-unsignedLong-maxExclusive-3-1 tokoe:valid" result="pass"/><test-case name="1929NISTXML-SV-IV-atomic-unsignedLong-maxExclusive-3-2 tokoe:valid" result="pass"/><test-case name="1930NISTXML-SV-IV-atomic-unsignedLong-maxExclusive-3-3 tokoe:valid" result="pass"/><test-case name="1931NISTXML-SV-IV-atomic-unsignedLong-maxExclusive-3-4 tokoe:valid" result="pass"/><test-case name="1932NISTXML-SV-IV-atomic-unsignedLong-maxExclusive-3-5 tokoe:valid" result="pass"/><test-case name="1933NISTSchema-SV-IV-atomic-unsignedLong-maxExclusive-4 tokoe:valid" result="pass"/><test-case name="1934NISTXML-SV-IV-atomic-unsignedLong-maxExclusive-4-1 tokoe:valid" result="pass"/><test-case name="1935NISTXML-SV-IV-atomic-unsignedLong-maxExclusive-4-2 tokoe:valid" result="pass"/><test-case name="1936NISTXML-SV-IV-atomic-unsignedLong-maxExclusive-4-3 tokoe:valid" result="pass"/><test-case name="1937NISTXML-SV-IV-atomic-unsignedLong-maxExclusive-4-4 tokoe:valid" result="pass"/><test-case name="1938NISTXML-SV-IV-atomic-unsignedLong-maxExclusive-4-5 tokoe:valid" result="pass"/><test-case name="1939NISTSchema-SV-IV-atomic-unsignedLong-maxExclusive-5 tokoe:valid" result="pass"/><test-case name="1940NISTXML-SV-IV-atomic-unsignedLong-maxExclusive-5-1 tokoe:valid" result="pass"/><test-case name="1941NISTXML-SV-IV-atomic-unsignedLong-maxExclusive-5-2 tokoe:valid" result="pass"/><test-case name="1942NISTXML-SV-IV-atomic-unsignedLong-maxExclusive-5-3 tokoe:valid" result="pass"/><test-case name="1943NISTXML-SV-IV-atomic-unsignedLong-maxExclusive-5-4 tokoe:valid" result="pass"/><test-case name="1944NISTXML-SV-IV-atomic-unsignedLong-maxExclusive-5-5 tokoe:valid" result="pass"/><test-case name="1945NISTSchema-SV-IV-atomic-unsignedLong-maxInclusive-1 tokoe:valid" result="pass"/><test-case name="1946NISTXML-SV-IV-atomic-unsignedLong-maxInclusive-1-1 tokoe:valid" result="pass"/><test-case name="1947NISTSchema-SV-IV-atomic-unsignedLong-maxInclusive-2 tokoe:valid" result="pass"/><test-case name="1948NISTXML-SV-IV-atomic-unsignedLong-maxInclusive-2-1 tokoe:valid" result="pass"/><test-case name="1949NISTXML-SV-IV-atomic-unsignedLong-maxInclusive-2-2 tokoe:valid" result="pass"/><test-case name="1950NISTXML-SV-IV-atomic-unsignedLong-maxInclusive-2-3 tokoe:valid" result="pass"/><test-case name="1951NISTXML-SV-IV-atomic-unsignedLong-maxInclusive-2-4 tokoe:valid" result="pass"/><test-case name="1952NISTXML-SV-IV-atomic-unsignedLong-maxInclusive-2-5 tokoe:valid" result="pass"/><test-case name="1953NISTSchema-SV-IV-atomic-unsignedLong-maxInclusive-3 tokoe:valid" result="pass"/><test-case name="1954NISTXML-SV-IV-atomic-unsignedLong-maxInclusive-3-1 tokoe:valid" result="pass"/><test-case name="1955NISTXML-SV-IV-atomic-unsignedLong-maxInclusive-3-2 tokoe:valid" result="pass"/><test-case name="1956NISTXML-SV-IV-atomic-unsignedLong-maxInclusive-3-3 tokoe:valid" result="pass"/><test-case name="1957NISTXML-SV-IV-atomic-unsignedLong-maxInclusive-3-4 tokoe:valid" result="pass"/><test-case name="1958NISTXML-SV-IV-atomic-unsignedLong-maxInclusive-3-5 tokoe:valid" result="pass"/><test-case name="1959NISTSchema-SV-IV-atomic-unsignedLong-maxInclusive-4 tokoe:valid" result="pass"/><test-case name="1960NISTXML-SV-IV-atomic-unsignedLong-maxInclusive-4-1 tokoe:valid" result="pass"/><test-case name="1961NISTXML-SV-IV-atomic-unsignedLong-maxInclusive-4-2 tokoe:valid" result="pass"/><test-case name="1962NISTXML-SV-IV-atomic-unsignedLong-maxInclusive-4-3 tokoe:valid" result="pass"/><test-case name="1963NISTXML-SV-IV-atomic-unsignedLong-maxInclusive-4-4 tokoe:valid" result="pass"/><test-case name="1964NISTXML-SV-IV-atomic-unsignedLong-maxInclusive-4-5 tokoe:valid" result="pass"/><test-case name="1965NISTSchema-SV-IV-atomic-unsignedLong-maxInclusive-5 tokoe:valid" result="pass"/><test-case name="1966NISTXML-SV-IV-atomic-unsignedLong-maxInclusive-5-1 tokoe:valid" result="pass"/><test-case name="1967NISTXML-SV-IV-atomic-unsignedLong-maxInclusive-5-2 tokoe:valid" result="pass"/><test-case name="1968NISTXML-SV-IV-atomic-unsignedLong-maxInclusive-5-3 tokoe:valid" result="pass"/><test-case name="1969NISTXML-SV-IV-atomic-unsignedLong-maxInclusive-5-4 tokoe:valid" result="pass"/><test-case name="1970NISTXML-SV-IV-atomic-unsignedLong-maxInclusive-5-5 tokoe:valid" result="pass"/><test-case name="1971NISTSchema-SV-IV-atomic-unsignedLong-fractionDigits-1 tokoe:valid" result="pass"/><test-case name="1972NISTXML-SV-IV-atomic-unsignedLong-fractionDigits-1-1 tokoe:valid" result="pass"/><test-case name="1973NISTXML-SV-IV-atomic-unsignedLong-fractionDigits-1-2 tokoe:valid" result="pass"/><test-case name="1974NISTXML-SV-IV-atomic-unsignedLong-fractionDigits-1-3 tokoe:valid" result="pass"/><test-case name="1975NISTXML-SV-IV-atomic-unsignedLong-fractionDigits-1-4 tokoe:valid" result="pass"/><test-case name="1976NISTXML-SV-IV-atomic-unsignedLong-fractionDigits-1-5 tokoe:valid" result="pass"/><test-case name="1977NISTSchema-SV-IV-atomic-unsignedLong-totalDigits-1 tokoe:valid" result="pass"/><test-case name="1978NISTXML-SV-IV-atomic-unsignedLong-totalDigits-1-1 tokoe:valid" result="pass"/><test-case name="1979NISTXML-SV-IV-atomic-unsignedLong-totalDigits-1-2 tokoe:valid" result="pass"/><test-case name="1980NISTXML-SV-IV-atomic-unsignedLong-totalDigits-1-3 tokoe:valid" result="pass"/><test-case name="1981NISTXML-SV-IV-atomic-unsignedLong-totalDigits-1-4 tokoe:valid" result="pass"/><test-case name="1982NISTXML-SV-IV-atomic-unsignedLong-totalDigits-1-5 tokoe:valid" result="pass"/><test-case name="1983NISTSchema-SV-IV-atomic-unsignedLong-totalDigits-2 tokoe:valid" result="pass"/><test-case name="1984NISTXML-SV-IV-atomic-unsignedLong-totalDigits-2-1 tokoe:valid" result="pass"/><test-case name="1985NISTXML-SV-IV-atomic-unsignedLong-totalDigits-2-2 tokoe:valid" result="pass"/><test-case name="1986NISTXML-SV-IV-atomic-unsignedLong-totalDigits-2-3 tokoe:valid" result="pass"/><test-case name="1987NISTXML-SV-IV-atomic-unsignedLong-totalDigits-2-4 tokoe:valid" result="pass"/><test-case name="1988NISTXML-SV-IV-atomic-unsignedLong-totalDigits-2-5 tokoe:valid" result="pass"/><test-case name="1989NISTSchema-SV-IV-atomic-unsignedLong-totalDigits-3 tokoe:valid" result="pass"/><test-case name="1990NISTXML-SV-IV-atomic-unsignedLong-totalDigits-3-1 tokoe:valid" result="pass"/><test-case name="1991NISTXML-SV-IV-atomic-unsignedLong-totalDigits-3-2 tokoe:valid" result="pass"/><test-case name="1992NISTXML-SV-IV-atomic-unsignedLong-totalDigits-3-3 tokoe:valid" result="pass"/><test-case name="1993NISTXML-SV-IV-atomic-unsignedLong-totalDigits-3-4 tokoe:valid" result="pass"/><test-case name="1994NISTXML-SV-IV-atomic-unsignedLong-totalDigits-3-5 tokoe:valid" result="pass"/><test-case name="1995NISTSchema-SV-IV-atomic-unsignedLong-totalDigits-4 tokoe:valid" result="pass"/><test-case name="1996NISTXML-SV-IV-atomic-unsignedLong-totalDigits-4-1 tokoe:valid" result="pass"/><test-case name="1997NISTXML-SV-IV-atomic-unsignedLong-totalDigits-4-2 tokoe:valid" result="pass"/><test-case name="1998NISTXML-SV-IV-atomic-unsignedLong-totalDigits-4-3 tokoe:valid" result="pass"/><test-case name="1999NISTXML-SV-IV-atomic-unsignedLong-totalDigits-4-4 tokoe:valid" result="pass"/><test-case name="2000NISTXML-SV-IV-atomic-unsignedLong-totalDigits-4-5 tokoe:valid" result="pass"/><test-case name="2001NISTSchema-SV-IV-atomic-unsignedLong-totalDigits-5 tokoe:valid" result="pass"/><test-case name="2002NISTXML-SV-IV-atomic-unsignedLong-totalDigits-5-1 tokoe:valid" result="pass"/><test-case name="2003NISTXML-SV-IV-atomic-unsignedLong-totalDigits-5-2 tokoe:valid" result="pass"/><test-case name="2004NISTXML-SV-IV-atomic-unsignedLong-totalDigits-5-3 tokoe:valid" result="pass"/><test-case name="2005NISTXML-SV-IV-atomic-unsignedLong-totalDigits-5-4 tokoe:valid" result="pass"/><test-case name="2006NISTXML-SV-IV-atomic-unsignedLong-totalDigits-5-5 tokoe:valid" result="pass"/><test-case name="2007NISTSchema-SV-IV-atomic-unsignedLong-pattern-1 tokoe:valid" result="pass"/><test-case name="2008NISTXML-SV-IV-atomic-unsignedLong-pattern-1-1 tokoe:valid" result="pass"/><test-case name="2009NISTXML-SV-IV-atomic-unsignedLong-pattern-1-2 tokoe:valid" result="pass"/><test-case name="2010NISTXML-SV-IV-atomic-unsignedLong-pattern-1-3 tokoe:valid" result="pass"/><test-case name="2011NISTXML-SV-IV-atomic-unsignedLong-pattern-1-4 tokoe:valid" result="pass"/><test-case name="2012NISTXML-SV-IV-atomic-unsignedLong-pattern-1-5 tokoe:valid" result="pass"/><test-case name="2013NISTSchema-SV-IV-atomic-unsignedLong-pattern-2 tokoe:valid" result="pass"/><test-case name="2014NISTXML-SV-IV-atomic-unsignedLong-pattern-2-1 tokoe:valid" result="pass"/><test-case name="2015NISTXML-SV-IV-atomic-unsignedLong-pattern-2-2 tokoe:valid" result="pass"/><test-case name="2016NISTXML-SV-IV-atomic-unsignedLong-pattern-2-3 tokoe:valid" result="pass"/><test-case name="2017NISTXML-SV-IV-atomic-unsignedLong-pattern-2-4 tokoe:valid" result="pass"/><test-case name="2018NISTXML-SV-IV-atomic-unsignedLong-pattern-2-5 tokoe:valid" result="pass"/><test-case name="2019NISTSchema-SV-IV-atomic-unsignedLong-pattern-3 tokoe:valid" result="pass"/><test-case name="2020NISTXML-SV-IV-atomic-unsignedLong-pattern-3-1 tokoe:valid" result="pass"/><test-case name="2021NISTXML-SV-IV-atomic-unsignedLong-pattern-3-2 tokoe:valid" result="pass"/><test-case name="2022NISTXML-SV-IV-atomic-unsignedLong-pattern-3-3 tokoe:valid" result="pass"/><test-case name="2023NISTXML-SV-IV-atomic-unsignedLong-pattern-3-4 tokoe:valid" result="pass"/><test-case name="2024NISTXML-SV-IV-atomic-unsignedLong-pattern-3-5 tokoe:valid" result="pass"/><test-case name="2025NISTSchema-SV-IV-atomic-unsignedLong-pattern-4 tokoe:valid" result="pass"/><test-case name="2026NISTXML-SV-IV-atomic-unsignedLong-pattern-4-1 tokoe:valid" result="pass"/><test-case name="2027NISTXML-SV-IV-atomic-unsignedLong-pattern-4-2 tokoe:valid" result="pass"/><test-case name="2028NISTXML-SV-IV-atomic-unsignedLong-pattern-4-3 tokoe:valid" result="pass"/><test-case name="2029NISTXML-SV-IV-atomic-unsignedLong-pattern-4-4 tokoe:valid" result="pass"/><test-case name="2030NISTXML-SV-IV-atomic-unsignedLong-pattern-4-5 tokoe:valid" result="pass"/><test-case name="2031NISTSchema-SV-IV-atomic-unsignedLong-pattern-5 tokoe:valid" result="pass"/><test-case name="2032NISTXML-SV-IV-atomic-unsignedLong-pattern-5-1 tokoe:valid" result="pass"/><test-case name="2033NISTXML-SV-IV-atomic-unsignedLong-pattern-5-2 tokoe:valid" result="pass"/><test-case name="2034NISTXML-SV-IV-atomic-unsignedLong-pattern-5-3 tokoe:valid" result="pass"/><test-case name="2035NISTXML-SV-IV-atomic-unsignedLong-pattern-5-4 tokoe:valid" result="pass"/><test-case name="2036NISTXML-SV-IV-atomic-unsignedLong-pattern-5-5 tokoe:valid" result="pass"/><test-case name="2037NISTSchema-SV-IV-atomic-unsignedLong-enumeration-1 tokoe:valid" result="pass"/><test-case name="2038NISTXML-SV-IV-atomic-unsignedLong-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="2039NISTXML-SV-IV-atomic-unsignedLong-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="2040NISTXML-SV-IV-atomic-unsignedLong-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="2041NISTXML-SV-IV-atomic-unsignedLong-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="2042NISTXML-SV-IV-atomic-unsignedLong-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="2043NISTSchema-SV-IV-atomic-unsignedLong-enumeration-2 tokoe:valid" result="pass"/><test-case name="2044NISTXML-SV-IV-atomic-unsignedLong-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="2045NISTXML-SV-IV-atomic-unsignedLong-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="2046NISTXML-SV-IV-atomic-unsignedLong-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="2047NISTXML-SV-IV-atomic-unsignedLong-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="2048NISTXML-SV-IV-atomic-unsignedLong-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="2049NISTSchema-SV-IV-atomic-unsignedLong-enumeration-3 tokoe:valid" result="pass"/><test-case name="2050NISTXML-SV-IV-atomic-unsignedLong-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="2051NISTXML-SV-IV-atomic-unsignedLong-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="2052NISTXML-SV-IV-atomic-unsignedLong-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="2053NISTXML-SV-IV-atomic-unsignedLong-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="2054NISTXML-SV-IV-atomic-unsignedLong-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="2055NISTSchema-SV-IV-atomic-unsignedLong-enumeration-4 tokoe:valid" result="pass"/><test-case name="2056NISTXML-SV-IV-atomic-unsignedLong-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="2057NISTXML-SV-IV-atomic-unsignedLong-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="2058NISTXML-SV-IV-atomic-unsignedLong-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="2059NISTXML-SV-IV-atomic-unsignedLong-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="2060NISTXML-SV-IV-atomic-unsignedLong-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="2061NISTSchema-SV-IV-atomic-unsignedLong-enumeration-5 tokoe:valid" result="pass"/><test-case name="2062NISTXML-SV-IV-atomic-unsignedLong-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="2063NISTXML-SV-IV-atomic-unsignedLong-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="2064NISTXML-SV-IV-atomic-unsignedLong-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="2065NISTXML-SV-IV-atomic-unsignedLong-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="2066NISTXML-SV-IV-atomic-unsignedLong-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="2067NISTSchema-SV-IV-atomic-unsignedLong-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="2068NISTXML-SV-IV-atomic-unsignedLong-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="2069NISTXML-SV-IV-atomic-unsignedLong-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="2070NISTXML-SV-IV-atomic-unsignedLong-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="2071NISTXML-SV-IV-atomic-unsignedLong-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="2072NISTXML-SV-IV-atomic-unsignedLong-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="2073NISTSchema-SV-IV-atomic-unsignedInt-minExclusive-1 tokoe:valid" result="pass"/><test-case name="2074NISTXML-SV-IV-atomic-unsignedInt-minExclusive-1-1 tokoe:valid" result="pass"/><test-case name="2075NISTXML-SV-IV-atomic-unsignedInt-minExclusive-1-2 tokoe:valid" result="pass"/><test-case name="2076NISTXML-SV-IV-atomic-unsignedInt-minExclusive-1-3 tokoe:valid" result="pass"/><test-case name="2077NISTXML-SV-IV-atomic-unsignedInt-minExclusive-1-4 tokoe:valid" result="pass"/><test-case name="2078NISTXML-SV-IV-atomic-unsignedInt-minExclusive-1-5 tokoe:valid" result="pass"/><test-case name="2079NISTSchema-SV-IV-atomic-unsignedInt-minExclusive-2 tokoe:valid" result="pass"/><test-case name="2080NISTXML-SV-IV-atomic-unsignedInt-minExclusive-2-1 tokoe:valid" result="pass"/><test-case name="2081NISTXML-SV-IV-atomic-unsignedInt-minExclusive-2-2 tokoe:valid" result="pass"/><test-case name="2082NISTXML-SV-IV-atomic-unsignedInt-minExclusive-2-3 tokoe:valid" result="pass"/><test-case name="2083NISTXML-SV-IV-atomic-unsignedInt-minExclusive-2-4 tokoe:valid" result="pass"/><test-case name="2084NISTXML-SV-IV-atomic-unsignedInt-minExclusive-2-5 tokoe:valid" result="pass"/><test-case name="2085NISTSchema-SV-IV-atomic-unsignedInt-minExclusive-3 tokoe:valid" result="pass"/><test-case name="2086NISTXML-SV-IV-atomic-unsignedInt-minExclusive-3-1 tokoe:valid" result="pass"/><test-case name="2087NISTXML-SV-IV-atomic-unsignedInt-minExclusive-3-2 tokoe:valid" result="pass"/><test-case name="2088NISTXML-SV-IV-atomic-unsignedInt-minExclusive-3-3 tokoe:valid" result="pass"/><test-case name="2089NISTXML-SV-IV-atomic-unsignedInt-minExclusive-3-4 tokoe:valid" result="pass"/><test-case name="2090NISTXML-SV-IV-atomic-unsignedInt-minExclusive-3-5 tokoe:valid" result="pass"/><test-case name="2091NISTSchema-SV-IV-atomic-unsignedInt-minExclusive-4 tokoe:valid" result="pass"/><test-case name="2092NISTXML-SV-IV-atomic-unsignedInt-minExclusive-4-1 tokoe:valid" result="pass"/><test-case name="2093NISTXML-SV-IV-atomic-unsignedInt-minExclusive-4-2 tokoe:valid" result="pass"/><test-case name="2094NISTXML-SV-IV-atomic-unsignedInt-minExclusive-4-3 tokoe:valid" result="pass"/><test-case name="2095NISTXML-SV-IV-atomic-unsignedInt-minExclusive-4-4 tokoe:valid" result="pass"/><test-case name="2096NISTXML-SV-IV-atomic-unsignedInt-minExclusive-4-5 tokoe:valid" result="pass"/><test-case name="2097NISTSchema-SV-IV-atomic-unsignedInt-minExclusive-5 tokoe:valid" result="pass"/><test-case name="2098NISTXML-SV-IV-atomic-unsignedInt-minExclusive-5-1 tokoe:valid" result="pass"/><test-case name="2099NISTSchema-SV-IV-atomic-unsignedInt-minInclusive-1 tokoe:valid" result="pass"/><test-case name="2100NISTXML-SV-IV-atomic-unsignedInt-minInclusive-1-1 tokoe:valid" result="pass"/><test-case name="2101NISTXML-SV-IV-atomic-unsignedInt-minInclusive-1-2 tokoe:valid" result="pass"/><test-case name="2102NISTXML-SV-IV-atomic-unsignedInt-minInclusive-1-3 tokoe:valid" result="pass"/><test-case name="2103NISTXML-SV-IV-atomic-unsignedInt-minInclusive-1-4 tokoe:valid" result="pass"/><test-case name="2104NISTXML-SV-IV-atomic-unsignedInt-minInclusive-1-5 tokoe:valid" result="pass"/><test-case name="2105NISTSchema-SV-IV-atomic-unsignedInt-minInclusive-2 tokoe:valid" result="pass"/><test-case name="2106NISTXML-SV-IV-atomic-unsignedInt-minInclusive-2-1 tokoe:valid" result="pass"/><test-case name="2107NISTXML-SV-IV-atomic-unsignedInt-minInclusive-2-2 tokoe:valid" result="pass"/><test-case name="2108NISTXML-SV-IV-atomic-unsignedInt-minInclusive-2-3 tokoe:valid" result="pass"/><test-case name="2109NISTXML-SV-IV-atomic-unsignedInt-minInclusive-2-4 tokoe:valid" result="pass"/><test-case name="2110NISTXML-SV-IV-atomic-unsignedInt-minInclusive-2-5 tokoe:valid" result="pass"/><test-case name="2111NISTSchema-SV-IV-atomic-unsignedInt-minInclusive-3 tokoe:valid" result="pass"/><test-case name="2112NISTXML-SV-IV-atomic-unsignedInt-minInclusive-3-1 tokoe:valid" result="pass"/><test-case name="2113NISTXML-SV-IV-atomic-unsignedInt-minInclusive-3-2 tokoe:valid" result="pass"/><test-case name="2114NISTXML-SV-IV-atomic-unsignedInt-minInclusive-3-3 tokoe:valid" result="pass"/><test-case name="2115NISTXML-SV-IV-atomic-unsignedInt-minInclusive-3-4 tokoe:valid" result="pass"/><test-case name="2116NISTXML-SV-IV-atomic-unsignedInt-minInclusive-3-5 tokoe:valid" result="pass"/><test-case name="2117NISTSchema-SV-IV-atomic-unsignedInt-minInclusive-4 tokoe:valid" result="pass"/><test-case name="2118NISTXML-SV-IV-atomic-unsignedInt-minInclusive-4-1 tokoe:valid" result="pass"/><test-case name="2119NISTXML-SV-IV-atomic-unsignedInt-minInclusive-4-2 tokoe:valid" result="pass"/><test-case name="2120NISTXML-SV-IV-atomic-unsignedInt-minInclusive-4-3 tokoe:valid" result="pass"/><test-case name="2121NISTXML-SV-IV-atomic-unsignedInt-minInclusive-4-4 tokoe:valid" result="pass"/><test-case name="2122NISTXML-SV-IV-atomic-unsignedInt-minInclusive-4-5 tokoe:valid" result="pass"/><test-case name="2123NISTSchema-SV-IV-atomic-unsignedInt-minInclusive-5 tokoe:valid" result="pass"/><test-case name="2124NISTXML-SV-IV-atomic-unsignedInt-minInclusive-5-1 tokoe:valid" result="pass"/><test-case name="2125NISTSchema-SV-IV-atomic-unsignedInt-maxExclusive-1 tokoe:valid" result="pass"/><test-case name="2126NISTXML-SV-IV-atomic-unsignedInt-maxExclusive-1-1 tokoe:valid" result="pass"/><test-case name="2127NISTSchema-SV-IV-atomic-unsignedInt-maxExclusive-2 tokoe:valid" result="pass"/><test-case name="2128NISTXML-SV-IV-atomic-unsignedInt-maxExclusive-2-1 tokoe:valid" result="pass"/><test-case name="2129NISTXML-SV-IV-atomic-unsignedInt-maxExclusive-2-2 tokoe:valid" result="pass"/><test-case name="2130NISTXML-SV-IV-atomic-unsignedInt-maxExclusive-2-3 tokoe:valid" result="pass"/><test-case name="2131NISTXML-SV-IV-atomic-unsignedInt-maxExclusive-2-4 tokoe:valid" result="pass"/><test-case name="2132NISTXML-SV-IV-atomic-unsignedInt-maxExclusive-2-5 tokoe:valid" result="pass"/><test-case name="2133NISTSchema-SV-IV-atomic-unsignedInt-maxExclusive-3 tokoe:valid" result="pass"/><test-case name="2134NISTXML-SV-IV-atomic-unsignedInt-maxExclusive-3-1 tokoe:valid" result="pass"/><test-case name="2135NISTXML-SV-IV-atomic-unsignedInt-maxExclusive-3-2 tokoe:valid" result="pass"/><test-case name="2136NISTXML-SV-IV-atomic-unsignedInt-maxExclusive-3-3 tokoe:valid" result="pass"/><test-case name="2137NISTXML-SV-IV-atomic-unsignedInt-maxExclusive-3-4 tokoe:valid" result="pass"/><test-case name="2138NISTXML-SV-IV-atomic-unsignedInt-maxExclusive-3-5 tokoe:valid" result="pass"/><test-case name="2139NISTSchema-SV-IV-atomic-unsignedInt-maxExclusive-4 tokoe:valid" result="pass"/><test-case name="2140NISTXML-SV-IV-atomic-unsignedInt-maxExclusive-4-1 tokoe:valid" result="pass"/><test-case name="2141NISTXML-SV-IV-atomic-unsignedInt-maxExclusive-4-2 tokoe:valid" result="pass"/><test-case name="2142NISTXML-SV-IV-atomic-unsignedInt-maxExclusive-4-3 tokoe:valid" result="pass"/><test-case name="2143NISTXML-SV-IV-atomic-unsignedInt-maxExclusive-4-4 tokoe:valid" result="pass"/><test-case name="2144NISTXML-SV-IV-atomic-unsignedInt-maxExclusive-4-5 tokoe:valid" result="pass"/><test-case name="2145NISTSchema-SV-IV-atomic-unsignedInt-maxExclusive-5 tokoe:valid" result="pass"/><test-case name="2146NISTXML-SV-IV-atomic-unsignedInt-maxExclusive-5-1 tokoe:valid" result="pass"/><test-case name="2147NISTXML-SV-IV-atomic-unsignedInt-maxExclusive-5-2 tokoe:valid" result="pass"/><test-case name="2148NISTXML-SV-IV-atomic-unsignedInt-maxExclusive-5-3 tokoe:valid" result="pass"/><test-case name="2149NISTXML-SV-IV-atomic-unsignedInt-maxExclusive-5-4 tokoe:valid" result="pass"/><test-case name="2150NISTXML-SV-IV-atomic-unsignedInt-maxExclusive-5-5 tokoe:valid" result="pass"/><test-case name="2151NISTSchema-SV-IV-atomic-unsignedInt-maxInclusive-1 tokoe:valid" result="pass"/><test-case name="2152NISTXML-SV-IV-atomic-unsignedInt-maxInclusive-1-1 tokoe:valid" result="pass"/><test-case name="2153NISTSchema-SV-IV-atomic-unsignedInt-maxInclusive-2 tokoe:valid" result="pass"/><test-case name="2154NISTXML-SV-IV-atomic-unsignedInt-maxInclusive-2-1 tokoe:valid" result="pass"/><test-case name="2155NISTXML-SV-IV-atomic-unsignedInt-maxInclusive-2-2 tokoe:valid" result="pass"/><test-case name="2156NISTXML-SV-IV-atomic-unsignedInt-maxInclusive-2-3 tokoe:valid" result="pass"/><test-case name="2157NISTXML-SV-IV-atomic-unsignedInt-maxInclusive-2-4 tokoe:valid" result="pass"/><test-case name="2158NISTXML-SV-IV-atomic-unsignedInt-maxInclusive-2-5 tokoe:valid" result="pass"/><test-case name="2159NISTSchema-SV-IV-atomic-unsignedInt-maxInclusive-3 tokoe:valid" result="pass"/><test-case name="2160NISTXML-SV-IV-atomic-unsignedInt-maxInclusive-3-1 tokoe:valid" result="pass"/><test-case name="2161NISTXML-SV-IV-atomic-unsignedInt-maxInclusive-3-2 tokoe:valid" result="pass"/><test-case name="2162NISTXML-SV-IV-atomic-unsignedInt-maxInclusive-3-3 tokoe:valid" result="pass"/><test-case name="2163NISTXML-SV-IV-atomic-unsignedInt-maxInclusive-3-4 tokoe:valid" result="pass"/><test-case name="2164NISTXML-SV-IV-atomic-unsignedInt-maxInclusive-3-5 tokoe:valid" result="pass"/><test-case name="2165NISTSchema-SV-IV-atomic-unsignedInt-maxInclusive-4 tokoe:valid" result="pass"/><test-case name="2166NISTXML-SV-IV-atomic-unsignedInt-maxInclusive-4-1 tokoe:valid" result="pass"/><test-case name="2167NISTXML-SV-IV-atomic-unsignedInt-maxInclusive-4-2 tokoe:valid" result="pass"/><test-case name="2168NISTXML-SV-IV-atomic-unsignedInt-maxInclusive-4-3 tokoe:valid" result="pass"/><test-case name="2169NISTXML-SV-IV-atomic-unsignedInt-maxInclusive-4-4 tokoe:valid" result="pass"/><test-case name="2170NISTXML-SV-IV-atomic-unsignedInt-maxInclusive-4-5 tokoe:valid" result="pass"/><test-case name="2171NISTSchema-SV-IV-atomic-unsignedInt-maxInclusive-5 tokoe:valid" result="pass"/><test-case name="2172NISTXML-SV-IV-atomic-unsignedInt-maxInclusive-5-1 tokoe:valid" result="pass"/><test-case name="2173NISTXML-SV-IV-atomic-unsignedInt-maxInclusive-5-2 tokoe:valid" result="pass"/><test-case name="2174NISTXML-SV-IV-atomic-unsignedInt-maxInclusive-5-3 tokoe:valid" result="pass"/><test-case name="2175NISTXML-SV-IV-atomic-unsignedInt-maxInclusive-5-4 tokoe:valid" result="pass"/><test-case name="2176NISTXML-SV-IV-atomic-unsignedInt-maxInclusive-5-5 tokoe:valid" result="pass"/><test-case name="2177NISTSchema-SV-IV-atomic-unsignedInt-fractionDigits-1 tokoe:valid" result="pass"/><test-case name="2178NISTXML-SV-IV-atomic-unsignedInt-fractionDigits-1-1 tokoe:valid" result="pass"/><test-case name="2179NISTXML-SV-IV-atomic-unsignedInt-fractionDigits-1-2 tokoe:valid" result="pass"/><test-case name="2180NISTXML-SV-IV-atomic-unsignedInt-fractionDigits-1-3 tokoe:valid" result="pass"/><test-case name="2181NISTXML-SV-IV-atomic-unsignedInt-fractionDigits-1-4 tokoe:valid" result="pass"/><test-case name="2182NISTXML-SV-IV-atomic-unsignedInt-fractionDigits-1-5 tokoe:valid" result="pass"/><test-case name="2183NISTSchema-SV-IV-atomic-unsignedInt-totalDigits-1 tokoe:valid" result="pass"/><test-case name="2184NISTXML-SV-IV-atomic-unsignedInt-totalDigits-1-1 tokoe:valid" result="pass"/><test-case name="2185NISTXML-SV-IV-atomic-unsignedInt-totalDigits-1-2 tokoe:valid" result="pass"/><test-case name="2186NISTXML-SV-IV-atomic-unsignedInt-totalDigits-1-3 tokoe:valid" result="pass"/><test-case name="2187NISTXML-SV-IV-atomic-unsignedInt-totalDigits-1-4 tokoe:valid" result="pass"/><test-case name="2188NISTXML-SV-IV-atomic-unsignedInt-totalDigits-1-5 tokoe:valid" result="pass"/><test-case name="2189NISTSchema-SV-IV-atomic-unsignedInt-totalDigits-2 tokoe:valid" result="pass"/><test-case name="2190NISTXML-SV-IV-atomic-unsignedInt-totalDigits-2-1 tokoe:valid" result="pass"/><test-case name="2191NISTXML-SV-IV-atomic-unsignedInt-totalDigits-2-2 tokoe:valid" result="pass"/><test-case name="2192NISTXML-SV-IV-atomic-unsignedInt-totalDigits-2-3 tokoe:valid" result="pass"/><test-case name="2193NISTXML-SV-IV-atomic-unsignedInt-totalDigits-2-4 tokoe:valid" result="pass"/><test-case name="2194NISTXML-SV-IV-atomic-unsignedInt-totalDigits-2-5 tokoe:valid" result="pass"/><test-case name="2195NISTSchema-SV-IV-atomic-unsignedInt-totalDigits-3 tokoe:valid" result="pass"/><test-case name="2196NISTXML-SV-IV-atomic-unsignedInt-totalDigits-3-1 tokoe:valid" result="pass"/><test-case name="2197NISTXML-SV-IV-atomic-unsignedInt-totalDigits-3-2 tokoe:valid" result="pass"/><test-case name="2198NISTXML-SV-IV-atomic-unsignedInt-totalDigits-3-3 tokoe:valid" result="pass"/><test-case name="2199NISTXML-SV-IV-atomic-unsignedInt-totalDigits-3-4 tokoe:valid" result="pass"/><test-case name="2200NISTXML-SV-IV-atomic-unsignedInt-totalDigits-3-5 tokoe:valid" result="pass"/><test-case name="2201NISTSchema-SV-IV-atomic-unsignedInt-totalDigits-4 tokoe:valid" result="pass"/><test-case name="2202NISTXML-SV-IV-atomic-unsignedInt-totalDigits-4-1 tokoe:valid" result="pass"/><test-case name="2203NISTXML-SV-IV-atomic-unsignedInt-totalDigits-4-2 tokoe:valid" result="pass"/><test-case name="2204NISTXML-SV-IV-atomic-unsignedInt-totalDigits-4-3 tokoe:valid" result="pass"/><test-case name="2205NISTXML-SV-IV-atomic-unsignedInt-totalDigits-4-4 tokoe:valid" result="pass"/><test-case name="2206NISTXML-SV-IV-atomic-unsignedInt-totalDigits-4-5 tokoe:valid" result="pass"/><test-case name="2207NISTSchema-SV-IV-atomic-unsignedInt-totalDigits-5 tokoe:valid" result="pass"/><test-case name="2208NISTXML-SV-IV-atomic-unsignedInt-totalDigits-5-1 tokoe:valid" result="pass"/><test-case name="2209NISTXML-SV-IV-atomic-unsignedInt-totalDigits-5-2 tokoe:valid" result="pass"/><test-case name="2210NISTXML-SV-IV-atomic-unsignedInt-totalDigits-5-3 tokoe:valid" result="pass"/><test-case name="2211NISTXML-SV-IV-atomic-unsignedInt-totalDigits-5-4 tokoe:valid" result="pass"/><test-case name="2212NISTXML-SV-IV-atomic-unsignedInt-totalDigits-5-5 tokoe:valid" result="pass"/><test-case name="2213NISTSchema-SV-IV-atomic-unsignedInt-pattern-1 tokoe:valid" result="pass"/><test-case name="2214NISTXML-SV-IV-atomic-unsignedInt-pattern-1-1 tokoe:valid" result="pass"/><test-case name="2215NISTXML-SV-IV-atomic-unsignedInt-pattern-1-2 tokoe:valid" result="pass"/><test-case name="2216NISTXML-SV-IV-atomic-unsignedInt-pattern-1-3 tokoe:valid" result="pass"/><test-case name="2217NISTXML-SV-IV-atomic-unsignedInt-pattern-1-4 tokoe:valid" result="pass"/><test-case name="2218NISTXML-SV-IV-atomic-unsignedInt-pattern-1-5 tokoe:valid" result="pass"/><test-case name="2219NISTSchema-SV-IV-atomic-unsignedInt-pattern-2 tokoe:valid" result="pass"/><test-case name="2220NISTXML-SV-IV-atomic-unsignedInt-pattern-2-1 tokoe:valid" result="pass"/><test-case name="2221NISTXML-SV-IV-atomic-unsignedInt-pattern-2-2 tokoe:valid" result="pass"/><test-case name="2222NISTXML-SV-IV-atomic-unsignedInt-pattern-2-3 tokoe:valid" result="pass"/><test-case name="2223NISTXML-SV-IV-atomic-unsignedInt-pattern-2-4 tokoe:valid" result="pass"/><test-case name="2224NISTXML-SV-IV-atomic-unsignedInt-pattern-2-5 tokoe:valid" result="pass"/><test-case name="2225NISTSchema-SV-IV-atomic-unsignedInt-pattern-3 tokoe:valid" result="pass"/><test-case name="2226NISTXML-SV-IV-atomic-unsignedInt-pattern-3-1 tokoe:valid" result="pass"/><test-case name="2227NISTXML-SV-IV-atomic-unsignedInt-pattern-3-2 tokoe:valid" result="pass"/><test-case name="2228NISTXML-SV-IV-atomic-unsignedInt-pattern-3-3 tokoe:valid" result="pass"/><test-case name="2229NISTXML-SV-IV-atomic-unsignedInt-pattern-3-4 tokoe:valid" result="pass"/><test-case name="2230NISTXML-SV-IV-atomic-unsignedInt-pattern-3-5 tokoe:valid" result="pass"/><test-case name="2231NISTSchema-SV-IV-atomic-unsignedInt-pattern-4 tokoe:valid" result="pass"/><test-case name="2232NISTXML-SV-IV-atomic-unsignedInt-pattern-4-1 tokoe:valid" result="pass"/><test-case name="2233NISTXML-SV-IV-atomic-unsignedInt-pattern-4-2 tokoe:valid" result="pass"/><test-case name="2234NISTXML-SV-IV-atomic-unsignedInt-pattern-4-3 tokoe:valid" result="pass"/><test-case name="2235NISTXML-SV-IV-atomic-unsignedInt-pattern-4-4 tokoe:valid" result="pass"/><test-case name="2236NISTXML-SV-IV-atomic-unsignedInt-pattern-4-5 tokoe:valid" result="pass"/><test-case name="2237NISTSchema-SV-IV-atomic-unsignedInt-pattern-5 tokoe:valid" result="pass"/><test-case name="2238NISTXML-SV-IV-atomic-unsignedInt-pattern-5-1 tokoe:valid" result="pass"/><test-case name="2239NISTXML-SV-IV-atomic-unsignedInt-pattern-5-2 tokoe:valid" result="pass"/><test-case name="2240NISTXML-SV-IV-atomic-unsignedInt-pattern-5-3 tokoe:valid" result="pass"/><test-case name="2241NISTXML-SV-IV-atomic-unsignedInt-pattern-5-4 tokoe:valid" result="pass"/><test-case name="2242NISTXML-SV-IV-atomic-unsignedInt-pattern-5-5 tokoe:valid" result="pass"/><test-case name="2243NISTSchema-SV-IV-atomic-unsignedInt-enumeration-1 tokoe:valid" result="pass"/><test-case name="2244NISTXML-SV-IV-atomic-unsignedInt-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="2245NISTXML-SV-IV-atomic-unsignedInt-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="2246NISTXML-SV-IV-atomic-unsignedInt-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="2247NISTXML-SV-IV-atomic-unsignedInt-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="2248NISTXML-SV-IV-atomic-unsignedInt-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="2249NISTSchema-SV-IV-atomic-unsignedInt-enumeration-2 tokoe:valid" result="pass"/><test-case name="2250NISTXML-SV-IV-atomic-unsignedInt-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="2251NISTXML-SV-IV-atomic-unsignedInt-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="2252NISTXML-SV-IV-atomic-unsignedInt-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="2253NISTXML-SV-IV-atomic-unsignedInt-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="2254NISTXML-SV-IV-atomic-unsignedInt-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="2255NISTSchema-SV-IV-atomic-unsignedInt-enumeration-3 tokoe:valid" result="pass"/><test-case name="2256NISTXML-SV-IV-atomic-unsignedInt-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="2257NISTXML-SV-IV-atomic-unsignedInt-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="2258NISTXML-SV-IV-atomic-unsignedInt-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="2259NISTXML-SV-IV-atomic-unsignedInt-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="2260NISTXML-SV-IV-atomic-unsignedInt-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="2261NISTSchema-SV-IV-atomic-unsignedInt-enumeration-4 tokoe:valid" result="pass"/><test-case name="2262NISTXML-SV-IV-atomic-unsignedInt-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="2263NISTXML-SV-IV-atomic-unsignedInt-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="2264NISTXML-SV-IV-atomic-unsignedInt-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="2265NISTXML-SV-IV-atomic-unsignedInt-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="2266NISTXML-SV-IV-atomic-unsignedInt-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="2267NISTSchema-SV-IV-atomic-unsignedInt-enumeration-5 tokoe:valid" result="pass"/><test-case name="2268NISTXML-SV-IV-atomic-unsignedInt-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="2269NISTXML-SV-IV-atomic-unsignedInt-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="2270NISTXML-SV-IV-atomic-unsignedInt-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="2271NISTXML-SV-IV-atomic-unsignedInt-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="2272NISTXML-SV-IV-atomic-unsignedInt-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="2273NISTSchema-SV-IV-atomic-unsignedInt-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="2274NISTXML-SV-IV-atomic-unsignedInt-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="2275NISTXML-SV-IV-atomic-unsignedInt-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="2276NISTXML-SV-IV-atomic-unsignedInt-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="2277NISTXML-SV-IV-atomic-unsignedInt-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="2278NISTXML-SV-IV-atomic-unsignedInt-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="2279NISTSchema-SV-IV-atomic-unsignedShort-minExclusive-1 tokoe:valid" result="pass"/><test-case name="2280NISTXML-SV-IV-atomic-unsignedShort-minExclusive-1-1 tokoe:valid" result="pass"/><test-case name="2281NISTXML-SV-IV-atomic-unsignedShort-minExclusive-1-2 tokoe:valid" result="pass"/><test-case name="2282NISTXML-SV-IV-atomic-unsignedShort-minExclusive-1-3 tokoe:valid" result="pass"/><test-case name="2283NISTXML-SV-IV-atomic-unsignedShort-minExclusive-1-4 tokoe:valid" result="pass"/><test-case name="2284NISTXML-SV-IV-atomic-unsignedShort-minExclusive-1-5 tokoe:valid" result="pass"/><test-case name="2285NISTSchema-SV-IV-atomic-unsignedShort-minExclusive-2 tokoe:valid" result="pass"/><test-case name="2286NISTXML-SV-IV-atomic-unsignedShort-minExclusive-2-1 tokoe:valid" result="pass"/><test-case name="2287NISTXML-SV-IV-atomic-unsignedShort-minExclusive-2-2 tokoe:valid" result="pass"/><test-case name="2288NISTXML-SV-IV-atomic-unsignedShort-minExclusive-2-3 tokoe:valid" result="pass"/><test-case name="2289NISTXML-SV-IV-atomic-unsignedShort-minExclusive-2-4 tokoe:valid" result="pass"/><test-case name="2290NISTXML-SV-IV-atomic-unsignedShort-minExclusive-2-5 tokoe:valid" result="pass"/><test-case name="2291NISTSchema-SV-IV-atomic-unsignedShort-minExclusive-3 tokoe:valid" result="pass"/><test-case name="2292NISTXML-SV-IV-atomic-unsignedShort-minExclusive-3-1 tokoe:valid" result="pass"/><test-case name="2293NISTXML-SV-IV-atomic-unsignedShort-minExclusive-3-2 tokoe:valid" result="pass"/><test-case name="2294NISTXML-SV-IV-atomic-unsignedShort-minExclusive-3-3 tokoe:valid" result="pass"/><test-case name="2295NISTXML-SV-IV-atomic-unsignedShort-minExclusive-3-4 tokoe:valid" result="pass"/><test-case name="2296NISTXML-SV-IV-atomic-unsignedShort-minExclusive-3-5 tokoe:valid" result="pass"/><test-case name="2297NISTSchema-SV-IV-atomic-unsignedShort-minExclusive-4 tokoe:valid" result="pass"/><test-case name="2298NISTXML-SV-IV-atomic-unsignedShort-minExclusive-4-1 tokoe:valid" result="pass"/><test-case name="2299NISTXML-SV-IV-atomic-unsignedShort-minExclusive-4-2 tokoe:valid" result="pass"/><test-case name="2300NISTXML-SV-IV-atomic-unsignedShort-minExclusive-4-3 tokoe:valid" result="pass"/><test-case name="2301NISTXML-SV-IV-atomic-unsignedShort-minExclusive-4-4 tokoe:valid" result="pass"/><test-case name="2302NISTXML-SV-IV-atomic-unsignedShort-minExclusive-4-5 tokoe:valid" result="pass"/><test-case name="2303NISTSchema-SV-IV-atomic-unsignedShort-minExclusive-5 tokoe:valid" result="pass"/><test-case name="2304NISTXML-SV-IV-atomic-unsignedShort-minExclusive-5-1 tokoe:valid" result="pass"/><test-case name="2305NISTSchema-SV-IV-atomic-unsignedShort-minInclusive-1 tokoe:valid" result="pass"/><test-case name="2306NISTXML-SV-IV-atomic-unsignedShort-minInclusive-1-1 tokoe:valid" result="pass"/><test-case name="2307NISTXML-SV-IV-atomic-unsignedShort-minInclusive-1-2 tokoe:valid" result="pass"/><test-case name="2308NISTXML-SV-IV-atomic-unsignedShort-minInclusive-1-3 tokoe:valid" result="pass"/><test-case name="2309NISTXML-SV-IV-atomic-unsignedShort-minInclusive-1-4 tokoe:valid" result="pass"/><test-case name="2310NISTXML-SV-IV-atomic-unsignedShort-minInclusive-1-5 tokoe:valid" result="pass"/><test-case name="2311NISTSchema-SV-IV-atomic-unsignedShort-minInclusive-2 tokoe:valid" result="pass"/><test-case name="2312NISTXML-SV-IV-atomic-unsignedShort-minInclusive-2-1 tokoe:valid" result="pass"/><test-case name="2313NISTXML-SV-IV-atomic-unsignedShort-minInclusive-2-2 tokoe:valid" result="pass"/><test-case name="2314NISTXML-SV-IV-atomic-unsignedShort-minInclusive-2-3 tokoe:valid" result="pass"/><test-case name="2315NISTXML-SV-IV-atomic-unsignedShort-minInclusive-2-4 tokoe:valid" result="pass"/><test-case name="2316NISTXML-SV-IV-atomic-unsignedShort-minInclusive-2-5 tokoe:valid" result="pass"/><test-case name="2317NISTSchema-SV-IV-atomic-unsignedShort-minInclusive-3 tokoe:valid" result="pass"/><test-case name="2318NISTXML-SV-IV-atomic-unsignedShort-minInclusive-3-1 tokoe:valid" result="pass"/><test-case name="2319NISTXML-SV-IV-atomic-unsignedShort-minInclusive-3-2 tokoe:valid" result="pass"/><test-case name="2320NISTXML-SV-IV-atomic-unsignedShort-minInclusive-3-3 tokoe:valid" result="pass"/><test-case name="2321NISTXML-SV-IV-atomic-unsignedShort-minInclusive-3-4 tokoe:valid" result="pass"/><test-case name="2322NISTXML-SV-IV-atomic-unsignedShort-minInclusive-3-5 tokoe:valid" result="pass"/><test-case name="2323NISTSchema-SV-IV-atomic-unsignedShort-minInclusive-4 tokoe:valid" result="pass"/><test-case name="2324NISTXML-SV-IV-atomic-unsignedShort-minInclusive-4-1 tokoe:valid" result="pass"/><test-case name="2325NISTXML-SV-IV-atomic-unsignedShort-minInclusive-4-2 tokoe:valid" result="pass"/><test-case name="2326NISTXML-SV-IV-atomic-unsignedShort-minInclusive-4-3 tokoe:valid" result="pass"/><test-case name="2327NISTXML-SV-IV-atomic-unsignedShort-minInclusive-4-4 tokoe:valid" result="pass"/><test-case name="2328NISTXML-SV-IV-atomic-unsignedShort-minInclusive-4-5 tokoe:valid" result="pass"/><test-case name="2329NISTSchema-SV-IV-atomic-unsignedShort-minInclusive-5 tokoe:valid" result="pass"/><test-case name="2330NISTXML-SV-IV-atomic-unsignedShort-minInclusive-5-1 tokoe:valid" result="pass"/><test-case name="2331NISTSchema-SV-IV-atomic-unsignedShort-maxExclusive-1 tokoe:valid" result="pass"/><test-case name="2332NISTXML-SV-IV-atomic-unsignedShort-maxExclusive-1-1 tokoe:valid" result="pass"/><test-case name="2333NISTSchema-SV-IV-atomic-unsignedShort-maxExclusive-2 tokoe:valid" result="pass"/><test-case name="2334NISTXML-SV-IV-atomic-unsignedShort-maxExclusive-2-1 tokoe:valid" result="pass"/><test-case name="2335NISTXML-SV-IV-atomic-unsignedShort-maxExclusive-2-2 tokoe:valid" result="pass"/><test-case name="2336NISTXML-SV-IV-atomic-unsignedShort-maxExclusive-2-3 tokoe:valid" result="pass"/><test-case name="2337NISTXML-SV-IV-atomic-unsignedShort-maxExclusive-2-4 tokoe:valid" result="pass"/><test-case name="2338NISTXML-SV-IV-atomic-unsignedShort-maxExclusive-2-5 tokoe:valid" result="pass"/><test-case name="2339NISTSchema-SV-IV-atomic-unsignedShort-maxExclusive-3 tokoe:valid" result="pass"/><test-case name="2340NISTXML-SV-IV-atomic-unsignedShort-maxExclusive-3-1 tokoe:valid" result="pass"/><test-case name="2341NISTXML-SV-IV-atomic-unsignedShort-maxExclusive-3-2 tokoe:valid" result="pass"/><test-case name="2342NISTXML-SV-IV-atomic-unsignedShort-maxExclusive-3-3 tokoe:valid" result="pass"/><test-case name="2343NISTXML-SV-IV-atomic-unsignedShort-maxExclusive-3-4 tokoe:valid" result="pass"/><test-case name="2344NISTXML-SV-IV-atomic-unsignedShort-maxExclusive-3-5 tokoe:valid" result="pass"/><test-case name="2345NISTSchema-SV-IV-atomic-unsignedShort-maxExclusive-4 tokoe:valid" result="pass"/><test-case name="2346NISTXML-SV-IV-atomic-unsignedShort-maxExclusive-4-1 tokoe:valid" result="pass"/><test-case name="2347NISTXML-SV-IV-atomic-unsignedShort-maxExclusive-4-2 tokoe:valid" result="pass"/><test-case name="2348NISTXML-SV-IV-atomic-unsignedShort-maxExclusive-4-3 tokoe:valid" result="pass"/><test-case name="2349NISTXML-SV-IV-atomic-unsignedShort-maxExclusive-4-4 tokoe:valid" result="pass"/><test-case name="2350NISTXML-SV-IV-atomic-unsignedShort-maxExclusive-4-5 tokoe:valid" result="pass"/><test-case name="2351NISTSchema-SV-IV-atomic-unsignedShort-maxExclusive-5 tokoe:valid" result="pass"/><test-case name="2352NISTXML-SV-IV-atomic-unsignedShort-maxExclusive-5-1 tokoe:valid" result="pass"/><test-case name="2353NISTXML-SV-IV-atomic-unsignedShort-maxExclusive-5-2 tokoe:valid" result="pass"/><test-case name="2354NISTXML-SV-IV-atomic-unsignedShort-maxExclusive-5-3 tokoe:valid" result="pass"/><test-case name="2355NISTXML-SV-IV-atomic-unsignedShort-maxExclusive-5-4 tokoe:valid" result="pass"/><test-case name="2356NISTXML-SV-IV-atomic-unsignedShort-maxExclusive-5-5 tokoe:valid" result="pass"/><test-case name="2357NISTSchema-SV-IV-atomic-unsignedShort-maxInclusive-1 tokoe:valid" result="pass"/><test-case name="2358NISTXML-SV-IV-atomic-unsignedShort-maxInclusive-1-1 tokoe:valid" result="pass"/><test-case name="2359NISTSchema-SV-IV-atomic-unsignedShort-maxInclusive-2 tokoe:valid" result="pass"/><test-case name="2360NISTXML-SV-IV-atomic-unsignedShort-maxInclusive-2-1 tokoe:valid" result="pass"/><test-case name="2361NISTXML-SV-IV-atomic-unsignedShort-maxInclusive-2-2 tokoe:valid" result="pass"/><test-case name="2362NISTXML-SV-IV-atomic-unsignedShort-maxInclusive-2-3 tokoe:valid" result="pass"/><test-case name="2363NISTXML-SV-IV-atomic-unsignedShort-maxInclusive-2-4 tokoe:valid" result="pass"/><test-case name="2364NISTXML-SV-IV-atomic-unsignedShort-maxInclusive-2-5 tokoe:valid" result="pass"/><test-case name="2365NISTSchema-SV-IV-atomic-unsignedShort-maxInclusive-3 tokoe:valid" result="pass"/><test-case name="2366NISTXML-SV-IV-atomic-unsignedShort-maxInclusive-3-1 tokoe:valid" result="pass"/><test-case name="2367NISTXML-SV-IV-atomic-unsignedShort-maxInclusive-3-2 tokoe:valid" result="pass"/><test-case name="2368NISTXML-SV-IV-atomic-unsignedShort-maxInclusive-3-3 tokoe:valid" result="pass"/><test-case name="2369NISTXML-SV-IV-atomic-unsignedShort-maxInclusive-3-4 tokoe:valid" result="pass"/><test-case name="2370NISTXML-SV-IV-atomic-unsignedShort-maxInclusive-3-5 tokoe:valid" result="pass"/><test-case name="2371NISTSchema-SV-IV-atomic-unsignedShort-maxInclusive-4 tokoe:valid" result="pass"/><test-case name="2372NISTXML-SV-IV-atomic-unsignedShort-maxInclusive-4-1 tokoe:valid" result="pass"/><test-case name="2373NISTXML-SV-IV-atomic-unsignedShort-maxInclusive-4-2 tokoe:valid" result="pass"/><test-case name="2374NISTXML-SV-IV-atomic-unsignedShort-maxInclusive-4-3 tokoe:valid" result="pass"/><test-case name="2375NISTXML-SV-IV-atomic-unsignedShort-maxInclusive-4-4 tokoe:valid" result="pass"/><test-case name="2376NISTXML-SV-IV-atomic-unsignedShort-maxInclusive-4-5 tokoe:valid" result="pass"/><test-case name="2377NISTSchema-SV-IV-atomic-unsignedShort-maxInclusive-5 tokoe:valid" result="pass"/><test-case name="2378NISTXML-SV-IV-atomic-unsignedShort-maxInclusive-5-1 tokoe:valid" result="pass"/><test-case name="2379NISTXML-SV-IV-atomic-unsignedShort-maxInclusive-5-2 tokoe:valid" result="pass"/><test-case name="2380NISTXML-SV-IV-atomic-unsignedShort-maxInclusive-5-3 tokoe:valid" result="pass"/><test-case name="2381NISTXML-SV-IV-atomic-unsignedShort-maxInclusive-5-4 tokoe:valid" result="pass"/><test-case name="2382NISTXML-SV-IV-atomic-unsignedShort-maxInclusive-5-5 tokoe:valid" result="pass"/><test-case name="2383NISTSchema-SV-IV-atomic-unsignedShort-fractionDigits-1 tokoe:valid" result="pass"/><test-case name="2384NISTXML-SV-IV-atomic-unsignedShort-fractionDigits-1-1 tokoe:valid" result="pass"/><test-case name="2385NISTXML-SV-IV-atomic-unsignedShort-fractionDigits-1-2 tokoe:valid" result="pass"/><test-case name="2386NISTXML-SV-IV-atomic-unsignedShort-fractionDigits-1-3 tokoe:valid" result="pass"/><test-case name="2387NISTXML-SV-IV-atomic-unsignedShort-fractionDigits-1-4 tokoe:valid" result="pass"/><test-case name="2388NISTXML-SV-IV-atomic-unsignedShort-fractionDigits-1-5 tokoe:valid" result="pass"/><test-case name="2389NISTSchema-SV-IV-atomic-unsignedShort-totalDigits-1 tokoe:valid" result="pass"/><test-case name="2390NISTXML-SV-IV-atomic-unsignedShort-totalDigits-1-1 tokoe:valid" result="pass"/><test-case name="2391NISTXML-SV-IV-atomic-unsignedShort-totalDigits-1-2 tokoe:valid" result="pass"/><test-case name="2392NISTXML-SV-IV-atomic-unsignedShort-totalDigits-1-3 tokoe:valid" result="pass"/><test-case name="2393NISTXML-SV-IV-atomic-unsignedShort-totalDigits-1-4 tokoe:valid" result="pass"/><test-case name="2394NISTXML-SV-IV-atomic-unsignedShort-totalDigits-1-5 tokoe:valid" result="pass"/><test-case name="2395NISTSchema-SV-IV-atomic-unsignedShort-totalDigits-2 tokoe:valid" result="pass"/><test-case name="2396NISTXML-SV-IV-atomic-unsignedShort-totalDigits-2-1 tokoe:valid" result="pass"/><test-case name="2397NISTXML-SV-IV-atomic-unsignedShort-totalDigits-2-2 tokoe:valid" result="pass"/><test-case name="2398NISTXML-SV-IV-atomic-unsignedShort-totalDigits-2-3 tokoe:valid" result="pass"/><test-case name="2399NISTXML-SV-IV-atomic-unsignedShort-totalDigits-2-4 tokoe:valid" result="pass"/><test-case name="2400NISTXML-SV-IV-atomic-unsignedShort-totalDigits-2-5 tokoe:valid" result="pass"/><test-case name="2401NISTSchema-SV-IV-atomic-unsignedShort-totalDigits-3 tokoe:valid" result="pass"/><test-case name="2402NISTXML-SV-IV-atomic-unsignedShort-totalDigits-3-1 tokoe:valid" result="pass"/><test-case name="2403NISTXML-SV-IV-atomic-unsignedShort-totalDigits-3-2 tokoe:valid" result="pass"/><test-case name="2404NISTXML-SV-IV-atomic-unsignedShort-totalDigits-3-3 tokoe:valid" result="pass"/><test-case name="2405NISTXML-SV-IV-atomic-unsignedShort-totalDigits-3-4 tokoe:valid" result="pass"/><test-case name="2406NISTXML-SV-IV-atomic-unsignedShort-totalDigits-3-5 tokoe:valid" result="pass"/><test-case name="2407NISTSchema-SV-IV-atomic-unsignedShort-totalDigits-4 tokoe:valid" result="pass"/><test-case name="2408NISTXML-SV-IV-atomic-unsignedShort-totalDigits-4-1 tokoe:valid" result="pass"/><test-case name="2409NISTXML-SV-IV-atomic-unsignedShort-totalDigits-4-2 tokoe:valid" result="pass"/><test-case name="2410NISTXML-SV-IV-atomic-unsignedShort-totalDigits-4-3 tokoe:valid" result="pass"/><test-case name="2411NISTXML-SV-IV-atomic-unsignedShort-totalDigits-4-4 tokoe:valid" result="pass"/><test-case name="2412NISTXML-SV-IV-atomic-unsignedShort-totalDigits-4-5 tokoe:valid" result="pass"/><test-case name="2413NISTSchema-SV-IV-atomic-unsignedShort-totalDigits-5 tokoe:valid" result="pass"/><test-case name="2414NISTXML-SV-IV-atomic-unsignedShort-totalDigits-5-1 tokoe:valid" result="pass"/><test-case name="2415NISTXML-SV-IV-atomic-unsignedShort-totalDigits-5-2 tokoe:valid" result="pass"/><test-case name="2416NISTXML-SV-IV-atomic-unsignedShort-totalDigits-5-3 tokoe:valid" result="pass"/><test-case name="2417NISTXML-SV-IV-atomic-unsignedShort-totalDigits-5-4 tokoe:valid" result="pass"/><test-case name="2418NISTXML-SV-IV-atomic-unsignedShort-totalDigits-5-5 tokoe:valid" result="pass"/><test-case name="2419NISTSchema-SV-IV-atomic-unsignedShort-pattern-1 tokoe:valid" result="pass"/><test-case name="2420NISTXML-SV-IV-atomic-unsignedShort-pattern-1-1 tokoe:valid" result="pass"/><test-case name="2421NISTXML-SV-IV-atomic-unsignedShort-pattern-1-2 tokoe:valid" result="pass"/><test-case name="2422NISTXML-SV-IV-atomic-unsignedShort-pattern-1-3 tokoe:valid" result="pass"/><test-case name="2423NISTXML-SV-IV-atomic-unsignedShort-pattern-1-4 tokoe:valid" result="pass"/><test-case name="2424NISTXML-SV-IV-atomic-unsignedShort-pattern-1-5 tokoe:valid" result="pass"/><test-case name="2425NISTSchema-SV-IV-atomic-unsignedShort-pattern-2 tokoe:valid" result="pass"/><test-case name="2426NISTXML-SV-IV-atomic-unsignedShort-pattern-2-1 tokoe:valid" result="pass"/><test-case name="2427NISTXML-SV-IV-atomic-unsignedShort-pattern-2-2 tokoe:valid" result="pass"/><test-case name="2428NISTXML-SV-IV-atomic-unsignedShort-pattern-2-3 tokoe:valid" result="pass"/><test-case name="2429NISTXML-SV-IV-atomic-unsignedShort-pattern-2-4 tokoe:valid" result="pass"/><test-case name="2430NISTXML-SV-IV-atomic-unsignedShort-pattern-2-5 tokoe:valid" result="pass"/><test-case name="2431NISTSchema-SV-IV-atomic-unsignedShort-pattern-3 tokoe:valid" result="pass"/><test-case name="2432NISTXML-SV-IV-atomic-unsignedShort-pattern-3-1 tokoe:valid" result="pass"/><test-case name="2433NISTXML-SV-IV-atomic-unsignedShort-pattern-3-2 tokoe:valid" result="pass"/><test-case name="2434NISTXML-SV-IV-atomic-unsignedShort-pattern-3-3 tokoe:valid" result="pass"/><test-case name="2435NISTXML-SV-IV-atomic-unsignedShort-pattern-3-4 tokoe:valid" result="pass"/><test-case name="2436NISTXML-SV-IV-atomic-unsignedShort-pattern-3-5 tokoe:valid" result="pass"/><test-case name="2437NISTSchema-SV-IV-atomic-unsignedShort-pattern-4 tokoe:valid" result="pass"/><test-case name="2438NISTXML-SV-IV-atomic-unsignedShort-pattern-4-1 tokoe:valid" result="pass"/><test-case name="2439NISTXML-SV-IV-atomic-unsignedShort-pattern-4-2 tokoe:valid" result="pass"/><test-case name="2440NISTXML-SV-IV-atomic-unsignedShort-pattern-4-3 tokoe:valid" result="pass"/><test-case name="2441NISTXML-SV-IV-atomic-unsignedShort-pattern-4-4 tokoe:valid" result="pass"/><test-case name="2442NISTXML-SV-IV-atomic-unsignedShort-pattern-4-5 tokoe:valid" result="pass"/><test-case name="2443NISTSchema-SV-IV-atomic-unsignedShort-pattern-5 tokoe:valid" result="pass"/><test-case name="2444NISTXML-SV-IV-atomic-unsignedShort-pattern-5-1 tokoe:valid" result="pass"/><test-case name="2445NISTXML-SV-IV-atomic-unsignedShort-pattern-5-2 tokoe:valid" result="pass"/><test-case name="2446NISTXML-SV-IV-atomic-unsignedShort-pattern-5-3 tokoe:valid" result="pass"/><test-case name="2447NISTXML-SV-IV-atomic-unsignedShort-pattern-5-4 tokoe:valid" result="pass"/><test-case name="2448NISTXML-SV-IV-atomic-unsignedShort-pattern-5-5 tokoe:valid" result="pass"/><test-case name="2449NISTSchema-SV-IV-atomic-unsignedShort-enumeration-1 tokoe:valid" result="pass"/><test-case name="2450NISTXML-SV-IV-atomic-unsignedShort-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="2451NISTXML-SV-IV-atomic-unsignedShort-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="2452NISTXML-SV-IV-atomic-unsignedShort-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="2453NISTXML-SV-IV-atomic-unsignedShort-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="2454NISTXML-SV-IV-atomic-unsignedShort-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="2455NISTSchema-SV-IV-atomic-unsignedShort-enumeration-2 tokoe:valid" result="pass"/><test-case name="2456NISTXML-SV-IV-atomic-unsignedShort-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="2457NISTXML-SV-IV-atomic-unsignedShort-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="2458NISTXML-SV-IV-atomic-unsignedShort-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="2459NISTXML-SV-IV-atomic-unsignedShort-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="2460NISTXML-SV-IV-atomic-unsignedShort-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="2461NISTSchema-SV-IV-atomic-unsignedShort-enumeration-3 tokoe:valid" result="pass"/><test-case name="2462NISTXML-SV-IV-atomic-unsignedShort-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="2463NISTXML-SV-IV-atomic-unsignedShort-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="2464NISTXML-SV-IV-atomic-unsignedShort-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="2465NISTXML-SV-IV-atomic-unsignedShort-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="2466NISTXML-SV-IV-atomic-unsignedShort-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="2467NISTSchema-SV-IV-atomic-unsignedShort-enumeration-4 tokoe:valid" result="pass"/><test-case name="2468NISTXML-SV-IV-atomic-unsignedShort-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="2469NISTXML-SV-IV-atomic-unsignedShort-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="2470NISTXML-SV-IV-atomic-unsignedShort-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="2471NISTXML-SV-IV-atomic-unsignedShort-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="2472NISTXML-SV-IV-atomic-unsignedShort-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="2473NISTSchema-SV-IV-atomic-unsignedShort-enumeration-5 tokoe:valid" result="pass"/><test-case name="2474NISTXML-SV-IV-atomic-unsignedShort-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="2475NISTXML-SV-IV-atomic-unsignedShort-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="2476NISTXML-SV-IV-atomic-unsignedShort-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="2477NISTXML-SV-IV-atomic-unsignedShort-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="2478NISTXML-SV-IV-atomic-unsignedShort-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="2479NISTSchema-SV-IV-atomic-unsignedShort-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="2480NISTXML-SV-IV-atomic-unsignedShort-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="2481NISTXML-SV-IV-atomic-unsignedShort-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="2482NISTXML-SV-IV-atomic-unsignedShort-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="2483NISTXML-SV-IV-atomic-unsignedShort-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="2484NISTXML-SV-IV-atomic-unsignedShort-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="2485NISTSchema-SV-IV-atomic-unsignedByte-minExclusive-1 tokoe:valid" result="pass"/><test-case name="2486NISTXML-SV-IV-atomic-unsignedByte-minExclusive-1-1 tokoe:valid" result="pass"/><test-case name="2487NISTXML-SV-IV-atomic-unsignedByte-minExclusive-1-2 tokoe:valid" result="pass"/><test-case name="2488NISTXML-SV-IV-atomic-unsignedByte-minExclusive-1-3 tokoe:valid" result="pass"/><test-case name="2489NISTXML-SV-IV-atomic-unsignedByte-minExclusive-1-4 tokoe:valid" result="pass"/><test-case name="2490NISTXML-SV-IV-atomic-unsignedByte-minExclusive-1-5 tokoe:valid" result="pass"/><test-case name="2491NISTSchema-SV-IV-atomic-unsignedByte-minExclusive-2 tokoe:valid" result="pass"/><test-case name="2492NISTXML-SV-IV-atomic-unsignedByte-minExclusive-2-1 tokoe:valid" result="pass"/><test-case name="2493NISTXML-SV-IV-atomic-unsignedByte-minExclusive-2-2 tokoe:valid" result="pass"/><test-case name="2494NISTXML-SV-IV-atomic-unsignedByte-minExclusive-2-3 tokoe:valid" result="pass"/><test-case name="2495NISTXML-SV-IV-atomic-unsignedByte-minExclusive-2-4 tokoe:valid" result="pass"/><test-case name="2496NISTXML-SV-IV-atomic-unsignedByte-minExclusive-2-5 tokoe:valid" result="pass"/><test-case name="2497NISTSchema-SV-IV-atomic-unsignedByte-minExclusive-3 tokoe:valid" result="pass"/><test-case name="2498NISTXML-SV-IV-atomic-unsignedByte-minExclusive-3-1 tokoe:valid" result="pass"/><test-case name="2499NISTXML-SV-IV-atomic-unsignedByte-minExclusive-3-2 tokoe:valid" result="pass"/><test-case name="2500NISTXML-SV-IV-atomic-unsignedByte-minExclusive-3-3 tokoe:valid" result="pass"/><test-case name="2501NISTXML-SV-IV-atomic-unsignedByte-minExclusive-3-4 tokoe:valid" result="pass"/><test-case name="2502NISTXML-SV-IV-atomic-unsignedByte-minExclusive-3-5 tokoe:valid" result="pass"/><test-case name="2503NISTSchema-SV-IV-atomic-unsignedByte-minExclusive-4 tokoe:valid" result="pass"/><test-case name="2504NISTXML-SV-IV-atomic-unsignedByte-minExclusive-4-1 tokoe:valid" result="pass"/><test-case name="2505NISTXML-SV-IV-atomic-unsignedByte-minExclusive-4-2 tokoe:valid" result="pass"/><test-case name="2506NISTXML-SV-IV-atomic-unsignedByte-minExclusive-4-3 tokoe:valid" result="pass"/><test-case name="2507NISTXML-SV-IV-atomic-unsignedByte-minExclusive-4-4 tokoe:valid" result="pass"/><test-case name="2508NISTXML-SV-IV-atomic-unsignedByte-minExclusive-4-5 tokoe:valid" result="pass"/><test-case name="2509NISTSchema-SV-IV-atomic-unsignedByte-minExclusive-5 tokoe:valid" result="pass"/><test-case name="2510NISTXML-SV-IV-atomic-unsignedByte-minExclusive-5-1 tokoe:valid" result="pass"/><test-case name="2511NISTSchema-SV-IV-atomic-unsignedByte-minInclusive-1 tokoe:valid" result="pass"/><test-case name="2512NISTXML-SV-IV-atomic-unsignedByte-minInclusive-1-1 tokoe:valid" result="pass"/><test-case name="2513NISTXML-SV-IV-atomic-unsignedByte-minInclusive-1-2 tokoe:valid" result="pass"/><test-case name="2514NISTXML-SV-IV-atomic-unsignedByte-minInclusive-1-3 tokoe:valid" result="pass"/><test-case name="2515NISTXML-SV-IV-atomic-unsignedByte-minInclusive-1-4 tokoe:valid" result="pass"/><test-case name="2516NISTXML-SV-IV-atomic-unsignedByte-minInclusive-1-5 tokoe:valid" result="pass"/><test-case name="2517NISTSchema-SV-IV-atomic-unsignedByte-minInclusive-2 tokoe:valid" result="pass"/><test-case name="2518NISTXML-SV-IV-atomic-unsignedByte-minInclusive-2-1 tokoe:valid" result="pass"/><test-case name="2519NISTXML-SV-IV-atomic-unsignedByte-minInclusive-2-2 tokoe:valid" result="pass"/><test-case name="2520NISTXML-SV-IV-atomic-unsignedByte-minInclusive-2-3 tokoe:valid" result="pass"/><test-case name="2521NISTXML-SV-IV-atomic-unsignedByte-minInclusive-2-4 tokoe:valid" result="pass"/><test-case name="2522NISTXML-SV-IV-atomic-unsignedByte-minInclusive-2-5 tokoe:valid" result="pass"/><test-case name="2523NISTSchema-SV-IV-atomic-unsignedByte-minInclusive-3 tokoe:valid" result="pass"/><test-case name="2524NISTXML-SV-IV-atomic-unsignedByte-minInclusive-3-1 tokoe:valid" result="pass"/><test-case name="2525NISTXML-SV-IV-atomic-unsignedByte-minInclusive-3-2 tokoe:valid" result="pass"/><test-case name="2526NISTXML-SV-IV-atomic-unsignedByte-minInclusive-3-3 tokoe:valid" result="pass"/><test-case name="2527NISTXML-SV-IV-atomic-unsignedByte-minInclusive-3-4 tokoe:valid" result="pass"/><test-case name="2528NISTXML-SV-IV-atomic-unsignedByte-minInclusive-3-5 tokoe:valid" result="pass"/><test-case name="2529NISTSchema-SV-IV-atomic-unsignedByte-minInclusive-4 tokoe:valid" result="pass"/><test-case name="2530NISTXML-SV-IV-atomic-unsignedByte-minInclusive-4-1 tokoe:valid" result="pass"/><test-case name="2531NISTXML-SV-IV-atomic-unsignedByte-minInclusive-4-2 tokoe:valid" result="pass"/><test-case name="2532NISTXML-SV-IV-atomic-unsignedByte-minInclusive-4-3 tokoe:valid" result="pass"/><test-case name="2533NISTXML-SV-IV-atomic-unsignedByte-minInclusive-4-4 tokoe:valid" result="pass"/><test-case name="2534NISTXML-SV-IV-atomic-unsignedByte-minInclusive-4-5 tokoe:valid" result="pass"/><test-case name="2535NISTSchema-SV-IV-atomic-unsignedByte-minInclusive-5 tokoe:valid" result="pass"/><test-case name="2536NISTXML-SV-IV-atomic-unsignedByte-minInclusive-5-1 tokoe:valid" result="pass"/><test-case name="2537NISTSchema-SV-IV-atomic-unsignedByte-maxExclusive-1 tokoe:valid" result="pass"/><test-case name="2538NISTXML-SV-IV-atomic-unsignedByte-maxExclusive-1-1 tokoe:valid" result="pass"/><test-case name="2539NISTSchema-SV-IV-atomic-unsignedByte-maxExclusive-2 tokoe:valid" result="pass"/><test-case name="2540NISTXML-SV-IV-atomic-unsignedByte-maxExclusive-2-1 tokoe:valid" result="pass"/><test-case name="2541NISTXML-SV-IV-atomic-unsignedByte-maxExclusive-2-2 tokoe:valid" result="pass"/><test-case name="2542NISTXML-SV-IV-atomic-unsignedByte-maxExclusive-2-3 tokoe:valid" result="pass"/><test-case name="2543NISTXML-SV-IV-atomic-unsignedByte-maxExclusive-2-4 tokoe:valid" result="pass"/><test-case name="2544NISTXML-SV-IV-atomic-unsignedByte-maxExclusive-2-5 tokoe:valid" result="pass"/><test-case name="2545NISTSchema-SV-IV-atomic-unsignedByte-maxExclusive-3 tokoe:valid" result="pass"/><test-case name="2546NISTXML-SV-IV-atomic-unsignedByte-maxExclusive-3-1 tokoe:valid" result="pass"/><test-case name="2547NISTXML-SV-IV-atomic-unsignedByte-maxExclusive-3-2 tokoe:valid" result="pass"/><test-case name="2548NISTXML-SV-IV-atomic-unsignedByte-maxExclusive-3-3 tokoe:valid" result="pass"/><test-case name="2549NISTXML-SV-IV-atomic-unsignedByte-maxExclusive-3-4 tokoe:valid" result="pass"/><test-case name="2550NISTXML-SV-IV-atomic-unsignedByte-maxExclusive-3-5 tokoe:valid" result="pass"/><test-case name="2551NISTSchema-SV-IV-atomic-unsignedByte-maxExclusive-4 tokoe:valid" result="pass"/><test-case name="2552NISTXML-SV-IV-atomic-unsignedByte-maxExclusive-4-1 tokoe:valid" result="pass"/><test-case name="2553NISTXML-SV-IV-atomic-unsignedByte-maxExclusive-4-2 tokoe:valid" result="pass"/><test-case name="2554NISTXML-SV-IV-atomic-unsignedByte-maxExclusive-4-3 tokoe:valid" result="pass"/><test-case name="2555NISTXML-SV-IV-atomic-unsignedByte-maxExclusive-4-4 tokoe:valid" result="pass"/><test-case name="2556NISTXML-SV-IV-atomic-unsignedByte-maxExclusive-4-5 tokoe:valid" result="pass"/><test-case name="2557NISTSchema-SV-IV-atomic-unsignedByte-maxExclusive-5 tokoe:valid" result="pass"/><test-case name="2558NISTXML-SV-IV-atomic-unsignedByte-maxExclusive-5-1 tokoe:valid" result="pass"/><test-case name="2559NISTXML-SV-IV-atomic-unsignedByte-maxExclusive-5-2 tokoe:valid" result="pass"/><test-case name="2560NISTXML-SV-IV-atomic-unsignedByte-maxExclusive-5-3 tokoe:valid" result="pass"/><test-case name="2561NISTXML-SV-IV-atomic-unsignedByte-maxExclusive-5-4 tokoe:valid" result="pass"/><test-case name="2562NISTXML-SV-IV-atomic-unsignedByte-maxExclusive-5-5 tokoe:valid" result="pass"/><test-case name="2563NISTSchema-SV-IV-atomic-unsignedByte-maxInclusive-1 tokoe:valid" result="pass"/><test-case name="2564NISTXML-SV-IV-atomic-unsignedByte-maxInclusive-1-1 tokoe:valid" result="pass"/><test-case name="2565NISTSchema-SV-IV-atomic-unsignedByte-maxInclusive-2 tokoe:valid" result="pass"/><test-case name="2566NISTXML-SV-IV-atomic-unsignedByte-maxInclusive-2-1 tokoe:valid" result="pass"/><test-case name="2567NISTXML-SV-IV-atomic-unsignedByte-maxInclusive-2-2 tokoe:valid" result="pass"/><test-case name="2568NISTXML-SV-IV-atomic-unsignedByte-maxInclusive-2-3 tokoe:valid" result="pass"/><test-case name="2569NISTXML-SV-IV-atomic-unsignedByte-maxInclusive-2-4 tokoe:valid" result="pass"/><test-case name="2570NISTXML-SV-IV-atomic-unsignedByte-maxInclusive-2-5 tokoe:valid" result="pass"/><test-case name="2571NISTSchema-SV-IV-atomic-unsignedByte-maxInclusive-3 tokoe:valid" result="pass"/><test-case name="2572NISTXML-SV-IV-atomic-unsignedByte-maxInclusive-3-1 tokoe:valid" result="pass"/><test-case name="2573NISTXML-SV-IV-atomic-unsignedByte-maxInclusive-3-2 tokoe:valid" result="pass"/><test-case name="2574NISTXML-SV-IV-atomic-unsignedByte-maxInclusive-3-3 tokoe:valid" result="pass"/><test-case name="2575NISTXML-SV-IV-atomic-unsignedByte-maxInclusive-3-4 tokoe:valid" result="pass"/><test-case name="2576NISTXML-SV-IV-atomic-unsignedByte-maxInclusive-3-5 tokoe:valid" result="pass"/><test-case name="2577NISTSchema-SV-IV-atomic-unsignedByte-maxInclusive-4 tokoe:valid" result="pass"/><test-case name="2578NISTXML-SV-IV-atomic-unsignedByte-maxInclusive-4-1 tokoe:valid" result="pass"/><test-case name="2579NISTXML-SV-IV-atomic-unsignedByte-maxInclusive-4-2 tokoe:valid" result="pass"/><test-case name="2580NISTXML-SV-IV-atomic-unsignedByte-maxInclusive-4-3 tokoe:valid" result="pass"/><test-case name="2581NISTXML-SV-IV-atomic-unsignedByte-maxInclusive-4-4 tokoe:valid" result="pass"/><test-case name="2582NISTXML-SV-IV-atomic-unsignedByte-maxInclusive-4-5 tokoe:valid" result="pass"/><test-case name="2583NISTSchema-SV-IV-atomic-unsignedByte-maxInclusive-5 tokoe:valid" result="pass"/><test-case name="2584NISTXML-SV-IV-atomic-unsignedByte-maxInclusive-5-1 tokoe:valid" result="pass"/><test-case name="2585NISTXML-SV-IV-atomic-unsignedByte-maxInclusive-5-2 tokoe:valid" result="pass"/><test-case name="2586NISTXML-SV-IV-atomic-unsignedByte-maxInclusive-5-3 tokoe:valid" result="pass"/><test-case name="2587NISTXML-SV-IV-atomic-unsignedByte-maxInclusive-5-4 tokoe:valid" result="pass"/><test-case name="2588NISTXML-SV-IV-atomic-unsignedByte-maxInclusive-5-5 tokoe:valid" result="pass"/><test-case name="2589NISTSchema-SV-IV-atomic-unsignedByte-fractionDigits-1 tokoe:valid" result="pass"/><test-case name="2590NISTXML-SV-IV-atomic-unsignedByte-fractionDigits-1-1 tokoe:valid" result="pass"/><test-case name="2591NISTXML-SV-IV-atomic-unsignedByte-fractionDigits-1-2 tokoe:valid" result="pass"/><test-case name="2592NISTXML-SV-IV-atomic-unsignedByte-fractionDigits-1-3 tokoe:valid" result="pass"/><test-case name="2593NISTXML-SV-IV-atomic-unsignedByte-fractionDigits-1-4 tokoe:valid" result="pass"/><test-case name="2594NISTXML-SV-IV-atomic-unsignedByte-fractionDigits-1-5 tokoe:valid" result="pass"/><test-case name="2595NISTSchema-SV-IV-atomic-unsignedByte-totalDigits-1 tokoe:valid" result="pass"/><test-case name="2596NISTXML-SV-IV-atomic-unsignedByte-totalDigits-1-1 tokoe:valid" result="pass"/><test-case name="2597NISTXML-SV-IV-atomic-unsignedByte-totalDigits-1-2 tokoe:valid" result="pass"/><test-case name="2598NISTXML-SV-IV-atomic-unsignedByte-totalDigits-1-3 tokoe:valid" result="pass"/><test-case name="2599NISTXML-SV-IV-atomic-unsignedByte-totalDigits-1-4 tokoe:valid" result="pass"/><test-case name="2600NISTXML-SV-IV-atomic-unsignedByte-totalDigits-1-5 tokoe:valid" result="pass"/><test-case name="2601NISTSchema-SV-IV-atomic-unsignedByte-totalDigits-2 tokoe:valid" result="pass"/><test-case name="2602NISTXML-SV-IV-atomic-unsignedByte-totalDigits-2-1 tokoe:valid" result="pass"/><test-case name="2603NISTXML-SV-IV-atomic-unsignedByte-totalDigits-2-2 tokoe:valid" result="pass"/><test-case name="2604NISTXML-SV-IV-atomic-unsignedByte-totalDigits-2-3 tokoe:valid" result="pass"/><test-case name="2605NISTXML-SV-IV-atomic-unsignedByte-totalDigits-2-4 tokoe:valid" result="pass"/><test-case name="2606NISTXML-SV-IV-atomic-unsignedByte-totalDigits-2-5 tokoe:valid" result="pass"/><test-case name="2607NISTSchema-SV-IV-atomic-unsignedByte-totalDigits-3 tokoe:valid" result="pass"/><test-case name="2608NISTXML-SV-IV-atomic-unsignedByte-totalDigits-3-1 tokoe:valid" result="pass"/><test-case name="2609NISTXML-SV-IV-atomic-unsignedByte-totalDigits-3-2 tokoe:valid" result="pass"/><test-case name="2610NISTXML-SV-IV-atomic-unsignedByte-totalDigits-3-3 tokoe:valid" result="pass"/><test-case name="2611NISTXML-SV-IV-atomic-unsignedByte-totalDigits-3-4 tokoe:valid" result="pass"/><test-case name="2612NISTXML-SV-IV-atomic-unsignedByte-totalDigits-3-5 tokoe:valid" result="pass"/><test-case name="2613NISTSchema-SV-IV-atomic-unsignedByte-pattern-1 tokoe:valid" result="pass"/><test-case name="2614NISTXML-SV-IV-atomic-unsignedByte-pattern-1-1 tokoe:valid" result="pass"/><test-case name="2615NISTXML-SV-IV-atomic-unsignedByte-pattern-1-2 tokoe:valid" result="pass"/><test-case name="2616NISTXML-SV-IV-atomic-unsignedByte-pattern-1-3 tokoe:valid" result="pass"/><test-case name="2617NISTXML-SV-IV-atomic-unsignedByte-pattern-1-4 tokoe:valid" result="pass"/><test-case name="2618NISTXML-SV-IV-atomic-unsignedByte-pattern-1-5 tokoe:valid" result="pass"/><test-case name="2619NISTSchema-SV-IV-atomic-unsignedByte-pattern-2 tokoe:valid" result="pass"/><test-case name="2620NISTXML-SV-IV-atomic-unsignedByte-pattern-2-1 tokoe:valid" result="pass"/><test-case name="2621NISTXML-SV-IV-atomic-unsignedByte-pattern-2-2 tokoe:valid" result="pass"/><test-case name="2622NISTXML-SV-IV-atomic-unsignedByte-pattern-2-3 tokoe:valid" result="pass"/><test-case name="2623NISTXML-SV-IV-atomic-unsignedByte-pattern-2-4 tokoe:valid" result="pass"/><test-case name="2624NISTXML-SV-IV-atomic-unsignedByte-pattern-2-5 tokoe:valid" result="pass"/><test-case name="2625NISTSchema-SV-IV-atomic-unsignedByte-pattern-3 tokoe:valid" result="pass"/><test-case name="2626NISTXML-SV-IV-atomic-unsignedByte-pattern-3-1 tokoe:valid" result="pass"/><test-case name="2627NISTXML-SV-IV-atomic-unsignedByte-pattern-3-2 tokoe:valid" result="pass"/><test-case name="2628NISTXML-SV-IV-atomic-unsignedByte-pattern-3-3 tokoe:valid" result="pass"/><test-case name="2629NISTXML-SV-IV-atomic-unsignedByte-pattern-3-4 tokoe:valid" result="pass"/><test-case name="2630NISTXML-SV-IV-atomic-unsignedByte-pattern-3-5 tokoe:valid" result="pass"/><test-case name="2631NISTSchema-SV-IV-atomic-unsignedByte-pattern-4 tokoe:valid" result="pass"/><test-case name="2632NISTXML-SV-IV-atomic-unsignedByte-pattern-4-1 tokoe:valid" result="pass"/><test-case name="2633NISTXML-SV-IV-atomic-unsignedByte-pattern-4-2 tokoe:valid" result="pass"/><test-case name="2634NISTXML-SV-IV-atomic-unsignedByte-pattern-4-3 tokoe:valid" result="pass"/><test-case name="2635NISTXML-SV-IV-atomic-unsignedByte-pattern-4-4 tokoe:valid" result="pass"/><test-case name="2636NISTXML-SV-IV-atomic-unsignedByte-pattern-4-5 tokoe:valid" result="pass"/><test-case name="2637NISTSchema-SV-IV-atomic-unsignedByte-pattern-5 tokoe:valid" result="pass"/><test-case name="2638NISTXML-SV-IV-atomic-unsignedByte-pattern-5-1 tokoe:valid" result="pass"/><test-case name="2639NISTXML-SV-IV-atomic-unsignedByte-pattern-5-2 tokoe:valid" result="pass"/><test-case name="2640NISTXML-SV-IV-atomic-unsignedByte-pattern-5-3 tokoe:valid" result="pass"/><test-case name="2641NISTXML-SV-IV-atomic-unsignedByte-pattern-5-4 tokoe:valid" result="pass"/><test-case name="2642NISTXML-SV-IV-atomic-unsignedByte-pattern-5-5 tokoe:valid" result="pass"/><test-case name="2643NISTSchema-SV-IV-atomic-unsignedByte-enumeration-1 tokoe:valid" result="pass"/><test-case name="2644NISTXML-SV-IV-atomic-unsignedByte-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="2645NISTXML-SV-IV-atomic-unsignedByte-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="2646NISTXML-SV-IV-atomic-unsignedByte-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="2647NISTXML-SV-IV-atomic-unsignedByte-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="2648NISTXML-SV-IV-atomic-unsignedByte-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="2649NISTSchema-SV-IV-atomic-unsignedByte-enumeration-2 tokoe:valid" result="pass"/><test-case name="2650NISTXML-SV-IV-atomic-unsignedByte-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="2651NISTXML-SV-IV-atomic-unsignedByte-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="2652NISTXML-SV-IV-atomic-unsignedByte-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="2653NISTXML-SV-IV-atomic-unsignedByte-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="2654NISTXML-SV-IV-atomic-unsignedByte-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="2655NISTSchema-SV-IV-atomic-unsignedByte-enumeration-3 tokoe:valid" result="pass"/><test-case name="2656NISTXML-SV-IV-atomic-unsignedByte-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="2657NISTXML-SV-IV-atomic-unsignedByte-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="2658NISTXML-SV-IV-atomic-unsignedByte-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="2659NISTXML-SV-IV-atomic-unsignedByte-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="2660NISTXML-SV-IV-atomic-unsignedByte-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="2661NISTSchema-SV-IV-atomic-unsignedByte-enumeration-4 tokoe:valid" result="pass"/><test-case name="2662NISTXML-SV-IV-atomic-unsignedByte-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="2663NISTXML-SV-IV-atomic-unsignedByte-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="2664NISTXML-SV-IV-atomic-unsignedByte-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="2665NISTXML-SV-IV-atomic-unsignedByte-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="2666NISTXML-SV-IV-atomic-unsignedByte-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="2667NISTSchema-SV-IV-atomic-unsignedByte-enumeration-5 tokoe:valid" result="pass"/><test-case name="2668NISTXML-SV-IV-atomic-unsignedByte-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="2669NISTXML-SV-IV-atomic-unsignedByte-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="2670NISTXML-SV-IV-atomic-unsignedByte-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="2671NISTXML-SV-IV-atomic-unsignedByte-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="2672NISTXML-SV-IV-atomic-unsignedByte-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="2673NISTSchema-SV-IV-atomic-unsignedByte-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="2674NISTXML-SV-IV-atomic-unsignedByte-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="2675NISTXML-SV-IV-atomic-unsignedByte-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="2676NISTXML-SV-IV-atomic-unsignedByte-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="2677NISTXML-SV-IV-atomic-unsignedByte-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="2678NISTXML-SV-IV-atomic-unsignedByte-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="2679NISTSchema-SV-IV-atomic-positiveInteger-minExclusive-1 tokoe:valid" result="pass"/><test-case name="2680NISTXML-SV-IV-atomic-positiveInteger-minExclusive-1-1 tokoe:valid" result="pass"/><test-case name="2681NISTXML-SV-IV-atomic-positiveInteger-minExclusive-1-2 tokoe:valid" result="pass"/><test-case name="2682NISTXML-SV-IV-atomic-positiveInteger-minExclusive-1-3 tokoe:valid" result="pass"/><test-case name="2683NISTXML-SV-IV-atomic-positiveInteger-minExclusive-1-4 tokoe:valid" result="pass"/><test-case name="2684NISTXML-SV-IV-atomic-positiveInteger-minExclusive-1-5 tokoe:valid" result="pass"/><test-case name="2685NISTSchema-SV-IV-atomic-positiveInteger-minExclusive-2 tokoe:valid" result="pass"/><test-case name="2686NISTXML-SV-IV-atomic-positiveInteger-minExclusive-2-1 tokoe:valid" result="pass"/><test-case name="2687NISTXML-SV-IV-atomic-positiveInteger-minExclusive-2-2 tokoe:valid" result="pass"/><test-case name="2688NISTXML-SV-IV-atomic-positiveInteger-minExclusive-2-3 tokoe:valid" result="pass"/><test-case name="2689NISTXML-SV-IV-atomic-positiveInteger-minExclusive-2-4 tokoe:valid" result="pass"/><test-case name="2690NISTXML-SV-IV-atomic-positiveInteger-minExclusive-2-5 tokoe:valid" result="pass"/><test-case name="2691NISTSchema-SV-IV-atomic-positiveInteger-minExclusive-3 tokoe:valid" result="pass"/><test-case name="2692NISTXML-SV-IV-atomic-positiveInteger-minExclusive-3-1 tokoe:valid" result="pass"/><test-case name="2693NISTXML-SV-IV-atomic-positiveInteger-minExclusive-3-2 tokoe:valid" result="pass"/><test-case name="2694NISTXML-SV-IV-atomic-positiveInteger-minExclusive-3-3 tokoe:valid" result="pass"/><test-case name="2695NISTXML-SV-IV-atomic-positiveInteger-minExclusive-3-4 tokoe:valid" result="pass"/><test-case name="2696NISTXML-SV-IV-atomic-positiveInteger-minExclusive-3-5 tokoe:valid" result="pass"/><test-case name="2697NISTSchema-SV-IV-atomic-positiveInteger-minExclusive-4 tokoe:valid" result="pass"/><test-case name="2698NISTXML-SV-IV-atomic-positiveInteger-minExclusive-4-1 tokoe:valid" result="pass"/><test-case name="2699NISTXML-SV-IV-atomic-positiveInteger-minExclusive-4-2 tokoe:valid" result="pass"/><test-case name="2700NISTXML-SV-IV-atomic-positiveInteger-minExclusive-4-3 tokoe:valid" result="pass"/><test-case name="2701NISTXML-SV-IV-atomic-positiveInteger-minExclusive-4-4 tokoe:valid" result="pass"/><test-case name="2702NISTXML-SV-IV-atomic-positiveInteger-minExclusive-4-5 tokoe:valid" result="pass"/><test-case name="2703NISTSchema-SV-IV-atomic-positiveInteger-minExclusive-5 tokoe:valid" result="pass"/><test-case name="2704NISTXML-SV-IV-atomic-positiveInteger-minExclusive-5-1 tokoe:valid" result="pass"/><test-case name="2705NISTSchema-SV-IV-atomic-positiveInteger-minInclusive-1 tokoe:valid" result="pass"/><test-case name="2706NISTXML-SV-IV-atomic-positiveInteger-minInclusive-1-1 tokoe:valid" result="pass"/><test-case name="2707NISTXML-SV-IV-atomic-positiveInteger-minInclusive-1-2 tokoe:valid" result="pass"/><test-case name="2708NISTXML-SV-IV-atomic-positiveInteger-minInclusive-1-3 tokoe:valid" result="pass"/><test-case name="2709NISTXML-SV-IV-atomic-positiveInteger-minInclusive-1-4 tokoe:valid" result="pass"/><test-case name="2710NISTXML-SV-IV-atomic-positiveInteger-minInclusive-1-5 tokoe:valid" result="pass"/><test-case name="2711NISTSchema-SV-IV-atomic-positiveInteger-minInclusive-2 tokoe:valid" result="pass"/><test-case name="2712NISTXML-SV-IV-atomic-positiveInteger-minInclusive-2-1 tokoe:valid" result="pass"/><test-case name="2713NISTXML-SV-IV-atomic-positiveInteger-minInclusive-2-2 tokoe:valid" result="pass"/><test-case name="2714NISTXML-SV-IV-atomic-positiveInteger-minInclusive-2-3 tokoe:valid" result="pass"/><test-case name="2715NISTXML-SV-IV-atomic-positiveInteger-minInclusive-2-4 tokoe:valid" result="pass"/><test-case name="2716NISTXML-SV-IV-atomic-positiveInteger-minInclusive-2-5 tokoe:valid" result="pass"/><test-case name="2717NISTSchema-SV-IV-atomic-positiveInteger-minInclusive-3 tokoe:valid" result="pass"/><test-case name="2718NISTXML-SV-IV-atomic-positiveInteger-minInclusive-3-1 tokoe:valid" result="pass"/><test-case name="2719NISTXML-SV-IV-atomic-positiveInteger-minInclusive-3-2 tokoe:valid" result="pass"/><test-case name="2720NISTXML-SV-IV-atomic-positiveInteger-minInclusive-3-3 tokoe:valid" result="pass"/><test-case name="2721NISTXML-SV-IV-atomic-positiveInteger-minInclusive-3-4 tokoe:valid" result="pass"/><test-case name="2722NISTXML-SV-IV-atomic-positiveInteger-minInclusive-3-5 tokoe:valid" result="pass"/><test-case name="2723NISTSchema-SV-IV-atomic-positiveInteger-minInclusive-4 tokoe:valid" result="pass"/><test-case name="2724NISTXML-SV-IV-atomic-positiveInteger-minInclusive-4-1 tokoe:valid" result="pass"/><test-case name="2725NISTXML-SV-IV-atomic-positiveInteger-minInclusive-4-2 tokoe:valid" result="pass"/><test-case name="2726NISTXML-SV-IV-atomic-positiveInteger-minInclusive-4-3 tokoe:valid" result="pass"/><test-case name="2727NISTXML-SV-IV-atomic-positiveInteger-minInclusive-4-4 tokoe:valid" result="pass"/><test-case name="2728NISTXML-SV-IV-atomic-positiveInteger-minInclusive-4-5 tokoe:valid" result="pass"/><test-case name="2729NISTSchema-SV-IV-atomic-positiveInteger-minInclusive-5 tokoe:valid" result="pass"/><test-case name="2730NISTXML-SV-IV-atomic-positiveInteger-minInclusive-5-1 tokoe:valid" result="pass"/><test-case name="2731NISTSchema-SV-IV-atomic-positiveInteger-maxExclusive-1 tokoe:valid" result="pass"/><test-case name="2732NISTXML-SV-IV-atomic-positiveInteger-maxExclusive-1-1 tokoe:valid" result="pass"/><test-case name="2733NISTSchema-SV-IV-atomic-positiveInteger-maxExclusive-2 tokoe:valid" result="pass"/><test-case name="2734NISTXML-SV-IV-atomic-positiveInteger-maxExclusive-2-1 tokoe:valid" result="pass"/><test-case name="2735NISTXML-SV-IV-atomic-positiveInteger-maxExclusive-2-2 tokoe:valid" result="pass"/><test-case name="2736NISTXML-SV-IV-atomic-positiveInteger-maxExclusive-2-3 tokoe:valid" result="pass"/><test-case name="2737NISTXML-SV-IV-atomic-positiveInteger-maxExclusive-2-4 tokoe:valid" result="pass"/><test-case name="2738NISTXML-SV-IV-atomic-positiveInteger-maxExclusive-2-5 tokoe:valid" result="pass"/><test-case name="2739NISTSchema-SV-IV-atomic-positiveInteger-maxExclusive-3 tokoe:valid" result="pass"/><test-case name="2740NISTXML-SV-IV-atomic-positiveInteger-maxExclusive-3-1 tokoe:valid" result="pass"/><test-case name="2741NISTXML-SV-IV-atomic-positiveInteger-maxExclusive-3-2 tokoe:valid" result="pass"/><test-case name="2742NISTXML-SV-IV-atomic-positiveInteger-maxExclusive-3-3 tokoe:valid" result="pass"/><test-case name="2743NISTXML-SV-IV-atomic-positiveInteger-maxExclusive-3-4 tokoe:valid" result="pass"/><test-case name="2744NISTXML-SV-IV-atomic-positiveInteger-maxExclusive-3-5 tokoe:valid" result="pass"/><test-case name="2745NISTSchema-SV-IV-atomic-positiveInteger-maxExclusive-4 tokoe:valid" result="pass"/><test-case name="2746NISTXML-SV-IV-atomic-positiveInteger-maxExclusive-4-1 tokoe:valid" result="pass"/><test-case name="2747NISTXML-SV-IV-atomic-positiveInteger-maxExclusive-4-2 tokoe:valid" result="pass"/><test-case name="2748NISTXML-SV-IV-atomic-positiveInteger-maxExclusive-4-3 tokoe:valid" result="pass"/><test-case name="2749NISTXML-SV-IV-atomic-positiveInteger-maxExclusive-4-4 tokoe:valid" result="pass"/><test-case name="2750NISTXML-SV-IV-atomic-positiveInteger-maxExclusive-4-5 tokoe:valid" result="pass"/><test-case name="2751NISTSchema-SV-IV-atomic-positiveInteger-maxExclusive-5 tokoe:valid" result="pass"/><test-case name="2752NISTXML-SV-IV-atomic-positiveInteger-maxExclusive-5-1 tokoe:valid" result="pass"/><test-case name="2753NISTXML-SV-IV-atomic-positiveInteger-maxExclusive-5-2 tokoe:valid" result="pass"/><test-case name="2754NISTXML-SV-IV-atomic-positiveInteger-maxExclusive-5-3 tokoe:valid" result="pass"/><test-case name="2755NISTXML-SV-IV-atomic-positiveInteger-maxExclusive-5-4 tokoe:valid" result="pass"/><test-case name="2756NISTXML-SV-IV-atomic-positiveInteger-maxExclusive-5-5 tokoe:valid" result="pass"/><test-case name="2757NISTSchema-SV-IV-atomic-positiveInteger-maxInclusive-1 tokoe:valid" result="pass"/><test-case name="2758NISTXML-SV-IV-atomic-positiveInteger-maxInclusive-1-1 tokoe:valid" result="pass"/><test-case name="2759NISTSchema-SV-IV-atomic-positiveInteger-maxInclusive-2 tokoe:valid" result="pass"/><test-case name="2760NISTXML-SV-IV-atomic-positiveInteger-maxInclusive-2-1 tokoe:valid" result="pass"/><test-case name="2761NISTXML-SV-IV-atomic-positiveInteger-maxInclusive-2-2 tokoe:valid" result="pass"/><test-case name="2762NISTXML-SV-IV-atomic-positiveInteger-maxInclusive-2-3 tokoe:valid" result="pass"/><test-case name="2763NISTXML-SV-IV-atomic-positiveInteger-maxInclusive-2-4 tokoe:valid" result="pass"/><test-case name="2764NISTXML-SV-IV-atomic-positiveInteger-maxInclusive-2-5 tokoe:valid" result="pass"/><test-case name="2765NISTSchema-SV-IV-atomic-positiveInteger-maxInclusive-3 tokoe:valid" result="pass"/><test-case name="2766NISTXML-SV-IV-atomic-positiveInteger-maxInclusive-3-1 tokoe:valid" result="pass"/><test-case name="2767NISTXML-SV-IV-atomic-positiveInteger-maxInclusive-3-2 tokoe:valid" result="pass"/><test-case name="2768NISTXML-SV-IV-atomic-positiveInteger-maxInclusive-3-3 tokoe:valid" result="pass"/><test-case name="2769NISTXML-SV-IV-atomic-positiveInteger-maxInclusive-3-4 tokoe:valid" result="pass"/><test-case name="2770NISTXML-SV-IV-atomic-positiveInteger-maxInclusive-3-5 tokoe:valid" result="pass"/><test-case name="2771NISTSchema-SV-IV-atomic-positiveInteger-maxInclusive-4 tokoe:valid" result="pass"/><test-case name="2772NISTXML-SV-IV-atomic-positiveInteger-maxInclusive-4-1 tokoe:valid" result="pass"/><test-case name="2773NISTXML-SV-IV-atomic-positiveInteger-maxInclusive-4-2 tokoe:valid" result="pass"/><test-case name="2774NISTXML-SV-IV-atomic-positiveInteger-maxInclusive-4-3 tokoe:valid" result="pass"/><test-case name="2775NISTXML-SV-IV-atomic-positiveInteger-maxInclusive-4-4 tokoe:valid" result="pass"/><test-case name="2776NISTXML-SV-IV-atomic-positiveInteger-maxInclusive-4-5 tokoe:valid" result="pass"/><test-case name="2777NISTSchema-SV-IV-atomic-positiveInteger-maxInclusive-5 tokoe:valid" result="pass"/><test-case name="2778NISTXML-SV-IV-atomic-positiveInteger-maxInclusive-5-1 tokoe:valid" result="pass"/><test-case name="2779NISTXML-SV-IV-atomic-positiveInteger-maxInclusive-5-2 tokoe:valid" result="pass"/><test-case name="2780NISTXML-SV-IV-atomic-positiveInteger-maxInclusive-5-3 tokoe:valid" result="pass"/><test-case name="2781NISTXML-SV-IV-atomic-positiveInteger-maxInclusive-5-4 tokoe:valid" result="pass"/><test-case name="2782NISTXML-SV-IV-atomic-positiveInteger-maxInclusive-5-5 tokoe:valid" result="pass"/><test-case name="2783NISTSchema-SV-IV-atomic-positiveInteger-fractionDigits-1 tokoe:valid" result="pass"/><test-case name="2784NISTXML-SV-IV-atomic-positiveInteger-fractionDigits-1-1 tokoe:valid" result="pass"/><test-case name="2785NISTXML-SV-IV-atomic-positiveInteger-fractionDigits-1-2 tokoe:valid" result="pass"/><test-case name="2786NISTXML-SV-IV-atomic-positiveInteger-fractionDigits-1-3 tokoe:valid" result="pass"/><test-case name="2787NISTXML-SV-IV-atomic-positiveInteger-fractionDigits-1-4 tokoe:valid" result="pass"/><test-case name="2788NISTXML-SV-IV-atomic-positiveInteger-fractionDigits-1-5 tokoe:valid" result="pass"/><test-case name="2789NISTSchema-SV-IV-atomic-positiveInteger-totalDigits-1 tokoe:valid" result="pass"/><test-case name="2790NISTXML-SV-IV-atomic-positiveInteger-totalDigits-1-1 tokoe:valid" result="pass"/><test-case name="2791NISTXML-SV-IV-atomic-positiveInteger-totalDigits-1-2 tokoe:valid" result="pass"/><test-case name="2792NISTXML-SV-IV-atomic-positiveInteger-totalDigits-1-3 tokoe:valid" result="pass"/><test-case name="2793NISTXML-SV-IV-atomic-positiveInteger-totalDigits-1-4 tokoe:valid" result="pass"/><test-case name="2794NISTXML-SV-IV-atomic-positiveInteger-totalDigits-1-5 tokoe:valid" result="pass"/><test-case name="2795NISTSchema-SV-IV-atomic-positiveInteger-totalDigits-2 tokoe:valid" result="pass"/><test-case name="2796NISTXML-SV-IV-atomic-positiveInteger-totalDigits-2-1 tokoe:valid" result="pass"/><test-case name="2797NISTXML-SV-IV-atomic-positiveInteger-totalDigits-2-2 tokoe:valid" result="pass"/><test-case name="2798NISTXML-SV-IV-atomic-positiveInteger-totalDigits-2-3 tokoe:valid" result="pass"/><test-case name="2799NISTXML-SV-IV-atomic-positiveInteger-totalDigits-2-4 tokoe:valid" result="pass"/><test-case name="2800NISTXML-SV-IV-atomic-positiveInteger-totalDigits-2-5 tokoe:valid" result="pass"/><test-case name="2801NISTSchema-SV-IV-atomic-positiveInteger-totalDigits-3 tokoe:valid" result="pass"/><test-case name="2802NISTXML-SV-IV-atomic-positiveInteger-totalDigits-3-1 tokoe:valid" result="pass"/><test-case name="2803NISTXML-SV-IV-atomic-positiveInteger-totalDigits-3-2 tokoe:valid" result="pass"/><test-case name="2804NISTXML-SV-IV-atomic-positiveInteger-totalDigits-3-3 tokoe:valid" result="pass"/><test-case name="2805NISTXML-SV-IV-atomic-positiveInteger-totalDigits-3-4 tokoe:valid" result="pass"/><test-case name="2806NISTXML-SV-IV-atomic-positiveInteger-totalDigits-3-5 tokoe:valid" result="pass"/><test-case name="2807NISTSchema-SV-IV-atomic-positiveInteger-totalDigits-4 tokoe:valid" result="pass"/><test-case name="2808NISTXML-SV-IV-atomic-positiveInteger-totalDigits-4-1 tokoe:valid" result="pass"/><test-case name="2809NISTXML-SV-IV-atomic-positiveInteger-totalDigits-4-2 tokoe:valid" result="pass"/><test-case name="2810NISTXML-SV-IV-atomic-positiveInteger-totalDigits-4-3 tokoe:valid" result="pass"/><test-case name="2811NISTXML-SV-IV-atomic-positiveInteger-totalDigits-4-4 tokoe:valid" result="pass"/><test-case name="2812NISTXML-SV-IV-atomic-positiveInteger-totalDigits-4-5 tokoe:valid" result="pass"/><test-case name="2813NISTSchema-SV-IV-atomic-positiveInteger-totalDigits-5 tokoe:valid" result="pass"/><test-case name="2814NISTXML-SV-IV-atomic-positiveInteger-totalDigits-5-1 tokoe:valid" result="pass"/><test-case name="2815NISTXML-SV-IV-atomic-positiveInteger-totalDigits-5-2 tokoe:valid" result="pass"/><test-case name="2816NISTXML-SV-IV-atomic-positiveInteger-totalDigits-5-3 tokoe:valid" result="pass"/><test-case name="2817NISTXML-SV-IV-atomic-positiveInteger-totalDigits-5-4 tokoe:valid" result="pass"/><test-case name="2818NISTXML-SV-IV-atomic-positiveInteger-totalDigits-5-5 tokoe:valid" result="pass"/><test-case name="2819NISTSchema-SV-IV-atomic-positiveInteger-pattern-1 tokoe:valid" result="pass"/><test-case name="2820NISTXML-SV-IV-atomic-positiveInteger-pattern-1-1 tokoe:valid" result="pass"/><test-case name="2821NISTXML-SV-IV-atomic-positiveInteger-pattern-1-2 tokoe:valid" result="pass"/><test-case name="2822NISTXML-SV-IV-atomic-positiveInteger-pattern-1-3 tokoe:valid" result="pass"/><test-case name="2823NISTXML-SV-IV-atomic-positiveInteger-pattern-1-4 tokoe:valid" result="pass"/><test-case name="2824NISTXML-SV-IV-atomic-positiveInteger-pattern-1-5 tokoe:valid" result="pass"/><test-case name="2825NISTSchema-SV-IV-atomic-positiveInteger-pattern-2 tokoe:valid" result="pass"/><test-case name="2826NISTXML-SV-IV-atomic-positiveInteger-pattern-2-1 tokoe:valid" result="pass"/><test-case name="2827NISTXML-SV-IV-atomic-positiveInteger-pattern-2-2 tokoe:valid" result="pass"/><test-case name="2828NISTXML-SV-IV-atomic-positiveInteger-pattern-2-3 tokoe:valid" result="pass"/><test-case name="2829NISTXML-SV-IV-atomic-positiveInteger-pattern-2-4 tokoe:valid" result="pass"/><test-case name="2830NISTXML-SV-IV-atomic-positiveInteger-pattern-2-5 tokoe:valid" result="pass"/><test-case name="2831NISTSchema-SV-IV-atomic-positiveInteger-pattern-3 tokoe:valid" result="pass"/><test-case name="2832NISTXML-SV-IV-atomic-positiveInteger-pattern-3-1 tokoe:valid" result="pass"/><test-case name="2833NISTXML-SV-IV-atomic-positiveInteger-pattern-3-2 tokoe:valid" result="pass"/><test-case name="2834NISTXML-SV-IV-atomic-positiveInteger-pattern-3-3 tokoe:valid" result="pass"/><test-case name="2835NISTXML-SV-IV-atomic-positiveInteger-pattern-3-4 tokoe:valid" result="pass"/><test-case name="2836NISTXML-SV-IV-atomic-positiveInteger-pattern-3-5 tokoe:valid" result="pass"/><test-case name="2837NISTSchema-SV-IV-atomic-positiveInteger-pattern-4 tokoe:valid" result="pass"/><test-case name="2838NISTXML-SV-IV-atomic-positiveInteger-pattern-4-1 tokoe:valid" result="pass"/><test-case name="2839NISTXML-SV-IV-atomic-positiveInteger-pattern-4-2 tokoe:valid" result="pass"/><test-case name="2840NISTXML-SV-IV-atomic-positiveInteger-pattern-4-3 tokoe:valid" result="pass"/><test-case name="2841NISTXML-SV-IV-atomic-positiveInteger-pattern-4-4 tokoe:valid" result="pass"/><test-case name="2842NISTXML-SV-IV-atomic-positiveInteger-pattern-4-5 tokoe:valid" result="pass"/><test-case name="2843NISTSchema-SV-IV-atomic-positiveInteger-pattern-5 tokoe:valid" result="pass"/><test-case name="2844NISTXML-SV-IV-atomic-positiveInteger-pattern-5-1 tokoe:valid" result="pass"/><test-case name="2845NISTXML-SV-IV-atomic-positiveInteger-pattern-5-2 tokoe:valid" result="pass"/><test-case name="2846NISTXML-SV-IV-atomic-positiveInteger-pattern-5-3 tokoe:valid" result="pass"/><test-case name="2847NISTXML-SV-IV-atomic-positiveInteger-pattern-5-4 tokoe:valid" result="pass"/><test-case name="2848NISTXML-SV-IV-atomic-positiveInteger-pattern-5-5 tokoe:valid" result="pass"/><test-case name="2849NISTSchema-SV-IV-atomic-positiveInteger-enumeration-1 tokoe:valid" result="pass"/><test-case name="2850NISTXML-SV-IV-atomic-positiveInteger-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="2851NISTXML-SV-IV-atomic-positiveInteger-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="2852NISTXML-SV-IV-atomic-positiveInteger-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="2853NISTXML-SV-IV-atomic-positiveInteger-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="2854NISTXML-SV-IV-atomic-positiveInteger-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="2855NISTSchema-SV-IV-atomic-positiveInteger-enumeration-2 tokoe:valid" result="pass"/><test-case name="2856NISTXML-SV-IV-atomic-positiveInteger-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="2857NISTXML-SV-IV-atomic-positiveInteger-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="2858NISTXML-SV-IV-atomic-positiveInteger-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="2859NISTXML-SV-IV-atomic-positiveInteger-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="2860NISTXML-SV-IV-atomic-positiveInteger-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="2861NISTSchema-SV-IV-atomic-positiveInteger-enumeration-3 tokoe:valid" result="pass"/><test-case name="2862NISTXML-SV-IV-atomic-positiveInteger-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="2863NISTXML-SV-IV-atomic-positiveInteger-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="2864NISTXML-SV-IV-atomic-positiveInteger-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="2865NISTXML-SV-IV-atomic-positiveInteger-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="2866NISTXML-SV-IV-atomic-positiveInteger-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="2867NISTSchema-SV-IV-atomic-positiveInteger-enumeration-4 tokoe:valid" result="pass"/><test-case name="2868NISTXML-SV-IV-atomic-positiveInteger-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="2869NISTXML-SV-IV-atomic-positiveInteger-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="2870NISTXML-SV-IV-atomic-positiveInteger-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="2871NISTXML-SV-IV-atomic-positiveInteger-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="2872NISTXML-SV-IV-atomic-positiveInteger-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="2873NISTSchema-SV-IV-atomic-positiveInteger-enumeration-5 tokoe:valid" result="pass"/><test-case name="2874NISTXML-SV-IV-atomic-positiveInteger-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="2875NISTXML-SV-IV-atomic-positiveInteger-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="2876NISTXML-SV-IV-atomic-positiveInteger-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="2877NISTXML-SV-IV-atomic-positiveInteger-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="2878NISTXML-SV-IV-atomic-positiveInteger-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="2879NISTSchema-SV-IV-atomic-positiveInteger-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="2880NISTXML-SV-IV-atomic-positiveInteger-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="2881NISTXML-SV-IV-atomic-positiveInteger-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="2882NISTXML-SV-IV-atomic-positiveInteger-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="2883NISTXML-SV-IV-atomic-positiveInteger-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="2884NISTXML-SV-IV-atomic-positiveInteger-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="2885NISTSchema-SV-IV-atomic-double-pattern-1 tokoe:valid" result="pass"/><test-case name="2886NISTXML-SV-IV-atomic-double-pattern-1-1 tokoe:valid" result="pass"/><test-case name="2887NISTXML-SV-IV-atomic-double-pattern-1-2 tokoe:valid" result="pass"/><test-case name="2888NISTXML-SV-IV-atomic-double-pattern-1-3 tokoe:valid" result="pass"/><test-case name="2889NISTXML-SV-IV-atomic-double-pattern-1-4 tokoe:valid" result="pass"/><test-case name="2890NISTXML-SV-IV-atomic-double-pattern-1-5 tokoe:valid" result="pass"/><test-case name="2891NISTSchema-SV-IV-atomic-double-pattern-2 tokoe:valid" result="pass"/><test-case name="2892NISTXML-SV-IV-atomic-double-pattern-2-1 tokoe:valid" result="pass"/><test-case name="2893NISTXML-SV-IV-atomic-double-pattern-2-2 tokoe:valid" result="pass"/><test-case name="2894NISTXML-SV-IV-atomic-double-pattern-2-3 tokoe:valid" result="pass"/><test-case name="2895NISTXML-SV-IV-atomic-double-pattern-2-4 tokoe:valid" result="pass"/><test-case name="2896NISTXML-SV-IV-atomic-double-pattern-2-5 tokoe:valid" result="pass"/><test-case name="2897NISTSchema-SV-IV-atomic-double-pattern-3 tokoe:valid" result="pass"/><test-case name="2898NISTXML-SV-IV-atomic-double-pattern-3-1 tokoe:valid" result="pass"/><test-case name="2899NISTXML-SV-IV-atomic-double-pattern-3-2 tokoe:valid" result="pass"/><test-case name="2900NISTXML-SV-IV-atomic-double-pattern-3-3 tokoe:valid" result="pass"/><test-case name="2901NISTXML-SV-IV-atomic-double-pattern-3-4 tokoe:valid" result="pass"/><test-case name="2902NISTXML-SV-IV-atomic-double-pattern-3-5 tokoe:valid" result="pass"/><test-case name="2903NISTSchema-SV-IV-atomic-double-pattern-4 tokoe:valid" result="pass"/><test-case name="2904NISTXML-SV-IV-atomic-double-pattern-4-1 tokoe:valid" result="pass"/><test-case name="2905NISTXML-SV-IV-atomic-double-pattern-4-2 tokoe:valid" result="pass"/><test-case name="2906NISTXML-SV-IV-atomic-double-pattern-4-3 tokoe:valid" result="pass"/><test-case name="2907NISTXML-SV-IV-atomic-double-pattern-4-4 tokoe:valid" result="pass"/><test-case name="2908NISTXML-SV-IV-atomic-double-pattern-4-5 tokoe:valid" result="pass"/><test-case name="2909NISTSchema-SV-IV-atomic-double-pattern-5 tokoe:valid" result="pass"/><test-case name="2910NISTXML-SV-IV-atomic-double-pattern-5-1 tokoe:valid" result="pass"/><test-case name="2911NISTXML-SV-IV-atomic-double-pattern-5-2 tokoe:valid" result="pass"/><test-case name="2912NISTXML-SV-IV-atomic-double-pattern-5-3 tokoe:valid" result="pass"/><test-case name="2913NISTXML-SV-IV-atomic-double-pattern-5-4 tokoe:valid" result="pass"/><test-case name="2914NISTXML-SV-IV-atomic-double-pattern-5-5 tokoe:valid" result="pass"/><test-case name="2915NISTSchema-SV-IV-atomic-double-enumeration-1 tokoe:valid" result="pass"/><test-case name="2916NISTXML-SV-IV-atomic-double-enumeration-1-1 tokoe:valid" result="fail"/><test-case name="2917NISTXML-SV-IV-atomic-double-enumeration-1-2 tokoe:valid" result="fail"/><test-case name="2918NISTXML-SV-IV-atomic-double-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="2919NISTXML-SV-IV-atomic-double-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="2920NISTXML-SV-IV-atomic-double-enumeration-1-5 tokoe:valid" result="fail"/><test-case name="2921NISTSchema-SV-IV-atomic-double-enumeration-2 tokoe:valid" result="pass"/><test-case name="2922NISTXML-SV-IV-atomic-double-enumeration-2-1 tokoe:valid" result="fail"/><test-case name="2923NISTXML-SV-IV-atomic-double-enumeration-2-2 tokoe:valid" result="fail"/><test-case name="2924NISTXML-SV-IV-atomic-double-enumeration-2-3 tokoe:valid" result="fail"/><test-case name="2925NISTXML-SV-IV-atomic-double-enumeration-2-4 tokoe:valid" result="fail"/><test-case name="2926NISTXML-SV-IV-atomic-double-enumeration-2-5 tokoe:valid" result="fail"/><test-case name="2927NISTSchema-SV-IV-atomic-double-enumeration-3 tokoe:valid" result="pass"/><test-case name="2928NISTXML-SV-IV-atomic-double-enumeration-3-1 tokoe:valid" result="fail"/><test-case name="2929NISTXML-SV-IV-atomic-double-enumeration-3-2 tokoe:valid" result="fail"/><test-case name="2930NISTXML-SV-IV-atomic-double-enumeration-3-3 tokoe:valid" result="fail"/><test-case name="2931NISTXML-SV-IV-atomic-double-enumeration-3-4 tokoe:valid" result="fail"/><test-case name="2932NISTXML-SV-IV-atomic-double-enumeration-3-5 tokoe:valid" result="fail"/><test-case name="2933NISTSchema-SV-IV-atomic-double-enumeration-4 tokoe:valid" result="pass"/><test-case name="2934NISTXML-SV-IV-atomic-double-enumeration-4-1 tokoe:valid" result="fail"/><test-case name="2935NISTXML-SV-IV-atomic-double-enumeration-4-2 tokoe:valid" result="fail"/><test-case name="2936NISTXML-SV-IV-atomic-double-enumeration-4-3 tokoe:valid" result="fail"/><test-case name="2937NISTXML-SV-IV-atomic-double-enumeration-4-4 tokoe:valid" result="fail"/><test-case name="2938NISTXML-SV-IV-atomic-double-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="2939NISTSchema-SV-IV-atomic-double-enumeration-5 tokoe:valid" result="pass"/><test-case name="2940NISTXML-SV-IV-atomic-double-enumeration-5-1 tokoe:valid" result="fail"/><test-case name="2941NISTXML-SV-IV-atomic-double-enumeration-5-2 tokoe:valid" result="fail"/><test-case name="2942NISTXML-SV-IV-atomic-double-enumeration-5-3 tokoe:valid" result="fail"/><test-case name="2943NISTXML-SV-IV-atomic-double-enumeration-5-4 tokoe:valid" result="fail"/><test-case name="2944NISTXML-SV-IV-atomic-double-enumeration-5-5 tokoe:valid" result="fail"/><test-case name="2945NISTSchema-SV-IV-atomic-double-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="2946NISTXML-SV-IV-atomic-double-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="2947NISTXML-SV-IV-atomic-double-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="2948NISTXML-SV-IV-atomic-double-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="2949NISTXML-SV-IV-atomic-double-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="2950NISTXML-SV-IV-atomic-double-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="2951NISTXML-SV-IV-atomic-double-whiteSpace-1-6 tokoe:valid" result="pass"/><test-case name="2952NISTXML-SV-IV-atomic-double-whiteSpace-1-7 tokoe:valid" result="pass"/><test-case name="2953NISTXML-SV-IV-atomic-double-whiteSpace-1-8 tokoe:valid" result="pass"/><test-case name="2954NISTXML-SV-IV-atomic-double-whiteSpace-1-9 tokoe:valid" result="pass"/><test-case name="2955NISTXML-SV-IV-atomic-double-whiteSpace-1-10 tokoe:valid" result="pass"/><test-case name="2956NISTXML-SV-IV-atomic-double-whiteSpace-1-11 tokoe:valid" result="pass"/><test-case name="2957NISTXML-SV-IV-atomic-double-whiteSpace-1-12 tokoe:valid" result="pass"/><test-case name="2958NISTXML-SV-IV-atomic-double-whiteSpace-1-13 tokoe:valid" result="pass"/><test-case name="2959NISTXML-SV-IV-atomic-double-whiteSpace-1-14 tokoe:valid" result="pass"/><test-case name="2960NISTXML-SV-IV-atomic-double-whiteSpace-1-15 tokoe:valid" result="pass"/><test-case name="2961NISTSchema-SV-IV-atomic-float-pattern-1 tokoe:valid" result="pass"/><test-case name="2962NISTXML-SV-IV-atomic-float-pattern-1-1 tokoe:valid" result="pass"/><test-case name="2963NISTXML-SV-IV-atomic-float-pattern-1-2 tokoe:valid" result="pass"/><test-case name="2964NISTXML-SV-IV-atomic-float-pattern-1-3 tokoe:valid" result="pass"/><test-case name="2965NISTXML-SV-IV-atomic-float-pattern-1-4 tokoe:valid" result="pass"/><test-case name="2966NISTXML-SV-IV-atomic-float-pattern-1-5 tokoe:valid" result="pass"/><test-case name="2967NISTSchema-SV-IV-atomic-float-pattern-2 tokoe:valid" result="pass"/><test-case name="2968NISTXML-SV-IV-atomic-float-pattern-2-1 tokoe:valid" result="pass"/><test-case name="2969NISTXML-SV-IV-atomic-float-pattern-2-2 tokoe:valid" result="pass"/><test-case name="2970NISTXML-SV-IV-atomic-float-pattern-2-3 tokoe:valid" result="pass"/><test-case name="2971NISTXML-SV-IV-atomic-float-pattern-2-4 tokoe:valid" result="pass"/><test-case name="2972NISTXML-SV-IV-atomic-float-pattern-2-5 tokoe:valid" result="pass"/><test-case name="2973NISTSchema-SV-IV-atomic-float-pattern-3 tokoe:valid" result="pass"/><test-case name="2974NISTXML-SV-IV-atomic-float-pattern-3-1 tokoe:valid" result="pass"/><test-case name="2975NISTXML-SV-IV-atomic-float-pattern-3-2 tokoe:valid" result="pass"/><test-case name="2976NISTXML-SV-IV-atomic-float-pattern-3-3 tokoe:valid" result="pass"/><test-case name="2977NISTXML-SV-IV-atomic-float-pattern-3-4 tokoe:valid" result="pass"/><test-case name="2978NISTXML-SV-IV-atomic-float-pattern-3-5 tokoe:valid" result="pass"/><test-case name="2979NISTSchema-SV-IV-atomic-float-pattern-4 tokoe:valid" result="pass"/><test-case name="2980NISTXML-SV-IV-atomic-float-pattern-4-1 tokoe:valid" result="pass"/><test-case name="2981NISTXML-SV-IV-atomic-float-pattern-4-2 tokoe:valid" result="pass"/><test-case name="2982NISTXML-SV-IV-atomic-float-pattern-4-3 tokoe:valid" result="pass"/><test-case name="2983NISTXML-SV-IV-atomic-float-pattern-4-4 tokoe:valid" result="pass"/><test-case name="2984NISTXML-SV-IV-atomic-float-pattern-4-5 tokoe:valid" result="pass"/><test-case name="2985NISTSchema-SV-IV-atomic-float-pattern-5 tokoe:valid" result="pass"/><test-case name="2986NISTXML-SV-IV-atomic-float-pattern-5-1 tokoe:valid" result="pass"/><test-case name="2987NISTXML-SV-IV-atomic-float-pattern-5-2 tokoe:valid" result="pass"/><test-case name="2988NISTXML-SV-IV-atomic-float-pattern-5-3 tokoe:valid" result="pass"/><test-case name="2989NISTXML-SV-IV-atomic-float-pattern-5-4 tokoe:valid" result="pass"/><test-case name="2990NISTXML-SV-IV-atomic-float-pattern-5-5 tokoe:valid" result="pass"/><test-case name="2991NISTSchema-SV-IV-atomic-float-enumeration-1 tokoe:valid" result="pass"/><test-case name="2992NISTXML-SV-IV-atomic-float-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="2993NISTXML-SV-IV-atomic-float-enumeration-1-2 tokoe:valid" result="fail"/><test-case name="2994NISTXML-SV-IV-atomic-float-enumeration-1-3 tokoe:valid" result="fail"/><test-case name="2995NISTXML-SV-IV-atomic-float-enumeration-1-4 tokoe:valid" result="fail"/><test-case name="2996NISTXML-SV-IV-atomic-float-enumeration-1-5 tokoe:valid" result="fail"/><test-case name="2997NISTSchema-SV-IV-atomic-float-enumeration-2 tokoe:valid" result="pass"/><test-case name="2998NISTXML-SV-IV-atomic-float-enumeration-2-1 tokoe:valid" result="fail"/><test-case name="2999NISTXML-SV-IV-atomic-float-enumeration-2-2 tokoe:valid" result="fail"/><test-case name="3000NISTXML-SV-IV-atomic-float-enumeration-2-3 tokoe:valid" result="fail"/><test-case name="3001NISTXML-SV-IV-atomic-float-enumeration-2-4 tokoe:valid" result="fail"/><test-case name="3002NISTXML-SV-IV-atomic-float-enumeration-2-5 tokoe:valid" result="fail"/><test-case name="3003NISTSchema-SV-IV-atomic-float-enumeration-3 tokoe:valid" result="pass"/><test-case name="3004NISTXML-SV-IV-atomic-float-enumeration-3-1 tokoe:valid" result="fail"/><test-case name="3005NISTXML-SV-IV-atomic-float-enumeration-3-2 tokoe:valid" result="fail"/><test-case name="3006NISTXML-SV-IV-atomic-float-enumeration-3-3 tokoe:valid" result="fail"/><test-case name="3007NISTXML-SV-IV-atomic-float-enumeration-3-4 tokoe:valid" result="fail"/><test-case name="3008NISTXML-SV-IV-atomic-float-enumeration-3-5 tokoe:valid" result="fail"/><test-case name="3009NISTSchema-SV-IV-atomic-float-enumeration-4 tokoe:valid" result="pass"/><test-case name="3010NISTXML-SV-IV-atomic-float-enumeration-4-1 tokoe:valid" result="fail"/><test-case name="3011NISTXML-SV-IV-atomic-float-enumeration-4-2 tokoe:valid" result="fail"/><test-case name="3012NISTXML-SV-IV-atomic-float-enumeration-4-3 tokoe:valid" result="fail"/><test-case name="3013NISTXML-SV-IV-atomic-float-enumeration-4-4 tokoe:valid" result="fail"/><test-case name="3014NISTXML-SV-IV-atomic-float-enumeration-4-5 tokoe:valid" result="fail"/><test-case name="3015NISTSchema-SV-IV-atomic-float-enumeration-5 tokoe:valid" result="pass"/><test-case name="3016NISTXML-SV-IV-atomic-float-enumeration-5-1 tokoe:valid" result="fail"/><test-case name="3017NISTXML-SV-IV-atomic-float-enumeration-5-2 tokoe:valid" result="fail"/><test-case name="3018NISTXML-SV-IV-atomic-float-enumeration-5-3 tokoe:valid" result="fail"/><test-case name="3019NISTXML-SV-IV-atomic-float-enumeration-5-4 tokoe:valid" result="fail"/><test-case name="3020NISTXML-SV-IV-atomic-float-enumeration-5-5 tokoe:valid" result="fail"/><test-case name="3021NISTSchema-SV-IV-atomic-float-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="3022NISTXML-SV-IV-atomic-float-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="3023NISTXML-SV-IV-atomic-float-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="3024NISTXML-SV-IV-atomic-float-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="3025NISTXML-SV-IV-atomic-float-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="3026NISTXML-SV-IV-atomic-float-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="3027NISTXML-SV-IV-atomic-float-whiteSpace-1-6 tokoe:valid" result="pass"/><test-case name="3028NISTXML-SV-IV-atomic-float-whiteSpace-1-7 tokoe:valid" result="pass"/><test-case name="3029NISTXML-SV-IV-atomic-float-whiteSpace-1-8 tokoe:valid" result="pass"/><test-case name="3030NISTXML-SV-IV-atomic-float-whiteSpace-1-9 tokoe:valid" result="pass"/><test-case name="3031NISTXML-SV-IV-atomic-float-whiteSpace-1-10 tokoe:valid" result="pass"/><test-case name="3032NISTXML-SV-IV-atomic-float-whiteSpace-1-11 tokoe:valid" result="pass"/><test-case name="3033NISTXML-SV-IV-atomic-float-whiteSpace-1-12 tokoe:valid" result="pass"/><test-case name="3034NISTXML-SV-IV-atomic-float-whiteSpace-1-13 tokoe:valid" result="pass"/><test-case name="3035NISTXML-SV-IV-atomic-float-whiteSpace-1-14 tokoe:valid" result="pass"/><test-case name="3036NISTXML-SV-IV-atomic-float-whiteSpace-1-15 tokoe:valid" result="pass"/><test-case name="3037NISTSchema-SV-IV-atomic-duration-minExclusive-1 tokoe:valid" result="pass"/><test-case name="3038NISTXML-SV-IV-atomic-duration-minExclusive-1-1 tokoe:valid" result="pass"/><test-case name="3039NISTXML-SV-IV-atomic-duration-minExclusive-1-2 tokoe:valid" result="pass"/><test-case name="3040NISTXML-SV-IV-atomic-duration-minExclusive-1-3 tokoe:valid" result="pass"/><test-case name="3041NISTXML-SV-IV-atomic-duration-minExclusive-1-4 tokoe:valid" result="pass"/><test-case name="3042NISTXML-SV-IV-atomic-duration-minExclusive-1-5 tokoe:valid" result="pass"/><test-case name="3043NISTSchema-SV-IV-atomic-duration-minExclusive-2 tokoe:valid" result="pass"/><test-case name="3044NISTXML-SV-IV-atomic-duration-minExclusive-2-1 tokoe:valid" result="pass"/><test-case name="3045NISTXML-SV-IV-atomic-duration-minExclusive-2-2 tokoe:valid" result="pass"/><test-case name="3046NISTXML-SV-IV-atomic-duration-minExclusive-2-3 tokoe:valid" result="pass"/><test-case name="3047NISTXML-SV-IV-atomic-duration-minExclusive-2-4 tokoe:valid" result="pass"/><test-case name="3048NISTXML-SV-IV-atomic-duration-minExclusive-2-5 tokoe:valid" result="pass"/><test-case name="3049NISTSchema-SV-IV-atomic-duration-minExclusive-3 tokoe:valid" result="pass"/><test-case name="3050NISTXML-SV-IV-atomic-duration-minExclusive-3-1 tokoe:valid" result="pass"/><test-case name="3051NISTXML-SV-IV-atomic-duration-minExclusive-3-2 tokoe:valid" result="pass"/><test-case name="3052NISTXML-SV-IV-atomic-duration-minExclusive-3-3 tokoe:valid" result="pass"/><test-case name="3053NISTXML-SV-IV-atomic-duration-minExclusive-3-4 tokoe:valid" result="pass"/><test-case name="3054NISTXML-SV-IV-atomic-duration-minExclusive-3-5 tokoe:valid" result="pass"/><test-case name="3055NISTSchema-SV-IV-atomic-duration-minExclusive-4 tokoe:valid" result="pass"/><test-case name="3056NISTXML-SV-IV-atomic-duration-minExclusive-4-1 tokoe:valid" result="pass"/><test-case name="3057NISTXML-SV-IV-atomic-duration-minExclusive-4-2 tokoe:valid" result="pass"/><test-case name="3058NISTXML-SV-IV-atomic-duration-minExclusive-4-3 tokoe:valid" result="pass"/><test-case name="3059NISTXML-SV-IV-atomic-duration-minExclusive-4-4 tokoe:valid" result="pass"/><test-case name="3060NISTXML-SV-IV-atomic-duration-minExclusive-4-5 tokoe:valid" result="pass"/><test-case name="3061NISTSchema-SV-IV-atomic-duration-minExclusive-5 tokoe:valid" result="pass"/><test-case name="3062NISTXML-SV-IV-atomic-duration-minExclusive-5-1 tokoe:valid" result="pass"/><test-case name="3063NISTSchema-SV-IV-atomic-duration-minInclusive-1 tokoe:valid" result="pass"/><test-case name="3064NISTXML-SV-IV-atomic-duration-minInclusive-1-1 tokoe:valid" result="pass"/><test-case name="3065NISTXML-SV-IV-atomic-duration-minInclusive-1-2 tokoe:valid" result="pass"/><test-case name="3066NISTXML-SV-IV-atomic-duration-minInclusive-1-3 tokoe:valid" result="pass"/><test-case name="3067NISTXML-SV-IV-atomic-duration-minInclusive-1-4 tokoe:valid" result="pass"/><test-case name="3068NISTXML-SV-IV-atomic-duration-minInclusive-1-5 tokoe:valid" result="pass"/><test-case name="3069NISTSchema-SV-IV-atomic-duration-minInclusive-2 tokoe:valid" result="pass"/><test-case name="3070NISTXML-SV-IV-atomic-duration-minInclusive-2-1 tokoe:valid" result="pass"/><test-case name="3071NISTXML-SV-IV-atomic-duration-minInclusive-2-2 tokoe:valid" result="pass"/><test-case name="3072NISTXML-SV-IV-atomic-duration-minInclusive-2-3 tokoe:valid" result="pass"/><test-case name="3073NISTXML-SV-IV-atomic-duration-minInclusive-2-4 tokoe:valid" result="pass"/><test-case name="3074NISTXML-SV-IV-atomic-duration-minInclusive-2-5 tokoe:valid" result="pass"/><test-case name="3075NISTSchema-SV-IV-atomic-duration-minInclusive-3 tokoe:valid" result="pass"/><test-case name="3076NISTXML-SV-IV-atomic-duration-minInclusive-3-1 tokoe:valid" result="pass"/><test-case name="3077NISTXML-SV-IV-atomic-duration-minInclusive-3-2 tokoe:valid" result="pass"/><test-case name="3078NISTXML-SV-IV-atomic-duration-minInclusive-3-3 tokoe:valid" result="pass"/><test-case name="3079NISTXML-SV-IV-atomic-duration-minInclusive-3-4 tokoe:valid" result="pass"/><test-case name="3080NISTXML-SV-IV-atomic-duration-minInclusive-3-5 tokoe:valid" result="pass"/><test-case name="3081NISTSchema-SV-IV-atomic-duration-minInclusive-4 tokoe:valid" result="pass"/><test-case name="3082NISTXML-SV-IV-atomic-duration-minInclusive-4-1 tokoe:valid" result="pass"/><test-case name="3083NISTXML-SV-IV-atomic-duration-minInclusive-4-2 tokoe:valid" result="pass"/><test-case name="3084NISTXML-SV-IV-atomic-duration-minInclusive-4-3 tokoe:valid" result="pass"/><test-case name="3085NISTXML-SV-IV-atomic-duration-minInclusive-4-4 tokoe:valid" result="pass"/><test-case name="3086NISTXML-SV-IV-atomic-duration-minInclusive-4-5 tokoe:valid" result="pass"/><test-case name="3087NISTSchema-SV-IV-atomic-duration-minInclusive-5 tokoe:valid" result="pass"/><test-case name="3088NISTXML-SV-IV-atomic-duration-minInclusive-5-1 tokoe:valid" result="pass"/><test-case name="3089NISTSchema-SV-IV-atomic-duration-maxExclusive-1 tokoe:valid" result="pass"/><test-case name="3090NISTXML-SV-IV-atomic-duration-maxExclusive-1-1 tokoe:valid" result="pass"/><test-case name="3091NISTSchema-SV-IV-atomic-duration-maxExclusive-2 tokoe:valid" result="pass"/><test-case name="3092NISTXML-SV-IV-atomic-duration-maxExclusive-2-1 tokoe:valid" result="pass"/><test-case name="3093NISTXML-SV-IV-atomic-duration-maxExclusive-2-2 tokoe:valid" result="pass"/><test-case name="3094NISTXML-SV-IV-atomic-duration-maxExclusive-2-3 tokoe:valid" result="pass"/><test-case name="3095NISTXML-SV-IV-atomic-duration-maxExclusive-2-4 tokoe:valid" result="pass"/><test-case name="3096NISTXML-SV-IV-atomic-duration-maxExclusive-2-5 tokoe:valid" result="pass"/><test-case name="3097NISTSchema-SV-IV-atomic-duration-maxExclusive-3 tokoe:valid" result="pass"/><test-case name="3098NISTXML-SV-IV-atomic-duration-maxExclusive-3-1 tokoe:valid" result="pass"/><test-case name="3099NISTXML-SV-IV-atomic-duration-maxExclusive-3-2 tokoe:valid" result="pass"/><test-case name="3100NISTXML-SV-IV-atomic-duration-maxExclusive-3-3 tokoe:valid" result="pass"/><test-case name="3101NISTXML-SV-IV-atomic-duration-maxExclusive-3-4 tokoe:valid" result="pass"/><test-case name="3102NISTXML-SV-IV-atomic-duration-maxExclusive-3-5 tokoe:valid" result="pass"/><test-case name="3103NISTSchema-SV-IV-atomic-duration-maxExclusive-4 tokoe:valid" result="pass"/><test-case name="3104NISTXML-SV-IV-atomic-duration-maxExclusive-4-1 tokoe:valid" result="pass"/><test-case name="3105NISTXML-SV-IV-atomic-duration-maxExclusive-4-2 tokoe:valid" result="pass"/><test-case name="3106NISTXML-SV-IV-atomic-duration-maxExclusive-4-3 tokoe:valid" result="pass"/><test-case name="3107NISTXML-SV-IV-atomic-duration-maxExclusive-4-4 tokoe:valid" result="pass"/><test-case name="3108NISTXML-SV-IV-atomic-duration-maxExclusive-4-5 tokoe:valid" result="pass"/><test-case name="3109NISTSchema-SV-IV-atomic-duration-maxExclusive-5 tokoe:valid" result="pass"/><test-case name="3110NISTXML-SV-IV-atomic-duration-maxExclusive-5-1 tokoe:valid" result="pass"/><test-case name="3111NISTXML-SV-IV-atomic-duration-maxExclusive-5-2 tokoe:valid" result="pass"/><test-case name="3112NISTXML-SV-IV-atomic-duration-maxExclusive-5-3 tokoe:valid" result="pass"/><test-case name="3113NISTXML-SV-IV-atomic-duration-maxExclusive-5-4 tokoe:valid" result="pass"/><test-case name="3114NISTXML-SV-IV-atomic-duration-maxExclusive-5-5 tokoe:valid" result="pass"/><test-case name="3115NISTSchema-SV-IV-atomic-duration-maxInclusive-1 tokoe:valid" result="pass"/><test-case name="3116NISTXML-SV-IV-atomic-duration-maxInclusive-1-1 tokoe:valid" result="pass"/><test-case name="3117NISTSchema-SV-IV-atomic-duration-maxInclusive-2 tokoe:valid" result="pass"/><test-case name="3118NISTXML-SV-IV-atomic-duration-maxInclusive-2-1 tokoe:valid" result="pass"/><test-case name="3119NISTXML-SV-IV-atomic-duration-maxInclusive-2-2 tokoe:valid" result="pass"/><test-case name="3120NISTXML-SV-IV-atomic-duration-maxInclusive-2-3 tokoe:valid" result="pass"/><test-case name="3121NISTXML-SV-IV-atomic-duration-maxInclusive-2-4 tokoe:valid" result="pass"/><test-case name="3122NISTXML-SV-IV-atomic-duration-maxInclusive-2-5 tokoe:valid" result="pass"/><test-case name="3123NISTSchema-SV-IV-atomic-duration-maxInclusive-3 tokoe:valid" result="pass"/><test-case name="3124NISTXML-SV-IV-atomic-duration-maxInclusive-3-1 tokoe:valid" result="pass"/><test-case name="3125NISTXML-SV-IV-atomic-duration-maxInclusive-3-2 tokoe:valid" result="pass"/><test-case name="3126NISTXML-SV-IV-atomic-duration-maxInclusive-3-3 tokoe:valid" result="pass"/><test-case name="3127NISTXML-SV-IV-atomic-duration-maxInclusive-3-4 tokoe:valid" result="pass"/><test-case name="3128NISTXML-SV-IV-atomic-duration-maxInclusive-3-5 tokoe:valid" result="pass"/><test-case name="3129NISTSchema-SV-IV-atomic-duration-maxInclusive-4 tokoe:valid" result="pass"/><test-case name="3130NISTXML-SV-IV-atomic-duration-maxInclusive-4-1 tokoe:valid" result="pass"/><test-case name="3131NISTXML-SV-IV-atomic-duration-maxInclusive-4-2 tokoe:valid" result="pass"/><test-case name="3132NISTXML-SV-IV-atomic-duration-maxInclusive-4-3 tokoe:valid" result="pass"/><test-case name="3133NISTXML-SV-IV-atomic-duration-maxInclusive-4-4 tokoe:valid" result="pass"/><test-case name="3134NISTXML-SV-IV-atomic-duration-maxInclusive-4-5 tokoe:valid" result="pass"/><test-case name="3135NISTSchema-SV-IV-atomic-duration-maxInclusive-5 tokoe:valid" result="pass"/><test-case name="3136NISTXML-SV-IV-atomic-duration-maxInclusive-5-1 tokoe:valid" result="pass"/><test-case name="3137NISTXML-SV-IV-atomic-duration-maxInclusive-5-2 tokoe:valid" result="pass"/><test-case name="3138NISTXML-SV-IV-atomic-duration-maxInclusive-5-3 tokoe:valid" result="pass"/><test-case name="3139NISTXML-SV-IV-atomic-duration-maxInclusive-5-4 tokoe:valid" result="pass"/><test-case name="3140NISTXML-SV-IV-atomic-duration-maxInclusive-5-5 tokoe:valid" result="pass"/><test-case name="3141NISTSchema-SV-IV-atomic-duration-pattern-1 tokoe:valid" result="pass"/><test-case name="3142NISTXML-SV-IV-atomic-duration-pattern-1-1 tokoe:valid" result="pass"/><test-case name="3143NISTXML-SV-IV-atomic-duration-pattern-1-2 tokoe:valid" result="pass"/><test-case name="3144NISTXML-SV-IV-atomic-duration-pattern-1-3 tokoe:valid" result="pass"/><test-case name="3145NISTXML-SV-IV-atomic-duration-pattern-1-4 tokoe:valid" result="pass"/><test-case name="3146NISTXML-SV-IV-atomic-duration-pattern-1-5 tokoe:valid" result="pass"/><test-case name="3147NISTSchema-SV-IV-atomic-duration-pattern-2 tokoe:valid" result="pass"/><test-case name="3148NISTXML-SV-IV-atomic-duration-pattern-2-1 tokoe:valid" result="pass"/><test-case name="3149NISTXML-SV-IV-atomic-duration-pattern-2-2 tokoe:valid" result="pass"/><test-case name="3150NISTXML-SV-IV-atomic-duration-pattern-2-3 tokoe:valid" result="pass"/><test-case name="3151NISTXML-SV-IV-atomic-duration-pattern-2-4 tokoe:valid" result="pass"/><test-case name="3152NISTXML-SV-IV-atomic-duration-pattern-2-5 tokoe:valid" result="pass"/><test-case name="3153NISTSchema-SV-IV-atomic-duration-pattern-3 tokoe:valid" result="pass"/><test-case name="3154NISTXML-SV-IV-atomic-duration-pattern-3-1 tokoe:valid" result="pass"/><test-case name="3155NISTXML-SV-IV-atomic-duration-pattern-3-2 tokoe:valid" result="pass"/><test-case name="3156NISTXML-SV-IV-atomic-duration-pattern-3-3 tokoe:valid" result="pass"/><test-case name="3157NISTXML-SV-IV-atomic-duration-pattern-3-4 tokoe:valid" result="pass"/><test-case name="3158NISTXML-SV-IV-atomic-duration-pattern-3-5 tokoe:valid" result="pass"/><test-case name="3159NISTSchema-SV-IV-atomic-duration-pattern-4 tokoe:valid" result="pass"/><test-case name="3160NISTXML-SV-IV-atomic-duration-pattern-4-1 tokoe:valid" result="pass"/><test-case name="3161NISTXML-SV-IV-atomic-duration-pattern-4-2 tokoe:valid" result="pass"/><test-case name="3162NISTXML-SV-IV-atomic-duration-pattern-4-3 tokoe:valid" result="pass"/><test-case name="3163NISTXML-SV-IV-atomic-duration-pattern-4-4 tokoe:valid" result="pass"/><test-case name="3164NISTXML-SV-IV-atomic-duration-pattern-4-5 tokoe:valid" result="pass"/><test-case name="3165NISTSchema-SV-IV-atomic-duration-pattern-5 tokoe:valid" result="pass"/><test-case name="3166NISTXML-SV-IV-atomic-duration-pattern-5-1 tokoe:valid" result="pass"/><test-case name="3167NISTXML-SV-IV-atomic-duration-pattern-5-2 tokoe:valid" result="pass"/><test-case name="3168NISTXML-SV-IV-atomic-duration-pattern-5-3 tokoe:valid" result="pass"/><test-case name="3169NISTXML-SV-IV-atomic-duration-pattern-5-4 tokoe:valid" result="pass"/><test-case name="3170NISTXML-SV-IV-atomic-duration-pattern-5-5 tokoe:valid" result="pass"/><test-case name="3171NISTSchema-SV-IV-atomic-duration-enumeration-1 tokoe:valid" result="pass"/><test-case name="3172NISTXML-SV-IV-atomic-duration-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="3173NISTXML-SV-IV-atomic-duration-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="3174NISTXML-SV-IV-atomic-duration-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="3175NISTXML-SV-IV-atomic-duration-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="3176NISTXML-SV-IV-atomic-duration-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="3177NISTSchema-SV-IV-atomic-duration-enumeration-2 tokoe:valid" result="pass"/><test-case name="3178NISTXML-SV-IV-atomic-duration-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="3179NISTXML-SV-IV-atomic-duration-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="3180NISTXML-SV-IV-atomic-duration-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="3181NISTXML-SV-IV-atomic-duration-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="3182NISTXML-SV-IV-atomic-duration-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="3183NISTSchema-SV-IV-atomic-duration-enumeration-3 tokoe:valid" result="pass"/><test-case name="3184NISTXML-SV-IV-atomic-duration-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="3185NISTXML-SV-IV-atomic-duration-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="3186NISTXML-SV-IV-atomic-duration-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="3187NISTXML-SV-IV-atomic-duration-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="3188NISTXML-SV-IV-atomic-duration-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="3189NISTSchema-SV-IV-atomic-duration-enumeration-4 tokoe:valid" result="pass"/><test-case name="3190NISTXML-SV-IV-atomic-duration-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="3191NISTXML-SV-IV-atomic-duration-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="3192NISTXML-SV-IV-atomic-duration-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="3193NISTXML-SV-IV-atomic-duration-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="3194NISTXML-SV-IV-atomic-duration-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="3195NISTSchema-SV-IV-atomic-duration-enumeration-5 tokoe:valid" result="pass"/><test-case name="3196NISTXML-SV-IV-atomic-duration-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="3197NISTXML-SV-IV-atomic-duration-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="3198NISTXML-SV-IV-atomic-duration-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="3199NISTXML-SV-IV-atomic-duration-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="3200NISTXML-SV-IV-atomic-duration-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="3201NISTSchema-SV-IV-atomic-duration-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="3202NISTXML-SV-IV-atomic-duration-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="3203NISTXML-SV-IV-atomic-duration-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="3204NISTXML-SV-IV-atomic-duration-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="3205NISTXML-SV-IV-atomic-duration-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="3206NISTXML-SV-IV-atomic-duration-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="3207NISTSchema-SV-IV-atomic-dateTime-minExclusive-1 tokoe:valid" result="pass"/><test-case name="3208NISTXML-SV-IV-atomic-dateTime-minExclusive-1-1 tokoe:valid" result="pass"/><test-case name="3209NISTXML-SV-IV-atomic-dateTime-minExclusive-1-2 tokoe:valid" result="pass"/><test-case name="3210NISTXML-SV-IV-atomic-dateTime-minExclusive-1-3 tokoe:valid" result="pass"/><test-case name="3211NISTXML-SV-IV-atomic-dateTime-minExclusive-1-4 tokoe:valid" result="pass"/><test-case name="3212NISTXML-SV-IV-atomic-dateTime-minExclusive-1-5 tokoe:valid" result="pass"/><test-case name="3213NISTSchema-SV-IV-atomic-dateTime-minExclusive-2 tokoe:valid" result="pass"/><test-case name="3214NISTXML-SV-IV-atomic-dateTime-minExclusive-2-1 tokoe:valid" result="pass"/><test-case name="3215NISTXML-SV-IV-atomic-dateTime-minExclusive-2-2 tokoe:valid" result="pass"/><test-case name="3216NISTXML-SV-IV-atomic-dateTime-minExclusive-2-3 tokoe:valid" result="pass"/><test-case name="3217NISTXML-SV-IV-atomic-dateTime-minExclusive-2-4 tokoe:valid" result="pass"/><test-case name="3218NISTXML-SV-IV-atomic-dateTime-minExclusive-2-5 tokoe:valid" result="pass"/><test-case name="3219NISTSchema-SV-IV-atomic-dateTime-minExclusive-3 tokoe:valid" result="pass"/><test-case name="3220NISTXML-SV-IV-atomic-dateTime-minExclusive-3-1 tokoe:valid" result="pass"/><test-case name="3221NISTXML-SV-IV-atomic-dateTime-minExclusive-3-2 tokoe:valid" result="pass"/><test-case name="3222NISTXML-SV-IV-atomic-dateTime-minExclusive-3-3 tokoe:valid" result="pass"/><test-case name="3223NISTXML-SV-IV-atomic-dateTime-minExclusive-3-4 tokoe:valid" result="pass"/><test-case name="3224NISTXML-SV-IV-atomic-dateTime-minExclusive-3-5 tokoe:valid" result="pass"/><test-case name="3225NISTSchema-SV-IV-atomic-dateTime-minExclusive-4 tokoe:valid" result="pass"/><test-case name="3226NISTXML-SV-IV-atomic-dateTime-minExclusive-4-1 tokoe:valid" result="pass"/><test-case name="3227NISTXML-SV-IV-atomic-dateTime-minExclusive-4-2 tokoe:valid" result="pass"/><test-case name="3228NISTXML-SV-IV-atomic-dateTime-minExclusive-4-3 tokoe:valid" result="pass"/><test-case name="3229NISTXML-SV-IV-atomic-dateTime-minExclusive-4-4 tokoe:valid" result="pass"/><test-case name="3230NISTXML-SV-IV-atomic-dateTime-minExclusive-4-5 tokoe:valid" result="pass"/><test-case name="3231NISTSchema-SV-IV-atomic-dateTime-minExclusive-5 tokoe:valid" result="pass"/><test-case name="3232NISTXML-SV-IV-atomic-dateTime-minExclusive-5-1 tokoe:valid" result="pass"/><test-case name="3233NISTSchema-SV-IV-atomic-dateTime-minInclusive-1 tokoe:valid" result="pass"/><test-case name="3234NISTXML-SV-IV-atomic-dateTime-minInclusive-1-1 tokoe:valid" result="pass"/><test-case name="3235NISTXML-SV-IV-atomic-dateTime-minInclusive-1-2 tokoe:valid" result="pass"/><test-case name="3236NISTXML-SV-IV-atomic-dateTime-minInclusive-1-3 tokoe:valid" result="pass"/><test-case name="3237NISTXML-SV-IV-atomic-dateTime-minInclusive-1-4 tokoe:valid" result="pass"/><test-case name="3238NISTXML-SV-IV-atomic-dateTime-minInclusive-1-5 tokoe:valid" result="pass"/><test-case name="3239NISTSchema-SV-IV-atomic-dateTime-minInclusive-2 tokoe:valid" result="pass"/><test-case name="3240NISTXML-SV-IV-atomic-dateTime-minInclusive-2-1 tokoe:valid" result="pass"/><test-case name="3241NISTXML-SV-IV-atomic-dateTime-minInclusive-2-2 tokoe:valid" result="pass"/><test-case name="3242NISTXML-SV-IV-atomic-dateTime-minInclusive-2-3 tokoe:valid" result="pass"/><test-case name="3243NISTXML-SV-IV-atomic-dateTime-minInclusive-2-4 tokoe:valid" result="pass"/><test-case name="3244NISTXML-SV-IV-atomic-dateTime-minInclusive-2-5 tokoe:valid" result="pass"/><test-case name="3245NISTSchema-SV-IV-atomic-dateTime-minInclusive-3 tokoe:valid" result="pass"/><test-case name="3246NISTXML-SV-IV-atomic-dateTime-minInclusive-3-1 tokoe:valid" result="pass"/><test-case name="3247NISTXML-SV-IV-atomic-dateTime-minInclusive-3-2 tokoe:valid" result="pass"/><test-case name="3248NISTXML-SV-IV-atomic-dateTime-minInclusive-3-3 tokoe:valid" result="pass"/><test-case name="3249NISTXML-SV-IV-atomic-dateTime-minInclusive-3-4 tokoe:valid" result="pass"/><test-case name="3250NISTXML-SV-IV-atomic-dateTime-minInclusive-3-5 tokoe:valid" result="pass"/><test-case name="3251NISTSchema-SV-IV-atomic-dateTime-minInclusive-4 tokoe:valid" result="pass"/><test-case name="3252NISTXML-SV-IV-atomic-dateTime-minInclusive-4-1 tokoe:valid" result="pass"/><test-case name="3253NISTXML-SV-IV-atomic-dateTime-minInclusive-4-2 tokoe:valid" result="pass"/><test-case name="3254NISTXML-SV-IV-atomic-dateTime-minInclusive-4-3 tokoe:valid" result="pass"/><test-case name="3255NISTXML-SV-IV-atomic-dateTime-minInclusive-4-4 tokoe:valid" result="pass"/><test-case name="3256NISTXML-SV-IV-atomic-dateTime-minInclusive-4-5 tokoe:valid" result="pass"/><test-case name="3257NISTSchema-SV-IV-atomic-dateTime-minInclusive-5 tokoe:valid" result="pass"/><test-case name="3258NISTXML-SV-IV-atomic-dateTime-minInclusive-5-1 tokoe:valid" result="pass"/><test-case name="3259NISTSchema-SV-IV-atomic-dateTime-maxExclusive-1 tokoe:valid" result="pass"/><test-case name="3260NISTXML-SV-IV-atomic-dateTime-maxExclusive-1-1 tokoe:valid" result="pass"/><test-case name="3261NISTSchema-SV-IV-atomic-dateTime-maxExclusive-2 tokoe:valid" result="pass"/><test-case name="3262NISTXML-SV-IV-atomic-dateTime-maxExclusive-2-1 tokoe:valid" result="pass"/><test-case name="3263NISTXML-SV-IV-atomic-dateTime-maxExclusive-2-2 tokoe:valid" result="pass"/><test-case name="3264NISTXML-SV-IV-atomic-dateTime-maxExclusive-2-3 tokoe:valid" result="pass"/><test-case name="3265NISTXML-SV-IV-atomic-dateTime-maxExclusive-2-4 tokoe:valid" result="pass"/><test-case name="3266NISTXML-SV-IV-atomic-dateTime-maxExclusive-2-5 tokoe:valid" result="pass"/><test-case name="3267NISTSchema-SV-IV-atomic-dateTime-maxExclusive-3 tokoe:valid" result="pass"/><test-case name="3268NISTXML-SV-IV-atomic-dateTime-maxExclusive-3-1 tokoe:valid" result="pass"/><test-case name="3269NISTXML-SV-IV-atomic-dateTime-maxExclusive-3-2 tokoe:valid" result="pass"/><test-case name="3270NISTXML-SV-IV-atomic-dateTime-maxExclusive-3-3 tokoe:valid" result="pass"/><test-case name="3271NISTXML-SV-IV-atomic-dateTime-maxExclusive-3-4 tokoe:valid" result="pass"/><test-case name="3272NISTXML-SV-IV-atomic-dateTime-maxExclusive-3-5 tokoe:valid" result="pass"/><test-case name="3273NISTSchema-SV-IV-atomic-dateTime-maxExclusive-4 tokoe:valid" result="pass"/><test-case name="3274NISTXML-SV-IV-atomic-dateTime-maxExclusive-4-1 tokoe:valid" result="pass"/><test-case name="3275NISTXML-SV-IV-atomic-dateTime-maxExclusive-4-2 tokoe:valid" result="pass"/><test-case name="3276NISTXML-SV-IV-atomic-dateTime-maxExclusive-4-3 tokoe:valid" result="pass"/><test-case name="3277NISTXML-SV-IV-atomic-dateTime-maxExclusive-4-4 tokoe:valid" result="pass"/><test-case name="3278NISTXML-SV-IV-atomic-dateTime-maxExclusive-4-5 tokoe:valid" result="pass"/><test-case name="3279NISTSchema-SV-IV-atomic-dateTime-maxExclusive-5 tokoe:valid" result="pass"/><test-case name="3280NISTXML-SV-IV-atomic-dateTime-maxExclusive-5-1 tokoe:valid" result="pass"/><test-case name="3281NISTXML-SV-IV-atomic-dateTime-maxExclusive-5-2 tokoe:valid" result="pass"/><test-case name="3282NISTXML-SV-IV-atomic-dateTime-maxExclusive-5-3 tokoe:valid" result="pass"/><test-case name="3283NISTXML-SV-IV-atomic-dateTime-maxExclusive-5-4 tokoe:valid" result="pass"/><test-case name="3284NISTXML-SV-IV-atomic-dateTime-maxExclusive-5-5 tokoe:valid" result="pass"/><test-case name="3285NISTSchema-SV-IV-atomic-dateTime-maxInclusive-1 tokoe:valid" result="pass"/><test-case name="3286NISTXML-SV-IV-atomic-dateTime-maxInclusive-1-1 tokoe:valid" result="pass"/><test-case name="3287NISTSchema-SV-IV-atomic-dateTime-maxInclusive-2 tokoe:valid" result="pass"/><test-case name="3288NISTXML-SV-IV-atomic-dateTime-maxInclusive-2-1 tokoe:valid" result="pass"/><test-case name="3289NISTXML-SV-IV-atomic-dateTime-maxInclusive-2-2 tokoe:valid" result="pass"/><test-case name="3290NISTXML-SV-IV-atomic-dateTime-maxInclusive-2-3 tokoe:valid" result="pass"/><test-case name="3291NISTXML-SV-IV-atomic-dateTime-maxInclusive-2-4 tokoe:valid" result="pass"/><test-case name="3292NISTXML-SV-IV-atomic-dateTime-maxInclusive-2-5 tokoe:valid" result="pass"/><test-case name="3293NISTSchema-SV-IV-atomic-dateTime-maxInclusive-3 tokoe:valid" result="pass"/><test-case name="3294NISTXML-SV-IV-atomic-dateTime-maxInclusive-3-1 tokoe:valid" result="pass"/><test-case name="3295NISTXML-SV-IV-atomic-dateTime-maxInclusive-3-2 tokoe:valid" result="pass"/><test-case name="3296NISTXML-SV-IV-atomic-dateTime-maxInclusive-3-3 tokoe:valid" result="pass"/><test-case name="3297NISTXML-SV-IV-atomic-dateTime-maxInclusive-3-4 tokoe:valid" result="pass"/><test-case name="3298NISTXML-SV-IV-atomic-dateTime-maxInclusive-3-5 tokoe:valid" result="pass"/><test-case name="3299NISTSchema-SV-IV-atomic-dateTime-maxInclusive-4 tokoe:valid" result="pass"/><test-case name="3300NISTXML-SV-IV-atomic-dateTime-maxInclusive-4-1 tokoe:valid" result="pass"/><test-case name="3301NISTXML-SV-IV-atomic-dateTime-maxInclusive-4-2 tokoe:valid" result="pass"/><test-case name="3302NISTXML-SV-IV-atomic-dateTime-maxInclusive-4-3 tokoe:valid" result="pass"/><test-case name="3303NISTXML-SV-IV-atomic-dateTime-maxInclusive-4-4 tokoe:valid" result="pass"/><test-case name="3304NISTXML-SV-IV-atomic-dateTime-maxInclusive-4-5 tokoe:valid" result="pass"/><test-case name="3305NISTSchema-SV-IV-atomic-dateTime-maxInclusive-5 tokoe:valid" result="pass"/><test-case name="3306NISTXML-SV-IV-atomic-dateTime-maxInclusive-5-1 tokoe:valid" result="pass"/><test-case name="3307NISTXML-SV-IV-atomic-dateTime-maxInclusive-5-2 tokoe:valid" result="pass"/><test-case name="3308NISTXML-SV-IV-atomic-dateTime-maxInclusive-5-3 tokoe:valid" result="pass"/><test-case name="3309NISTXML-SV-IV-atomic-dateTime-maxInclusive-5-4 tokoe:valid" result="pass"/><test-case name="3310NISTXML-SV-IV-atomic-dateTime-maxInclusive-5-5 tokoe:valid" result="pass"/><test-case name="3311NISTSchema-SV-IV-atomic-dateTime-pattern-1 tokoe:valid" result="pass"/><test-case name="3312NISTXML-SV-IV-atomic-dateTime-pattern-1-1 tokoe:valid" result="pass"/><test-case name="3313NISTXML-SV-IV-atomic-dateTime-pattern-1-2 tokoe:valid" result="pass"/><test-case name="3314NISTXML-SV-IV-atomic-dateTime-pattern-1-3 tokoe:valid" result="pass"/><test-case name="3315NISTXML-SV-IV-atomic-dateTime-pattern-1-4 tokoe:valid" result="pass"/><test-case name="3316NISTXML-SV-IV-atomic-dateTime-pattern-1-5 tokoe:valid" result="pass"/><test-case name="3317NISTSchema-SV-IV-atomic-dateTime-pattern-2 tokoe:valid" result="pass"/><test-case name="3318NISTXML-SV-IV-atomic-dateTime-pattern-2-1 tokoe:valid" result="pass"/><test-case name="3319NISTXML-SV-IV-atomic-dateTime-pattern-2-2 tokoe:valid" result="pass"/><test-case name="3320NISTXML-SV-IV-atomic-dateTime-pattern-2-3 tokoe:valid" result="pass"/><test-case name="3321NISTXML-SV-IV-atomic-dateTime-pattern-2-4 tokoe:valid" result="pass"/><test-case name="3322NISTXML-SV-IV-atomic-dateTime-pattern-2-5 tokoe:valid" result="pass"/><test-case name="3323NISTSchema-SV-IV-atomic-dateTime-pattern-3 tokoe:valid" result="pass"/><test-case name="3324NISTXML-SV-IV-atomic-dateTime-pattern-3-1 tokoe:valid" result="pass"/><test-case name="3325NISTXML-SV-IV-atomic-dateTime-pattern-3-2 tokoe:valid" result="pass"/><test-case name="3326NISTXML-SV-IV-atomic-dateTime-pattern-3-3 tokoe:valid" result="pass"/><test-case name="3327NISTXML-SV-IV-atomic-dateTime-pattern-3-4 tokoe:valid" result="pass"/><test-case name="3328NISTXML-SV-IV-atomic-dateTime-pattern-3-5 tokoe:valid" result="pass"/><test-case name="3329NISTSchema-SV-IV-atomic-dateTime-pattern-4 tokoe:valid" result="pass"/><test-case name="3330NISTXML-SV-IV-atomic-dateTime-pattern-4-1 tokoe:valid" result="pass"/><test-case name="3331NISTXML-SV-IV-atomic-dateTime-pattern-4-2 tokoe:valid" result="pass"/><test-case name="3332NISTXML-SV-IV-atomic-dateTime-pattern-4-3 tokoe:valid" result="pass"/><test-case name="3333NISTXML-SV-IV-atomic-dateTime-pattern-4-4 tokoe:valid" result="pass"/><test-case name="3334NISTXML-SV-IV-atomic-dateTime-pattern-4-5 tokoe:valid" result="pass"/><test-case name="3335NISTSchema-SV-IV-atomic-dateTime-pattern-5 tokoe:valid" result="pass"/><test-case name="3336NISTXML-SV-IV-atomic-dateTime-pattern-5-1 tokoe:valid" result="pass"/><test-case name="3337NISTXML-SV-IV-atomic-dateTime-pattern-5-2 tokoe:valid" result="pass"/><test-case name="3338NISTXML-SV-IV-atomic-dateTime-pattern-5-3 tokoe:valid" result="pass"/><test-case name="3339NISTXML-SV-IV-atomic-dateTime-pattern-5-4 tokoe:valid" result="pass"/><test-case name="3340NISTXML-SV-IV-atomic-dateTime-pattern-5-5 tokoe:valid" result="pass"/><test-case name="3341NISTSchema-SV-IV-atomic-dateTime-enumeration-1 tokoe:valid" result="pass"/><test-case name="3342NISTXML-SV-IV-atomic-dateTime-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="3343NISTXML-SV-IV-atomic-dateTime-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="3344NISTXML-SV-IV-atomic-dateTime-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="3345NISTXML-SV-IV-atomic-dateTime-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="3346NISTXML-SV-IV-atomic-dateTime-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="3347NISTSchema-SV-IV-atomic-dateTime-enumeration-2 tokoe:valid" result="pass"/><test-case name="3348NISTXML-SV-IV-atomic-dateTime-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="3349NISTXML-SV-IV-atomic-dateTime-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="3350NISTXML-SV-IV-atomic-dateTime-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="3351NISTXML-SV-IV-atomic-dateTime-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="3352NISTXML-SV-IV-atomic-dateTime-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="3353NISTSchema-SV-IV-atomic-dateTime-enumeration-3 tokoe:valid" result="pass"/><test-case name="3354NISTXML-SV-IV-atomic-dateTime-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="3355NISTXML-SV-IV-atomic-dateTime-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="3356NISTXML-SV-IV-atomic-dateTime-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="3357NISTXML-SV-IV-atomic-dateTime-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="3358NISTXML-SV-IV-atomic-dateTime-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="3359NISTSchema-SV-IV-atomic-dateTime-enumeration-4 tokoe:valid" result="pass"/><test-case name="3360NISTXML-SV-IV-atomic-dateTime-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="3361NISTXML-SV-IV-atomic-dateTime-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="3362NISTXML-SV-IV-atomic-dateTime-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="3363NISTXML-SV-IV-atomic-dateTime-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="3364NISTXML-SV-IV-atomic-dateTime-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="3365NISTSchema-SV-IV-atomic-dateTime-enumeration-5 tokoe:valid" result="pass"/><test-case name="3366NISTXML-SV-IV-atomic-dateTime-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="3367NISTXML-SV-IV-atomic-dateTime-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="3368NISTXML-SV-IV-atomic-dateTime-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="3369NISTXML-SV-IV-atomic-dateTime-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="3370NISTXML-SV-IV-atomic-dateTime-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="3371NISTSchema-SV-IV-atomic-dateTime-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="3372NISTXML-SV-IV-atomic-dateTime-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="3373NISTXML-SV-IV-atomic-dateTime-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="3374NISTXML-SV-IV-atomic-dateTime-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="3375NISTXML-SV-IV-atomic-dateTime-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="3376NISTXML-SV-IV-atomic-dateTime-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="3377NISTSchema-SV-IV-atomic-time-minExclusive-1 tokoe:valid" result="pass"/><test-case name="3378NISTXML-SV-IV-atomic-time-minExclusive-1-1 tokoe:valid" result="pass"/><test-case name="3379NISTXML-SV-IV-atomic-time-minExclusive-1-2 tokoe:valid" result="pass"/><test-case name="3380NISTXML-SV-IV-atomic-time-minExclusive-1-3 tokoe:valid" result="pass"/><test-case name="3381NISTXML-SV-IV-atomic-time-minExclusive-1-4 tokoe:valid" result="pass"/><test-case name="3382NISTXML-SV-IV-atomic-time-minExclusive-1-5 tokoe:valid" result="pass"/><test-case name="3383NISTSchema-SV-IV-atomic-time-minExclusive-2 tokoe:valid" result="pass"/><test-case name="3384NISTXML-SV-IV-atomic-time-minExclusive-2-1 tokoe:valid" result="pass"/><test-case name="3385NISTXML-SV-IV-atomic-time-minExclusive-2-2 tokoe:valid" result="pass"/><test-case name="3386NISTXML-SV-IV-atomic-time-minExclusive-2-3 tokoe:valid" result="pass"/><test-case name="3387NISTXML-SV-IV-atomic-time-minExclusive-2-4 tokoe:valid" result="pass"/><test-case name="3388NISTXML-SV-IV-atomic-time-minExclusive-2-5 tokoe:valid" result="pass"/><test-case name="3389NISTSchema-SV-IV-atomic-time-minExclusive-3 tokoe:valid" result="pass"/><test-case name="3390NISTXML-SV-IV-atomic-time-minExclusive-3-1 tokoe:valid" result="pass"/><test-case name="3391NISTXML-SV-IV-atomic-time-minExclusive-3-2 tokoe:valid" result="pass"/><test-case name="3392NISTXML-SV-IV-atomic-time-minExclusive-3-3 tokoe:valid" result="pass"/><test-case name="3393NISTXML-SV-IV-atomic-time-minExclusive-3-4 tokoe:valid" result="pass"/><test-case name="3394NISTXML-SV-IV-atomic-time-minExclusive-3-5 tokoe:valid" result="pass"/><test-case name="3395NISTSchema-SV-IV-atomic-time-minExclusive-4 tokoe:valid" result="pass"/><test-case name="3396NISTXML-SV-IV-atomic-time-minExclusive-4-1 tokoe:valid" result="pass"/><test-case name="3397NISTXML-SV-IV-atomic-time-minExclusive-4-2 tokoe:valid" result="pass"/><test-case name="3398NISTXML-SV-IV-atomic-time-minExclusive-4-3 tokoe:valid" result="pass"/><test-case name="3399NISTXML-SV-IV-atomic-time-minExclusive-4-4 tokoe:valid" result="pass"/><test-case name="3400NISTXML-SV-IV-atomic-time-minExclusive-4-5 tokoe:valid" result="pass"/><test-case name="3401NISTSchema-SV-IV-atomic-time-minExclusive-5 tokoe:valid" result="pass"/><test-case name="3402NISTXML-SV-IV-atomic-time-minExclusive-5-1 tokoe:valid" result="pass"/><test-case name="3403NISTSchema-SV-IV-atomic-time-minInclusive-1 tokoe:valid" result="pass"/><test-case name="3404NISTXML-SV-IV-atomic-time-minInclusive-1-1 tokoe:valid" result="pass"/><test-case name="3405NISTXML-SV-IV-atomic-time-minInclusive-1-2 tokoe:valid" result="pass"/><test-case name="3406NISTXML-SV-IV-atomic-time-minInclusive-1-3 tokoe:valid" result="pass"/><test-case name="3407NISTXML-SV-IV-atomic-time-minInclusive-1-4 tokoe:valid" result="pass"/><test-case name="3408NISTXML-SV-IV-atomic-time-minInclusive-1-5 tokoe:valid" result="pass"/><test-case name="3409NISTSchema-SV-IV-atomic-time-minInclusive-2 tokoe:valid" result="pass"/><test-case name="3410NISTXML-SV-IV-atomic-time-minInclusive-2-1 tokoe:valid" result="pass"/><test-case name="3411NISTXML-SV-IV-atomic-time-minInclusive-2-2 tokoe:valid" result="pass"/><test-case name="3412NISTXML-SV-IV-atomic-time-minInclusive-2-3 tokoe:valid" result="pass"/><test-case name="3413NISTXML-SV-IV-atomic-time-minInclusive-2-4 tokoe:valid" result="pass"/><test-case name="3414NISTXML-SV-IV-atomic-time-minInclusive-2-5 tokoe:valid" result="pass"/><test-case name="3415NISTSchema-SV-IV-atomic-time-minInclusive-3 tokoe:valid" result="pass"/><test-case name="3416NISTXML-SV-IV-atomic-time-minInclusive-3-1 tokoe:valid" result="pass"/><test-case name="3417NISTXML-SV-IV-atomic-time-minInclusive-3-2 tokoe:valid" result="pass"/><test-case name="3418NISTXML-SV-IV-atomic-time-minInclusive-3-3 tokoe:valid" result="pass"/><test-case name="3419NISTXML-SV-IV-atomic-time-minInclusive-3-4 tokoe:valid" result="pass"/><test-case name="3420NISTXML-SV-IV-atomic-time-minInclusive-3-5 tokoe:valid" result="pass"/><test-case name="3421NISTSchema-SV-IV-atomic-time-minInclusive-4 tokoe:valid" result="pass"/><test-case name="3422NISTXML-SV-IV-atomic-time-minInclusive-4-1 tokoe:valid" result="pass"/><test-case name="3423NISTXML-SV-IV-atomic-time-minInclusive-4-2 tokoe:valid" result="pass"/><test-case name="3424NISTXML-SV-IV-atomic-time-minInclusive-4-3 tokoe:valid" result="pass"/><test-case name="3425NISTXML-SV-IV-atomic-time-minInclusive-4-4 tokoe:valid" result="pass"/><test-case name="3426NISTXML-SV-IV-atomic-time-minInclusive-4-5 tokoe:valid" result="pass"/><test-case name="3427NISTSchema-SV-IV-atomic-time-minInclusive-5 tokoe:valid" result="pass"/><test-case name="3428NISTXML-SV-IV-atomic-time-minInclusive-5-1 tokoe:valid" result="pass"/><test-case name="3429NISTSchema-SV-IV-atomic-time-maxExclusive-1 tokoe:valid" result="pass"/><test-case name="3430NISTXML-SV-IV-atomic-time-maxExclusive-1-1 tokoe:valid" result="pass"/><test-case name="3431NISTSchema-SV-IV-atomic-time-maxExclusive-2 tokoe:valid" result="pass"/><test-case name="3432NISTXML-SV-IV-atomic-time-maxExclusive-2-1 tokoe:valid" result="pass"/><test-case name="3433NISTXML-SV-IV-atomic-time-maxExclusive-2-2 tokoe:valid" result="pass"/><test-case name="3434NISTXML-SV-IV-atomic-time-maxExclusive-2-3 tokoe:valid" result="pass"/><test-case name="3435NISTXML-SV-IV-atomic-time-maxExclusive-2-4 tokoe:valid" result="pass"/><test-case name="3436NISTXML-SV-IV-atomic-time-maxExclusive-2-5 tokoe:valid" result="pass"/><test-case name="3437NISTSchema-SV-IV-atomic-time-maxExclusive-3 tokoe:valid" result="pass"/><test-case name="3438NISTXML-SV-IV-atomic-time-maxExclusive-3-1 tokoe:valid" result="pass"/><test-case name="3439NISTXML-SV-IV-atomic-time-maxExclusive-3-2 tokoe:valid" result="pass"/><test-case name="3440NISTXML-SV-IV-atomic-time-maxExclusive-3-3 tokoe:valid" result="pass"/><test-case name="3441NISTXML-SV-IV-atomic-time-maxExclusive-3-4 tokoe:valid" result="pass"/><test-case name="3442NISTXML-SV-IV-atomic-time-maxExclusive-3-5 tokoe:valid" result="pass"/><test-case name="3443NISTSchema-SV-IV-atomic-time-maxExclusive-4 tokoe:valid" result="pass"/><test-case name="3444NISTXML-SV-IV-atomic-time-maxExclusive-4-1 tokoe:valid" result="pass"/><test-case name="3445NISTXML-SV-IV-atomic-time-maxExclusive-4-2 tokoe:valid" result="pass"/><test-case name="3446NISTXML-SV-IV-atomic-time-maxExclusive-4-3 tokoe:valid" result="pass"/><test-case name="3447NISTXML-SV-IV-atomic-time-maxExclusive-4-4 tokoe:valid" result="pass"/><test-case name="3448NISTXML-SV-IV-atomic-time-maxExclusive-4-5 tokoe:valid" result="pass"/><test-case name="3449NISTSchema-SV-IV-atomic-time-maxExclusive-5 tokoe:valid" result="pass"/><test-case name="3450NISTXML-SV-IV-atomic-time-maxExclusive-5-1 tokoe:valid" result="pass"/><test-case name="3451NISTXML-SV-IV-atomic-time-maxExclusive-5-2 tokoe:valid" result="pass"/><test-case name="3452NISTXML-SV-IV-atomic-time-maxExclusive-5-3 tokoe:valid" result="pass"/><test-case name="3453NISTXML-SV-IV-atomic-time-maxExclusive-5-4 tokoe:valid" result="pass"/><test-case name="3454NISTXML-SV-IV-atomic-time-maxExclusive-5-5 tokoe:valid" result="pass"/><test-case name="3455NISTSchema-SV-IV-atomic-time-maxInclusive-1 tokoe:valid" result="pass"/><test-case name="3456NISTXML-SV-IV-atomic-time-maxInclusive-1-1 tokoe:valid" result="pass"/><test-case name="3457NISTSchema-SV-IV-atomic-time-maxInclusive-2 tokoe:valid" result="pass"/><test-case name="3458NISTXML-SV-IV-atomic-time-maxInclusive-2-1 tokoe:valid" result="pass"/><test-case name="3459NISTXML-SV-IV-atomic-time-maxInclusive-2-2 tokoe:valid" result="pass"/><test-case name="3460NISTXML-SV-IV-atomic-time-maxInclusive-2-3 tokoe:valid" result="pass"/><test-case name="3461NISTXML-SV-IV-atomic-time-maxInclusive-2-4 tokoe:valid" result="pass"/><test-case name="3462NISTXML-SV-IV-atomic-time-maxInclusive-2-5 tokoe:valid" result="pass"/><test-case name="3463NISTSchema-SV-IV-atomic-time-maxInclusive-3 tokoe:valid" result="pass"/><test-case name="3464NISTXML-SV-IV-atomic-time-maxInclusive-3-1 tokoe:valid" result="pass"/><test-case name="3465NISTXML-SV-IV-atomic-time-maxInclusive-3-2 tokoe:valid" result="pass"/><test-case name="3466NISTXML-SV-IV-atomic-time-maxInclusive-3-3 tokoe:valid" result="pass"/><test-case name="3467NISTXML-SV-IV-atomic-time-maxInclusive-3-4 tokoe:valid" result="pass"/><test-case name="3468NISTXML-SV-IV-atomic-time-maxInclusive-3-5 tokoe:valid" result="pass"/><test-case name="3469NISTSchema-SV-IV-atomic-time-maxInclusive-4 tokoe:valid" result="pass"/><test-case name="3470NISTXML-SV-IV-atomic-time-maxInclusive-4-1 tokoe:valid" result="pass"/><test-case name="3471NISTXML-SV-IV-atomic-time-maxInclusive-4-2 tokoe:valid" result="pass"/><test-case name="3472NISTXML-SV-IV-atomic-time-maxInclusive-4-3 tokoe:valid" result="pass"/><test-case name="3473NISTXML-SV-IV-atomic-time-maxInclusive-4-4 tokoe:valid" result="pass"/><test-case name="3474NISTXML-SV-IV-atomic-time-maxInclusive-4-5 tokoe:valid" result="pass"/><test-case name="3475NISTSchema-SV-IV-atomic-time-maxInclusive-5 tokoe:valid" result="pass"/><test-case name="3476NISTXML-SV-IV-atomic-time-maxInclusive-5-1 tokoe:valid" result="pass"/><test-case name="3477NISTXML-SV-IV-atomic-time-maxInclusive-5-2 tokoe:valid" result="pass"/><test-case name="3478NISTXML-SV-IV-atomic-time-maxInclusive-5-3 tokoe:valid" result="pass"/><test-case name="3479NISTXML-SV-IV-atomic-time-maxInclusive-5-4 tokoe:valid" result="pass"/><test-case name="3480NISTXML-SV-IV-atomic-time-maxInclusive-5-5 tokoe:valid" result="pass"/><test-case name="3481NISTSchema-SV-IV-atomic-time-pattern-1 tokoe:valid" result="pass"/><test-case name="3482NISTXML-SV-IV-atomic-time-pattern-1-1 tokoe:valid" result="pass"/><test-case name="3483NISTXML-SV-IV-atomic-time-pattern-1-2 tokoe:valid" result="pass"/><test-case name="3484NISTXML-SV-IV-atomic-time-pattern-1-3 tokoe:valid" result="pass"/><test-case name="3485NISTXML-SV-IV-atomic-time-pattern-1-4 tokoe:valid" result="pass"/><test-case name="3486NISTXML-SV-IV-atomic-time-pattern-1-5 tokoe:valid" result="pass"/><test-case name="3487NISTSchema-SV-IV-atomic-time-pattern-2 tokoe:valid" result="pass"/><test-case name="3488NISTXML-SV-IV-atomic-time-pattern-2-1 tokoe:valid" result="pass"/><test-case name="3489NISTXML-SV-IV-atomic-time-pattern-2-2 tokoe:valid" result="pass"/><test-case name="3490NISTXML-SV-IV-atomic-time-pattern-2-3 tokoe:valid" result="pass"/><test-case name="3491NISTXML-SV-IV-atomic-time-pattern-2-4 tokoe:valid" result="pass"/><test-case name="3492NISTXML-SV-IV-atomic-time-pattern-2-5 tokoe:valid" result="pass"/><test-case name="3493NISTSchema-SV-IV-atomic-time-pattern-3 tokoe:valid" result="pass"/><test-case name="3494NISTXML-SV-IV-atomic-time-pattern-3-1 tokoe:valid" result="pass"/><test-case name="3495NISTXML-SV-IV-atomic-time-pattern-3-2 tokoe:valid" result="pass"/><test-case name="3496NISTXML-SV-IV-atomic-time-pattern-3-3 tokoe:valid" result="pass"/><test-case name="3497NISTXML-SV-IV-atomic-time-pattern-3-4 tokoe:valid" result="pass"/><test-case name="3498NISTXML-SV-IV-atomic-time-pattern-3-5 tokoe:valid" result="pass"/><test-case name="3499NISTSchema-SV-IV-atomic-time-pattern-4 tokoe:valid" result="pass"/><test-case name="3500NISTXML-SV-IV-atomic-time-pattern-4-1 tokoe:valid" result="pass"/><test-case name="3501NISTXML-SV-IV-atomic-time-pattern-4-2 tokoe:valid" result="pass"/><test-case name="3502NISTXML-SV-IV-atomic-time-pattern-4-3 tokoe:valid" result="pass"/><test-case name="3503NISTXML-SV-IV-atomic-time-pattern-4-4 tokoe:valid" result="pass"/><test-case name="3504NISTXML-SV-IV-atomic-time-pattern-4-5 tokoe:valid" result="pass"/><test-case name="3505NISTSchema-SV-IV-atomic-time-pattern-5 tokoe:valid" result="pass"/><test-case name="3506NISTXML-SV-IV-atomic-time-pattern-5-1 tokoe:valid" result="pass"/><test-case name="3507NISTXML-SV-IV-atomic-time-pattern-5-2 tokoe:valid" result="pass"/><test-case name="3508NISTXML-SV-IV-atomic-time-pattern-5-3 tokoe:valid" result="pass"/><test-case name="3509NISTXML-SV-IV-atomic-time-pattern-5-4 tokoe:valid" result="pass"/><test-case name="3510NISTXML-SV-IV-atomic-time-pattern-5-5 tokoe:valid" result="pass"/><test-case name="3511NISTSchema-SV-IV-atomic-time-enumeration-1 tokoe:valid" result="pass"/><test-case name="3512NISTXML-SV-IV-atomic-time-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="3513NISTXML-SV-IV-atomic-time-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="3514NISTXML-SV-IV-atomic-time-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="3515NISTXML-SV-IV-atomic-time-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="3516NISTXML-SV-IV-atomic-time-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="3517NISTSchema-SV-IV-atomic-time-enumeration-2 tokoe:valid" result="pass"/><test-case name="3518NISTXML-SV-IV-atomic-time-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="3519NISTXML-SV-IV-atomic-time-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="3520NISTXML-SV-IV-atomic-time-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="3521NISTXML-SV-IV-atomic-time-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="3522NISTXML-SV-IV-atomic-time-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="3523NISTSchema-SV-IV-atomic-time-enumeration-3 tokoe:valid" result="pass"/><test-case name="3524NISTXML-SV-IV-atomic-time-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="3525NISTXML-SV-IV-atomic-time-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="3526NISTXML-SV-IV-atomic-time-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="3527NISTXML-SV-IV-atomic-time-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="3528NISTXML-SV-IV-atomic-time-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="3529NISTSchema-SV-IV-atomic-time-enumeration-4 tokoe:valid" result="pass"/><test-case name="3530NISTXML-SV-IV-atomic-time-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="3531NISTXML-SV-IV-atomic-time-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="3532NISTXML-SV-IV-atomic-time-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="3533NISTXML-SV-IV-atomic-time-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="3534NISTXML-SV-IV-atomic-time-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="3535NISTSchema-SV-IV-atomic-time-enumeration-5 tokoe:valid" result="pass"/><test-case name="3536NISTXML-SV-IV-atomic-time-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="3537NISTXML-SV-IV-atomic-time-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="3538NISTXML-SV-IV-atomic-time-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="3539NISTXML-SV-IV-atomic-time-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="3540NISTXML-SV-IV-atomic-time-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="3541NISTSchema-SV-IV-atomic-time-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="3542NISTXML-SV-IV-atomic-time-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="3543NISTXML-SV-IV-atomic-time-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="3544NISTXML-SV-IV-atomic-time-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="3545NISTXML-SV-IV-atomic-time-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="3546NISTXML-SV-IV-atomic-time-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="3547NISTSchema-SV-IV-atomic-date-minExclusive-1 tokoe:valid" result="pass"/><test-case name="3548NISTXML-SV-IV-atomic-date-minExclusive-1-1 tokoe:valid" result="pass"/><test-case name="3549NISTXML-SV-IV-atomic-date-minExclusive-1-2 tokoe:valid" result="pass"/><test-case name="3550NISTXML-SV-IV-atomic-date-minExclusive-1-3 tokoe:valid" result="pass"/><test-case name="3551NISTXML-SV-IV-atomic-date-minExclusive-1-4 tokoe:valid" result="pass"/><test-case name="3552NISTXML-SV-IV-atomic-date-minExclusive-1-5 tokoe:valid" result="pass"/><test-case name="3553NISTSchema-SV-IV-atomic-date-minExclusive-2 tokoe:valid" result="pass"/><test-case name="3554NISTXML-SV-IV-atomic-date-minExclusive-2-1 tokoe:valid" result="pass"/><test-case name="3555NISTXML-SV-IV-atomic-date-minExclusive-2-2 tokoe:valid" result="pass"/><test-case name="3556NISTXML-SV-IV-atomic-date-minExclusive-2-3 tokoe:valid" result="pass"/><test-case name="3557NISTXML-SV-IV-atomic-date-minExclusive-2-4 tokoe:valid" result="pass"/><test-case name="3558NISTXML-SV-IV-atomic-date-minExclusive-2-5 tokoe:valid" result="pass"/><test-case name="3559NISTSchema-SV-IV-atomic-date-minExclusive-3 tokoe:valid" result="pass"/><test-case name="3560NISTXML-SV-IV-atomic-date-minExclusive-3-1 tokoe:valid" result="pass"/><test-case name="3561NISTXML-SV-IV-atomic-date-minExclusive-3-2 tokoe:valid" result="pass"/><test-case name="3562NISTXML-SV-IV-atomic-date-minExclusive-3-3 tokoe:valid" result="pass"/><test-case name="3563NISTXML-SV-IV-atomic-date-minExclusive-3-4 tokoe:valid" result="pass"/><test-case name="3564NISTXML-SV-IV-atomic-date-minExclusive-3-5 tokoe:valid" result="pass"/><test-case name="3565NISTSchema-SV-IV-atomic-date-minExclusive-4 tokoe:valid" result="pass"/><test-case name="3566NISTXML-SV-IV-atomic-date-minExclusive-4-1 tokoe:valid" result="pass"/><test-case name="3567NISTXML-SV-IV-atomic-date-minExclusive-4-2 tokoe:valid" result="pass"/><test-case name="3568NISTXML-SV-IV-atomic-date-minExclusive-4-3 tokoe:valid" result="pass"/><test-case name="3569NISTXML-SV-IV-atomic-date-minExclusive-4-4 tokoe:valid" result="pass"/><test-case name="3570NISTXML-SV-IV-atomic-date-minExclusive-4-5 tokoe:valid" result="pass"/><test-case name="3571NISTSchema-SV-IV-atomic-date-minExclusive-5 tokoe:valid" result="pass"/><test-case name="3572NISTXML-SV-IV-atomic-date-minExclusive-5-1 tokoe:valid" result="pass"/><test-case name="3573NISTSchema-SV-IV-atomic-date-minInclusive-1 tokoe:valid" result="pass"/><test-case name="3574NISTXML-SV-IV-atomic-date-minInclusive-1-1 tokoe:valid" result="pass"/><test-case name="3575NISTXML-SV-IV-atomic-date-minInclusive-1-2 tokoe:valid" result="pass"/><test-case name="3576NISTXML-SV-IV-atomic-date-minInclusive-1-3 tokoe:valid" result="pass"/><test-case name="3577NISTXML-SV-IV-atomic-date-minInclusive-1-4 tokoe:valid" result="pass"/><test-case name="3578NISTXML-SV-IV-atomic-date-minInclusive-1-5 tokoe:valid" result="pass"/><test-case name="3579NISTSchema-SV-IV-atomic-date-minInclusive-2 tokoe:valid" result="pass"/><test-case name="3580NISTXML-SV-IV-atomic-date-minInclusive-2-1 tokoe:valid" result="pass"/><test-case name="3581NISTXML-SV-IV-atomic-date-minInclusive-2-2 tokoe:valid" result="pass"/><test-case name="3582NISTXML-SV-IV-atomic-date-minInclusive-2-3 tokoe:valid" result="pass"/><test-case name="3583NISTXML-SV-IV-atomic-date-minInclusive-2-4 tokoe:valid" result="pass"/><test-case name="3584NISTXML-SV-IV-atomic-date-minInclusive-2-5 tokoe:valid" result="pass"/><test-case name="3585NISTSchema-SV-IV-atomic-date-minInclusive-3 tokoe:valid" result="pass"/><test-case name="3586NISTXML-SV-IV-atomic-date-minInclusive-3-1 tokoe:valid" result="pass"/><test-case name="3587NISTXML-SV-IV-atomic-date-minInclusive-3-2 tokoe:valid" result="pass"/><test-case name="3588NISTXML-SV-IV-atomic-date-minInclusive-3-3 tokoe:valid" result="pass"/><test-case name="3589NISTXML-SV-IV-atomic-date-minInclusive-3-4 tokoe:valid" result="pass"/><test-case name="3590NISTXML-SV-IV-atomic-date-minInclusive-3-5 tokoe:valid" result="pass"/><test-case name="3591NISTSchema-SV-IV-atomic-date-minInclusive-4 tokoe:valid" result="pass"/><test-case name="3592NISTXML-SV-IV-atomic-date-minInclusive-4-1 tokoe:valid" result="pass"/><test-case name="3593NISTXML-SV-IV-atomic-date-minInclusive-4-2 tokoe:valid" result="pass"/><test-case name="3594NISTXML-SV-IV-atomic-date-minInclusive-4-3 tokoe:valid" result="pass"/><test-case name="3595NISTXML-SV-IV-atomic-date-minInclusive-4-4 tokoe:valid" result="pass"/><test-case name="3596NISTXML-SV-IV-atomic-date-minInclusive-4-5 tokoe:valid" result="pass"/><test-case name="3597NISTSchema-SV-IV-atomic-date-minInclusive-5 tokoe:valid" result="pass"/><test-case name="3598NISTXML-SV-IV-atomic-date-minInclusive-5-1 tokoe:valid" result="pass"/><test-case name="3599NISTSchema-SV-IV-atomic-date-maxExclusive-1 tokoe:valid" result="pass"/><test-case name="3600NISTXML-SV-IV-atomic-date-maxExclusive-1-1 tokoe:valid" result="pass"/><test-case name="3601NISTSchema-SV-IV-atomic-date-maxExclusive-2 tokoe:valid" result="pass"/><test-case name="3602NISTXML-SV-IV-atomic-date-maxExclusive-2-1 tokoe:valid" result="pass"/><test-case name="3603NISTXML-SV-IV-atomic-date-maxExclusive-2-2 tokoe:valid" result="pass"/><test-case name="3604NISTXML-SV-IV-atomic-date-maxExclusive-2-3 tokoe:valid" result="pass"/><test-case name="3605NISTXML-SV-IV-atomic-date-maxExclusive-2-4 tokoe:valid" result="pass"/><test-case name="3606NISTXML-SV-IV-atomic-date-maxExclusive-2-5 tokoe:valid" result="pass"/><test-case name="3607NISTSchema-SV-IV-atomic-date-maxExclusive-3 tokoe:valid" result="pass"/><test-case name="3608NISTXML-SV-IV-atomic-date-maxExclusive-3-1 tokoe:valid" result="pass"/><test-case name="3609NISTXML-SV-IV-atomic-date-maxExclusive-3-2 tokoe:valid" result="pass"/><test-case name="3610NISTXML-SV-IV-atomic-date-maxExclusive-3-3 tokoe:valid" result="pass"/><test-case name="3611NISTXML-SV-IV-atomic-date-maxExclusive-3-4 tokoe:valid" result="pass"/><test-case name="3612NISTXML-SV-IV-atomic-date-maxExclusive-3-5 tokoe:valid" result="pass"/><test-case name="3613NISTSchema-SV-IV-atomic-date-maxExclusive-4 tokoe:valid" result="pass"/><test-case name="3614NISTXML-SV-IV-atomic-date-maxExclusive-4-1 tokoe:valid" result="pass"/><test-case name="3615NISTXML-SV-IV-atomic-date-maxExclusive-4-2 tokoe:valid" result="pass"/><test-case name="3616NISTXML-SV-IV-atomic-date-maxExclusive-4-3 tokoe:valid" result="pass"/><test-case name="3617NISTXML-SV-IV-atomic-date-maxExclusive-4-4 tokoe:valid" result="pass"/><test-case name="3618NISTXML-SV-IV-atomic-date-maxExclusive-4-5 tokoe:valid" result="pass"/><test-case name="3619NISTSchema-SV-IV-atomic-date-maxExclusive-5 tokoe:valid" result="pass"/><test-case name="3620NISTXML-SV-IV-atomic-date-maxExclusive-5-1 tokoe:valid" result="pass"/><test-case name="3621NISTXML-SV-IV-atomic-date-maxExclusive-5-2 tokoe:valid" result="pass"/><test-case name="3622NISTXML-SV-IV-atomic-date-maxExclusive-5-3 tokoe:valid" result="pass"/><test-case name="3623NISTXML-SV-IV-atomic-date-maxExclusive-5-4 tokoe:valid" result="pass"/><test-case name="3624NISTXML-SV-IV-atomic-date-maxExclusive-5-5 tokoe:valid" result="pass"/><test-case name="3625NISTSchema-SV-IV-atomic-date-maxInclusive-1 tokoe:valid" result="pass"/><test-case name="3626NISTXML-SV-IV-atomic-date-maxInclusive-1-1 tokoe:valid" result="pass"/><test-case name="3627NISTSchema-SV-IV-atomic-date-maxInclusive-2 tokoe:valid" result="pass"/><test-case name="3628NISTXML-SV-IV-atomic-date-maxInclusive-2-1 tokoe:valid" result="pass"/><test-case name="3629NISTXML-SV-IV-atomic-date-maxInclusive-2-2 tokoe:valid" result="pass"/><test-case name="3630NISTXML-SV-IV-atomic-date-maxInclusive-2-3 tokoe:valid" result="pass"/><test-case name="3631NISTXML-SV-IV-atomic-date-maxInclusive-2-4 tokoe:valid" result="pass"/><test-case name="3632NISTXML-SV-IV-atomic-date-maxInclusive-2-5 tokoe:valid" result="pass"/><test-case name="3633NISTSchema-SV-IV-atomic-date-maxInclusive-3 tokoe:valid" result="pass"/><test-case name="3634NISTXML-SV-IV-atomic-date-maxInclusive-3-1 tokoe:valid" result="pass"/><test-case name="3635NISTXML-SV-IV-atomic-date-maxInclusive-3-2 tokoe:valid" result="pass"/><test-case name="3636NISTXML-SV-IV-atomic-date-maxInclusive-3-3 tokoe:valid" result="pass"/><test-case name="3637NISTXML-SV-IV-atomic-date-maxInclusive-3-4 tokoe:valid" result="pass"/><test-case name="3638NISTXML-SV-IV-atomic-date-maxInclusive-3-5 tokoe:valid" result="pass"/><test-case name="3639NISTSchema-SV-IV-atomic-date-maxInclusive-4 tokoe:valid" result="pass"/><test-case name="3640NISTXML-SV-IV-atomic-date-maxInclusive-4-1 tokoe:valid" result="pass"/><test-case name="3641NISTXML-SV-IV-atomic-date-maxInclusive-4-2 tokoe:valid" result="pass"/><test-case name="3642NISTXML-SV-IV-atomic-date-maxInclusive-4-3 tokoe:valid" result="pass"/><test-case name="3643NISTXML-SV-IV-atomic-date-maxInclusive-4-4 tokoe:valid" result="pass"/><test-case name="3644NISTXML-SV-IV-atomic-date-maxInclusive-4-5 tokoe:valid" result="pass"/><test-case name="3645NISTSchema-SV-IV-atomic-date-maxInclusive-5 tokoe:valid" result="pass"/><test-case name="3646NISTXML-SV-IV-atomic-date-maxInclusive-5-1 tokoe:valid" result="pass"/><test-case name="3647NISTXML-SV-IV-atomic-date-maxInclusive-5-2 tokoe:valid" result="pass"/><test-case name="3648NISTXML-SV-IV-atomic-date-maxInclusive-5-3 tokoe:valid" result="pass"/><test-case name="3649NISTXML-SV-IV-atomic-date-maxInclusive-5-4 tokoe:valid" result="pass"/><test-case name="3650NISTXML-SV-IV-atomic-date-maxInclusive-5-5 tokoe:valid" result="pass"/><test-case name="3651NISTSchema-SV-IV-atomic-date-pattern-1 tokoe:valid" result="pass"/><test-case name="3652NISTXML-SV-IV-atomic-date-pattern-1-1 tokoe:valid" result="pass"/><test-case name="3653NISTXML-SV-IV-atomic-date-pattern-1-2 tokoe:valid" result="pass"/><test-case name="3654NISTXML-SV-IV-atomic-date-pattern-1-3 tokoe:valid" result="pass"/><test-case name="3655NISTXML-SV-IV-atomic-date-pattern-1-4 tokoe:valid" result="pass"/><test-case name="3656NISTXML-SV-IV-atomic-date-pattern-1-5 tokoe:valid" result="pass"/><test-case name="3657NISTSchema-SV-IV-atomic-date-pattern-2 tokoe:valid" result="pass"/><test-case name="3658NISTXML-SV-IV-atomic-date-pattern-2-1 tokoe:valid" result="pass"/><test-case name="3659NISTXML-SV-IV-atomic-date-pattern-2-2 tokoe:valid" result="pass"/><test-case name="3660NISTXML-SV-IV-atomic-date-pattern-2-3 tokoe:valid" result="pass"/><test-case name="3661NISTXML-SV-IV-atomic-date-pattern-2-4 tokoe:valid" result="pass"/><test-case name="3662NISTXML-SV-IV-atomic-date-pattern-2-5 tokoe:valid" result="pass"/><test-case name="3663NISTSchema-SV-IV-atomic-date-pattern-3 tokoe:valid" result="pass"/><test-case name="3664NISTXML-SV-IV-atomic-date-pattern-3-1 tokoe:valid" result="pass"/><test-case name="3665NISTXML-SV-IV-atomic-date-pattern-3-2 tokoe:valid" result="pass"/><test-case name="3666NISTXML-SV-IV-atomic-date-pattern-3-3 tokoe:valid" result="pass"/><test-case name="3667NISTXML-SV-IV-atomic-date-pattern-3-4 tokoe:valid" result="pass"/><test-case name="3668NISTXML-SV-IV-atomic-date-pattern-3-5 tokoe:valid" result="pass"/><test-case name="3669NISTSchema-SV-IV-atomic-date-pattern-4 tokoe:valid" result="pass"/><test-case name="3670NISTXML-SV-IV-atomic-date-pattern-4-1 tokoe:valid" result="pass"/><test-case name="3671NISTXML-SV-IV-atomic-date-pattern-4-2 tokoe:valid" result="pass"/><test-case name="3672NISTXML-SV-IV-atomic-date-pattern-4-3 tokoe:valid" result="pass"/><test-case name="3673NISTXML-SV-IV-atomic-date-pattern-4-4 tokoe:valid" result="pass"/><test-case name="3674NISTXML-SV-IV-atomic-date-pattern-4-5 tokoe:valid" result="pass"/><test-case name="3675NISTSchema-SV-IV-atomic-date-pattern-5 tokoe:valid" result="pass"/><test-case name="3676NISTXML-SV-IV-atomic-date-pattern-5-1 tokoe:valid" result="pass"/><test-case name="3677NISTXML-SV-IV-atomic-date-pattern-5-2 tokoe:valid" result="pass"/><test-case name="3678NISTXML-SV-IV-atomic-date-pattern-5-3 tokoe:valid" result="pass"/><test-case name="3679NISTXML-SV-IV-atomic-date-pattern-5-4 tokoe:valid" result="pass"/><test-case name="3680NISTXML-SV-IV-atomic-date-pattern-5-5 tokoe:valid" result="pass"/><test-case name="3681NISTSchema-SV-IV-atomic-date-enumeration-1 tokoe:valid" result="pass"/><test-case name="3682NISTXML-SV-IV-atomic-date-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="3683NISTXML-SV-IV-atomic-date-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="3684NISTXML-SV-IV-atomic-date-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="3685NISTXML-SV-IV-atomic-date-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="3686NISTXML-SV-IV-atomic-date-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="3687NISTSchema-SV-IV-atomic-date-enumeration-2 tokoe:valid" result="pass"/><test-case name="3688NISTXML-SV-IV-atomic-date-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="3689NISTXML-SV-IV-atomic-date-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="3690NISTXML-SV-IV-atomic-date-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="3691NISTXML-SV-IV-atomic-date-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="3692NISTXML-SV-IV-atomic-date-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="3693NISTSchema-SV-IV-atomic-date-enumeration-3 tokoe:valid" result="pass"/><test-case name="3694NISTXML-SV-IV-atomic-date-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="3695NISTXML-SV-IV-atomic-date-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="3696NISTXML-SV-IV-atomic-date-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="3697NISTXML-SV-IV-atomic-date-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="3698NISTXML-SV-IV-atomic-date-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="3699NISTSchema-SV-IV-atomic-date-enumeration-4 tokoe:valid" result="pass"/><test-case name="3700NISTXML-SV-IV-atomic-date-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="3701NISTXML-SV-IV-atomic-date-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="3702NISTXML-SV-IV-atomic-date-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="3703NISTXML-SV-IV-atomic-date-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="3704NISTXML-SV-IV-atomic-date-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="3705NISTSchema-SV-IV-atomic-date-enumeration-5 tokoe:valid" result="pass"/><test-case name="3706NISTXML-SV-IV-atomic-date-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="3707NISTXML-SV-IV-atomic-date-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="3708NISTXML-SV-IV-atomic-date-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="3709NISTXML-SV-IV-atomic-date-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="3710NISTXML-SV-IV-atomic-date-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="3711NISTSchema-SV-IV-atomic-date-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="3712NISTXML-SV-IV-atomic-date-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="3713NISTXML-SV-IV-atomic-date-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="3714NISTXML-SV-IV-atomic-date-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="3715NISTXML-SV-IV-atomic-date-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="3716NISTXML-SV-IV-atomic-date-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="3717NISTSchema-SV-IV-atomic-gYearMonth-minExclusive-1 tokoe:valid" result="pass"/><test-case name="3718NISTXML-SV-IV-atomic-gYearMonth-minExclusive-1-1 tokoe:valid" result="pass"/><test-case name="3719NISTXML-SV-IV-atomic-gYearMonth-minExclusive-1-2 tokoe:valid" result="pass"/><test-case name="3720NISTXML-SV-IV-atomic-gYearMonth-minExclusive-1-3 tokoe:valid" result="pass"/><test-case name="3721NISTXML-SV-IV-atomic-gYearMonth-minExclusive-1-4 tokoe:valid" result="pass"/><test-case name="3722NISTXML-SV-IV-atomic-gYearMonth-minExclusive-1-5 tokoe:valid" result="pass"/><test-case name="3723NISTSchema-SV-IV-atomic-gYearMonth-minExclusive-2 tokoe:valid" result="pass"/><test-case name="3724NISTXML-SV-IV-atomic-gYearMonth-minExclusive-2-1 tokoe:valid" result="pass"/><test-case name="3725NISTXML-SV-IV-atomic-gYearMonth-minExclusive-2-2 tokoe:valid" result="pass"/><test-case name="3726NISTXML-SV-IV-atomic-gYearMonth-minExclusive-2-3 tokoe:valid" result="pass"/><test-case name="3727NISTXML-SV-IV-atomic-gYearMonth-minExclusive-2-4 tokoe:valid" result="pass"/><test-case name="3728NISTXML-SV-IV-atomic-gYearMonth-minExclusive-2-5 tokoe:valid" result="pass"/><test-case name="3729NISTSchema-SV-IV-atomic-gYearMonth-minExclusive-3 tokoe:valid" result="pass"/><test-case name="3730NISTXML-SV-IV-atomic-gYearMonth-minExclusive-3-1 tokoe:valid" result="pass"/><test-case name="3731NISTXML-SV-IV-atomic-gYearMonth-minExclusive-3-2 tokoe:valid" result="pass"/><test-case name="3732NISTXML-SV-IV-atomic-gYearMonth-minExclusive-3-3 tokoe:valid" result="pass"/><test-case name="3733NISTXML-SV-IV-atomic-gYearMonth-minExclusive-3-4 tokoe:valid" result="pass"/><test-case name="3734NISTXML-SV-IV-atomic-gYearMonth-minExclusive-3-5 tokoe:valid" result="pass"/><test-case name="3735NISTSchema-SV-IV-atomic-gYearMonth-minExclusive-4 tokoe:valid" result="pass"/><test-case name="3736NISTXML-SV-IV-atomic-gYearMonth-minExclusive-4-1 tokoe:valid" result="pass"/><test-case name="3737NISTXML-SV-IV-atomic-gYearMonth-minExclusive-4-2 tokoe:valid" result="pass"/><test-case name="3738NISTXML-SV-IV-atomic-gYearMonth-minExclusive-4-3 tokoe:valid" result="pass"/><test-case name="3739NISTXML-SV-IV-atomic-gYearMonth-minExclusive-4-4 tokoe:valid" result="pass"/><test-case name="3740NISTXML-SV-IV-atomic-gYearMonth-minExclusive-4-5 tokoe:valid" result="pass"/><test-case name="3741NISTSchema-SV-IV-atomic-gYearMonth-minExclusive-5 tokoe:valid" result="pass"/><test-case name="3742NISTXML-SV-IV-atomic-gYearMonth-minExclusive-5-1 tokoe:valid" result="pass"/><test-case name="3743NISTSchema-SV-IV-atomic-gYearMonth-minInclusive-1 tokoe:valid" result="pass"/><test-case name="3744NISTXML-SV-IV-atomic-gYearMonth-minInclusive-1-1 tokoe:valid" result="pass"/><test-case name="3745NISTXML-SV-IV-atomic-gYearMonth-minInclusive-1-2 tokoe:valid" result="pass"/><test-case name="3746NISTXML-SV-IV-atomic-gYearMonth-minInclusive-1-3 tokoe:valid" result="pass"/><test-case name="3747NISTXML-SV-IV-atomic-gYearMonth-minInclusive-1-4 tokoe:valid" result="pass"/><test-case name="3748NISTXML-SV-IV-atomic-gYearMonth-minInclusive-1-5 tokoe:valid" result="pass"/><test-case name="3749NISTSchema-SV-IV-atomic-gYearMonth-minInclusive-2 tokoe:valid" result="pass"/><test-case name="3750NISTXML-SV-IV-atomic-gYearMonth-minInclusive-2-1 tokoe:valid" result="pass"/><test-case name="3751NISTXML-SV-IV-atomic-gYearMonth-minInclusive-2-2 tokoe:valid" result="pass"/><test-case name="3752NISTXML-SV-IV-atomic-gYearMonth-minInclusive-2-3 tokoe:valid" result="pass"/><test-case name="3753NISTXML-SV-IV-atomic-gYearMonth-minInclusive-2-4 tokoe:valid" result="pass"/><test-case name="3754NISTXML-SV-IV-atomic-gYearMonth-minInclusive-2-5 tokoe:valid" result="pass"/><test-case name="3755NISTSchema-SV-IV-atomic-gYearMonth-minInclusive-3 tokoe:valid" result="pass"/><test-case name="3756NISTXML-SV-IV-atomic-gYearMonth-minInclusive-3-1 tokoe:valid" result="pass"/><test-case name="3757NISTXML-SV-IV-atomic-gYearMonth-minInclusive-3-2 tokoe:valid" result="pass"/><test-case name="3758NISTXML-SV-IV-atomic-gYearMonth-minInclusive-3-3 tokoe:valid" result="pass"/><test-case name="3759NISTXML-SV-IV-atomic-gYearMonth-minInclusive-3-4 tokoe:valid" result="pass"/><test-case name="3760NISTXML-SV-IV-atomic-gYearMonth-minInclusive-3-5 tokoe:valid" result="pass"/><test-case name="3761NISTSchema-SV-IV-atomic-gYearMonth-minInclusive-4 tokoe:valid" result="pass"/><test-case name="3762NISTXML-SV-IV-atomic-gYearMonth-minInclusive-4-1 tokoe:valid" result="pass"/><test-case name="3763NISTXML-SV-IV-atomic-gYearMonth-minInclusive-4-2 tokoe:valid" result="pass"/><test-case name="3764NISTXML-SV-IV-atomic-gYearMonth-minInclusive-4-3 tokoe:valid" result="pass"/><test-case name="3765NISTXML-SV-IV-atomic-gYearMonth-minInclusive-4-4 tokoe:valid" result="pass"/><test-case name="3766NISTXML-SV-IV-atomic-gYearMonth-minInclusive-4-5 tokoe:valid" result="pass"/><test-case name="3767NISTSchema-SV-IV-atomic-gYearMonth-minInclusive-5 tokoe:valid" result="pass"/><test-case name="3768NISTXML-SV-IV-atomic-gYearMonth-minInclusive-5-1 tokoe:valid" result="pass"/><test-case name="3769NISTSchema-SV-IV-atomic-gYearMonth-maxExclusive-1 tokoe:valid" result="pass"/><test-case name="3770NISTXML-SV-IV-atomic-gYearMonth-maxExclusive-1-1 tokoe:valid" result="pass"/><test-case name="3771NISTSchema-SV-IV-atomic-gYearMonth-maxExclusive-2 tokoe:valid" result="pass"/><test-case name="3772NISTXML-SV-IV-atomic-gYearMonth-maxExclusive-2-1 tokoe:valid" result="pass"/><test-case name="3773NISTXML-SV-IV-atomic-gYearMonth-maxExclusive-2-2 tokoe:valid" result="pass"/><test-case name="3774NISTXML-SV-IV-atomic-gYearMonth-maxExclusive-2-3 tokoe:valid" result="pass"/><test-case name="3775NISTXML-SV-IV-atomic-gYearMonth-maxExclusive-2-4 tokoe:valid" result="pass"/><test-case name="3776NISTXML-SV-IV-atomic-gYearMonth-maxExclusive-2-5 tokoe:valid" result="pass"/><test-case name="3777NISTSchema-SV-IV-atomic-gYearMonth-maxExclusive-3 tokoe:valid" result="pass"/><test-case name="3778NISTXML-SV-IV-atomic-gYearMonth-maxExclusive-3-1 tokoe:valid" result="pass"/><test-case name="3779NISTXML-SV-IV-atomic-gYearMonth-maxExclusive-3-2 tokoe:valid" result="pass"/><test-case name="3780NISTXML-SV-IV-atomic-gYearMonth-maxExclusive-3-3 tokoe:valid" result="pass"/><test-case name="3781NISTXML-SV-IV-atomic-gYearMonth-maxExclusive-3-4 tokoe:valid" result="pass"/><test-case name="3782NISTXML-SV-IV-atomic-gYearMonth-maxExclusive-3-5 tokoe:valid" result="pass"/><test-case name="3783NISTSchema-SV-IV-atomic-gYearMonth-maxExclusive-4 tokoe:valid" result="pass"/><test-case name="3784NISTXML-SV-IV-atomic-gYearMonth-maxExclusive-4-1 tokoe:valid" result="pass"/><test-case name="3785NISTXML-SV-IV-atomic-gYearMonth-maxExclusive-4-2 tokoe:valid" result="pass"/><test-case name="3786NISTXML-SV-IV-atomic-gYearMonth-maxExclusive-4-3 tokoe:valid" result="pass"/><test-case name="3787NISTXML-SV-IV-atomic-gYearMonth-maxExclusive-4-4 tokoe:valid" result="pass"/><test-case name="3788NISTXML-SV-IV-atomic-gYearMonth-maxExclusive-4-5 tokoe:valid" result="pass"/><test-case name="3789NISTSchema-SV-IV-atomic-gYearMonth-maxExclusive-5 tokoe:valid" result="pass"/><test-case name="3790NISTXML-SV-IV-atomic-gYearMonth-maxExclusive-5-1 tokoe:valid" result="pass"/><test-case name="3791NISTXML-SV-IV-atomic-gYearMonth-maxExclusive-5-2 tokoe:valid" result="pass"/><test-case name="3792NISTXML-SV-IV-atomic-gYearMonth-maxExclusive-5-3 tokoe:valid" result="pass"/><test-case name="3793NISTXML-SV-IV-atomic-gYearMonth-maxExclusive-5-4 tokoe:valid" result="pass"/><test-case name="3794NISTXML-SV-IV-atomic-gYearMonth-maxExclusive-5-5 tokoe:valid" result="pass"/><test-case name="3795NISTSchema-SV-IV-atomic-gYearMonth-maxInclusive-1 tokoe:valid" result="pass"/><test-case name="3796NISTXML-SV-IV-atomic-gYearMonth-maxInclusive-1-1 tokoe:valid" result="pass"/><test-case name="3797NISTSchema-SV-IV-atomic-gYearMonth-maxInclusive-2 tokoe:valid" result="pass"/><test-case name="3798NISTXML-SV-IV-atomic-gYearMonth-maxInclusive-2-1 tokoe:valid" result="pass"/><test-case name="3799NISTXML-SV-IV-atomic-gYearMonth-maxInclusive-2-2 tokoe:valid" result="pass"/><test-case name="3800NISTXML-SV-IV-atomic-gYearMonth-maxInclusive-2-3 tokoe:valid" result="pass"/><test-case name="3801NISTXML-SV-IV-atomic-gYearMonth-maxInclusive-2-4 tokoe:valid" result="pass"/><test-case name="3802NISTXML-SV-IV-atomic-gYearMonth-maxInclusive-2-5 tokoe:valid" result="pass"/><test-case name="3803NISTSchema-SV-IV-atomic-gYearMonth-maxInclusive-3 tokoe:valid" result="pass"/><test-case name="3804NISTXML-SV-IV-atomic-gYearMonth-maxInclusive-3-1 tokoe:valid" result="pass"/><test-case name="3805NISTXML-SV-IV-atomic-gYearMonth-maxInclusive-3-2 tokoe:valid" result="pass"/><test-case name="3806NISTXML-SV-IV-atomic-gYearMonth-maxInclusive-3-3 tokoe:valid" result="pass"/><test-case name="3807NISTXML-SV-IV-atomic-gYearMonth-maxInclusive-3-4 tokoe:valid" result="pass"/><test-case name="3808NISTXML-SV-IV-atomic-gYearMonth-maxInclusive-3-5 tokoe:valid" result="pass"/><test-case name="3809NISTSchema-SV-IV-atomic-gYearMonth-maxInclusive-4 tokoe:valid" result="pass"/><test-case name="3810NISTXML-SV-IV-atomic-gYearMonth-maxInclusive-4-1 tokoe:valid" result="pass"/><test-case name="3811NISTXML-SV-IV-atomic-gYearMonth-maxInclusive-4-2 tokoe:valid" result="pass"/><test-case name="3812NISTXML-SV-IV-atomic-gYearMonth-maxInclusive-4-3 tokoe:valid" result="pass"/><test-case name="3813NISTXML-SV-IV-atomic-gYearMonth-maxInclusive-4-4 tokoe:valid" result="pass"/><test-case name="3814NISTXML-SV-IV-atomic-gYearMonth-maxInclusive-4-5 tokoe:valid" result="pass"/><test-case name="3815NISTSchema-SV-IV-atomic-gYearMonth-maxInclusive-5 tokoe:valid" result="pass"/><test-case name="3816NISTXML-SV-IV-atomic-gYearMonth-maxInclusive-5-1 tokoe:valid" result="pass"/><test-case name="3817NISTXML-SV-IV-atomic-gYearMonth-maxInclusive-5-2 tokoe:valid" result="pass"/><test-case name="3818NISTXML-SV-IV-atomic-gYearMonth-maxInclusive-5-3 tokoe:valid" result="pass"/><test-case name="3819NISTXML-SV-IV-atomic-gYearMonth-maxInclusive-5-4 tokoe:valid" result="pass"/><test-case name="3820NISTXML-SV-IV-atomic-gYearMonth-maxInclusive-5-5 tokoe:valid" result="pass"/><test-case name="3821NISTSchema-SV-IV-atomic-gYearMonth-pattern-1 tokoe:valid" result="pass"/><test-case name="3822NISTXML-SV-IV-atomic-gYearMonth-pattern-1-1 tokoe:valid" result="pass"/><test-case name="3823NISTXML-SV-IV-atomic-gYearMonth-pattern-1-2 tokoe:valid" result="pass"/><test-case name="3824NISTXML-SV-IV-atomic-gYearMonth-pattern-1-3 tokoe:valid" result="pass"/><test-case name="3825NISTXML-SV-IV-atomic-gYearMonth-pattern-1-4 tokoe:valid" result="pass"/><test-case name="3826NISTXML-SV-IV-atomic-gYearMonth-pattern-1-5 tokoe:valid" result="pass"/><test-case name="3827NISTSchema-SV-IV-atomic-gYearMonth-pattern-2 tokoe:valid" result="pass"/><test-case name="3828NISTXML-SV-IV-atomic-gYearMonth-pattern-2-1 tokoe:valid" result="pass"/><test-case name="3829NISTXML-SV-IV-atomic-gYearMonth-pattern-2-2 tokoe:valid" result="pass"/><test-case name="3830NISTXML-SV-IV-atomic-gYearMonth-pattern-2-3 tokoe:valid" result="pass"/><test-case name="3831NISTXML-SV-IV-atomic-gYearMonth-pattern-2-4 tokoe:valid" result="pass"/><test-case name="3832NISTXML-SV-IV-atomic-gYearMonth-pattern-2-5 tokoe:valid" result="pass"/><test-case name="3833NISTSchema-SV-IV-atomic-gYearMonth-pattern-3 tokoe:valid" result="pass"/><test-case name="3834NISTXML-SV-IV-atomic-gYearMonth-pattern-3-1 tokoe:valid" result="pass"/><test-case name="3835NISTXML-SV-IV-atomic-gYearMonth-pattern-3-2 tokoe:valid" result="pass"/><test-case name="3836NISTXML-SV-IV-atomic-gYearMonth-pattern-3-3 tokoe:valid" result="pass"/><test-case name="3837NISTXML-SV-IV-atomic-gYearMonth-pattern-3-4 tokoe:valid" result="pass"/><test-case name="3838NISTXML-SV-IV-atomic-gYearMonth-pattern-3-5 tokoe:valid" result="pass"/><test-case name="3839NISTSchema-SV-IV-atomic-gYearMonth-pattern-4 tokoe:valid" result="pass"/><test-case name="3840NISTXML-SV-IV-atomic-gYearMonth-pattern-4-1 tokoe:valid" result="pass"/><test-case name="3841NISTXML-SV-IV-atomic-gYearMonth-pattern-4-2 tokoe:valid" result="pass"/><test-case name="3842NISTXML-SV-IV-atomic-gYearMonth-pattern-4-3 tokoe:valid" result="pass"/><test-case name="3843NISTXML-SV-IV-atomic-gYearMonth-pattern-4-4 tokoe:valid" result="pass"/><test-case name="3844NISTXML-SV-IV-atomic-gYearMonth-pattern-4-5 tokoe:valid" result="pass"/><test-case name="3845NISTSchema-SV-IV-atomic-gYearMonth-pattern-5 tokoe:valid" result="pass"/><test-case name="3846NISTXML-SV-IV-atomic-gYearMonth-pattern-5-1 tokoe:valid" result="pass"/><test-case name="3847NISTXML-SV-IV-atomic-gYearMonth-pattern-5-2 tokoe:valid" result="pass"/><test-case name="3848NISTXML-SV-IV-atomic-gYearMonth-pattern-5-3 tokoe:valid" result="pass"/><test-case name="3849NISTXML-SV-IV-atomic-gYearMonth-pattern-5-4 tokoe:valid" result="pass"/><test-case name="3850NISTXML-SV-IV-atomic-gYearMonth-pattern-5-5 tokoe:valid" result="pass"/><test-case name="3851NISTSchema-SV-IV-atomic-gYearMonth-enumeration-1 tokoe:valid" result="pass"/><test-case name="3852NISTXML-SV-IV-atomic-gYearMonth-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="3853NISTXML-SV-IV-atomic-gYearMonth-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="3854NISTXML-SV-IV-atomic-gYearMonth-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="3855NISTXML-SV-IV-atomic-gYearMonth-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="3856NISTXML-SV-IV-atomic-gYearMonth-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="3857NISTSchema-SV-IV-atomic-gYearMonth-enumeration-2 tokoe:valid" result="pass"/><test-case name="3858NISTXML-SV-IV-atomic-gYearMonth-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="3859NISTXML-SV-IV-atomic-gYearMonth-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="3860NISTXML-SV-IV-atomic-gYearMonth-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="3861NISTXML-SV-IV-atomic-gYearMonth-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="3862NISTXML-SV-IV-atomic-gYearMonth-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="3863NISTSchema-SV-IV-atomic-gYearMonth-enumeration-3 tokoe:valid" result="pass"/><test-case name="3864NISTXML-SV-IV-atomic-gYearMonth-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="3865NISTXML-SV-IV-atomic-gYearMonth-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="3866NISTXML-SV-IV-atomic-gYearMonth-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="3867NISTXML-SV-IV-atomic-gYearMonth-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="3868NISTXML-SV-IV-atomic-gYearMonth-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="3869NISTSchema-SV-IV-atomic-gYearMonth-enumeration-4 tokoe:valid" result="pass"/><test-case name="3870NISTXML-SV-IV-atomic-gYearMonth-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="3871NISTXML-SV-IV-atomic-gYearMonth-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="3872NISTXML-SV-IV-atomic-gYearMonth-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="3873NISTXML-SV-IV-atomic-gYearMonth-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="3874NISTXML-SV-IV-atomic-gYearMonth-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="3875NISTSchema-SV-IV-atomic-gYearMonth-enumeration-5 tokoe:valid" result="pass"/><test-case name="3876NISTXML-SV-IV-atomic-gYearMonth-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="3877NISTXML-SV-IV-atomic-gYearMonth-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="3878NISTXML-SV-IV-atomic-gYearMonth-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="3879NISTXML-SV-IV-atomic-gYearMonth-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="3880NISTXML-SV-IV-atomic-gYearMonth-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="3881NISTSchema-SV-IV-atomic-gYearMonth-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="3882NISTXML-SV-IV-atomic-gYearMonth-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="3883NISTXML-SV-IV-atomic-gYearMonth-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="3884NISTXML-SV-IV-atomic-gYearMonth-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="3885NISTXML-SV-IV-atomic-gYearMonth-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="3886NISTXML-SV-IV-atomic-gYearMonth-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="3887NISTSchema-SV-IV-atomic-gYear-minExclusive-1 tokoe:valid" result="pass"/><test-case name="3888NISTXML-SV-IV-atomic-gYear-minExclusive-1-1 tokoe:valid" result="pass"/><test-case name="3889NISTXML-SV-IV-atomic-gYear-minExclusive-1-2 tokoe:valid" result="pass"/><test-case name="3890NISTXML-SV-IV-atomic-gYear-minExclusive-1-3 tokoe:valid" result="pass"/><test-case name="3891NISTXML-SV-IV-atomic-gYear-minExclusive-1-4 tokoe:valid" result="pass"/><test-case name="3892NISTXML-SV-IV-atomic-gYear-minExclusive-1-5 tokoe:valid" result="pass"/><test-case name="3893NISTSchema-SV-IV-atomic-gYear-minExclusive-2 tokoe:valid" result="pass"/><test-case name="3894NISTXML-SV-IV-atomic-gYear-minExclusive-2-1 tokoe:valid" result="pass"/><test-case name="3895NISTXML-SV-IV-atomic-gYear-minExclusive-2-2 tokoe:valid" result="pass"/><test-case name="3896NISTXML-SV-IV-atomic-gYear-minExclusive-2-3 tokoe:valid" result="pass"/><test-case name="3897NISTXML-SV-IV-atomic-gYear-minExclusive-2-4 tokoe:valid" result="pass"/><test-case name="3898NISTXML-SV-IV-atomic-gYear-minExclusive-2-5 tokoe:valid" result="pass"/><test-case name="3899NISTSchema-SV-IV-atomic-gYear-minExclusive-3 tokoe:valid" result="pass"/><test-case name="3900NISTXML-SV-IV-atomic-gYear-minExclusive-3-1 tokoe:valid" result="pass"/><test-case name="3901NISTXML-SV-IV-atomic-gYear-minExclusive-3-2 tokoe:valid" result="pass"/><test-case name="3902NISTXML-SV-IV-atomic-gYear-minExclusive-3-3 tokoe:valid" result="pass"/><test-case name="3903NISTXML-SV-IV-atomic-gYear-minExclusive-3-4 tokoe:valid" result="pass"/><test-case name="3904NISTXML-SV-IV-atomic-gYear-minExclusive-3-5 tokoe:valid" result="pass"/><test-case name="3905NISTSchema-SV-IV-atomic-gYear-minExclusive-4 tokoe:valid" result="pass"/><test-case name="3906NISTXML-SV-IV-atomic-gYear-minExclusive-4-1 tokoe:valid" result="pass"/><test-case name="3907NISTXML-SV-IV-atomic-gYear-minExclusive-4-2 tokoe:valid" result="pass"/><test-case name="3908NISTXML-SV-IV-atomic-gYear-minExclusive-4-3 tokoe:valid" result="pass"/><test-case name="3909NISTXML-SV-IV-atomic-gYear-minExclusive-4-4 tokoe:valid" result="pass"/><test-case name="3910NISTXML-SV-IV-atomic-gYear-minExclusive-4-5 tokoe:valid" result="pass"/><test-case name="3911NISTSchema-SV-IV-atomic-gYear-minExclusive-5 tokoe:valid" result="pass"/><test-case name="3912NISTXML-SV-IV-atomic-gYear-minExclusive-5-1 tokoe:valid" result="pass"/><test-case name="3913NISTSchema-SV-IV-atomic-gYear-minInclusive-1 tokoe:valid" result="pass"/><test-case name="3914NISTXML-SV-IV-atomic-gYear-minInclusive-1-1 tokoe:valid" result="pass"/><test-case name="3915NISTXML-SV-IV-atomic-gYear-minInclusive-1-2 tokoe:valid" result="pass"/><test-case name="3916NISTXML-SV-IV-atomic-gYear-minInclusive-1-3 tokoe:valid" result="pass"/><test-case name="3917NISTXML-SV-IV-atomic-gYear-minInclusive-1-4 tokoe:valid" result="pass"/><test-case name="3918NISTXML-SV-IV-atomic-gYear-minInclusive-1-5 tokoe:valid" result="pass"/><test-case name="3919NISTSchema-SV-IV-atomic-gYear-minInclusive-2 tokoe:valid" result="pass"/><test-case name="3920NISTXML-SV-IV-atomic-gYear-minInclusive-2-1 tokoe:valid" result="pass"/><test-case name="3921NISTXML-SV-IV-atomic-gYear-minInclusive-2-2 tokoe:valid" result="pass"/><test-case name="3922NISTXML-SV-IV-atomic-gYear-minInclusive-2-3 tokoe:valid" result="pass"/><test-case name="3923NISTXML-SV-IV-atomic-gYear-minInclusive-2-4 tokoe:valid" result="pass"/><test-case name="3924NISTXML-SV-IV-atomic-gYear-minInclusive-2-5 tokoe:valid" result="pass"/><test-case name="3925NISTSchema-SV-IV-atomic-gYear-minInclusive-3 tokoe:valid" result="pass"/><test-case name="3926NISTXML-SV-IV-atomic-gYear-minInclusive-3-1 tokoe:valid" result="pass"/><test-case name="3927NISTXML-SV-IV-atomic-gYear-minInclusive-3-2 tokoe:valid" result="pass"/><test-case name="3928NISTXML-SV-IV-atomic-gYear-minInclusive-3-3 tokoe:valid" result="pass"/><test-case name="3929NISTXML-SV-IV-atomic-gYear-minInclusive-3-4 tokoe:valid" result="pass"/><test-case name="3930NISTXML-SV-IV-atomic-gYear-minInclusive-3-5 tokoe:valid" result="pass"/><test-case name="3931NISTSchema-SV-IV-atomic-gYear-minInclusive-4 tokoe:valid" result="pass"/><test-case name="3932NISTXML-SV-IV-atomic-gYear-minInclusive-4-1 tokoe:valid" result="pass"/><test-case name="3933NISTXML-SV-IV-atomic-gYear-minInclusive-4-2 tokoe:valid" result="pass"/><test-case name="3934NISTXML-SV-IV-atomic-gYear-minInclusive-4-3 tokoe:valid" result="pass"/><test-case name="3935NISTXML-SV-IV-atomic-gYear-minInclusive-4-4 tokoe:valid" result="pass"/><test-case name="3936NISTXML-SV-IV-atomic-gYear-minInclusive-4-5 tokoe:valid" result="pass"/><test-case name="3937NISTSchema-SV-IV-atomic-gYear-minInclusive-5 tokoe:valid" result="pass"/><test-case name="3938NISTXML-SV-IV-atomic-gYear-minInclusive-5-1 tokoe:valid" result="pass"/><test-case name="3939NISTSchema-SV-IV-atomic-gYear-maxExclusive-1 tokoe:valid" result="pass"/><test-case name="3940NISTXML-SV-IV-atomic-gYear-maxExclusive-1-1 tokoe:valid" result="pass"/><test-case name="3941NISTSchema-SV-IV-atomic-gYear-maxExclusive-2 tokoe:valid" result="pass"/><test-case name="3942NISTXML-SV-IV-atomic-gYear-maxExclusive-2-1 tokoe:valid" result="pass"/><test-case name="3943NISTXML-SV-IV-atomic-gYear-maxExclusive-2-2 tokoe:valid" result="pass"/><test-case name="3944NISTXML-SV-IV-atomic-gYear-maxExclusive-2-3 tokoe:valid" result="pass"/><test-case name="3945NISTXML-SV-IV-atomic-gYear-maxExclusive-2-4 tokoe:valid" result="pass"/><test-case name="3946NISTXML-SV-IV-atomic-gYear-maxExclusive-2-5 tokoe:valid" result="pass"/><test-case name="3947NISTSchema-SV-IV-atomic-gYear-maxExclusive-3 tokoe:valid" result="pass"/><test-case name="3948NISTXML-SV-IV-atomic-gYear-maxExclusive-3-1 tokoe:valid" result="pass"/><test-case name="3949NISTXML-SV-IV-atomic-gYear-maxExclusive-3-2 tokoe:valid" result="pass"/><test-case name="3950NISTXML-SV-IV-atomic-gYear-maxExclusive-3-3 tokoe:valid" result="pass"/><test-case name="3951NISTXML-SV-IV-atomic-gYear-maxExclusive-3-4 tokoe:valid" result="pass"/><test-case name="3952NISTXML-SV-IV-atomic-gYear-maxExclusive-3-5 tokoe:valid" result="pass"/><test-case name="3953NISTSchema-SV-IV-atomic-gYear-maxExclusive-4 tokoe:valid" result="pass"/><test-case name="3954NISTXML-SV-IV-atomic-gYear-maxExclusive-4-1 tokoe:valid" result="pass"/><test-case name="3955NISTXML-SV-IV-atomic-gYear-maxExclusive-4-2 tokoe:valid" result="pass"/><test-case name="3956NISTXML-SV-IV-atomic-gYear-maxExclusive-4-3 tokoe:valid" result="pass"/><test-case name="3957NISTXML-SV-IV-atomic-gYear-maxExclusive-4-4 tokoe:valid" result="pass"/><test-case name="3958NISTXML-SV-IV-atomic-gYear-maxExclusive-4-5 tokoe:valid" result="pass"/><test-case name="3959NISTSchema-SV-IV-atomic-gYear-maxExclusive-5 tokoe:valid" result="pass"/><test-case name="3960NISTXML-SV-IV-atomic-gYear-maxExclusive-5-1 tokoe:valid" result="pass"/><test-case name="3961NISTXML-SV-IV-atomic-gYear-maxExclusive-5-2 tokoe:valid" result="pass"/><test-case name="3962NISTXML-SV-IV-atomic-gYear-maxExclusive-5-3 tokoe:valid" result="pass"/><test-case name="3963NISTXML-SV-IV-atomic-gYear-maxExclusive-5-4 tokoe:valid" result="pass"/><test-case name="3964NISTXML-SV-IV-atomic-gYear-maxExclusive-5-5 tokoe:valid" result="pass"/><test-case name="3965NISTSchema-SV-IV-atomic-gYear-maxInclusive-1 tokoe:valid" result="pass"/><test-case name="3966NISTXML-SV-IV-atomic-gYear-maxInclusive-1-1 tokoe:valid" result="pass"/><test-case name="3967NISTSchema-SV-IV-atomic-gYear-maxInclusive-2 tokoe:valid" result="pass"/><test-case name="3968NISTXML-SV-IV-atomic-gYear-maxInclusive-2-1 tokoe:valid" result="pass"/><test-case name="3969NISTXML-SV-IV-atomic-gYear-maxInclusive-2-2 tokoe:valid" result="pass"/><test-case name="3970NISTXML-SV-IV-atomic-gYear-maxInclusive-2-3 tokoe:valid" result="pass"/><test-case name="3971NISTXML-SV-IV-atomic-gYear-maxInclusive-2-4 tokoe:valid" result="pass"/><test-case name="3972NISTXML-SV-IV-atomic-gYear-maxInclusive-2-5 tokoe:valid" result="pass"/><test-case name="3973NISTSchema-SV-IV-atomic-gYear-maxInclusive-3 tokoe:valid" result="pass"/><test-case name="3974NISTXML-SV-IV-atomic-gYear-maxInclusive-3-1 tokoe:valid" result="pass"/><test-case name="3975NISTXML-SV-IV-atomic-gYear-maxInclusive-3-2 tokoe:valid" result="pass"/><test-case name="3976NISTXML-SV-IV-atomic-gYear-maxInclusive-3-3 tokoe:valid" result="pass"/><test-case name="3977NISTXML-SV-IV-atomic-gYear-maxInclusive-3-4 tokoe:valid" result="pass"/><test-case name="3978NISTXML-SV-IV-atomic-gYear-maxInclusive-3-5 tokoe:valid" result="pass"/><test-case name="3979NISTSchema-SV-IV-atomic-gYear-maxInclusive-4 tokoe:valid" result="pass"/><test-case name="3980NISTXML-SV-IV-atomic-gYear-maxInclusive-4-1 tokoe:valid" result="pass"/><test-case name="3981NISTXML-SV-IV-atomic-gYear-maxInclusive-4-2 tokoe:valid" result="pass"/><test-case name="3982NISTXML-SV-IV-atomic-gYear-maxInclusive-4-3 tokoe:valid" result="pass"/><test-case name="3983NISTXML-SV-IV-atomic-gYear-maxInclusive-4-4 tokoe:valid" result="pass"/><test-case name="3984NISTXML-SV-IV-atomic-gYear-maxInclusive-4-5 tokoe:valid" result="pass"/><test-case name="3985NISTSchema-SV-IV-atomic-gYear-maxInclusive-5 tokoe:valid" result="pass"/><test-case name="3986NISTXML-SV-IV-atomic-gYear-maxInclusive-5-1 tokoe:valid" result="pass"/><test-case name="3987NISTXML-SV-IV-atomic-gYear-maxInclusive-5-2 tokoe:valid" result="pass"/><test-case name="3988NISTXML-SV-IV-atomic-gYear-maxInclusive-5-3 tokoe:valid" result="pass"/><test-case name="3989NISTXML-SV-IV-atomic-gYear-maxInclusive-5-4 tokoe:valid" result="pass"/><test-case name="3990NISTXML-SV-IV-atomic-gYear-maxInclusive-5-5 tokoe:valid" result="pass"/><test-case name="3991NISTSchema-SV-IV-atomic-gYear-pattern-1 tokoe:valid" result="pass"/><test-case name="3992NISTXML-SV-IV-atomic-gYear-pattern-1-1 tokoe:valid" result="pass"/><test-case name="3993NISTXML-SV-IV-atomic-gYear-pattern-1-2 tokoe:valid" result="pass"/><test-case name="3994NISTXML-SV-IV-atomic-gYear-pattern-1-3 tokoe:valid" result="pass"/><test-case name="3995NISTXML-SV-IV-atomic-gYear-pattern-1-4 tokoe:valid" result="pass"/><test-case name="3996NISTXML-SV-IV-atomic-gYear-pattern-1-5 tokoe:valid" result="pass"/><test-case name="3997NISTSchema-SV-IV-atomic-gYear-pattern-2 tokoe:valid" result="pass"/><test-case name="3998NISTXML-SV-IV-atomic-gYear-pattern-2-1 tokoe:valid" result="pass"/><test-case name="3999NISTXML-SV-IV-atomic-gYear-pattern-2-2 tokoe:valid" result="pass"/><test-case name="4000NISTXML-SV-IV-atomic-gYear-pattern-2-3 tokoe:valid" result="pass"/><test-case name="4001NISTXML-SV-IV-atomic-gYear-pattern-2-4 tokoe:valid" result="pass"/><test-case name="4002NISTXML-SV-IV-atomic-gYear-pattern-2-5 tokoe:valid" result="pass"/><test-case name="4003NISTSchema-SV-IV-atomic-gYear-pattern-3 tokoe:valid" result="pass"/><test-case name="4004NISTXML-SV-IV-atomic-gYear-pattern-3-1 tokoe:valid" result="pass"/><test-case name="4005NISTXML-SV-IV-atomic-gYear-pattern-3-2 tokoe:valid" result="pass"/><test-case name="4006NISTXML-SV-IV-atomic-gYear-pattern-3-3 tokoe:valid" result="pass"/><test-case name="4007NISTXML-SV-IV-atomic-gYear-pattern-3-4 tokoe:valid" result="pass"/><test-case name="4008NISTXML-SV-IV-atomic-gYear-pattern-3-5 tokoe:valid" result="pass"/><test-case name="4009NISTSchema-SV-IV-atomic-gYear-pattern-4 tokoe:valid" result="pass"/><test-case name="4010NISTXML-SV-IV-atomic-gYear-pattern-4-1 tokoe:valid" result="pass"/><test-case name="4011NISTXML-SV-IV-atomic-gYear-pattern-4-2 tokoe:valid" result="pass"/><test-case name="4012NISTXML-SV-IV-atomic-gYear-pattern-4-3 tokoe:valid" result="pass"/><test-case name="4013NISTXML-SV-IV-atomic-gYear-pattern-4-4 tokoe:valid" result="pass"/><test-case name="4014NISTXML-SV-IV-atomic-gYear-pattern-4-5 tokoe:valid" result="pass"/><test-case name="4015NISTSchema-SV-IV-atomic-gYear-pattern-5 tokoe:valid" result="pass"/><test-case name="4016NISTXML-SV-IV-atomic-gYear-pattern-5-1 tokoe:valid" result="pass"/><test-case name="4017NISTXML-SV-IV-atomic-gYear-pattern-5-2 tokoe:valid" result="pass"/><test-case name="4018NISTXML-SV-IV-atomic-gYear-pattern-5-3 tokoe:valid" result="pass"/><test-case name="4019NISTXML-SV-IV-atomic-gYear-pattern-5-4 tokoe:valid" result="pass"/><test-case name="4020NISTXML-SV-IV-atomic-gYear-pattern-5-5 tokoe:valid" result="pass"/><test-case name="4021NISTSchema-SV-IV-atomic-gYear-enumeration-1 tokoe:valid" result="pass"/><test-case name="4022NISTXML-SV-IV-atomic-gYear-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="4023NISTXML-SV-IV-atomic-gYear-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="4024NISTXML-SV-IV-atomic-gYear-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="4025NISTXML-SV-IV-atomic-gYear-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="4026NISTXML-SV-IV-atomic-gYear-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="4027NISTSchema-SV-IV-atomic-gYear-enumeration-2 tokoe:valid" result="pass"/><test-case name="4028NISTXML-SV-IV-atomic-gYear-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="4029NISTXML-SV-IV-atomic-gYear-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="4030NISTXML-SV-IV-atomic-gYear-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="4031NISTXML-SV-IV-atomic-gYear-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="4032NISTXML-SV-IV-atomic-gYear-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="4033NISTSchema-SV-IV-atomic-gYear-enumeration-3 tokoe:valid" result="pass"/><test-case name="4034NISTXML-SV-IV-atomic-gYear-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="4035NISTXML-SV-IV-atomic-gYear-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="4036NISTXML-SV-IV-atomic-gYear-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="4037NISTXML-SV-IV-atomic-gYear-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="4038NISTXML-SV-IV-atomic-gYear-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="4039NISTSchema-SV-IV-atomic-gYear-enumeration-4 tokoe:valid" result="pass"/><test-case name="4040NISTXML-SV-IV-atomic-gYear-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="4041NISTXML-SV-IV-atomic-gYear-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="4042NISTXML-SV-IV-atomic-gYear-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="4043NISTXML-SV-IV-atomic-gYear-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="4044NISTXML-SV-IV-atomic-gYear-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="4045NISTSchema-SV-IV-atomic-gYear-enumeration-5 tokoe:valid" result="pass"/><test-case name="4046NISTXML-SV-IV-atomic-gYear-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="4047NISTXML-SV-IV-atomic-gYear-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="4048NISTXML-SV-IV-atomic-gYear-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="4049NISTXML-SV-IV-atomic-gYear-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="4050NISTXML-SV-IV-atomic-gYear-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="4051NISTSchema-SV-IV-atomic-gYear-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="4052NISTXML-SV-IV-atomic-gYear-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="4053NISTXML-SV-IV-atomic-gYear-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="4054NISTXML-SV-IV-atomic-gYear-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="4055NISTXML-SV-IV-atomic-gYear-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="4056NISTXML-SV-IV-atomic-gYear-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="4057NISTSchema-SV-IV-atomic-gMonthDay-minExclusive-1 tokoe:valid" result="pass"/><test-case name="4058NISTXML-SV-IV-atomic-gMonthDay-minExclusive-1-1 tokoe:valid" result="pass"/><test-case name="4059NISTXML-SV-IV-atomic-gMonthDay-minExclusive-1-2 tokoe:valid" result="pass"/><test-case name="4060NISTXML-SV-IV-atomic-gMonthDay-minExclusive-1-3 tokoe:valid" result="pass"/><test-case name="4061NISTXML-SV-IV-atomic-gMonthDay-minExclusive-1-4 tokoe:valid" result="pass"/><test-case name="4062NISTXML-SV-IV-atomic-gMonthDay-minExclusive-1-5 tokoe:valid" result="pass"/><test-case name="4063NISTSchema-SV-IV-atomic-gMonthDay-minExclusive-2 tokoe:valid" result="pass"/><test-case name="4064NISTXML-SV-IV-atomic-gMonthDay-minExclusive-2-1 tokoe:valid" result="pass"/><test-case name="4065NISTXML-SV-IV-atomic-gMonthDay-minExclusive-2-2 tokoe:valid" result="pass"/><test-case name="4066NISTXML-SV-IV-atomic-gMonthDay-minExclusive-2-3 tokoe:valid" result="pass"/><test-case name="4067NISTXML-SV-IV-atomic-gMonthDay-minExclusive-2-4 tokoe:valid" result="pass"/><test-case name="4068NISTXML-SV-IV-atomic-gMonthDay-minExclusive-2-5 tokoe:valid" result="pass"/><test-case name="4069NISTSchema-SV-IV-atomic-gMonthDay-minExclusive-3 tokoe:valid" result="pass"/><test-case name="4070NISTXML-SV-IV-atomic-gMonthDay-minExclusive-3-1 tokoe:valid" result="pass"/><test-case name="4071NISTXML-SV-IV-atomic-gMonthDay-minExclusive-3-2 tokoe:valid" result="pass"/><test-case name="4072NISTXML-SV-IV-atomic-gMonthDay-minExclusive-3-3 tokoe:valid" result="pass"/><test-case name="4073NISTXML-SV-IV-atomic-gMonthDay-minExclusive-3-4 tokoe:valid" result="pass"/><test-case name="4074NISTXML-SV-IV-atomic-gMonthDay-minExclusive-3-5 tokoe:valid" result="pass"/><test-case name="4075NISTSchema-SV-IV-atomic-gMonthDay-minExclusive-4 tokoe:valid" result="pass"/><test-case name="4076NISTXML-SV-IV-atomic-gMonthDay-minExclusive-4-1 tokoe:valid" result="pass"/><test-case name="4077NISTXML-SV-IV-atomic-gMonthDay-minExclusive-4-2 tokoe:valid" result="pass"/><test-case name="4078NISTXML-SV-IV-atomic-gMonthDay-minExclusive-4-3 tokoe:valid" result="pass"/><test-case name="4079NISTXML-SV-IV-atomic-gMonthDay-minExclusive-4-4 tokoe:valid" result="pass"/><test-case name="4080NISTXML-SV-IV-atomic-gMonthDay-minExclusive-4-5 tokoe:valid" result="pass"/><test-case name="4081NISTSchema-SV-IV-atomic-gMonthDay-minExclusive-5 tokoe:valid" result="pass"/><test-case name="4082NISTXML-SV-IV-atomic-gMonthDay-minExclusive-5-1 tokoe:valid" result="pass"/><test-case name="4083NISTSchema-SV-IV-atomic-gMonthDay-minInclusive-1 tokoe:valid" result="pass"/><test-case name="4084NISTXML-SV-IV-atomic-gMonthDay-minInclusive-1-1 tokoe:valid" result="pass"/><test-case name="4085NISTXML-SV-IV-atomic-gMonthDay-minInclusive-1-2 tokoe:valid" result="pass"/><test-case name="4086NISTXML-SV-IV-atomic-gMonthDay-minInclusive-1-3 tokoe:valid" result="pass"/><test-case name="4087NISTXML-SV-IV-atomic-gMonthDay-minInclusive-1-4 tokoe:valid" result="pass"/><test-case name="4088NISTXML-SV-IV-atomic-gMonthDay-minInclusive-1-5 tokoe:valid" result="pass"/><test-case name="4089NISTSchema-SV-IV-atomic-gMonthDay-minInclusive-2 tokoe:valid" result="pass"/><test-case name="4090NISTXML-SV-IV-atomic-gMonthDay-minInclusive-2-1 tokoe:valid" result="pass"/><test-case name="4091NISTXML-SV-IV-atomic-gMonthDay-minInclusive-2-2 tokoe:valid" result="pass"/><test-case name="4092NISTXML-SV-IV-atomic-gMonthDay-minInclusive-2-3 tokoe:valid" result="pass"/><test-case name="4093NISTXML-SV-IV-atomic-gMonthDay-minInclusive-2-4 tokoe:valid" result="pass"/><test-case name="4094NISTXML-SV-IV-atomic-gMonthDay-minInclusive-2-5 tokoe:valid" result="pass"/><test-case name="4095NISTSchema-SV-IV-atomic-gMonthDay-minInclusive-3 tokoe:valid" result="pass"/><test-case name="4096NISTXML-SV-IV-atomic-gMonthDay-minInclusive-3-1 tokoe:valid" result="pass"/><test-case name="4097NISTXML-SV-IV-atomic-gMonthDay-minInclusive-3-2 tokoe:valid" result="pass"/><test-case name="4098NISTXML-SV-IV-atomic-gMonthDay-minInclusive-3-3 tokoe:valid" result="pass"/><test-case name="4099NISTXML-SV-IV-atomic-gMonthDay-minInclusive-3-4 tokoe:valid" result="pass"/><test-case name="4100NISTXML-SV-IV-atomic-gMonthDay-minInclusive-3-5 tokoe:valid" result="pass"/><test-case name="4101NISTSchema-SV-IV-atomic-gMonthDay-minInclusive-4 tokoe:valid" result="pass"/><test-case name="4102NISTXML-SV-IV-atomic-gMonthDay-minInclusive-4-1 tokoe:valid" result="pass"/><test-case name="4103NISTXML-SV-IV-atomic-gMonthDay-minInclusive-4-2 tokoe:valid" result="pass"/><test-case name="4104NISTXML-SV-IV-atomic-gMonthDay-minInclusive-4-3 tokoe:valid" result="pass"/><test-case name="4105NISTXML-SV-IV-atomic-gMonthDay-minInclusive-4-4 tokoe:valid" result="pass"/><test-case name="4106NISTXML-SV-IV-atomic-gMonthDay-minInclusive-4-5 tokoe:valid" result="pass"/><test-case name="4107NISTSchema-SV-IV-atomic-gMonthDay-minInclusive-5 tokoe:valid" result="pass"/><test-case name="4108NISTXML-SV-IV-atomic-gMonthDay-minInclusive-5-1 tokoe:valid" result="pass"/><test-case name="4109NISTSchema-SV-IV-atomic-gMonthDay-maxExclusive-1 tokoe:valid" result="pass"/><test-case name="4110NISTXML-SV-IV-atomic-gMonthDay-maxExclusive-1-1 tokoe:valid" result="pass"/><test-case name="4111NISTSchema-SV-IV-atomic-gMonthDay-maxExclusive-2 tokoe:valid" result="pass"/><test-case name="4112NISTXML-SV-IV-atomic-gMonthDay-maxExclusive-2-1 tokoe:valid" result="pass"/><test-case name="4113NISTXML-SV-IV-atomic-gMonthDay-maxExclusive-2-2 tokoe:valid" result="pass"/><test-case name="4114NISTXML-SV-IV-atomic-gMonthDay-maxExclusive-2-3 tokoe:valid" result="pass"/><test-case name="4115NISTXML-SV-IV-atomic-gMonthDay-maxExclusive-2-4 tokoe:valid" result="pass"/><test-case name="4116NISTXML-SV-IV-atomic-gMonthDay-maxExclusive-2-5 tokoe:valid" result="pass"/><test-case name="4117NISTSchema-SV-IV-atomic-gMonthDay-maxExclusive-3 tokoe:valid" result="pass"/><test-case name="4118NISTXML-SV-IV-atomic-gMonthDay-maxExclusive-3-1 tokoe:valid" result="pass"/><test-case name="4119NISTXML-SV-IV-atomic-gMonthDay-maxExclusive-3-2 tokoe:valid" result="pass"/><test-case name="4120NISTXML-SV-IV-atomic-gMonthDay-maxExclusive-3-3 tokoe:valid" result="pass"/><test-case name="4121NISTXML-SV-IV-atomic-gMonthDay-maxExclusive-3-4 tokoe:valid" result="pass"/><test-case name="4122NISTXML-SV-IV-atomic-gMonthDay-maxExclusive-3-5 tokoe:valid" result="pass"/><test-case name="4123NISTSchema-SV-IV-atomic-gMonthDay-maxExclusive-4 tokoe:valid" result="pass"/><test-case name="4124NISTXML-SV-IV-atomic-gMonthDay-maxExclusive-4-1 tokoe:valid" result="pass"/><test-case name="4125NISTXML-SV-IV-atomic-gMonthDay-maxExclusive-4-2 tokoe:valid" result="pass"/><test-case name="4126NISTXML-SV-IV-atomic-gMonthDay-maxExclusive-4-3 tokoe:valid" result="pass"/><test-case name="4127NISTXML-SV-IV-atomic-gMonthDay-maxExclusive-4-4 tokoe:valid" result="pass"/><test-case name="4128NISTXML-SV-IV-atomic-gMonthDay-maxExclusive-4-5 tokoe:valid" result="pass"/><test-case name="4129NISTSchema-SV-IV-atomic-gMonthDay-maxExclusive-5 tokoe:valid" result="pass"/><test-case name="4130NISTXML-SV-IV-atomic-gMonthDay-maxExclusive-5-1 tokoe:valid" result="pass"/><test-case name="4131NISTXML-SV-IV-atomic-gMonthDay-maxExclusive-5-2 tokoe:valid" result="pass"/><test-case name="4132NISTXML-SV-IV-atomic-gMonthDay-maxExclusive-5-3 tokoe:valid" result="pass"/><test-case name="4133NISTXML-SV-IV-atomic-gMonthDay-maxExclusive-5-4 tokoe:valid" result="pass"/><test-case name="4134NISTXML-SV-IV-atomic-gMonthDay-maxExclusive-5-5 tokoe:valid" result="pass"/><test-case name="4135NISTSchema-SV-IV-atomic-gMonthDay-maxInclusive-1 tokoe:valid" result="pass"/><test-case name="4136NISTXML-SV-IV-atomic-gMonthDay-maxInclusive-1-1 tokoe:valid" result="pass"/><test-case name="4137NISTSchema-SV-IV-atomic-gMonthDay-maxInclusive-2 tokoe:valid" result="pass"/><test-case name="4138NISTXML-SV-IV-atomic-gMonthDay-maxInclusive-2-1 tokoe:valid" result="pass"/><test-case name="4139NISTXML-SV-IV-atomic-gMonthDay-maxInclusive-2-2 tokoe:valid" result="pass"/><test-case name="4140NISTXML-SV-IV-atomic-gMonthDay-maxInclusive-2-3 tokoe:valid" result="pass"/><test-case name="4141NISTXML-SV-IV-atomic-gMonthDay-maxInclusive-2-4 tokoe:valid" result="pass"/><test-case name="4142NISTXML-SV-IV-atomic-gMonthDay-maxInclusive-2-5 tokoe:valid" result="pass"/><test-case name="4143NISTSchema-SV-IV-atomic-gMonthDay-maxInclusive-3 tokoe:valid" result="pass"/><test-case name="4144NISTXML-SV-IV-atomic-gMonthDay-maxInclusive-3-1 tokoe:valid" result="pass"/><test-case name="4145NISTXML-SV-IV-atomic-gMonthDay-maxInclusive-3-2 tokoe:valid" result="pass"/><test-case name="4146NISTXML-SV-IV-atomic-gMonthDay-maxInclusive-3-3 tokoe:valid" result="pass"/><test-case name="4147NISTXML-SV-IV-atomic-gMonthDay-maxInclusive-3-4 tokoe:valid" result="pass"/><test-case name="4148NISTXML-SV-IV-atomic-gMonthDay-maxInclusive-3-5 tokoe:valid" result="pass"/><test-case name="4149NISTSchema-SV-IV-atomic-gMonthDay-maxInclusive-4 tokoe:valid" result="pass"/><test-case name="4150NISTXML-SV-IV-atomic-gMonthDay-maxInclusive-4-1 tokoe:valid" result="pass"/><test-case name="4151NISTXML-SV-IV-atomic-gMonthDay-maxInclusive-4-2 tokoe:valid" result="pass"/><test-case name="4152NISTXML-SV-IV-atomic-gMonthDay-maxInclusive-4-3 tokoe:valid" result="pass"/><test-case name="4153NISTXML-SV-IV-atomic-gMonthDay-maxInclusive-4-4 tokoe:valid" result="pass"/><test-case name="4154NISTXML-SV-IV-atomic-gMonthDay-maxInclusive-4-5 tokoe:valid" result="pass"/><test-case name="4155NISTSchema-SV-IV-atomic-gMonthDay-maxInclusive-5 tokoe:valid" result="pass"/><test-case name="4156NISTXML-SV-IV-atomic-gMonthDay-maxInclusive-5-1 tokoe:valid" result="pass"/><test-case name="4157NISTXML-SV-IV-atomic-gMonthDay-maxInclusive-5-2 tokoe:valid" result="pass"/><test-case name="4158NISTXML-SV-IV-atomic-gMonthDay-maxInclusive-5-3 tokoe:valid" result="pass"/><test-case name="4159NISTXML-SV-IV-atomic-gMonthDay-maxInclusive-5-4 tokoe:valid" result="pass"/><test-case name="4160NISTXML-SV-IV-atomic-gMonthDay-maxInclusive-5-5 tokoe:valid" result="pass"/><test-case name="4161NISTSchema-SV-IV-atomic-gMonthDay-pattern-1 tokoe:valid" result="pass"/><test-case name="4162NISTXML-SV-IV-atomic-gMonthDay-pattern-1-1 tokoe:valid" result="pass"/><test-case name="4163NISTXML-SV-IV-atomic-gMonthDay-pattern-1-2 tokoe:valid" result="pass"/><test-case name="4164NISTXML-SV-IV-atomic-gMonthDay-pattern-1-3 tokoe:valid" result="pass"/><test-case name="4165NISTXML-SV-IV-atomic-gMonthDay-pattern-1-4 tokoe:valid" result="pass"/><test-case name="4166NISTXML-SV-IV-atomic-gMonthDay-pattern-1-5 tokoe:valid" result="pass"/><test-case name="4167NISTSchema-SV-IV-atomic-gMonthDay-pattern-2 tokoe:valid" result="pass"/><test-case name="4168NISTXML-SV-IV-atomic-gMonthDay-pattern-2-1 tokoe:valid" result="pass"/><test-case name="4169NISTXML-SV-IV-atomic-gMonthDay-pattern-2-2 tokoe:valid" result="pass"/><test-case name="4170NISTXML-SV-IV-atomic-gMonthDay-pattern-2-3 tokoe:valid" result="pass"/><test-case name="4171NISTXML-SV-IV-atomic-gMonthDay-pattern-2-4 tokoe:valid" result="pass"/><test-case name="4172NISTXML-SV-IV-atomic-gMonthDay-pattern-2-5 tokoe:valid" result="pass"/><test-case name="4173NISTSchema-SV-IV-atomic-gMonthDay-pattern-3 tokoe:valid" result="pass"/><test-case name="4174NISTXML-SV-IV-atomic-gMonthDay-pattern-3-1 tokoe:valid" result="pass"/><test-case name="4175NISTXML-SV-IV-atomic-gMonthDay-pattern-3-2 tokoe:valid" result="pass"/><test-case name="4176NISTXML-SV-IV-atomic-gMonthDay-pattern-3-3 tokoe:valid" result="pass"/><test-case name="4177NISTXML-SV-IV-atomic-gMonthDay-pattern-3-4 tokoe:valid" result="pass"/><test-case name="4178NISTXML-SV-IV-atomic-gMonthDay-pattern-3-5 tokoe:valid" result="pass"/><test-case name="4179NISTSchema-SV-IV-atomic-gMonthDay-pattern-4 tokoe:valid" result="pass"/><test-case name="4180NISTXML-SV-IV-atomic-gMonthDay-pattern-4-1 tokoe:valid" result="pass"/><test-case name="4181NISTXML-SV-IV-atomic-gMonthDay-pattern-4-2 tokoe:valid" result="pass"/><test-case name="4182NISTXML-SV-IV-atomic-gMonthDay-pattern-4-3 tokoe:valid" result="pass"/><test-case name="4183NISTXML-SV-IV-atomic-gMonthDay-pattern-4-4 tokoe:valid" result="pass"/><test-case name="4184NISTXML-SV-IV-atomic-gMonthDay-pattern-4-5 tokoe:valid" result="pass"/><test-case name="4185NISTSchema-SV-IV-atomic-gMonthDay-pattern-5 tokoe:valid" result="pass"/><test-case name="4186NISTXML-SV-IV-atomic-gMonthDay-pattern-5-1 tokoe:valid" result="pass"/><test-case name="4187NISTXML-SV-IV-atomic-gMonthDay-pattern-5-2 tokoe:valid" result="pass"/><test-case name="4188NISTXML-SV-IV-atomic-gMonthDay-pattern-5-3 tokoe:valid" result="pass"/><test-case name="4189NISTXML-SV-IV-atomic-gMonthDay-pattern-5-4 tokoe:valid" result="pass"/><test-case name="4190NISTXML-SV-IV-atomic-gMonthDay-pattern-5-5 tokoe:valid" result="pass"/><test-case name="4191NISTSchema-SV-IV-atomic-gMonthDay-enumeration-1 tokoe:valid" result="pass"/><test-case name="4192NISTXML-SV-IV-atomic-gMonthDay-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="4193NISTXML-SV-IV-atomic-gMonthDay-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="4194NISTXML-SV-IV-atomic-gMonthDay-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="4195NISTXML-SV-IV-atomic-gMonthDay-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="4196NISTXML-SV-IV-atomic-gMonthDay-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="4197NISTSchema-SV-IV-atomic-gMonthDay-enumeration-2 tokoe:valid" result="pass"/><test-case name="4198NISTXML-SV-IV-atomic-gMonthDay-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="4199NISTXML-SV-IV-atomic-gMonthDay-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="4200NISTXML-SV-IV-atomic-gMonthDay-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="4201NISTXML-SV-IV-atomic-gMonthDay-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="4202NISTXML-SV-IV-atomic-gMonthDay-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="4203NISTSchema-SV-IV-atomic-gMonthDay-enumeration-3 tokoe:valid" result="pass"/><test-case name="4204NISTXML-SV-IV-atomic-gMonthDay-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="4205NISTXML-SV-IV-atomic-gMonthDay-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="4206NISTXML-SV-IV-atomic-gMonthDay-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="4207NISTXML-SV-IV-atomic-gMonthDay-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="4208NISTXML-SV-IV-atomic-gMonthDay-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="4209NISTSchema-SV-IV-atomic-gMonthDay-enumeration-4 tokoe:valid" result="pass"/><test-case name="4210NISTXML-SV-IV-atomic-gMonthDay-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="4211NISTXML-SV-IV-atomic-gMonthDay-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="4212NISTXML-SV-IV-atomic-gMonthDay-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="4213NISTXML-SV-IV-atomic-gMonthDay-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="4214NISTXML-SV-IV-atomic-gMonthDay-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="4215NISTSchema-SV-IV-atomic-gMonthDay-enumeration-5 tokoe:valid" result="pass"/><test-case name="4216NISTXML-SV-IV-atomic-gMonthDay-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="4217NISTXML-SV-IV-atomic-gMonthDay-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="4218NISTXML-SV-IV-atomic-gMonthDay-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="4219NISTXML-SV-IV-atomic-gMonthDay-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="4220NISTXML-SV-IV-atomic-gMonthDay-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="4221NISTSchema-SV-IV-atomic-gMonthDay-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="4222NISTXML-SV-IV-atomic-gMonthDay-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="4223NISTXML-SV-IV-atomic-gMonthDay-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="4224NISTXML-SV-IV-atomic-gMonthDay-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="4225NISTXML-SV-IV-atomic-gMonthDay-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="4226NISTXML-SV-IV-atomic-gMonthDay-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="4227NISTSchema-SV-IV-atomic-gDay-minExclusive-1 tokoe:valid" result="pass"/><test-case name="4228NISTXML-SV-IV-atomic-gDay-minExclusive-1-1 tokoe:valid" result="pass"/><test-case name="4229NISTXML-SV-IV-atomic-gDay-minExclusive-1-2 tokoe:valid" result="pass"/><test-case name="4230NISTXML-SV-IV-atomic-gDay-minExclusive-1-3 tokoe:valid" result="pass"/><test-case name="4231NISTXML-SV-IV-atomic-gDay-minExclusive-1-4 tokoe:valid" result="pass"/><test-case name="4232NISTXML-SV-IV-atomic-gDay-minExclusive-1-5 tokoe:valid" result="pass"/><test-case name="4233NISTSchema-SV-IV-atomic-gDay-minExclusive-2 tokoe:valid" result="pass"/><test-case name="4234NISTXML-SV-IV-atomic-gDay-minExclusive-2-1 tokoe:valid" result="pass"/><test-case name="4235NISTXML-SV-IV-atomic-gDay-minExclusive-2-2 tokoe:valid" result="pass"/><test-case name="4236NISTXML-SV-IV-atomic-gDay-minExclusive-2-3 tokoe:valid" result="pass"/><test-case name="4237NISTXML-SV-IV-atomic-gDay-minExclusive-2-4 tokoe:valid" result="pass"/><test-case name="4238NISTXML-SV-IV-atomic-gDay-minExclusive-2-5 tokoe:valid" result="pass"/><test-case name="4239NISTSchema-SV-IV-atomic-gDay-minExclusive-3 tokoe:valid" result="pass"/><test-case name="4240NISTXML-SV-IV-atomic-gDay-minExclusive-3-1 tokoe:valid" result="pass"/><test-case name="4241NISTXML-SV-IV-atomic-gDay-minExclusive-3-2 tokoe:valid" result="pass"/><test-case name="4242NISTXML-SV-IV-atomic-gDay-minExclusive-3-3 tokoe:valid" result="pass"/><test-case name="4243NISTXML-SV-IV-atomic-gDay-minExclusive-3-4 tokoe:valid" result="pass"/><test-case name="4244NISTXML-SV-IV-atomic-gDay-minExclusive-3-5 tokoe:valid" result="pass"/><test-case name="4245NISTSchema-SV-IV-atomic-gDay-minExclusive-4 tokoe:valid" result="pass"/><test-case name="4246NISTXML-SV-IV-atomic-gDay-minExclusive-4-1 tokoe:valid" result="pass"/><test-case name="4247NISTXML-SV-IV-atomic-gDay-minExclusive-4-2 tokoe:valid" result="pass"/><test-case name="4248NISTXML-SV-IV-atomic-gDay-minExclusive-4-3 tokoe:valid" result="pass"/><test-case name="4249NISTXML-SV-IV-atomic-gDay-minExclusive-4-4 tokoe:valid" result="pass"/><test-case name="4250NISTXML-SV-IV-atomic-gDay-minExclusive-4-5 tokoe:valid" result="pass"/><test-case name="4251NISTSchema-SV-IV-atomic-gDay-minExclusive-5 tokoe:valid" result="pass"/><test-case name="4252NISTXML-SV-IV-atomic-gDay-minExclusive-5-1 tokoe:valid" result="pass"/><test-case name="4253NISTSchema-SV-IV-atomic-gDay-minInclusive-1 tokoe:valid" result="pass"/><test-case name="4254NISTXML-SV-IV-atomic-gDay-minInclusive-1-1 tokoe:valid" result="pass"/><test-case name="4255NISTXML-SV-IV-atomic-gDay-minInclusive-1-2 tokoe:valid" result="pass"/><test-case name="4256NISTXML-SV-IV-atomic-gDay-minInclusive-1-3 tokoe:valid" result="pass"/><test-case name="4257NISTXML-SV-IV-atomic-gDay-minInclusive-1-4 tokoe:valid" result="pass"/><test-case name="4258NISTXML-SV-IV-atomic-gDay-minInclusive-1-5 tokoe:valid" result="pass"/><test-case name="4259NISTSchema-SV-IV-atomic-gDay-minInclusive-2 tokoe:valid" result="pass"/><test-case name="4260NISTXML-SV-IV-atomic-gDay-minInclusive-2-1 tokoe:valid" result="pass"/><test-case name="4261NISTXML-SV-IV-atomic-gDay-minInclusive-2-2 tokoe:valid" result="pass"/><test-case name="4262NISTXML-SV-IV-atomic-gDay-minInclusive-2-3 tokoe:valid" result="pass"/><test-case name="4263NISTXML-SV-IV-atomic-gDay-minInclusive-2-4 tokoe:valid" result="pass"/><test-case name="4264NISTXML-SV-IV-atomic-gDay-minInclusive-2-5 tokoe:valid" result="pass"/><test-case name="4265NISTSchema-SV-IV-atomic-gDay-minInclusive-3 tokoe:valid" result="pass"/><test-case name="4266NISTXML-SV-IV-atomic-gDay-minInclusive-3-1 tokoe:valid" result="pass"/><test-case name="4267NISTXML-SV-IV-atomic-gDay-minInclusive-3-2 tokoe:valid" result="pass"/><test-case name="4268NISTXML-SV-IV-atomic-gDay-minInclusive-3-3 tokoe:valid" result="pass"/><test-case name="4269NISTXML-SV-IV-atomic-gDay-minInclusive-3-4 tokoe:valid" result="pass"/><test-case name="4270NISTXML-SV-IV-atomic-gDay-minInclusive-3-5 tokoe:valid" result="pass"/><test-case name="4271NISTSchema-SV-IV-atomic-gDay-minInclusive-4 tokoe:valid" result="pass"/><test-case name="4272NISTXML-SV-IV-atomic-gDay-minInclusive-4-1 tokoe:valid" result="pass"/><test-case name="4273NISTXML-SV-IV-atomic-gDay-minInclusive-4-2 tokoe:valid" result="pass"/><test-case name="4274NISTXML-SV-IV-atomic-gDay-minInclusive-4-3 tokoe:valid" result="pass"/><test-case name="4275NISTXML-SV-IV-atomic-gDay-minInclusive-4-4 tokoe:valid" result="pass"/><test-case name="4276NISTXML-SV-IV-atomic-gDay-minInclusive-4-5 tokoe:valid" result="pass"/><test-case name="4277NISTSchema-SV-IV-atomic-gDay-minInclusive-5 tokoe:valid" result="pass"/><test-case name="4278NISTXML-SV-IV-atomic-gDay-minInclusive-5-1 tokoe:valid" result="pass"/><test-case name="4279NISTSchema-SV-IV-atomic-gDay-maxExclusive-1 tokoe:valid" result="pass"/><test-case name="4280NISTXML-SV-IV-atomic-gDay-maxExclusive-1-1 tokoe:valid" result="pass"/><test-case name="4281NISTSchema-SV-IV-atomic-gDay-maxExclusive-2 tokoe:valid" result="pass"/><test-case name="4282NISTXML-SV-IV-atomic-gDay-maxExclusive-2-1 tokoe:valid" result="pass"/><test-case name="4283NISTXML-SV-IV-atomic-gDay-maxExclusive-2-2 tokoe:valid" result="pass"/><test-case name="4284NISTXML-SV-IV-atomic-gDay-maxExclusive-2-3 tokoe:valid" result="pass"/><test-case name="4285NISTXML-SV-IV-atomic-gDay-maxExclusive-2-4 tokoe:valid" result="pass"/><test-case name="4286NISTXML-SV-IV-atomic-gDay-maxExclusive-2-5 tokoe:valid" result="pass"/><test-case name="4287NISTSchema-SV-IV-atomic-gDay-maxExclusive-3 tokoe:valid" result="pass"/><test-case name="4288NISTXML-SV-IV-atomic-gDay-maxExclusive-3-1 tokoe:valid" result="pass"/><test-case name="4289NISTXML-SV-IV-atomic-gDay-maxExclusive-3-2 tokoe:valid" result="pass"/><test-case name="4290NISTXML-SV-IV-atomic-gDay-maxExclusive-3-3 tokoe:valid" result="pass"/><test-case name="4291NISTXML-SV-IV-atomic-gDay-maxExclusive-3-4 tokoe:valid" result="pass"/><test-case name="4292NISTXML-SV-IV-atomic-gDay-maxExclusive-3-5 tokoe:valid" result="pass"/><test-case name="4293NISTSchema-SV-IV-atomic-gDay-maxExclusive-4 tokoe:valid" result="pass"/><test-case name="4294NISTXML-SV-IV-atomic-gDay-maxExclusive-4-1 tokoe:valid" result="pass"/><test-case name="4295NISTXML-SV-IV-atomic-gDay-maxExclusive-4-2 tokoe:valid" result="pass"/><test-case name="4296NISTXML-SV-IV-atomic-gDay-maxExclusive-4-3 tokoe:valid" result="pass"/><test-case name="4297NISTXML-SV-IV-atomic-gDay-maxExclusive-4-4 tokoe:valid" result="pass"/><test-case name="4298NISTXML-SV-IV-atomic-gDay-maxExclusive-4-5 tokoe:valid" result="pass"/><test-case name="4299NISTSchema-SV-IV-atomic-gDay-maxExclusive-5 tokoe:valid" result="pass"/><test-case name="4300NISTXML-SV-IV-atomic-gDay-maxExclusive-5-1 tokoe:valid" result="pass"/><test-case name="4301NISTXML-SV-IV-atomic-gDay-maxExclusive-5-2 tokoe:valid" result="pass"/><test-case name="4302NISTXML-SV-IV-atomic-gDay-maxExclusive-5-3 tokoe:valid" result="pass"/><test-case name="4303NISTXML-SV-IV-atomic-gDay-maxExclusive-5-4 tokoe:valid" result="pass"/><test-case name="4304NISTXML-SV-IV-atomic-gDay-maxExclusive-5-5 tokoe:valid" result="pass"/><test-case name="4305NISTSchema-SV-IV-atomic-gDay-maxInclusive-1 tokoe:valid" result="pass"/><test-case name="4306NISTXML-SV-IV-atomic-gDay-maxInclusive-1-1 tokoe:valid" result="pass"/><test-case name="4307NISTSchema-SV-IV-atomic-gDay-maxInclusive-2 tokoe:valid" result="pass"/><test-case name="4308NISTXML-SV-IV-atomic-gDay-maxInclusive-2-1 tokoe:valid" result="pass"/><test-case name="4309NISTXML-SV-IV-atomic-gDay-maxInclusive-2-2 tokoe:valid" result="pass"/><test-case name="4310NISTXML-SV-IV-atomic-gDay-maxInclusive-2-3 tokoe:valid" result="pass"/><test-case name="4311NISTXML-SV-IV-atomic-gDay-maxInclusive-2-4 tokoe:valid" result="pass"/><test-case name="4312NISTXML-SV-IV-atomic-gDay-maxInclusive-2-5 tokoe:valid" result="pass"/><test-case name="4313NISTSchema-SV-IV-atomic-gDay-maxInclusive-3 tokoe:valid" result="pass"/><test-case name="4314NISTXML-SV-IV-atomic-gDay-maxInclusive-3-1 tokoe:valid" result="pass"/><test-case name="4315NISTSchema-SV-IV-atomic-gDay-maxInclusive-4 tokoe:valid" result="pass"/><test-case name="4316NISTXML-SV-IV-atomic-gDay-maxInclusive-4-1 tokoe:valid" result="pass"/><test-case name="4317NISTXML-SV-IV-atomic-gDay-maxInclusive-4-2 tokoe:valid" result="pass"/><test-case name="4318NISTXML-SV-IV-atomic-gDay-maxInclusive-4-3 tokoe:valid" result="pass"/><test-case name="4319NISTXML-SV-IV-atomic-gDay-maxInclusive-4-4 tokoe:valid" result="pass"/><test-case name="4320NISTXML-SV-IV-atomic-gDay-maxInclusive-4-5 tokoe:valid" result="pass"/><test-case name="4321NISTSchema-SV-IV-atomic-gDay-maxInclusive-5 tokoe:valid" result="pass"/><test-case name="4322NISTXML-SV-IV-atomic-gDay-maxInclusive-5-1 tokoe:valid" result="pass"/><test-case name="4323NISTXML-SV-IV-atomic-gDay-maxInclusive-5-2 tokoe:valid" result="pass"/><test-case name="4324NISTXML-SV-IV-atomic-gDay-maxInclusive-5-3 tokoe:valid" result="pass"/><test-case name="4325NISTXML-SV-IV-atomic-gDay-maxInclusive-5-4 tokoe:valid" result="pass"/><test-case name="4326NISTXML-SV-IV-atomic-gDay-maxInclusive-5-5 tokoe:valid" result="pass"/><test-case name="4327NISTSchema-SV-IV-atomic-gDay-pattern-1 tokoe:valid" result="pass"/><test-case name="4328NISTXML-SV-IV-atomic-gDay-pattern-1-1 tokoe:valid" result="pass"/><test-case name="4329NISTXML-SV-IV-atomic-gDay-pattern-1-2 tokoe:valid" result="pass"/><test-case name="4330NISTXML-SV-IV-atomic-gDay-pattern-1-3 tokoe:valid" result="pass"/><test-case name="4331NISTXML-SV-IV-atomic-gDay-pattern-1-4 tokoe:valid" result="pass"/><test-case name="4332NISTXML-SV-IV-atomic-gDay-pattern-1-5 tokoe:valid" result="pass"/><test-case name="4333NISTSchema-SV-IV-atomic-gDay-pattern-2 tokoe:valid" result="pass"/><test-case name="4334NISTXML-SV-IV-atomic-gDay-pattern-2-1 tokoe:valid" result="pass"/><test-case name="4335NISTXML-SV-IV-atomic-gDay-pattern-2-2 tokoe:valid" result="pass"/><test-case name="4336NISTXML-SV-IV-atomic-gDay-pattern-2-3 tokoe:valid" result="pass"/><test-case name="4337NISTXML-SV-IV-atomic-gDay-pattern-2-4 tokoe:valid" result="pass"/><test-case name="4338NISTXML-SV-IV-atomic-gDay-pattern-2-5 tokoe:valid" result="pass"/><test-case name="4339NISTSchema-SV-IV-atomic-gDay-pattern-3 tokoe:valid" result="pass"/><test-case name="4340NISTXML-SV-IV-atomic-gDay-pattern-3-1 tokoe:valid" result="pass"/><test-case name="4341NISTXML-SV-IV-atomic-gDay-pattern-3-2 tokoe:valid" result="pass"/><test-case name="4342NISTXML-SV-IV-atomic-gDay-pattern-3-3 tokoe:valid" result="pass"/><test-case name="4343NISTXML-SV-IV-atomic-gDay-pattern-3-4 tokoe:valid" result="pass"/><test-case name="4344NISTXML-SV-IV-atomic-gDay-pattern-3-5 tokoe:valid" result="pass"/><test-case name="4345NISTSchema-SV-IV-atomic-gDay-pattern-4 tokoe:valid" result="pass"/><test-case name="4346NISTXML-SV-IV-atomic-gDay-pattern-4-1 tokoe:valid" result="pass"/><test-case name="4347NISTXML-SV-IV-atomic-gDay-pattern-4-2 tokoe:valid" result="pass"/><test-case name="4348NISTXML-SV-IV-atomic-gDay-pattern-4-3 tokoe:valid" result="pass"/><test-case name="4349NISTXML-SV-IV-atomic-gDay-pattern-4-4 tokoe:valid" result="pass"/><test-case name="4350NISTXML-SV-IV-atomic-gDay-pattern-4-5 tokoe:valid" result="pass"/><test-case name="4351NISTSchema-SV-IV-atomic-gDay-pattern-5 tokoe:valid" result="pass"/><test-case name="4352NISTXML-SV-IV-atomic-gDay-pattern-5-1 tokoe:valid" result="pass"/><test-case name="4353NISTXML-SV-IV-atomic-gDay-pattern-5-2 tokoe:valid" result="pass"/><test-case name="4354NISTXML-SV-IV-atomic-gDay-pattern-5-3 tokoe:valid" result="pass"/><test-case name="4355NISTXML-SV-IV-atomic-gDay-pattern-5-4 tokoe:valid" result="pass"/><test-case name="4356NISTXML-SV-IV-atomic-gDay-pattern-5-5 tokoe:valid" result="pass"/><test-case name="4357NISTSchema-SV-IV-atomic-gDay-enumeration-1 tokoe:valid" result="pass"/><test-case name="4358NISTXML-SV-IV-atomic-gDay-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="4359NISTXML-SV-IV-atomic-gDay-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="4360NISTXML-SV-IV-atomic-gDay-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="4361NISTXML-SV-IV-atomic-gDay-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="4362NISTXML-SV-IV-atomic-gDay-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="4363NISTSchema-SV-IV-atomic-gDay-enumeration-2 tokoe:valid" result="pass"/><test-case name="4364NISTXML-SV-IV-atomic-gDay-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="4365NISTXML-SV-IV-atomic-gDay-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="4366NISTXML-SV-IV-atomic-gDay-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="4367NISTXML-SV-IV-atomic-gDay-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="4368NISTXML-SV-IV-atomic-gDay-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="4369NISTSchema-SV-IV-atomic-gDay-enumeration-3 tokoe:valid" result="pass"/><test-case name="4370NISTXML-SV-IV-atomic-gDay-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="4371NISTXML-SV-IV-atomic-gDay-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="4372NISTXML-SV-IV-atomic-gDay-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="4373NISTXML-SV-IV-atomic-gDay-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="4374NISTXML-SV-IV-atomic-gDay-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="4375NISTSchema-SV-IV-atomic-gDay-enumeration-4 tokoe:valid" result="pass"/><test-case name="4376NISTXML-SV-IV-atomic-gDay-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="4377NISTXML-SV-IV-atomic-gDay-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="4378NISTXML-SV-IV-atomic-gDay-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="4379NISTXML-SV-IV-atomic-gDay-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="4380NISTXML-SV-IV-atomic-gDay-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="4381NISTSchema-SV-IV-atomic-gDay-enumeration-5 tokoe:valid" result="pass"/><test-case name="4382NISTXML-SV-IV-atomic-gDay-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="4383NISTXML-SV-IV-atomic-gDay-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="4384NISTXML-SV-IV-atomic-gDay-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="4385NISTXML-SV-IV-atomic-gDay-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="4386NISTXML-SV-IV-atomic-gDay-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="4387NISTSchema-SV-IV-atomic-gDay-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="4388NISTXML-SV-IV-atomic-gDay-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="4389NISTXML-SV-IV-atomic-gDay-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="4390NISTXML-SV-IV-atomic-gDay-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="4391NISTXML-SV-IV-atomic-gDay-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="4392NISTXML-SV-IV-atomic-gDay-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="4393NISTSchema-SV-IV-atomic-gMonth-minExclusive-1 tokoe:valid" result="pass"/><test-case name="4394NISTXML-SV-IV-atomic-gMonth-minExclusive-1-1 tokoe:valid" result="pass"/><test-case name="4395NISTXML-SV-IV-atomic-gMonth-minExclusive-1-2 tokoe:valid" result="pass"/><test-case name="4396NISTXML-SV-IV-atomic-gMonth-minExclusive-1-3 tokoe:valid" result="pass"/><test-case name="4397NISTXML-SV-IV-atomic-gMonth-minExclusive-1-4 tokoe:valid" result="pass"/><test-case name="4398NISTXML-SV-IV-atomic-gMonth-minExclusive-1-5 tokoe:valid" result="pass"/><test-case name="4399NISTSchema-SV-IV-atomic-gMonth-minExclusive-2 tokoe:valid" result="pass"/><test-case name="4400NISTXML-SV-IV-atomic-gMonth-minExclusive-2-1 tokoe:valid" result="pass"/><test-case name="4401NISTXML-SV-IV-atomic-gMonth-minExclusive-2-2 tokoe:valid" result="pass"/><test-case name="4402NISTXML-SV-IV-atomic-gMonth-minExclusive-2-3 tokoe:valid" result="pass"/><test-case name="4403NISTXML-SV-IV-atomic-gMonth-minExclusive-2-4 tokoe:valid" result="pass"/><test-case name="4404NISTXML-SV-IV-atomic-gMonth-minExclusive-2-5 tokoe:valid" result="pass"/><test-case name="4405NISTSchema-SV-IV-atomic-gMonth-minExclusive-3 tokoe:valid" result="pass"/><test-case name="4406NISTXML-SV-IV-atomic-gMonth-minExclusive-3-1 tokoe:valid" result="pass"/><test-case name="4407NISTXML-SV-IV-atomic-gMonth-minExclusive-3-2 tokoe:valid" result="pass"/><test-case name="4408NISTXML-SV-IV-atomic-gMonth-minExclusive-3-3 tokoe:valid" result="pass"/><test-case name="4409NISTXML-SV-IV-atomic-gMonth-minExclusive-3-4 tokoe:valid" result="pass"/><test-case name="4410NISTXML-SV-IV-atomic-gMonth-minExclusive-3-5 tokoe:valid" result="pass"/><test-case name="4411NISTSchema-SV-IV-atomic-gMonth-minExclusive-4 tokoe:valid" result="pass"/><test-case name="4412NISTXML-SV-IV-atomic-gMonth-minExclusive-4-1 tokoe:valid" result="pass"/><test-case name="4413NISTXML-SV-IV-atomic-gMonth-minExclusive-4-2 tokoe:valid" result="pass"/><test-case name="4414NISTXML-SV-IV-atomic-gMonth-minExclusive-4-3 tokoe:valid" result="pass"/><test-case name="4415NISTXML-SV-IV-atomic-gMonth-minExclusive-4-4 tokoe:valid" result="pass"/><test-case name="4416NISTXML-SV-IV-atomic-gMonth-minExclusive-4-5 tokoe:valid" result="pass"/><test-case name="4417NISTSchema-SV-IV-atomic-gMonth-minExclusive-5 tokoe:valid" result="pass"/><test-case name="4418NISTXML-SV-IV-atomic-gMonth-minExclusive-5-1 tokoe:valid" result="pass"/><test-case name="4419NISTSchema-SV-IV-atomic-gMonth-minInclusive-1 tokoe:valid" result="pass"/><test-case name="4420NISTXML-SV-IV-atomic-gMonth-minInclusive-1-1 tokoe:valid" result="pass"/><test-case name="4421NISTXML-SV-IV-atomic-gMonth-minInclusive-1-2 tokoe:valid" result="pass"/><test-case name="4422NISTXML-SV-IV-atomic-gMonth-minInclusive-1-3 tokoe:valid" result="pass"/><test-case name="4423NISTXML-SV-IV-atomic-gMonth-minInclusive-1-4 tokoe:valid" result="pass"/><test-case name="4424NISTXML-SV-IV-atomic-gMonth-minInclusive-1-5 tokoe:valid" result="pass"/><test-case name="4425NISTSchema-SV-IV-atomic-gMonth-minInclusive-2 tokoe:valid" result="pass"/><test-case name="4426NISTXML-SV-IV-atomic-gMonth-minInclusive-2-1 tokoe:valid" result="pass"/><test-case name="4427NISTXML-SV-IV-atomic-gMonth-minInclusive-2-2 tokoe:valid" result="pass"/><test-case name="4428NISTXML-SV-IV-atomic-gMonth-minInclusive-2-3 tokoe:valid" result="pass"/><test-case name="4429NISTXML-SV-IV-atomic-gMonth-minInclusive-2-4 tokoe:valid" result="pass"/><test-case name="4430NISTXML-SV-IV-atomic-gMonth-minInclusive-2-5 tokoe:valid" result="pass"/><test-case name="4431NISTSchema-SV-IV-atomic-gMonth-minInclusive-3 tokoe:valid" result="pass"/><test-case name="4432NISTXML-SV-IV-atomic-gMonth-minInclusive-3-1 tokoe:valid" result="pass"/><test-case name="4433NISTXML-SV-IV-atomic-gMonth-minInclusive-3-2 tokoe:valid" result="pass"/><test-case name="4434NISTXML-SV-IV-atomic-gMonth-minInclusive-3-3 tokoe:valid" result="pass"/><test-case name="4435NISTXML-SV-IV-atomic-gMonth-minInclusive-3-4 tokoe:valid" result="pass"/><test-case name="4436NISTXML-SV-IV-atomic-gMonth-minInclusive-3-5 tokoe:valid" result="pass"/><test-case name="4437NISTSchema-SV-IV-atomic-gMonth-minInclusive-4 tokoe:valid" result="pass"/><test-case name="4438NISTXML-SV-IV-atomic-gMonth-minInclusive-4-1 tokoe:valid" result="pass"/><test-case name="4439NISTXML-SV-IV-atomic-gMonth-minInclusive-4-2 tokoe:valid" result="pass"/><test-case name="4440NISTXML-SV-IV-atomic-gMonth-minInclusive-4-3 tokoe:valid" result="pass"/><test-case name="4441NISTXML-SV-IV-atomic-gMonth-minInclusive-4-4 tokoe:valid" result="pass"/><test-case name="4442NISTXML-SV-IV-atomic-gMonth-minInclusive-4-5 tokoe:valid" result="pass"/><test-case name="4443NISTSchema-SV-IV-atomic-gMonth-minInclusive-5 tokoe:valid" result="pass"/><test-case name="4444NISTXML-SV-IV-atomic-gMonth-minInclusive-5-1 tokoe:valid" result="pass"/><test-case name="4445NISTSchema-SV-IV-atomic-gMonth-maxExclusive-1 tokoe:valid" result="pass"/><test-case name="4446NISTXML-SV-IV-atomic-gMonth-maxExclusive-1-1 tokoe:valid" result="pass"/><test-case name="4447NISTSchema-SV-IV-atomic-gMonth-maxExclusive-2 tokoe:valid" result="pass"/><test-case name="4448NISTXML-SV-IV-atomic-gMonth-maxExclusive-2-1 tokoe:valid" result="pass"/><test-case name="4449NISTSchema-SV-IV-atomic-gMonth-maxExclusive-3 tokoe:valid" result="pass"/><test-case name="4450NISTXML-SV-IV-atomic-gMonth-maxExclusive-3-1 tokoe:valid" result="pass"/><test-case name="4451NISTXML-SV-IV-atomic-gMonth-maxExclusive-3-2 tokoe:valid" result="pass"/><test-case name="4452NISTXML-SV-IV-atomic-gMonth-maxExclusive-3-3 tokoe:valid" result="pass"/><test-case name="4453NISTXML-SV-IV-atomic-gMonth-maxExclusive-3-4 tokoe:valid" result="pass"/><test-case name="4454NISTXML-SV-IV-atomic-gMonth-maxExclusive-3-5 tokoe:valid" result="pass"/><test-case name="4455NISTSchema-SV-IV-atomic-gMonth-maxExclusive-4 tokoe:valid" result="pass"/><test-case name="4456NISTXML-SV-IV-atomic-gMonth-maxExclusive-4-1 tokoe:valid" result="pass"/><test-case name="4457NISTXML-SV-IV-atomic-gMonth-maxExclusive-4-2 tokoe:valid" result="pass"/><test-case name="4458NISTXML-SV-IV-atomic-gMonth-maxExclusive-4-3 tokoe:valid" result="pass"/><test-case name="4459NISTXML-SV-IV-atomic-gMonth-maxExclusive-4-4 tokoe:valid" result="pass"/><test-case name="4460NISTXML-SV-IV-atomic-gMonth-maxExclusive-4-5 tokoe:valid" result="pass"/><test-case name="4461NISTSchema-SV-IV-atomic-gMonth-maxExclusive-5 tokoe:valid" result="pass"/><test-case name="4462NISTXML-SV-IV-atomic-gMonth-maxExclusive-5-1 tokoe:valid" result="pass"/><test-case name="4463NISTXML-SV-IV-atomic-gMonth-maxExclusive-5-2 tokoe:valid" result="pass"/><test-case name="4464NISTXML-SV-IV-atomic-gMonth-maxExclusive-5-3 tokoe:valid" result="pass"/><test-case name="4465NISTXML-SV-IV-atomic-gMonth-maxExclusive-5-4 tokoe:valid" result="pass"/><test-case name="4466NISTXML-SV-IV-atomic-gMonth-maxExclusive-5-5 tokoe:valid" result="pass"/><test-case name="4467NISTSchema-SV-IV-atomic-gMonth-maxInclusive-1 tokoe:valid" result="pass"/><test-case name="4468NISTXML-SV-IV-atomic-gMonth-maxInclusive-1-1 tokoe:valid" result="pass"/><test-case name="4469NISTSchema-SV-IV-atomic-gMonth-maxInclusive-2 tokoe:valid" result="pass"/><test-case name="4470NISTXML-SV-IV-atomic-gMonth-maxInclusive-2-1 tokoe:valid" result="pass"/><test-case name="4471NISTXML-SV-IV-atomic-gMonth-maxInclusive-2-2 tokoe:valid" result="pass"/><test-case name="4472NISTXML-SV-IV-atomic-gMonth-maxInclusive-2-3 tokoe:valid" result="pass"/><test-case name="4473NISTXML-SV-IV-atomic-gMonth-maxInclusive-2-4 tokoe:valid" result="pass"/><test-case name="4474NISTXML-SV-IV-atomic-gMonth-maxInclusive-2-5 tokoe:valid" result="pass"/><test-case name="4475NISTSchema-SV-IV-atomic-gMonth-maxInclusive-3 tokoe:valid" result="pass"/><test-case name="4476NISTXML-SV-IV-atomic-gMonth-maxInclusive-3-1 tokoe:valid" result="pass"/><test-case name="4477NISTXML-SV-IV-atomic-gMonth-maxInclusive-3-2 tokoe:valid" result="pass"/><test-case name="4478NISTXML-SV-IV-atomic-gMonth-maxInclusive-3-3 tokoe:valid" result="pass"/><test-case name="4479NISTXML-SV-IV-atomic-gMonth-maxInclusive-3-4 tokoe:valid" result="pass"/><test-case name="4480NISTXML-SV-IV-atomic-gMonth-maxInclusive-3-5 tokoe:valid" result="pass"/><test-case name="4481NISTSchema-SV-IV-atomic-gMonth-maxInclusive-4 tokoe:valid" result="pass"/><test-case name="4482NISTXML-SV-IV-atomic-gMonth-maxInclusive-4-1 tokoe:valid" result="pass"/><test-case name="4483NISTXML-SV-IV-atomic-gMonth-maxInclusive-4-2 tokoe:valid" result="pass"/><test-case name="4484NISTXML-SV-IV-atomic-gMonth-maxInclusive-4-3 tokoe:valid" result="pass"/><test-case name="4485NISTXML-SV-IV-atomic-gMonth-maxInclusive-4-4 tokoe:valid" result="pass"/><test-case name="4486NISTXML-SV-IV-atomic-gMonth-maxInclusive-4-5 tokoe:valid" result="pass"/><test-case name="4487NISTSchema-SV-IV-atomic-gMonth-maxInclusive-5 tokoe:valid" result="pass"/><test-case name="4488NISTXML-SV-IV-atomic-gMonth-maxInclusive-5-1 tokoe:valid" result="pass"/><test-case name="4489NISTXML-SV-IV-atomic-gMonth-maxInclusive-5-2 tokoe:valid" result="pass"/><test-case name="4490NISTXML-SV-IV-atomic-gMonth-maxInclusive-5-3 tokoe:valid" result="pass"/><test-case name="4491NISTXML-SV-IV-atomic-gMonth-maxInclusive-5-4 tokoe:valid" result="pass"/><test-case name="4492NISTXML-SV-IV-atomic-gMonth-maxInclusive-5-5 tokoe:valid" result="pass"/><test-case name="4493NISTSchema-SV-IV-atomic-gMonth-pattern-1 tokoe:valid" result="pass"/><test-case name="4494NISTXML-SV-IV-atomic-gMonth-pattern-1-1 tokoe:valid" result="pass"/><test-case name="4495NISTXML-SV-IV-atomic-gMonth-pattern-1-2 tokoe:valid" result="pass"/><test-case name="4496NISTXML-SV-IV-atomic-gMonth-pattern-1-3 tokoe:valid" result="pass"/><test-case name="4497NISTXML-SV-IV-atomic-gMonth-pattern-1-4 tokoe:valid" result="pass"/><test-case name="4498NISTXML-SV-IV-atomic-gMonth-pattern-1-5 tokoe:valid" result="pass"/><test-case name="4499NISTSchema-SV-IV-atomic-gMonth-pattern-2 tokoe:valid" result="pass"/><test-case name="4500NISTXML-SV-IV-atomic-gMonth-pattern-2-1 tokoe:valid" result="pass"/><test-case name="4501NISTXML-SV-IV-atomic-gMonth-pattern-2-2 tokoe:valid" result="pass"/><test-case name="4502NISTXML-SV-IV-atomic-gMonth-pattern-2-3 tokoe:valid" result="pass"/><test-case name="4503NISTXML-SV-IV-atomic-gMonth-pattern-2-4 tokoe:valid" result="pass"/><test-case name="4504NISTXML-SV-IV-atomic-gMonth-pattern-2-5 tokoe:valid" result="pass"/><test-case name="4505NISTSchema-SV-IV-atomic-gMonth-pattern-3 tokoe:valid" result="pass"/><test-case name="4506NISTXML-SV-IV-atomic-gMonth-pattern-3-1 tokoe:valid" result="pass"/><test-case name="4507NISTXML-SV-IV-atomic-gMonth-pattern-3-2 tokoe:valid" result="pass"/><test-case name="4508NISTXML-SV-IV-atomic-gMonth-pattern-3-3 tokoe:valid" result="pass"/><test-case name="4509NISTXML-SV-IV-atomic-gMonth-pattern-3-4 tokoe:valid" result="pass"/><test-case name="4510NISTXML-SV-IV-atomic-gMonth-pattern-3-5 tokoe:valid" result="pass"/><test-case name="4511NISTSchema-SV-IV-atomic-gMonth-pattern-4 tokoe:valid" result="pass"/><test-case name="4512NISTXML-SV-IV-atomic-gMonth-pattern-4-1 tokoe:valid" result="pass"/><test-case name="4513NISTXML-SV-IV-atomic-gMonth-pattern-4-2 tokoe:valid" result="pass"/><test-case name="4514NISTXML-SV-IV-atomic-gMonth-pattern-4-3 tokoe:valid" result="pass"/><test-case name="4515NISTXML-SV-IV-atomic-gMonth-pattern-4-4 tokoe:valid" result="pass"/><test-case name="4516NISTXML-SV-IV-atomic-gMonth-pattern-4-5 tokoe:valid" result="pass"/><test-case name="4517NISTSchema-SV-IV-atomic-gMonth-pattern-5 tokoe:valid" result="pass"/><test-case name="4518NISTXML-SV-IV-atomic-gMonth-pattern-5-1 tokoe:valid" result="pass"/><test-case name="4519NISTXML-SV-IV-atomic-gMonth-pattern-5-2 tokoe:valid" result="pass"/><test-case name="4520NISTXML-SV-IV-atomic-gMonth-pattern-5-3 tokoe:valid" result="pass"/><test-case name="4521NISTXML-SV-IV-atomic-gMonth-pattern-5-4 tokoe:valid" result="pass"/><test-case name="4522NISTXML-SV-IV-atomic-gMonth-pattern-5-5 tokoe:valid" result="pass"/><test-case name="4523NISTSchema-SV-IV-atomic-gMonth-enumeration-1 tokoe:valid" result="pass"/><test-case name="4524NISTXML-SV-IV-atomic-gMonth-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="4525NISTXML-SV-IV-atomic-gMonth-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="4526NISTXML-SV-IV-atomic-gMonth-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="4527NISTXML-SV-IV-atomic-gMonth-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="4528NISTXML-SV-IV-atomic-gMonth-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="4529NISTSchema-SV-IV-atomic-gMonth-enumeration-2 tokoe:valid" result="pass"/><test-case name="4530NISTXML-SV-IV-atomic-gMonth-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="4531NISTXML-SV-IV-atomic-gMonth-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="4532NISTXML-SV-IV-atomic-gMonth-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="4533NISTXML-SV-IV-atomic-gMonth-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="4534NISTXML-SV-IV-atomic-gMonth-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="4535NISTSchema-SV-IV-atomic-gMonth-enumeration-3 tokoe:valid" result="pass"/><test-case name="4536NISTXML-SV-IV-atomic-gMonth-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="4537NISTXML-SV-IV-atomic-gMonth-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="4538NISTXML-SV-IV-atomic-gMonth-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="4539NISTXML-SV-IV-atomic-gMonth-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="4540NISTXML-SV-IV-atomic-gMonth-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="4541NISTSchema-SV-IV-atomic-gMonth-enumeration-4 tokoe:valid" result="pass"/><test-case name="4542NISTXML-SV-IV-atomic-gMonth-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="4543NISTXML-SV-IV-atomic-gMonth-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="4544NISTXML-SV-IV-atomic-gMonth-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="4545NISTXML-SV-IV-atomic-gMonth-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="4546NISTXML-SV-IV-atomic-gMonth-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="4547NISTSchema-SV-IV-atomic-gMonth-enumeration-5 tokoe:valid" result="pass"/><test-case name="4548NISTXML-SV-IV-atomic-gMonth-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="4549NISTXML-SV-IV-atomic-gMonth-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="4550NISTXML-SV-IV-atomic-gMonth-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="4551NISTXML-SV-IV-atomic-gMonth-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="4552NISTXML-SV-IV-atomic-gMonth-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="4553NISTSchema-SV-IV-atomic-gMonth-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="4554NISTXML-SV-IV-atomic-gMonth-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="4555NISTXML-SV-IV-atomic-gMonth-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="4556NISTXML-SV-IV-atomic-gMonth-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="4557NISTXML-SV-IV-atomic-gMonth-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="4558NISTXML-SV-IV-atomic-gMonth-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="4559NISTSchema-SV-IV-atomic-string-maxLength-1 tokoe:valid" result="pass"/><test-case name="4560NISTXML-SV-IV-atomic-string-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="4561NISTXML-SV-IV-atomic-string-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="4562NISTXML-SV-IV-atomic-string-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="4563NISTXML-SV-IV-atomic-string-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="4564NISTXML-SV-IV-atomic-string-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="4565NISTSchema-SV-IV-atomic-string-maxLength-2 tokoe:valid" result="pass"/><test-case name="4566NISTXML-SV-IV-atomic-string-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="4567NISTXML-SV-IV-atomic-string-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="4568NISTXML-SV-IV-atomic-string-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="4569NISTXML-SV-IV-atomic-string-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="4570NISTXML-SV-IV-atomic-string-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="4571NISTSchema-SV-IV-atomic-string-maxLength-3 tokoe:valid" result="pass"/><test-case name="4572NISTXML-SV-IV-atomic-string-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="4573NISTXML-SV-IV-atomic-string-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="4574NISTXML-SV-IV-atomic-string-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="4575NISTXML-SV-IV-atomic-string-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="4576NISTXML-SV-IV-atomic-string-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="4577NISTSchema-SV-IV-atomic-string-maxLength-4 tokoe:valid" result="pass"/><test-case name="4578NISTXML-SV-IV-atomic-string-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="4579NISTXML-SV-IV-atomic-string-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="4580NISTXML-SV-IV-atomic-string-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="4581NISTXML-SV-IV-atomic-string-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="4582NISTXML-SV-IV-atomic-string-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="4583NISTSchema-SV-IV-atomic-string-maxLength-5 tokoe:valid" result="pass"/><test-case name="4584NISTXML-SV-IV-atomic-string-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="4585NISTXML-SV-IV-atomic-string-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="4586NISTXML-SV-IV-atomic-string-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="4587NISTXML-SV-IV-atomic-string-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="4588NISTXML-SV-IV-atomic-string-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="4589NISTSchema-SV-IV-atomic-string-minLength-1 tokoe:valid" result="pass"/><test-case name="4590NISTXML-SV-IV-atomic-string-minLength-1-1 tokoe:valid" result="pass"/><test-case name="4591NISTXML-SV-IV-atomic-string-minLength-1-2 tokoe:valid" result="pass"/><test-case name="4592NISTXML-SV-IV-atomic-string-minLength-1-3 tokoe:valid" result="pass"/><test-case name="4593NISTXML-SV-IV-atomic-string-minLength-1-4 tokoe:valid" result="pass"/><test-case name="4594NISTXML-SV-IV-atomic-string-minLength-1-5 tokoe:valid" result="pass"/><test-case name="4595NISTSchema-SV-IV-atomic-string-minLength-2 tokoe:valid" result="pass"/><test-case name="4596NISTXML-SV-IV-atomic-string-minLength-2-1 tokoe:valid" result="pass"/><test-case name="4597NISTXML-SV-IV-atomic-string-minLength-2-2 tokoe:valid" result="pass"/><test-case name="4598NISTXML-SV-IV-atomic-string-minLength-2-3 tokoe:valid" result="pass"/><test-case name="4599NISTXML-SV-IV-atomic-string-minLength-2-4 tokoe:valid" result="pass"/><test-case name="4600NISTXML-SV-IV-atomic-string-minLength-2-5 tokoe:valid" result="pass"/><test-case name="4601NISTSchema-SV-IV-atomic-string-minLength-3 tokoe:valid" result="pass"/><test-case name="4602NISTXML-SV-IV-atomic-string-minLength-3-1 tokoe:valid" result="pass"/><test-case name="4603NISTXML-SV-IV-atomic-string-minLength-3-2 tokoe:valid" result="pass"/><test-case name="4604NISTXML-SV-IV-atomic-string-minLength-3-3 tokoe:valid" result="pass"/><test-case name="4605NISTXML-SV-IV-atomic-string-minLength-3-4 tokoe:valid" result="pass"/><test-case name="4606NISTXML-SV-IV-atomic-string-minLength-3-5 tokoe:valid" result="pass"/><test-case name="4607NISTSchema-SV-IV-atomic-string-minLength-4 tokoe:valid" result="pass"/><test-case name="4608NISTXML-SV-IV-atomic-string-minLength-4-1 tokoe:valid" result="pass"/><test-case name="4609NISTXML-SV-IV-atomic-string-minLength-4-2 tokoe:valid" result="pass"/><test-case name="4610NISTXML-SV-IV-atomic-string-minLength-4-3 tokoe:valid" result="pass"/><test-case name="4611NISTXML-SV-IV-atomic-string-minLength-4-4 tokoe:valid" result="pass"/><test-case name="4612NISTXML-SV-IV-atomic-string-minLength-4-5 tokoe:valid" result="pass"/><test-case name="4613NISTSchema-SV-IV-atomic-string-minLength-5 tokoe:valid" result="pass"/><test-case name="4614NISTXML-SV-IV-atomic-string-minLength-5-1 tokoe:valid" result="pass"/><test-case name="4615NISTXML-SV-IV-atomic-string-minLength-5-2 tokoe:valid" result="pass"/><test-case name="4616NISTXML-SV-IV-atomic-string-minLength-5-3 tokoe:valid" result="pass"/><test-case name="4617NISTXML-SV-IV-atomic-string-minLength-5-4 tokoe:valid" result="pass"/><test-case name="4618NISTXML-SV-IV-atomic-string-minLength-5-5 tokoe:valid" result="pass"/><test-case name="4619NISTSchema-SV-IV-atomic-string-length-1 tokoe:valid" result="pass"/><test-case name="4620NISTXML-SV-IV-atomic-string-length-1-1 tokoe:valid" result="pass"/><test-case name="4621NISTXML-SV-IV-atomic-string-length-1-2 tokoe:valid" result="pass"/><test-case name="4622NISTXML-SV-IV-atomic-string-length-1-3 tokoe:valid" result="pass"/><test-case name="4623NISTXML-SV-IV-atomic-string-length-1-4 tokoe:valid" result="pass"/><test-case name="4624NISTXML-SV-IV-atomic-string-length-1-5 tokoe:valid" result="pass"/><test-case name="4625NISTSchema-SV-IV-atomic-string-length-2 tokoe:valid" result="pass"/><test-case name="4626NISTXML-SV-IV-atomic-string-length-2-1 tokoe:valid" result="pass"/><test-case name="4627NISTXML-SV-IV-atomic-string-length-2-2 tokoe:valid" result="pass"/><test-case name="4628NISTXML-SV-IV-atomic-string-length-2-3 tokoe:valid" result="pass"/><test-case name="4629NISTXML-SV-IV-atomic-string-length-2-4 tokoe:valid" result="pass"/><test-case name="4630NISTXML-SV-IV-atomic-string-length-2-5 tokoe:valid" result="pass"/><test-case name="4631NISTSchema-SV-IV-atomic-string-length-3 tokoe:valid" result="pass"/><test-case name="4632NISTXML-SV-IV-atomic-string-length-3-1 tokoe:valid" result="pass"/><test-case name="4633NISTXML-SV-IV-atomic-string-length-3-2 tokoe:valid" result="pass"/><test-case name="4634NISTXML-SV-IV-atomic-string-length-3-3 tokoe:valid" result="pass"/><test-case name="4635NISTXML-SV-IV-atomic-string-length-3-4 tokoe:valid" result="pass"/><test-case name="4636NISTXML-SV-IV-atomic-string-length-3-5 tokoe:valid" result="pass"/><test-case name="4637NISTSchema-SV-IV-atomic-string-length-4 tokoe:valid" result="pass"/><test-case name="4638NISTXML-SV-IV-atomic-string-length-4-1 tokoe:valid" result="pass"/><test-case name="4639NISTXML-SV-IV-atomic-string-length-4-2 tokoe:valid" result="pass"/><test-case name="4640NISTXML-SV-IV-atomic-string-length-4-3 tokoe:valid" result="pass"/><test-case name="4641NISTXML-SV-IV-atomic-string-length-4-4 tokoe:valid" result="pass"/><test-case name="4642NISTXML-SV-IV-atomic-string-length-4-5 tokoe:valid" result="pass"/><test-case name="4643NISTSchema-SV-IV-atomic-string-length-5 tokoe:valid" result="pass"/><test-case name="4644NISTXML-SV-IV-atomic-string-length-5-1 tokoe:valid" result="pass"/><test-case name="4645NISTXML-SV-IV-atomic-string-length-5-2 tokoe:valid" result="pass"/><test-case name="4646NISTXML-SV-IV-atomic-string-length-5-3 tokoe:valid" result="pass"/><test-case name="4647NISTXML-SV-IV-atomic-string-length-5-4 tokoe:valid" result="pass"/><test-case name="4648NISTXML-SV-IV-atomic-string-length-5-5 tokoe:valid" result="pass"/><test-case name="4649NISTSchema-SV-IV-atomic-string-pattern-1 tokoe:valid" result="pass"/><test-case name="4650NISTXML-SV-IV-atomic-string-pattern-1-1 tokoe:valid" result="pass"/><test-case name="4651NISTXML-SV-IV-atomic-string-pattern-1-2 tokoe:valid" result="pass"/><test-case name="4652NISTXML-SV-IV-atomic-string-pattern-1-3 tokoe:valid" result="pass"/><test-case name="4653NISTXML-SV-IV-atomic-string-pattern-1-4 tokoe:valid" result="pass"/><test-case name="4654NISTXML-SV-IV-atomic-string-pattern-1-5 tokoe:valid" result="pass"/><test-case name="4655NISTSchema-SV-IV-atomic-string-pattern-2 tokoe:valid" result="pass"/><test-case name="4656NISTXML-SV-IV-atomic-string-pattern-2-1 tokoe:valid" result="pass"/><test-case name="4657NISTXML-SV-IV-atomic-string-pattern-2-2 tokoe:valid" result="pass"/><test-case name="4658NISTXML-SV-IV-atomic-string-pattern-2-3 tokoe:valid" result="pass"/><test-case name="4659NISTXML-SV-IV-atomic-string-pattern-2-4 tokoe:valid" result="pass"/><test-case name="4660NISTXML-SV-IV-atomic-string-pattern-2-5 tokoe:valid" result="pass"/><test-case name="4661NISTSchema-SV-IV-atomic-string-pattern-3 tokoe:valid" result="pass"/><test-case name="4662NISTXML-SV-IV-atomic-string-pattern-3-1 tokoe:valid" result="pass"/><test-case name="4663NISTXML-SV-IV-atomic-string-pattern-3-2 tokoe:valid" result="pass"/><test-case name="4664NISTXML-SV-IV-atomic-string-pattern-3-3 tokoe:valid" result="pass"/><test-case name="4665NISTXML-SV-IV-atomic-string-pattern-3-4 tokoe:valid" result="pass"/><test-case name="4666NISTXML-SV-IV-atomic-string-pattern-3-5 tokoe:valid" result="pass"/><test-case name="4667NISTSchema-SV-IV-atomic-string-pattern-4 tokoe:valid" result="pass"/><test-case name="4668NISTXML-SV-IV-atomic-string-pattern-4-1 tokoe:valid" result="pass"/><test-case name="4669NISTXML-SV-IV-atomic-string-pattern-4-2 tokoe:valid" result="pass"/><test-case name="4670NISTXML-SV-IV-atomic-string-pattern-4-3 tokoe:valid" result="pass"/><test-case name="4671NISTXML-SV-IV-atomic-string-pattern-4-4 tokoe:valid" result="pass"/><test-case name="4672NISTXML-SV-IV-atomic-string-pattern-4-5 tokoe:valid" result="pass"/><test-case name="4673NISTSchema-SV-IV-atomic-string-pattern-5 tokoe:valid" result="pass"/><test-case name="4674NISTXML-SV-IV-atomic-string-pattern-5-1 tokoe:valid" result="pass"/><test-case name="4675NISTXML-SV-IV-atomic-string-pattern-5-2 tokoe:valid" result="pass"/><test-case name="4676NISTXML-SV-IV-atomic-string-pattern-5-3 tokoe:valid" result="pass"/><test-case name="4677NISTXML-SV-IV-atomic-string-pattern-5-4 tokoe:valid" result="pass"/><test-case name="4678NISTXML-SV-IV-atomic-string-pattern-5-5 tokoe:valid" result="pass"/><test-case name="4679NISTSchema-SV-IV-atomic-string-enumeration-1 tokoe:valid" result="pass"/><test-case name="4680NISTXML-SV-IV-atomic-string-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="4681NISTXML-SV-IV-atomic-string-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="4682NISTXML-SV-IV-atomic-string-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="4683NISTXML-SV-IV-atomic-string-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="4684NISTXML-SV-IV-atomic-string-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="4685NISTSchema-SV-IV-atomic-string-enumeration-2 tokoe:valid" result="pass"/><test-case name="4686NISTXML-SV-IV-atomic-string-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="4687NISTXML-SV-IV-atomic-string-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="4688NISTXML-SV-IV-atomic-string-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="4689NISTXML-SV-IV-atomic-string-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="4690NISTXML-SV-IV-atomic-string-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="4691NISTSchema-SV-IV-atomic-string-enumeration-3 tokoe:valid" result="pass"/><test-case name="4692NISTXML-SV-IV-atomic-string-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="4693NISTXML-SV-IV-atomic-string-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="4694NISTXML-SV-IV-atomic-string-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="4695NISTXML-SV-IV-atomic-string-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="4696NISTXML-SV-IV-atomic-string-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="4697NISTSchema-SV-IV-atomic-string-enumeration-4 tokoe:valid" result="pass"/><test-case name="4698NISTXML-SV-IV-atomic-string-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="4699NISTXML-SV-IV-atomic-string-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="4700NISTXML-SV-IV-atomic-string-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="4701NISTXML-SV-IV-atomic-string-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="4702NISTXML-SV-IV-atomic-string-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="4703NISTSchema-SV-IV-atomic-string-enumeration-5 tokoe:valid" result="pass"/><test-case name="4704NISTXML-SV-IV-atomic-string-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="4705NISTXML-SV-IV-atomic-string-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="4706NISTXML-SV-IV-atomic-string-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="4707NISTXML-SV-IV-atomic-string-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="4708NISTXML-SV-IV-atomic-string-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="4709NISTSchema-SV-IV-atomic-string-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="4710NISTXML-SV-IV-atomic-string-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="4711NISTXML-SV-IV-atomic-string-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="4712NISTXML-SV-IV-atomic-string-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="4713NISTXML-SV-IV-atomic-string-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="4714NISTXML-SV-IV-atomic-string-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="4715NISTSchema-SV-IV-atomic-string-whiteSpace-2 tokoe:valid" result="pass"/><test-case name="4716NISTXML-SV-IV-atomic-string-whiteSpace-2-1 tokoe:valid" result="pass"/><test-case name="4717NISTXML-SV-IV-atomic-string-whiteSpace-2-2 tokoe:valid" result="pass"/><test-case name="4718NISTXML-SV-IV-atomic-string-whiteSpace-2-3 tokoe:valid" result="pass"/><test-case name="4719NISTXML-SV-IV-atomic-string-whiteSpace-2-4 tokoe:valid" result="pass"/><test-case name="4720NISTXML-SV-IV-atomic-string-whiteSpace-2-5 tokoe:valid" result="pass"/><test-case name="4721NISTSchema-SV-IV-atomic-string-whiteSpace-3 tokoe:valid" result="pass"/><test-case name="4722NISTXML-SV-IV-atomic-string-whiteSpace-3-1 tokoe:valid" result="pass"/><test-case name="4723NISTXML-SV-IV-atomic-string-whiteSpace-3-2 tokoe:valid" result="pass"/><test-case name="4724NISTXML-SV-IV-atomic-string-whiteSpace-3-3 tokoe:valid" result="pass"/><test-case name="4725NISTXML-SV-IV-atomic-string-whiteSpace-3-4 tokoe:valid" result="pass"/><test-case name="4726NISTXML-SV-IV-atomic-string-whiteSpace-3-5 tokoe:valid" result="pass"/><test-case name="4727NISTSchema-SV-IV-atomic-normalizedString-maxLength-1 tokoe:valid" result="pass"/><test-case name="4728NISTXML-SV-IV-atomic-normalizedString-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="4729NISTXML-SV-IV-atomic-normalizedString-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="4730NISTXML-SV-IV-atomic-normalizedString-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="4731NISTXML-SV-IV-atomic-normalizedString-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="4732NISTXML-SV-IV-atomic-normalizedString-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="4733NISTSchema-SV-IV-atomic-normalizedString-maxLength-2 tokoe:valid" result="pass"/><test-case name="4734NISTXML-SV-IV-atomic-normalizedString-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="4735NISTXML-SV-IV-atomic-normalizedString-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="4736NISTXML-SV-IV-atomic-normalizedString-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="4737NISTXML-SV-IV-atomic-normalizedString-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="4738NISTXML-SV-IV-atomic-normalizedString-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="4739NISTSchema-SV-IV-atomic-normalizedString-maxLength-3 tokoe:valid" result="pass"/><test-case name="4740NISTXML-SV-IV-atomic-normalizedString-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="4741NISTXML-SV-IV-atomic-normalizedString-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="4742NISTXML-SV-IV-atomic-normalizedString-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="4743NISTXML-SV-IV-atomic-normalizedString-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="4744NISTXML-SV-IV-atomic-normalizedString-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="4745NISTSchema-SV-IV-atomic-normalizedString-maxLength-4 tokoe:valid" result="pass"/><test-case name="4746NISTXML-SV-IV-atomic-normalizedString-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="4747NISTXML-SV-IV-atomic-normalizedString-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="4748NISTXML-SV-IV-atomic-normalizedString-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="4749NISTXML-SV-IV-atomic-normalizedString-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="4750NISTXML-SV-IV-atomic-normalizedString-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="4751NISTSchema-SV-IV-atomic-normalizedString-maxLength-5 tokoe:valid" result="pass"/><test-case name="4752NISTXML-SV-IV-atomic-normalizedString-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="4753NISTXML-SV-IV-atomic-normalizedString-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="4754NISTXML-SV-IV-atomic-normalizedString-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="4755NISTXML-SV-IV-atomic-normalizedString-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="4756NISTXML-SV-IV-atomic-normalizedString-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="4757NISTSchema-SV-IV-atomic-normalizedString-minLength-1 tokoe:valid" result="pass"/><test-case name="4758NISTXML-SV-IV-atomic-normalizedString-minLength-1-1 tokoe:valid" result="pass"/><test-case name="4759NISTXML-SV-IV-atomic-normalizedString-minLength-1-2 tokoe:valid" result="pass"/><test-case name="4760NISTXML-SV-IV-atomic-normalizedString-minLength-1-3 tokoe:valid" result="pass"/><test-case name="4761NISTXML-SV-IV-atomic-normalizedString-minLength-1-4 tokoe:valid" result="pass"/><test-case name="4762NISTXML-SV-IV-atomic-normalizedString-minLength-1-5 tokoe:valid" result="pass"/><test-case name="4763NISTSchema-SV-IV-atomic-normalizedString-minLength-2 tokoe:valid" result="pass"/><test-case name="4764NISTXML-SV-IV-atomic-normalizedString-minLength-2-1 tokoe:valid" result="pass"/><test-case name="4765NISTXML-SV-IV-atomic-normalizedString-minLength-2-2 tokoe:valid" result="pass"/><test-case name="4766NISTXML-SV-IV-atomic-normalizedString-minLength-2-3 tokoe:valid" result="pass"/><test-case name="4767NISTXML-SV-IV-atomic-normalizedString-minLength-2-4 tokoe:valid" result="pass"/><test-case name="4768NISTXML-SV-IV-atomic-normalizedString-minLength-2-5 tokoe:valid" result="pass"/><test-case name="4769NISTSchema-SV-IV-atomic-normalizedString-minLength-3 tokoe:valid" result="pass"/><test-case name="4770NISTXML-SV-IV-atomic-normalizedString-minLength-3-1 tokoe:valid" result="pass"/><test-case name="4771NISTXML-SV-IV-atomic-normalizedString-minLength-3-2 tokoe:valid" result="pass"/><test-case name="4772NISTXML-SV-IV-atomic-normalizedString-minLength-3-3 tokoe:valid" result="pass"/><test-case name="4773NISTXML-SV-IV-atomic-normalizedString-minLength-3-4 tokoe:valid" result="pass"/><test-case name="4774NISTXML-SV-IV-atomic-normalizedString-minLength-3-5 tokoe:valid" result="pass"/><test-case name="4775NISTSchema-SV-IV-atomic-normalizedString-minLength-4 tokoe:valid" result="pass"/><test-case name="4776NISTXML-SV-IV-atomic-normalizedString-minLength-4-1 tokoe:valid" result="pass"/><test-case name="4777NISTXML-SV-IV-atomic-normalizedString-minLength-4-2 tokoe:valid" result="pass"/><test-case name="4778NISTXML-SV-IV-atomic-normalizedString-minLength-4-3 tokoe:valid" result="pass"/><test-case name="4779NISTXML-SV-IV-atomic-normalizedString-minLength-4-4 tokoe:valid" result="pass"/><test-case name="4780NISTXML-SV-IV-atomic-normalizedString-minLength-4-5 tokoe:valid" result="pass"/><test-case name="4781NISTSchema-SV-IV-atomic-normalizedString-minLength-5 tokoe:valid" result="pass"/><test-case name="4782NISTXML-SV-IV-atomic-normalizedString-minLength-5-1 tokoe:valid" result="pass"/><test-case name="4783NISTXML-SV-IV-atomic-normalizedString-minLength-5-2 tokoe:valid" result="pass"/><test-case name="4784NISTXML-SV-IV-atomic-normalizedString-minLength-5-3 tokoe:valid" result="pass"/><test-case name="4785NISTXML-SV-IV-atomic-normalizedString-minLength-5-4 tokoe:valid" result="pass"/><test-case name="4786NISTXML-SV-IV-atomic-normalizedString-minLength-5-5 tokoe:valid" result="pass"/><test-case name="4787NISTSchema-SV-IV-atomic-normalizedString-length-1 tokoe:valid" result="pass"/><test-case name="4788NISTXML-SV-IV-atomic-normalizedString-length-1-1 tokoe:valid" result="pass"/><test-case name="4789NISTXML-SV-IV-atomic-normalizedString-length-1-2 tokoe:valid" result="pass"/><test-case name="4790NISTXML-SV-IV-atomic-normalizedString-length-1-3 tokoe:valid" result="pass"/><test-case name="4791NISTXML-SV-IV-atomic-normalizedString-length-1-4 tokoe:valid" result="pass"/><test-case name="4792NISTXML-SV-IV-atomic-normalizedString-length-1-5 tokoe:valid" result="pass"/><test-case name="4793NISTSchema-SV-IV-atomic-normalizedString-length-2 tokoe:valid" result="pass"/><test-case name="4794NISTXML-SV-IV-atomic-normalizedString-length-2-1 tokoe:valid" result="pass"/><test-case name="4795NISTXML-SV-IV-atomic-normalizedString-length-2-2 tokoe:valid" result="pass"/><test-case name="4796NISTXML-SV-IV-atomic-normalizedString-length-2-3 tokoe:valid" result="pass"/><test-case name="4797NISTXML-SV-IV-atomic-normalizedString-length-2-4 tokoe:valid" result="pass"/><test-case name="4798NISTXML-SV-IV-atomic-normalizedString-length-2-5 tokoe:valid" result="pass"/><test-case name="4799NISTSchema-SV-IV-atomic-normalizedString-length-3 tokoe:valid" result="pass"/><test-case name="4800NISTXML-SV-IV-atomic-normalizedString-length-3-1 tokoe:valid" result="pass"/><test-case name="4801NISTXML-SV-IV-atomic-normalizedString-length-3-2 tokoe:valid" result="pass"/><test-case name="4802NISTXML-SV-IV-atomic-normalizedString-length-3-3 tokoe:valid" result="pass"/><test-case name="4803NISTXML-SV-IV-atomic-normalizedString-length-3-4 tokoe:valid" result="pass"/><test-case name="4804NISTXML-SV-IV-atomic-normalizedString-length-3-5 tokoe:valid" result="pass"/><test-case name="4805NISTSchema-SV-IV-atomic-normalizedString-length-4 tokoe:valid" result="pass"/><test-case name="4806NISTXML-SV-IV-atomic-normalizedString-length-4-1 tokoe:valid" result="pass"/><test-case name="4807NISTXML-SV-IV-atomic-normalizedString-length-4-2 tokoe:valid" result="pass"/><test-case name="4808NISTXML-SV-IV-atomic-normalizedString-length-4-3 tokoe:valid" result="pass"/><test-case name="4809NISTXML-SV-IV-atomic-normalizedString-length-4-4 tokoe:valid" result="pass"/><test-case name="4810NISTXML-SV-IV-atomic-normalizedString-length-4-5 tokoe:valid" result="pass"/><test-case name="4811NISTSchema-SV-IV-atomic-normalizedString-length-5 tokoe:valid" result="pass"/><test-case name="4812NISTXML-SV-IV-atomic-normalizedString-length-5-1 tokoe:valid" result="pass"/><test-case name="4813NISTXML-SV-IV-atomic-normalizedString-length-5-2 tokoe:valid" result="pass"/><test-case name="4814NISTXML-SV-IV-atomic-normalizedString-length-5-3 tokoe:valid" result="pass"/><test-case name="4815NISTXML-SV-IV-atomic-normalizedString-length-5-4 tokoe:valid" result="pass"/><test-case name="4816NISTXML-SV-IV-atomic-normalizedString-length-5-5 tokoe:valid" result="pass"/><test-case name="4817NISTSchema-SV-IV-atomic-normalizedString-pattern-1 tokoe:valid" result="pass"/><test-case name="4818NISTXML-SV-IV-atomic-normalizedString-pattern-1-1 tokoe:valid" result="pass"/><test-case name="4819NISTXML-SV-IV-atomic-normalizedString-pattern-1-2 tokoe:valid" result="pass"/><test-case name="4820NISTXML-SV-IV-atomic-normalizedString-pattern-1-3 tokoe:valid" result="pass"/><test-case name="4821NISTXML-SV-IV-atomic-normalizedString-pattern-1-4 tokoe:valid" result="pass"/><test-case name="4822NISTXML-SV-IV-atomic-normalizedString-pattern-1-5 tokoe:valid" result="pass"/><test-case name="4823NISTSchema-SV-IV-atomic-normalizedString-pattern-2 tokoe:valid" result="pass"/><test-case name="4824NISTXML-SV-IV-atomic-normalizedString-pattern-2-1 tokoe:valid" result="pass"/><test-case name="4825NISTXML-SV-IV-atomic-normalizedString-pattern-2-2 tokoe:valid" result="pass"/><test-case name="4826NISTXML-SV-IV-atomic-normalizedString-pattern-2-3 tokoe:valid" result="pass"/><test-case name="4827NISTXML-SV-IV-atomic-normalizedString-pattern-2-4 tokoe:valid" result="pass"/><test-case name="4828NISTXML-SV-IV-atomic-normalizedString-pattern-2-5 tokoe:valid" result="pass"/><test-case name="4829NISTSchema-SV-IV-atomic-normalizedString-pattern-3 tokoe:valid" result="pass"/><test-case name="4830NISTXML-SV-IV-atomic-normalizedString-pattern-3-1 tokoe:valid" result="pass"/><test-case name="4831NISTXML-SV-IV-atomic-normalizedString-pattern-3-2 tokoe:valid" result="pass"/><test-case name="4832NISTXML-SV-IV-atomic-normalizedString-pattern-3-3 tokoe:valid" result="pass"/><test-case name="4833NISTXML-SV-IV-atomic-normalizedString-pattern-3-4 tokoe:valid" result="pass"/><test-case name="4834NISTXML-SV-IV-atomic-normalizedString-pattern-3-5 tokoe:valid" result="pass"/><test-case name="4835NISTSchema-SV-IV-atomic-normalizedString-pattern-4 tokoe:valid" result="pass"/><test-case name="4836NISTXML-SV-IV-atomic-normalizedString-pattern-4-1 tokoe:valid" result="pass"/><test-case name="4837NISTXML-SV-IV-atomic-normalizedString-pattern-4-2 tokoe:valid" result="pass"/><test-case name="4838NISTXML-SV-IV-atomic-normalizedString-pattern-4-3 tokoe:valid" result="pass"/><test-case name="4839NISTXML-SV-IV-atomic-normalizedString-pattern-4-4 tokoe:valid" result="pass"/><test-case name="4840NISTXML-SV-IV-atomic-normalizedString-pattern-4-5 tokoe:valid" result="pass"/><test-case name="4841NISTSchema-SV-IV-atomic-normalizedString-pattern-5 tokoe:valid" result="pass"/><test-case name="4842NISTXML-SV-IV-atomic-normalizedString-pattern-5-1 tokoe:valid" result="pass"/><test-case name="4843NISTXML-SV-IV-atomic-normalizedString-pattern-5-2 tokoe:valid" result="pass"/><test-case name="4844NISTXML-SV-IV-atomic-normalizedString-pattern-5-3 tokoe:valid" result="pass"/><test-case name="4845NISTXML-SV-IV-atomic-normalizedString-pattern-5-4 tokoe:valid" result="pass"/><test-case name="4846NISTXML-SV-IV-atomic-normalizedString-pattern-5-5 tokoe:valid" result="pass"/><test-case name="4847NISTSchema-SV-IV-atomic-normalizedString-enumeration-1 tokoe:valid" result="pass"/><test-case name="4848NISTXML-SV-IV-atomic-normalizedString-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="4849NISTXML-SV-IV-atomic-normalizedString-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="4850NISTXML-SV-IV-atomic-normalizedString-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="4851NISTXML-SV-IV-atomic-normalizedString-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="4852NISTXML-SV-IV-atomic-normalizedString-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="4853NISTSchema-SV-IV-atomic-normalizedString-enumeration-2 tokoe:valid" result="pass"/><test-case name="4854NISTXML-SV-IV-atomic-normalizedString-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="4855NISTXML-SV-IV-atomic-normalizedString-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="4856NISTXML-SV-IV-atomic-normalizedString-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="4857NISTXML-SV-IV-atomic-normalizedString-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="4858NISTXML-SV-IV-atomic-normalizedString-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="4859NISTSchema-SV-IV-atomic-normalizedString-enumeration-3 tokoe:valid" result="pass"/><test-case name="4860NISTXML-SV-IV-atomic-normalizedString-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="4861NISTXML-SV-IV-atomic-normalizedString-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="4862NISTXML-SV-IV-atomic-normalizedString-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="4863NISTXML-SV-IV-atomic-normalizedString-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="4864NISTXML-SV-IV-atomic-normalizedString-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="4865NISTSchema-SV-IV-atomic-normalizedString-enumeration-4 tokoe:valid" result="pass"/><test-case name="4866NISTXML-SV-IV-atomic-normalizedString-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="4867NISTXML-SV-IV-atomic-normalizedString-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="4868NISTXML-SV-IV-atomic-normalizedString-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="4869NISTXML-SV-IV-atomic-normalizedString-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="4870NISTXML-SV-IV-atomic-normalizedString-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="4871NISTSchema-SV-IV-atomic-normalizedString-enumeration-5 tokoe:valid" result="pass"/><test-case name="4872NISTXML-SV-IV-atomic-normalizedString-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="4873NISTXML-SV-IV-atomic-normalizedString-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="4874NISTXML-SV-IV-atomic-normalizedString-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="4875NISTXML-SV-IV-atomic-normalizedString-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="4876NISTXML-SV-IV-atomic-normalizedString-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="4877NISTSchema-SV-IV-atomic-normalizedString-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="4878NISTXML-SV-IV-atomic-normalizedString-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="4879NISTXML-SV-IV-atomic-normalizedString-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="4880NISTXML-SV-IV-atomic-normalizedString-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="4881NISTXML-SV-IV-atomic-normalizedString-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="4882NISTXML-SV-IV-atomic-normalizedString-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="4883NISTSchema-SV-IV-atomic-normalizedString-whiteSpace-2 tokoe:valid" result="pass"/><test-case name="4884NISTXML-SV-IV-atomic-normalizedString-whiteSpace-2-1 tokoe:valid" result="pass"/><test-case name="4885NISTXML-SV-IV-atomic-normalizedString-whiteSpace-2-2 tokoe:valid" result="pass"/><test-case name="4886NISTXML-SV-IV-atomic-normalizedString-whiteSpace-2-3 tokoe:valid" result="pass"/><test-case name="4887NISTXML-SV-IV-atomic-normalizedString-whiteSpace-2-4 tokoe:valid" result="pass"/><test-case name="4888NISTXML-SV-IV-atomic-normalizedString-whiteSpace-2-5 tokoe:valid" result="pass"/><test-case name="4889NISTSchema-SV-IV-atomic-token-maxLength-1 tokoe:valid" result="pass"/><test-case name="4890NISTXML-SV-IV-atomic-token-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="4891NISTXML-SV-IV-atomic-token-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="4892NISTXML-SV-IV-atomic-token-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="4893NISTXML-SV-IV-atomic-token-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="4894NISTXML-SV-IV-atomic-token-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="4895NISTSchema-SV-IV-atomic-token-maxLength-2 tokoe:valid" result="pass"/><test-case name="4896NISTXML-SV-IV-atomic-token-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="4897NISTXML-SV-IV-atomic-token-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="4898NISTXML-SV-IV-atomic-token-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="4899NISTXML-SV-IV-atomic-token-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="4900NISTXML-SV-IV-atomic-token-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="4901NISTSchema-SV-IV-atomic-token-maxLength-3 tokoe:valid" result="pass"/><test-case name="4902NISTXML-SV-IV-atomic-token-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="4903NISTXML-SV-IV-atomic-token-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="4904NISTXML-SV-IV-atomic-token-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="4905NISTXML-SV-IV-atomic-token-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="4906NISTXML-SV-IV-atomic-token-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="4907NISTSchema-SV-IV-atomic-token-maxLength-4 tokoe:valid" result="pass"/><test-case name="4908NISTXML-SV-IV-atomic-token-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="4909NISTXML-SV-IV-atomic-token-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="4910NISTXML-SV-IV-atomic-token-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="4911NISTXML-SV-IV-atomic-token-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="4912NISTXML-SV-IV-atomic-token-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="4913NISTSchema-SV-IV-atomic-token-maxLength-5 tokoe:valid" result="pass"/><test-case name="4914NISTXML-SV-IV-atomic-token-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="4915NISTXML-SV-IV-atomic-token-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="4916NISTXML-SV-IV-atomic-token-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="4917NISTXML-SV-IV-atomic-token-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="4918NISTXML-SV-IV-atomic-token-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="4919NISTSchema-SV-IV-atomic-token-minLength-1 tokoe:valid" result="pass"/><test-case name="4920NISTXML-SV-IV-atomic-token-minLength-1-1 tokoe:valid" result="pass"/><test-case name="4921NISTXML-SV-IV-atomic-token-minLength-1-2 tokoe:valid" result="pass"/><test-case name="4922NISTXML-SV-IV-atomic-token-minLength-1-3 tokoe:valid" result="pass"/><test-case name="4923NISTXML-SV-IV-atomic-token-minLength-1-4 tokoe:valid" result="pass"/><test-case name="4924NISTXML-SV-IV-atomic-token-minLength-1-5 tokoe:valid" result="pass"/><test-case name="4925NISTSchema-SV-IV-atomic-token-minLength-2 tokoe:valid" result="pass"/><test-case name="4926NISTXML-SV-IV-atomic-token-minLength-2-1 tokoe:valid" result="pass"/><test-case name="4927NISTXML-SV-IV-atomic-token-minLength-2-2 tokoe:valid" result="pass"/><test-case name="4928NISTXML-SV-IV-atomic-token-minLength-2-3 tokoe:valid" result="pass"/><test-case name="4929NISTXML-SV-IV-atomic-token-minLength-2-4 tokoe:valid" result="pass"/><test-case name="4930NISTXML-SV-IV-atomic-token-minLength-2-5 tokoe:valid" result="pass"/><test-case name="4931NISTSchema-SV-IV-atomic-token-minLength-3 tokoe:valid" result="pass"/><test-case name="4932NISTXML-SV-IV-atomic-token-minLength-3-1 tokoe:valid" result="pass"/><test-case name="4933NISTXML-SV-IV-atomic-token-minLength-3-2 tokoe:valid" result="pass"/><test-case name="4934NISTXML-SV-IV-atomic-token-minLength-3-3 tokoe:valid" result="pass"/><test-case name="4935NISTXML-SV-IV-atomic-token-minLength-3-4 tokoe:valid" result="pass"/><test-case name="4936NISTXML-SV-IV-atomic-token-minLength-3-5 tokoe:valid" result="pass"/><test-case name="4937NISTSchema-SV-IV-atomic-token-minLength-4 tokoe:valid" result="pass"/><test-case name="4938NISTXML-SV-IV-atomic-token-minLength-4-1 tokoe:valid" result="pass"/><test-case name="4939NISTXML-SV-IV-atomic-token-minLength-4-2 tokoe:valid" result="pass"/><test-case name="4940NISTXML-SV-IV-atomic-token-minLength-4-3 tokoe:valid" result="pass"/><test-case name="4941NISTXML-SV-IV-atomic-token-minLength-4-4 tokoe:valid" result="pass"/><test-case name="4942NISTXML-SV-IV-atomic-token-minLength-4-5 tokoe:valid" result="pass"/><test-case name="4943NISTSchema-SV-IV-atomic-token-minLength-5 tokoe:valid" result="pass"/><test-case name="4944NISTXML-SV-IV-atomic-token-minLength-5-1 tokoe:valid" result="pass"/><test-case name="4945NISTXML-SV-IV-atomic-token-minLength-5-2 tokoe:valid" result="pass"/><test-case name="4946NISTXML-SV-IV-atomic-token-minLength-5-3 tokoe:valid" result="pass"/><test-case name="4947NISTXML-SV-IV-atomic-token-minLength-5-4 tokoe:valid" result="pass"/><test-case name="4948NISTXML-SV-IV-atomic-token-minLength-5-5 tokoe:valid" result="pass"/><test-case name="4949NISTSchema-SV-IV-atomic-token-length-1 tokoe:valid" result="pass"/><test-case name="4950NISTXML-SV-IV-atomic-token-length-1-1 tokoe:valid" result="pass"/><test-case name="4951NISTXML-SV-IV-atomic-token-length-1-2 tokoe:valid" result="pass"/><test-case name="4952NISTXML-SV-IV-atomic-token-length-1-3 tokoe:valid" result="pass"/><test-case name="4953NISTXML-SV-IV-atomic-token-length-1-4 tokoe:valid" result="pass"/><test-case name="4954NISTXML-SV-IV-atomic-token-length-1-5 tokoe:valid" result="pass"/><test-case name="4955NISTSchema-SV-IV-atomic-token-length-2 tokoe:valid" result="pass"/><test-case name="4956NISTXML-SV-IV-atomic-token-length-2-1 tokoe:valid" result="pass"/><test-case name="4957NISTXML-SV-IV-atomic-token-length-2-2 tokoe:valid" result="pass"/><test-case name="4958NISTXML-SV-IV-atomic-token-length-2-3 tokoe:valid" result="pass"/><test-case name="4959NISTXML-SV-IV-atomic-token-length-2-4 tokoe:valid" result="pass"/><test-case name="4960NISTXML-SV-IV-atomic-token-length-2-5 tokoe:valid" result="pass"/><test-case name="4961NISTSchema-SV-IV-atomic-token-length-3 tokoe:valid" result="pass"/><test-case name="4962NISTXML-SV-IV-atomic-token-length-3-1 tokoe:valid" result="pass"/><test-case name="4963NISTXML-SV-IV-atomic-token-length-3-2 tokoe:valid" result="pass"/><test-case name="4964NISTXML-SV-IV-atomic-token-length-3-3 tokoe:valid" result="pass"/><test-case name="4965NISTXML-SV-IV-atomic-token-length-3-4 tokoe:valid" result="pass"/><test-case name="4966NISTXML-SV-IV-atomic-token-length-3-5 tokoe:valid" result="pass"/><test-case name="4967NISTSchema-SV-IV-atomic-token-length-4 tokoe:valid" result="pass"/><test-case name="4968NISTXML-SV-IV-atomic-token-length-4-1 tokoe:valid" result="pass"/><test-case name="4969NISTXML-SV-IV-atomic-token-length-4-2 tokoe:valid" result="pass"/><test-case name="4970NISTXML-SV-IV-atomic-token-length-4-3 tokoe:valid" result="pass"/><test-case name="4971NISTXML-SV-IV-atomic-token-length-4-4 tokoe:valid" result="pass"/><test-case name="4972NISTXML-SV-IV-atomic-token-length-4-5 tokoe:valid" result="pass"/><test-case name="4973NISTSchema-SV-IV-atomic-token-length-5 tokoe:valid" result="pass"/><test-case name="4974NISTXML-SV-IV-atomic-token-length-5-1 tokoe:valid" result="pass"/><test-case name="4975NISTXML-SV-IV-atomic-token-length-5-2 tokoe:valid" result="pass"/><test-case name="4976NISTXML-SV-IV-atomic-token-length-5-3 tokoe:valid" result="pass"/><test-case name="4977NISTXML-SV-IV-atomic-token-length-5-4 tokoe:valid" result="pass"/><test-case name="4978NISTXML-SV-IV-atomic-token-length-5-5 tokoe:valid" result="pass"/><test-case name="4979NISTSchema-SV-IV-atomic-token-pattern-1 tokoe:valid" result="pass"/><test-case name="4980NISTXML-SV-IV-atomic-token-pattern-1-1 tokoe:valid" result="pass"/><test-case name="4981NISTXML-SV-IV-atomic-token-pattern-1-2 tokoe:valid" result="pass"/><test-case name="4982NISTXML-SV-IV-atomic-token-pattern-1-3 tokoe:valid" result="pass"/><test-case name="4983NISTXML-SV-IV-atomic-token-pattern-1-4 tokoe:valid" result="pass"/><test-case name="4984NISTXML-SV-IV-atomic-token-pattern-1-5 tokoe:valid" result="pass"/><test-case name="4985NISTSchema-SV-IV-atomic-token-pattern-2 tokoe:valid" result="pass"/><test-case name="4986NISTXML-SV-IV-atomic-token-pattern-2-1 tokoe:valid" result="pass"/><test-case name="4987NISTXML-SV-IV-atomic-token-pattern-2-2 tokoe:valid" result="pass"/><test-case name="4988NISTXML-SV-IV-atomic-token-pattern-2-3 tokoe:valid" result="pass"/><test-case name="4989NISTXML-SV-IV-atomic-token-pattern-2-4 tokoe:valid" result="pass"/><test-case name="4990NISTXML-SV-IV-atomic-token-pattern-2-5 tokoe:valid" result="pass"/><test-case name="4991NISTSchema-SV-IV-atomic-token-pattern-3 tokoe:valid" result="pass"/><test-case name="4992NISTXML-SV-IV-atomic-token-pattern-3-1 tokoe:valid" result="pass"/><test-case name="4993NISTXML-SV-IV-atomic-token-pattern-3-2 tokoe:valid" result="pass"/><test-case name="4994NISTXML-SV-IV-atomic-token-pattern-3-3 tokoe:valid" result="pass"/><test-case name="4995NISTXML-SV-IV-atomic-token-pattern-3-4 tokoe:valid" result="pass"/><test-case name="4996NISTXML-SV-IV-atomic-token-pattern-3-5 tokoe:valid" result="pass"/><test-case name="4997NISTSchema-SV-IV-atomic-token-pattern-4 tokoe:valid" result="pass"/><test-case name="4998NISTXML-SV-IV-atomic-token-pattern-4-1 tokoe:valid" result="pass"/><test-case name="4999NISTXML-SV-IV-atomic-token-pattern-4-2 tokoe:valid" result="pass"/><test-case name="5000NISTXML-SV-IV-atomic-token-pattern-4-3 tokoe:valid" result="pass"/><test-case name="5001NISTXML-SV-IV-atomic-token-pattern-4-4 tokoe:valid" result="pass"/><test-case name="5002NISTXML-SV-IV-atomic-token-pattern-4-5 tokoe:valid" result="pass"/><test-case name="5003NISTSchema-SV-IV-atomic-token-pattern-5 tokoe:valid" result="pass"/><test-case name="5004NISTXML-SV-IV-atomic-token-pattern-5-1 tokoe:valid" result="pass"/><test-case name="5005NISTXML-SV-IV-atomic-token-pattern-5-2 tokoe:valid" result="pass"/><test-case name="5006NISTXML-SV-IV-atomic-token-pattern-5-3 tokoe:valid" result="pass"/><test-case name="5007NISTXML-SV-IV-atomic-token-pattern-5-4 tokoe:valid" result="pass"/><test-case name="5008NISTXML-SV-IV-atomic-token-pattern-5-5 tokoe:valid" result="pass"/><test-case name="5009NISTSchema-SV-IV-atomic-token-enumeration-1 tokoe:valid" result="pass"/><test-case name="5010NISTXML-SV-IV-atomic-token-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="5011NISTXML-SV-IV-atomic-token-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="5012NISTXML-SV-IV-atomic-token-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="5013NISTXML-SV-IV-atomic-token-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="5014NISTXML-SV-IV-atomic-token-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="5015NISTSchema-SV-IV-atomic-token-enumeration-2 tokoe:valid" result="pass"/><test-case name="5016NISTXML-SV-IV-atomic-token-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="5017NISTXML-SV-IV-atomic-token-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="5018NISTXML-SV-IV-atomic-token-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="5019NISTXML-SV-IV-atomic-token-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="5020NISTXML-SV-IV-atomic-token-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="5021NISTSchema-SV-IV-atomic-token-enumeration-3 tokoe:valid" result="pass"/><test-case name="5022NISTXML-SV-IV-atomic-token-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="5023NISTXML-SV-IV-atomic-token-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="5024NISTXML-SV-IV-atomic-token-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="5025NISTXML-SV-IV-atomic-token-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="5026NISTXML-SV-IV-atomic-token-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="5027NISTSchema-SV-IV-atomic-token-enumeration-4 tokoe:valid" result="pass"/><test-case name="5028NISTXML-SV-IV-atomic-token-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="5029NISTXML-SV-IV-atomic-token-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="5030NISTXML-SV-IV-atomic-token-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="5031NISTXML-SV-IV-atomic-token-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="5032NISTXML-SV-IV-atomic-token-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="5033NISTSchema-SV-IV-atomic-token-enumeration-5 tokoe:valid" result="pass"/><test-case name="5034NISTXML-SV-IV-atomic-token-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="5035NISTXML-SV-IV-atomic-token-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="5036NISTXML-SV-IV-atomic-token-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="5037NISTXML-SV-IV-atomic-token-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="5038NISTXML-SV-IV-atomic-token-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="5039NISTSchema-SV-IV-atomic-token-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="5040NISTXML-SV-IV-atomic-token-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="5041NISTXML-SV-IV-atomic-token-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="5042NISTXML-SV-IV-atomic-token-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="5043NISTXML-SV-IV-atomic-token-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="5044NISTXML-SV-IV-atomic-token-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="5045NISTSchema-SV-IV-atomic-Name-maxLength-1 tokoe:valid" result="pass"/><test-case name="5046NISTXML-SV-IV-atomic-Name-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="5047NISTXML-SV-IV-atomic-Name-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="5048NISTXML-SV-IV-atomic-Name-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="5049NISTXML-SV-IV-atomic-Name-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="5050NISTXML-SV-IV-atomic-Name-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="5051NISTSchema-SV-IV-atomic-Name-maxLength-2 tokoe:valid" result="pass"/><test-case name="5052NISTXML-SV-IV-atomic-Name-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="5053NISTXML-SV-IV-atomic-Name-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="5054NISTXML-SV-IV-atomic-Name-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="5055NISTXML-SV-IV-atomic-Name-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="5056NISTXML-SV-IV-atomic-Name-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="5057NISTSchema-SV-IV-atomic-Name-maxLength-3 tokoe:valid" result="pass"/><test-case name="5058NISTXML-SV-IV-atomic-Name-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="5059NISTXML-SV-IV-atomic-Name-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="5060NISTXML-SV-IV-atomic-Name-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="5061NISTXML-SV-IV-atomic-Name-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="5062NISTXML-SV-IV-atomic-Name-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="5063NISTSchema-SV-IV-atomic-Name-maxLength-4 tokoe:valid" result="pass"/><test-case name="5064NISTXML-SV-IV-atomic-Name-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="5065NISTXML-SV-IV-atomic-Name-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="5066NISTXML-SV-IV-atomic-Name-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="5067NISTXML-SV-IV-atomic-Name-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="5068NISTXML-SV-IV-atomic-Name-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="5069NISTSchema-SV-IV-atomic-Name-maxLength-5 tokoe:valid" result="pass"/><test-case name="5070NISTXML-SV-IV-atomic-Name-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="5071NISTXML-SV-IV-atomic-Name-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="5072NISTXML-SV-IV-atomic-Name-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="5073NISTXML-SV-IV-atomic-Name-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="5074NISTXML-SV-IV-atomic-Name-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="5075NISTSchema-SV-IV-atomic-Name-minLength-1 tokoe:valid" result="pass"/><test-case name="5076NISTXML-SV-IV-atomic-Name-minLength-1-1 tokoe:valid" result="pass"/><test-case name="5077NISTXML-SV-IV-atomic-Name-minLength-1-2 tokoe:valid" result="pass"/><test-case name="5078NISTXML-SV-IV-atomic-Name-minLength-1-3 tokoe:valid" result="pass"/><test-case name="5079NISTXML-SV-IV-atomic-Name-minLength-1-4 tokoe:valid" result="pass"/><test-case name="5080NISTXML-SV-IV-atomic-Name-minLength-1-5 tokoe:valid" result="pass"/><test-case name="5081NISTSchema-SV-IV-atomic-Name-minLength-2 tokoe:valid" result="pass"/><test-case name="5082NISTXML-SV-IV-atomic-Name-minLength-2-1 tokoe:valid" result="pass"/><test-case name="5083NISTXML-SV-IV-atomic-Name-minLength-2-2 tokoe:valid" result="pass"/><test-case name="5084NISTXML-SV-IV-atomic-Name-minLength-2-3 tokoe:valid" result="pass"/><test-case name="5085NISTXML-SV-IV-atomic-Name-minLength-2-4 tokoe:valid" result="pass"/><test-case name="5086NISTXML-SV-IV-atomic-Name-minLength-2-5 tokoe:valid" result="pass"/><test-case name="5087NISTSchema-SV-IV-atomic-Name-minLength-3 tokoe:valid" result="pass"/><test-case name="5088NISTXML-SV-IV-atomic-Name-minLength-3-1 tokoe:valid" result="pass"/><test-case name="5089NISTXML-SV-IV-atomic-Name-minLength-3-2 tokoe:valid" result="pass"/><test-case name="5090NISTXML-SV-IV-atomic-Name-minLength-3-3 tokoe:valid" result="pass"/><test-case name="5091NISTXML-SV-IV-atomic-Name-minLength-3-4 tokoe:valid" result="pass"/><test-case name="5092NISTXML-SV-IV-atomic-Name-minLength-3-5 tokoe:valid" result="pass"/><test-case name="5093NISTSchema-SV-IV-atomic-Name-minLength-4 tokoe:valid" result="pass"/><test-case name="5094NISTXML-SV-IV-atomic-Name-minLength-4-1 tokoe:valid" result="pass"/><test-case name="5095NISTXML-SV-IV-atomic-Name-minLength-4-2 tokoe:valid" result="pass"/><test-case name="5096NISTXML-SV-IV-atomic-Name-minLength-4-3 tokoe:valid" result="pass"/><test-case name="5097NISTXML-SV-IV-atomic-Name-minLength-4-4 tokoe:valid" result="pass"/><test-case name="5098NISTXML-SV-IV-atomic-Name-minLength-4-5 tokoe:valid" result="pass"/><test-case name="5099NISTSchema-SV-IV-atomic-Name-minLength-5 tokoe:valid" result="pass"/><test-case name="5100NISTXML-SV-IV-atomic-Name-minLength-5-1 tokoe:valid" result="pass"/><test-case name="5101NISTXML-SV-IV-atomic-Name-minLength-5-2 tokoe:valid" result="pass"/><test-case name="5102NISTXML-SV-IV-atomic-Name-minLength-5-3 tokoe:valid" result="pass"/><test-case name="5103NISTXML-SV-IV-atomic-Name-minLength-5-4 tokoe:valid" result="pass"/><test-case name="5104NISTXML-SV-IV-atomic-Name-minLength-5-5 tokoe:valid" result="pass"/><test-case name="5105NISTSchema-SV-IV-atomic-Name-length-1 tokoe:valid" result="pass"/><test-case name="5106NISTXML-SV-IV-atomic-Name-length-1-1 tokoe:valid" result="pass"/><test-case name="5107NISTXML-SV-IV-atomic-Name-length-1-2 tokoe:valid" result="pass"/><test-case name="5108NISTXML-SV-IV-atomic-Name-length-1-3 tokoe:valid" result="pass"/><test-case name="5109NISTXML-SV-IV-atomic-Name-length-1-4 tokoe:valid" result="pass"/><test-case name="5110NISTXML-SV-IV-atomic-Name-length-1-5 tokoe:valid" result="pass"/><test-case name="5111NISTSchema-SV-IV-atomic-Name-length-2 tokoe:valid" result="pass"/><test-case name="5112NISTXML-SV-IV-atomic-Name-length-2-1 tokoe:valid" result="pass"/><test-case name="5113NISTXML-SV-IV-atomic-Name-length-2-2 tokoe:valid" result="pass"/><test-case name="5114NISTXML-SV-IV-atomic-Name-length-2-3 tokoe:valid" result="pass"/><test-case name="5115NISTXML-SV-IV-atomic-Name-length-2-4 tokoe:valid" result="pass"/><test-case name="5116NISTXML-SV-IV-atomic-Name-length-2-5 tokoe:valid" result="pass"/><test-case name="5117NISTSchema-SV-IV-atomic-Name-length-3 tokoe:valid" result="pass"/><test-case name="5118NISTXML-SV-IV-atomic-Name-length-3-1 tokoe:valid" result="pass"/><test-case name="5119NISTXML-SV-IV-atomic-Name-length-3-2 tokoe:valid" result="pass"/><test-case name="5120NISTXML-SV-IV-atomic-Name-length-3-3 tokoe:valid" result="pass"/><test-case name="5121NISTXML-SV-IV-atomic-Name-length-3-4 tokoe:valid" result="pass"/><test-case name="5122NISTXML-SV-IV-atomic-Name-length-3-5 tokoe:valid" result="pass"/><test-case name="5123NISTSchema-SV-IV-atomic-Name-length-4 tokoe:valid" result="pass"/><test-case name="5124NISTXML-SV-IV-atomic-Name-length-4-1 tokoe:valid" result="pass"/><test-case name="5125NISTXML-SV-IV-atomic-Name-length-4-2 tokoe:valid" result="pass"/><test-case name="5126NISTXML-SV-IV-atomic-Name-length-4-3 tokoe:valid" result="pass"/><test-case name="5127NISTXML-SV-IV-atomic-Name-length-4-4 tokoe:valid" result="pass"/><test-case name="5128NISTXML-SV-IV-atomic-Name-length-4-5 tokoe:valid" result="pass"/><test-case name="5129NISTSchema-SV-IV-atomic-Name-length-5 tokoe:valid" result="pass"/><test-case name="5130NISTXML-SV-IV-atomic-Name-length-5-1 tokoe:valid" result="pass"/><test-case name="5131NISTXML-SV-IV-atomic-Name-length-5-2 tokoe:valid" result="pass"/><test-case name="5132NISTXML-SV-IV-atomic-Name-length-5-3 tokoe:valid" result="pass"/><test-case name="5133NISTXML-SV-IV-atomic-Name-length-5-4 tokoe:valid" result="pass"/><test-case name="5134NISTXML-SV-IV-atomic-Name-length-5-5 tokoe:valid" result="pass"/><test-case name="5135NISTSchema-SV-IV-atomic-Name-pattern-1 tokoe:valid" result="pass"/><test-case name="5136NISTXML-SV-IV-atomic-Name-pattern-1-1 tokoe:valid" result="pass"/><test-case name="5137NISTXML-SV-IV-atomic-Name-pattern-1-2 tokoe:valid" result="pass"/><test-case name="5138NISTXML-SV-IV-atomic-Name-pattern-1-3 tokoe:valid" result="pass"/><test-case name="5139NISTXML-SV-IV-atomic-Name-pattern-1-4 tokoe:valid" result="pass"/><test-case name="5140NISTXML-SV-IV-atomic-Name-pattern-1-5 tokoe:valid" result="pass"/><test-case name="5141NISTSchema-SV-IV-atomic-Name-pattern-2 tokoe:valid" result="pass"/><test-case name="5142NISTXML-SV-IV-atomic-Name-pattern-2-1 tokoe:valid" result="pass"/><test-case name="5143NISTXML-SV-IV-atomic-Name-pattern-2-2 tokoe:valid" result="pass"/><test-case name="5144NISTXML-SV-IV-atomic-Name-pattern-2-3 tokoe:valid" result="pass"/><test-case name="5145NISTXML-SV-IV-atomic-Name-pattern-2-4 tokoe:valid" result="pass"/><test-case name="5146NISTXML-SV-IV-atomic-Name-pattern-2-5 tokoe:valid" result="pass"/><test-case name="5147NISTSchema-SV-IV-atomic-Name-pattern-3 tokoe:valid" result="pass"/><test-case name="5148NISTXML-SV-IV-atomic-Name-pattern-3-1 tokoe:valid" result="pass"/><test-case name="5149NISTXML-SV-IV-atomic-Name-pattern-3-2 tokoe:valid" result="pass"/><test-case name="5150NISTXML-SV-IV-atomic-Name-pattern-3-3 tokoe:valid" result="pass"/><test-case name="5151NISTXML-SV-IV-atomic-Name-pattern-3-4 tokoe:valid" result="pass"/><test-case name="5152NISTXML-SV-IV-atomic-Name-pattern-3-5 tokoe:valid" result="pass"/><test-case name="5153NISTSchema-SV-IV-atomic-Name-pattern-4 tokoe:valid" result="pass"/><test-case name="5154NISTXML-SV-IV-atomic-Name-pattern-4-1 tokoe:valid" result="pass"/><test-case name="5155NISTXML-SV-IV-atomic-Name-pattern-4-2 tokoe:valid" result="pass"/><test-case name="5156NISTXML-SV-IV-atomic-Name-pattern-4-3 tokoe:valid" result="pass"/><test-case name="5157NISTXML-SV-IV-atomic-Name-pattern-4-4 tokoe:valid" result="pass"/><test-case name="5158NISTXML-SV-IV-atomic-Name-pattern-4-5 tokoe:valid" result="pass"/><test-case name="5159NISTSchema-SV-IV-atomic-Name-pattern-5 tokoe:valid" result="pass"/><test-case name="5160NISTXML-SV-IV-atomic-Name-pattern-5-1 tokoe:valid" result="pass"/><test-case name="5161NISTXML-SV-IV-atomic-Name-pattern-5-2 tokoe:valid" result="pass"/><test-case name="5162NISTXML-SV-IV-atomic-Name-pattern-5-3 tokoe:valid" result="pass"/><test-case name="5163NISTXML-SV-IV-atomic-Name-pattern-5-4 tokoe:valid" result="pass"/><test-case name="5164NISTXML-SV-IV-atomic-Name-pattern-5-5 tokoe:valid" result="pass"/><test-case name="5165NISTSchema-SV-IV-atomic-Name-enumeration-1 tokoe:valid" result="pass"/><test-case name="5166NISTXML-SV-IV-atomic-Name-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="5167NISTXML-SV-IV-atomic-Name-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="5168NISTXML-SV-IV-atomic-Name-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="5169NISTXML-SV-IV-atomic-Name-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="5170NISTXML-SV-IV-atomic-Name-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="5171NISTSchema-SV-IV-atomic-Name-enumeration-2 tokoe:valid" result="pass"/><test-case name="5172NISTXML-SV-IV-atomic-Name-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="5173NISTXML-SV-IV-atomic-Name-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="5174NISTXML-SV-IV-atomic-Name-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="5175NISTXML-SV-IV-atomic-Name-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="5176NISTXML-SV-IV-atomic-Name-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="5177NISTSchema-SV-IV-atomic-Name-enumeration-3 tokoe:valid" result="pass"/><test-case name="5178NISTXML-SV-IV-atomic-Name-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="5179NISTXML-SV-IV-atomic-Name-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="5180NISTXML-SV-IV-atomic-Name-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="5181NISTXML-SV-IV-atomic-Name-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="5182NISTXML-SV-IV-atomic-Name-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="5183NISTSchema-SV-IV-atomic-Name-enumeration-4 tokoe:valid" result="pass"/><test-case name="5184NISTXML-SV-IV-atomic-Name-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="5185NISTXML-SV-IV-atomic-Name-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="5186NISTXML-SV-IV-atomic-Name-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="5187NISTXML-SV-IV-atomic-Name-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="5188NISTXML-SV-IV-atomic-Name-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="5189NISTSchema-SV-IV-atomic-Name-enumeration-5 tokoe:valid" result="pass"/><test-case name="5190NISTXML-SV-IV-atomic-Name-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="5191NISTXML-SV-IV-atomic-Name-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="5192NISTXML-SV-IV-atomic-Name-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="5193NISTXML-SV-IV-atomic-Name-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="5194NISTXML-SV-IV-atomic-Name-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="5195NISTSchema-SV-IV-atomic-Name-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="5196NISTXML-SV-IV-atomic-Name-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="5197NISTXML-SV-IV-atomic-Name-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="5198NISTXML-SV-IV-atomic-Name-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="5199NISTXML-SV-IV-atomic-Name-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="5200NISTXML-SV-IV-atomic-Name-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="5201NISTSchema-SV-IV-atomic-NMTOKEN-maxLength-1 tokoe:valid" result="pass"/><test-case name="5202NISTXML-SV-IV-atomic-NMTOKEN-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="5203NISTXML-SV-IV-atomic-NMTOKEN-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="5204NISTXML-SV-IV-atomic-NMTOKEN-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="5205NISTXML-SV-IV-atomic-NMTOKEN-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="5206NISTXML-SV-IV-atomic-NMTOKEN-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="5207NISTSchema-SV-IV-atomic-NMTOKEN-maxLength-2 tokoe:valid" result="pass"/><test-case name="5208NISTXML-SV-IV-atomic-NMTOKEN-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="5209NISTXML-SV-IV-atomic-NMTOKEN-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="5210NISTXML-SV-IV-atomic-NMTOKEN-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="5211NISTXML-SV-IV-atomic-NMTOKEN-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="5212NISTXML-SV-IV-atomic-NMTOKEN-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="5213NISTSchema-SV-IV-atomic-NMTOKEN-maxLength-3 tokoe:valid" result="pass"/><test-case name="5214NISTXML-SV-IV-atomic-NMTOKEN-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="5215NISTXML-SV-IV-atomic-NMTOKEN-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="5216NISTXML-SV-IV-atomic-NMTOKEN-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="5217NISTXML-SV-IV-atomic-NMTOKEN-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="5218NISTXML-SV-IV-atomic-NMTOKEN-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="5219NISTSchema-SV-IV-atomic-NMTOKEN-maxLength-4 tokoe:valid" result="pass"/><test-case name="5220NISTXML-SV-IV-atomic-NMTOKEN-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="5221NISTXML-SV-IV-atomic-NMTOKEN-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="5222NISTXML-SV-IV-atomic-NMTOKEN-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="5223NISTXML-SV-IV-atomic-NMTOKEN-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="5224NISTXML-SV-IV-atomic-NMTOKEN-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="5225NISTSchema-SV-IV-atomic-NMTOKEN-maxLength-5 tokoe:valid" result="pass"/><test-case name="5226NISTXML-SV-IV-atomic-NMTOKEN-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="5227NISTXML-SV-IV-atomic-NMTOKEN-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="5228NISTXML-SV-IV-atomic-NMTOKEN-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="5229NISTXML-SV-IV-atomic-NMTOKEN-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="5230NISTXML-SV-IV-atomic-NMTOKEN-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="5231NISTSchema-SV-IV-atomic-NMTOKEN-minLength-1 tokoe:valid" result="pass"/><test-case name="5232NISTXML-SV-IV-atomic-NMTOKEN-minLength-1-1 tokoe:valid" result="pass"/><test-case name="5233NISTXML-SV-IV-atomic-NMTOKEN-minLength-1-2 tokoe:valid" result="pass"/><test-case name="5234NISTXML-SV-IV-atomic-NMTOKEN-minLength-1-3 tokoe:valid" result="pass"/><test-case name="5235NISTXML-SV-IV-atomic-NMTOKEN-minLength-1-4 tokoe:valid" result="pass"/><test-case name="5236NISTXML-SV-IV-atomic-NMTOKEN-minLength-1-5 tokoe:valid" result="pass"/><test-case name="5237NISTSchema-SV-IV-atomic-NMTOKEN-minLength-2 tokoe:valid" result="pass"/><test-case name="5238NISTXML-SV-IV-atomic-NMTOKEN-minLength-2-1 tokoe:valid" result="pass"/><test-case name="5239NISTXML-SV-IV-atomic-NMTOKEN-minLength-2-2 tokoe:valid" result="pass"/><test-case name="5240NISTXML-SV-IV-atomic-NMTOKEN-minLength-2-3 tokoe:valid" result="pass"/><test-case name="5241NISTXML-SV-IV-atomic-NMTOKEN-minLength-2-4 tokoe:valid" result="pass"/><test-case name="5242NISTXML-SV-IV-atomic-NMTOKEN-minLength-2-5 tokoe:valid" result="pass"/><test-case name="5243NISTSchema-SV-IV-atomic-NMTOKEN-minLength-3 tokoe:valid" result="pass"/><test-case name="5244NISTXML-SV-IV-atomic-NMTOKEN-minLength-3-1 tokoe:valid" result="pass"/><test-case name="5245NISTXML-SV-IV-atomic-NMTOKEN-minLength-3-2 tokoe:valid" result="pass"/><test-case name="5246NISTXML-SV-IV-atomic-NMTOKEN-minLength-3-3 tokoe:valid" result="pass"/><test-case name="5247NISTXML-SV-IV-atomic-NMTOKEN-minLength-3-4 tokoe:valid" result="pass"/><test-case name="5248NISTXML-SV-IV-atomic-NMTOKEN-minLength-3-5 tokoe:valid" result="pass"/><test-case name="5249NISTSchema-SV-IV-atomic-NMTOKEN-minLength-4 tokoe:valid" result="pass"/><test-case name="5250NISTXML-SV-IV-atomic-NMTOKEN-minLength-4-1 tokoe:valid" result="pass"/><test-case name="5251NISTXML-SV-IV-atomic-NMTOKEN-minLength-4-2 tokoe:valid" result="pass"/><test-case name="5252NISTXML-SV-IV-atomic-NMTOKEN-minLength-4-3 tokoe:valid" result="pass"/><test-case name="5253NISTXML-SV-IV-atomic-NMTOKEN-minLength-4-4 tokoe:valid" result="pass"/><test-case name="5254NISTXML-SV-IV-atomic-NMTOKEN-minLength-4-5 tokoe:valid" result="pass"/><test-case name="5255NISTSchema-SV-IV-atomic-NMTOKEN-minLength-5 tokoe:valid" result="pass"/><test-case name="5256NISTXML-SV-IV-atomic-NMTOKEN-minLength-5-1 tokoe:valid" result="pass"/><test-case name="5257NISTXML-SV-IV-atomic-NMTOKEN-minLength-5-2 tokoe:valid" result="pass"/><test-case name="5258NISTXML-SV-IV-atomic-NMTOKEN-minLength-5-3 tokoe:valid" result="pass"/><test-case name="5259NISTXML-SV-IV-atomic-NMTOKEN-minLength-5-4 tokoe:valid" result="pass"/><test-case name="5260NISTXML-SV-IV-atomic-NMTOKEN-minLength-5-5 tokoe:valid" result="pass"/><test-case name="5261NISTSchema-SV-IV-atomic-NMTOKEN-length-1 tokoe:valid" result="pass"/><test-case name="5262NISTXML-SV-IV-atomic-NMTOKEN-length-1-1 tokoe:valid" result="pass"/><test-case name="5263NISTXML-SV-IV-atomic-NMTOKEN-length-1-2 tokoe:valid" result="pass"/><test-case name="5264NISTXML-SV-IV-atomic-NMTOKEN-length-1-3 tokoe:valid" result="pass"/><test-case name="5265NISTXML-SV-IV-atomic-NMTOKEN-length-1-4 tokoe:valid" result="pass"/><test-case name="5266NISTXML-SV-IV-atomic-NMTOKEN-length-1-5 tokoe:valid" result="pass"/><test-case name="5267NISTSchema-SV-IV-atomic-NMTOKEN-length-2 tokoe:valid" result="pass"/><test-case name="5268NISTXML-SV-IV-atomic-NMTOKEN-length-2-1 tokoe:valid" result="pass"/><test-case name="5269NISTXML-SV-IV-atomic-NMTOKEN-length-2-2 tokoe:valid" result="pass"/><test-case name="5270NISTXML-SV-IV-atomic-NMTOKEN-length-2-3 tokoe:valid" result="pass"/><test-case name="5271NISTXML-SV-IV-atomic-NMTOKEN-length-2-4 tokoe:valid" result="pass"/><test-case name="5272NISTXML-SV-IV-atomic-NMTOKEN-length-2-5 tokoe:valid" result="pass"/><test-case name="5273NISTSchema-SV-IV-atomic-NMTOKEN-length-3 tokoe:valid" result="pass"/><test-case name="5274NISTXML-SV-IV-atomic-NMTOKEN-length-3-1 tokoe:valid" result="pass"/><test-case name="5275NISTXML-SV-IV-atomic-NMTOKEN-length-3-2 tokoe:valid" result="pass"/><test-case name="5276NISTXML-SV-IV-atomic-NMTOKEN-length-3-3 tokoe:valid" result="pass"/><test-case name="5277NISTXML-SV-IV-atomic-NMTOKEN-length-3-4 tokoe:valid" result="pass"/><test-case name="5278NISTXML-SV-IV-atomic-NMTOKEN-length-3-5 tokoe:valid" result="pass"/><test-case name="5279NISTSchema-SV-IV-atomic-NMTOKEN-length-4 tokoe:valid" result="pass"/><test-case name="5280NISTXML-SV-IV-atomic-NMTOKEN-length-4-1 tokoe:valid" result="pass"/><test-case name="5281NISTXML-SV-IV-atomic-NMTOKEN-length-4-2 tokoe:valid" result="pass"/><test-case name="5282NISTXML-SV-IV-atomic-NMTOKEN-length-4-3 tokoe:valid" result="pass"/><test-case name="5283NISTXML-SV-IV-atomic-NMTOKEN-length-4-4 tokoe:valid" result="pass"/><test-case name="5284NISTXML-SV-IV-atomic-NMTOKEN-length-4-5 tokoe:valid" result="pass"/><test-case name="5285NISTSchema-SV-IV-atomic-NMTOKEN-length-5 tokoe:valid" result="pass"/><test-case name="5286NISTXML-SV-IV-atomic-NMTOKEN-length-5-1 tokoe:valid" result="pass"/><test-case name="5287NISTXML-SV-IV-atomic-NMTOKEN-length-5-2 tokoe:valid" result="pass"/><test-case name="5288NISTXML-SV-IV-atomic-NMTOKEN-length-5-3 tokoe:valid" result="pass"/><test-case name="5289NISTXML-SV-IV-atomic-NMTOKEN-length-5-4 tokoe:valid" result="pass"/><test-case name="5290NISTXML-SV-IV-atomic-NMTOKEN-length-5-5 tokoe:valid" result="pass"/><test-case name="5291NISTSchema-SV-IV-atomic-NMTOKEN-pattern-1 tokoe:valid" result="pass"/><test-case name="5292NISTXML-SV-IV-atomic-NMTOKEN-pattern-1-1 tokoe:valid" result="pass"/><test-case name="5293NISTXML-SV-IV-atomic-NMTOKEN-pattern-1-2 tokoe:valid" result="pass"/><test-case name="5294NISTXML-SV-IV-atomic-NMTOKEN-pattern-1-3 tokoe:valid" result="pass"/><test-case name="5295NISTXML-SV-IV-atomic-NMTOKEN-pattern-1-4 tokoe:valid" result="pass"/><test-case name="5296NISTXML-SV-IV-atomic-NMTOKEN-pattern-1-5 tokoe:valid" result="pass"/><test-case name="5297NISTSchema-SV-IV-atomic-NMTOKEN-pattern-2 tokoe:valid" result="pass"/><test-case name="5298NISTXML-SV-IV-atomic-NMTOKEN-pattern-2-1 tokoe:valid" result="pass"/><test-case name="5299NISTXML-SV-IV-atomic-NMTOKEN-pattern-2-2 tokoe:valid" result="pass"/><test-case name="5300NISTXML-SV-IV-atomic-NMTOKEN-pattern-2-3 tokoe:valid" result="pass"/><test-case name="5301NISTXML-SV-IV-atomic-NMTOKEN-pattern-2-4 tokoe:valid" result="pass"/><test-case name="5302NISTXML-SV-IV-atomic-NMTOKEN-pattern-2-5 tokoe:valid" result="pass"/><test-case name="5303NISTSchema-SV-IV-atomic-NMTOKEN-pattern-3 tokoe:valid" result="pass"/><test-case name="5304NISTXML-SV-IV-atomic-NMTOKEN-pattern-3-1 tokoe:valid" result="pass"/><test-case name="5305NISTXML-SV-IV-atomic-NMTOKEN-pattern-3-2 tokoe:valid" result="pass"/><test-case name="5306NISTXML-SV-IV-atomic-NMTOKEN-pattern-3-3 tokoe:valid" result="pass"/><test-case name="5307NISTXML-SV-IV-atomic-NMTOKEN-pattern-3-4 tokoe:valid" result="pass"/><test-case name="5308NISTXML-SV-IV-atomic-NMTOKEN-pattern-3-5 tokoe:valid" result="pass"/><test-case name="5309NISTSchema-SV-IV-atomic-NMTOKEN-pattern-4 tokoe:valid" result="pass"/><test-case name="5310NISTXML-SV-IV-atomic-NMTOKEN-pattern-4-1 tokoe:valid" result="pass"/><test-case name="5311NISTXML-SV-IV-atomic-NMTOKEN-pattern-4-2 tokoe:valid" result="pass"/><test-case name="5312NISTXML-SV-IV-atomic-NMTOKEN-pattern-4-3 tokoe:valid" result="pass"/><test-case name="5313NISTXML-SV-IV-atomic-NMTOKEN-pattern-4-4 tokoe:valid" result="pass"/><test-case name="5314NISTXML-SV-IV-atomic-NMTOKEN-pattern-4-5 tokoe:valid" result="pass"/><test-case name="5315NISTSchema-SV-IV-atomic-NMTOKEN-pattern-5 tokoe:valid" result="pass"/><test-case name="5316NISTXML-SV-IV-atomic-NMTOKEN-pattern-5-1 tokoe:valid" result="pass"/><test-case name="5317NISTXML-SV-IV-atomic-NMTOKEN-pattern-5-2 tokoe:valid" result="pass"/><test-case name="5318NISTXML-SV-IV-atomic-NMTOKEN-pattern-5-3 tokoe:valid" result="pass"/><test-case name="5319NISTXML-SV-IV-atomic-NMTOKEN-pattern-5-4 tokoe:valid" result="pass"/><test-case name="5320NISTXML-SV-IV-atomic-NMTOKEN-pattern-5-5 tokoe:valid" result="pass"/><test-case name="5321NISTSchema-SV-IV-atomic-NMTOKEN-enumeration-1 tokoe:valid" result="pass"/><test-case name="5322NISTXML-SV-IV-atomic-NMTOKEN-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="5323NISTXML-SV-IV-atomic-NMTOKEN-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="5324NISTXML-SV-IV-atomic-NMTOKEN-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="5325NISTXML-SV-IV-atomic-NMTOKEN-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="5326NISTXML-SV-IV-atomic-NMTOKEN-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="5327NISTSchema-SV-IV-atomic-NMTOKEN-enumeration-2 tokoe:valid" result="pass"/><test-case name="5328NISTXML-SV-IV-atomic-NMTOKEN-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="5329NISTXML-SV-IV-atomic-NMTOKEN-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="5330NISTXML-SV-IV-atomic-NMTOKEN-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="5331NISTXML-SV-IV-atomic-NMTOKEN-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="5332NISTXML-SV-IV-atomic-NMTOKEN-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="5333NISTSchema-SV-IV-atomic-NMTOKEN-enumeration-3 tokoe:valid" result="pass"/><test-case name="5334NISTXML-SV-IV-atomic-NMTOKEN-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="5335NISTXML-SV-IV-atomic-NMTOKEN-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="5336NISTXML-SV-IV-atomic-NMTOKEN-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="5337NISTXML-SV-IV-atomic-NMTOKEN-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="5338NISTXML-SV-IV-atomic-NMTOKEN-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="5339NISTSchema-SV-IV-atomic-NMTOKEN-enumeration-4 tokoe:valid" result="pass"/><test-case name="5340NISTXML-SV-IV-atomic-NMTOKEN-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="5341NISTXML-SV-IV-atomic-NMTOKEN-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="5342NISTXML-SV-IV-atomic-NMTOKEN-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="5343NISTXML-SV-IV-atomic-NMTOKEN-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="5344NISTXML-SV-IV-atomic-NMTOKEN-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="5345NISTSchema-SV-IV-atomic-NMTOKEN-enumeration-5 tokoe:valid" result="pass"/><test-case name="5346NISTXML-SV-IV-atomic-NMTOKEN-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="5347NISTXML-SV-IV-atomic-NMTOKEN-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="5348NISTXML-SV-IV-atomic-NMTOKEN-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="5349NISTXML-SV-IV-atomic-NMTOKEN-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="5350NISTXML-SV-IV-atomic-NMTOKEN-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="5351NISTSchema-SV-IV-atomic-NMTOKEN-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="5352NISTXML-SV-IV-atomic-NMTOKEN-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="5353NISTXML-SV-IV-atomic-NMTOKEN-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="5354NISTXML-SV-IV-atomic-NMTOKEN-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="5355NISTXML-SV-IV-atomic-NMTOKEN-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="5356NISTXML-SV-IV-atomic-NMTOKEN-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="5357NISTSchema-SV-IV-atomic-NCName-maxLength-1 tokoe:valid" result="pass"/><test-case name="5358NISTXML-SV-IV-atomic-NCName-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="5359NISTXML-SV-IV-atomic-NCName-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="5360NISTXML-SV-IV-atomic-NCName-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="5361NISTXML-SV-IV-atomic-NCName-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="5362NISTXML-SV-IV-atomic-NCName-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="5363NISTSchema-SV-IV-atomic-NCName-maxLength-2 tokoe:valid" result="pass"/><test-case name="5364NISTXML-SV-IV-atomic-NCName-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="5365NISTXML-SV-IV-atomic-NCName-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="5366NISTXML-SV-IV-atomic-NCName-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="5367NISTXML-SV-IV-atomic-NCName-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="5368NISTXML-SV-IV-atomic-NCName-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="5369NISTSchema-SV-IV-atomic-NCName-maxLength-3 tokoe:valid" result="pass"/><test-case name="5370NISTXML-SV-IV-atomic-NCName-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="5371NISTXML-SV-IV-atomic-NCName-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="5372NISTXML-SV-IV-atomic-NCName-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="5373NISTXML-SV-IV-atomic-NCName-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="5374NISTXML-SV-IV-atomic-NCName-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="5375NISTSchema-SV-IV-atomic-NCName-maxLength-4 tokoe:valid" result="pass"/><test-case name="5376NISTXML-SV-IV-atomic-NCName-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="5377NISTXML-SV-IV-atomic-NCName-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="5378NISTXML-SV-IV-atomic-NCName-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="5379NISTXML-SV-IV-atomic-NCName-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="5380NISTXML-SV-IV-atomic-NCName-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="5381NISTSchema-SV-IV-atomic-NCName-maxLength-5 tokoe:valid" result="pass"/><test-case name="5382NISTXML-SV-IV-atomic-NCName-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="5383NISTXML-SV-IV-atomic-NCName-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="5384NISTXML-SV-IV-atomic-NCName-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="5385NISTXML-SV-IV-atomic-NCName-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="5386NISTXML-SV-IV-atomic-NCName-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="5387NISTSchema-SV-IV-atomic-NCName-minLength-1 tokoe:valid" result="pass"/><test-case name="5388NISTXML-SV-IV-atomic-NCName-minLength-1-1 tokoe:valid" result="pass"/><test-case name="5389NISTXML-SV-IV-atomic-NCName-minLength-1-2 tokoe:valid" result="pass"/><test-case name="5390NISTXML-SV-IV-atomic-NCName-minLength-1-3 tokoe:valid" result="pass"/><test-case name="5391NISTXML-SV-IV-atomic-NCName-minLength-1-4 tokoe:valid" result="pass"/><test-case name="5392NISTXML-SV-IV-atomic-NCName-minLength-1-5 tokoe:valid" result="pass"/><test-case name="5393NISTSchema-SV-IV-atomic-NCName-minLength-2 tokoe:valid" result="pass"/><test-case name="5394NISTXML-SV-IV-atomic-NCName-minLength-2-1 tokoe:valid" result="pass"/><test-case name="5395NISTXML-SV-IV-atomic-NCName-minLength-2-2 tokoe:valid" result="pass"/><test-case name="5396NISTXML-SV-IV-atomic-NCName-minLength-2-3 tokoe:valid" result="pass"/><test-case name="5397NISTXML-SV-IV-atomic-NCName-minLength-2-4 tokoe:valid" result="pass"/><test-case name="5398NISTXML-SV-IV-atomic-NCName-minLength-2-5 tokoe:valid" result="pass"/><test-case name="5399NISTSchema-SV-IV-atomic-NCName-minLength-3 tokoe:valid" result="pass"/><test-case name="5400NISTXML-SV-IV-atomic-NCName-minLength-3-1 tokoe:valid" result="pass"/><test-case name="5401NISTXML-SV-IV-atomic-NCName-minLength-3-2 tokoe:valid" result="pass"/><test-case name="5402NISTXML-SV-IV-atomic-NCName-minLength-3-3 tokoe:valid" result="pass"/><test-case name="5403NISTXML-SV-IV-atomic-NCName-minLength-3-4 tokoe:valid" result="pass"/><test-case name="5404NISTXML-SV-IV-atomic-NCName-minLength-3-5 tokoe:valid" result="pass"/><test-case name="5405NISTSchema-SV-IV-atomic-NCName-minLength-4 tokoe:valid" result="pass"/><test-case name="5406NISTXML-SV-IV-atomic-NCName-minLength-4-1 tokoe:valid" result="pass"/><test-case name="5407NISTXML-SV-IV-atomic-NCName-minLength-4-2 tokoe:valid" result="pass"/><test-case name="5408NISTXML-SV-IV-atomic-NCName-minLength-4-3 tokoe:valid" result="pass"/><test-case name="5409NISTXML-SV-IV-atomic-NCName-minLength-4-4 tokoe:valid" result="pass"/><test-case name="5410NISTXML-SV-IV-atomic-NCName-minLength-4-5 tokoe:valid" result="pass"/><test-case name="5411NISTSchema-SV-IV-atomic-NCName-minLength-5 tokoe:valid" result="pass"/><test-case name="5412NISTXML-SV-IV-atomic-NCName-minLength-5-1 tokoe:valid" result="pass"/><test-case name="5413NISTXML-SV-IV-atomic-NCName-minLength-5-2 tokoe:valid" result="pass"/><test-case name="5414NISTXML-SV-IV-atomic-NCName-minLength-5-3 tokoe:valid" result="pass"/><test-case name="5415NISTXML-SV-IV-atomic-NCName-minLength-5-4 tokoe:valid" result="pass"/><test-case name="5416NISTXML-SV-IV-atomic-NCName-minLength-5-5 tokoe:valid" result="pass"/><test-case name="5417NISTSchema-SV-IV-atomic-NCName-length-1 tokoe:valid" result="pass"/><test-case name="5418NISTXML-SV-IV-atomic-NCName-length-1-1 tokoe:valid" result="pass"/><test-case name="5419NISTXML-SV-IV-atomic-NCName-length-1-2 tokoe:valid" result="pass"/><test-case name="5420NISTXML-SV-IV-atomic-NCName-length-1-3 tokoe:valid" result="pass"/><test-case name="5421NISTXML-SV-IV-atomic-NCName-length-1-4 tokoe:valid" result="pass"/><test-case name="5422NISTXML-SV-IV-atomic-NCName-length-1-5 tokoe:valid" result="pass"/><test-case name="5423NISTSchema-SV-IV-atomic-NCName-length-2 tokoe:valid" result="pass"/><test-case name="5424NISTXML-SV-IV-atomic-NCName-length-2-1 tokoe:valid" result="pass"/><test-case name="5425NISTXML-SV-IV-atomic-NCName-length-2-2 tokoe:valid" result="pass"/><test-case name="5426NISTXML-SV-IV-atomic-NCName-length-2-3 tokoe:valid" result="pass"/><test-case name="5427NISTXML-SV-IV-atomic-NCName-length-2-4 tokoe:valid" result="pass"/><test-case name="5428NISTXML-SV-IV-atomic-NCName-length-2-5 tokoe:valid" result="pass"/><test-case name="5429NISTSchema-SV-IV-atomic-NCName-length-3 tokoe:valid" result="pass"/><test-case name="5430NISTXML-SV-IV-atomic-NCName-length-3-1 tokoe:valid" result="pass"/><test-case name="5431NISTXML-SV-IV-atomic-NCName-length-3-2 tokoe:valid" result="pass"/><test-case name="5432NISTXML-SV-IV-atomic-NCName-length-3-3 tokoe:valid" result="pass"/><test-case name="5433NISTXML-SV-IV-atomic-NCName-length-3-4 tokoe:valid" result="pass"/><test-case name="5434NISTXML-SV-IV-atomic-NCName-length-3-5 tokoe:valid" result="pass"/><test-case name="5435NISTSchema-SV-IV-atomic-NCName-length-4 tokoe:valid" result="pass"/><test-case name="5436NISTXML-SV-IV-atomic-NCName-length-4-1 tokoe:valid" result="pass"/><test-case name="5437NISTXML-SV-IV-atomic-NCName-length-4-2 tokoe:valid" result="pass"/><test-case name="5438NISTXML-SV-IV-atomic-NCName-length-4-3 tokoe:valid" result="pass"/><test-case name="5439NISTXML-SV-IV-atomic-NCName-length-4-4 tokoe:valid" result="pass"/><test-case name="5440NISTXML-SV-IV-atomic-NCName-length-4-5 tokoe:valid" result="pass"/><test-case name="5441NISTSchema-SV-IV-atomic-NCName-length-5 tokoe:valid" result="pass"/><test-case name="5442NISTXML-SV-IV-atomic-NCName-length-5-1 tokoe:valid" result="pass"/><test-case name="5443NISTXML-SV-IV-atomic-NCName-length-5-2 tokoe:valid" result="pass"/><test-case name="5444NISTXML-SV-IV-atomic-NCName-length-5-3 tokoe:valid" result="pass"/><test-case name="5445NISTXML-SV-IV-atomic-NCName-length-5-4 tokoe:valid" result="pass"/><test-case name="5446NISTXML-SV-IV-atomic-NCName-length-5-5 tokoe:valid" result="pass"/><test-case name="5447NISTSchema-SV-IV-atomic-NCName-pattern-1 tokoe:valid" result="pass"/><test-case name="5448NISTXML-SV-IV-atomic-NCName-pattern-1-1 tokoe:valid" result="pass"/><test-case name="5449NISTXML-SV-IV-atomic-NCName-pattern-1-2 tokoe:valid" result="pass"/><test-case name="5450NISTXML-SV-IV-atomic-NCName-pattern-1-3 tokoe:valid" result="pass"/><test-case name="5451NISTXML-SV-IV-atomic-NCName-pattern-1-4 tokoe:valid" result="pass"/><test-case name="5452NISTXML-SV-IV-atomic-NCName-pattern-1-5 tokoe:valid" result="pass"/><test-case name="5453NISTSchema-SV-IV-atomic-NCName-pattern-2 tokoe:valid" result="pass"/><test-case name="5454NISTXML-SV-IV-atomic-NCName-pattern-2-1 tokoe:valid" result="pass"/><test-case name="5455NISTXML-SV-IV-atomic-NCName-pattern-2-2 tokoe:valid" result="pass"/><test-case name="5456NISTXML-SV-IV-atomic-NCName-pattern-2-3 tokoe:valid" result="pass"/><test-case name="5457NISTXML-SV-IV-atomic-NCName-pattern-2-4 tokoe:valid" result="pass"/><test-case name="5458NISTXML-SV-IV-atomic-NCName-pattern-2-5 tokoe:valid" result="pass"/><test-case name="5459NISTSchema-SV-IV-atomic-NCName-pattern-3 tokoe:valid" result="pass"/><test-case name="5460NISTXML-SV-IV-atomic-NCName-pattern-3-1 tokoe:valid" result="pass"/><test-case name="5461NISTXML-SV-IV-atomic-NCName-pattern-3-2 tokoe:valid" result="pass"/><test-case name="5462NISTXML-SV-IV-atomic-NCName-pattern-3-3 tokoe:valid" result="pass"/><test-case name="5463NISTXML-SV-IV-atomic-NCName-pattern-3-4 tokoe:valid" result="pass"/><test-case name="5464NISTXML-SV-IV-atomic-NCName-pattern-3-5 tokoe:valid" result="pass"/><test-case name="5465NISTSchema-SV-IV-atomic-NCName-pattern-4 tokoe:valid" result="pass"/><test-case name="5466NISTXML-SV-IV-atomic-NCName-pattern-4-1 tokoe:valid" result="pass"/><test-case name="5467NISTXML-SV-IV-atomic-NCName-pattern-4-2 tokoe:valid" result="pass"/><test-case name="5468NISTXML-SV-IV-atomic-NCName-pattern-4-3 tokoe:valid" result="pass"/><test-case name="5469NISTXML-SV-IV-atomic-NCName-pattern-4-4 tokoe:valid" result="pass"/><test-case name="5470NISTXML-SV-IV-atomic-NCName-pattern-4-5 tokoe:valid" result="pass"/><test-case name="5471NISTSchema-SV-IV-atomic-NCName-pattern-5 tokoe:valid" result="pass"/><test-case name="5472NISTXML-SV-IV-atomic-NCName-pattern-5-1 tokoe:valid" result="pass"/><test-case name="5473NISTXML-SV-IV-atomic-NCName-pattern-5-2 tokoe:valid" result="pass"/><test-case name="5474NISTXML-SV-IV-atomic-NCName-pattern-5-3 tokoe:valid" result="pass"/><test-case name="5475NISTXML-SV-IV-atomic-NCName-pattern-5-4 tokoe:valid" result="pass"/><test-case name="5476NISTXML-SV-IV-atomic-NCName-pattern-5-5 tokoe:valid" result="pass"/><test-case name="5477NISTSchema-SV-IV-atomic-NCName-enumeration-1 tokoe:valid" result="pass"/><test-case name="5478NISTXML-SV-IV-atomic-NCName-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="5479NISTXML-SV-IV-atomic-NCName-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="5480NISTXML-SV-IV-atomic-NCName-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="5481NISTXML-SV-IV-atomic-NCName-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="5482NISTXML-SV-IV-atomic-NCName-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="5483NISTSchema-SV-IV-atomic-NCName-enumeration-2 tokoe:valid" result="pass"/><test-case name="5484NISTXML-SV-IV-atomic-NCName-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="5485NISTXML-SV-IV-atomic-NCName-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="5486NISTXML-SV-IV-atomic-NCName-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="5487NISTXML-SV-IV-atomic-NCName-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="5488NISTXML-SV-IV-atomic-NCName-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="5489NISTSchema-SV-IV-atomic-NCName-enumeration-3 tokoe:valid" result="pass"/><test-case name="5490NISTXML-SV-IV-atomic-NCName-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="5491NISTXML-SV-IV-atomic-NCName-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="5492NISTXML-SV-IV-atomic-NCName-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="5493NISTXML-SV-IV-atomic-NCName-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="5494NISTXML-SV-IV-atomic-NCName-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="5495NISTSchema-SV-IV-atomic-NCName-enumeration-4 tokoe:valid" result="pass"/><test-case name="5496NISTXML-SV-IV-atomic-NCName-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="5497NISTXML-SV-IV-atomic-NCName-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="5498NISTXML-SV-IV-atomic-NCName-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="5499NISTXML-SV-IV-atomic-NCName-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="5500NISTXML-SV-IV-atomic-NCName-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="5501NISTSchema-SV-IV-atomic-NCName-enumeration-5 tokoe:valid" result="pass"/><test-case name="5502NISTXML-SV-IV-atomic-NCName-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="5503NISTXML-SV-IV-atomic-NCName-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="5504NISTXML-SV-IV-atomic-NCName-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="5505NISTXML-SV-IV-atomic-NCName-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="5506NISTXML-SV-IV-atomic-NCName-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="5507NISTSchema-SV-IV-atomic-NCName-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="5508NISTXML-SV-IV-atomic-NCName-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="5509NISTXML-SV-IV-atomic-NCName-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="5510NISTXML-SV-IV-atomic-NCName-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="5511NISTXML-SV-IV-atomic-NCName-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="5512NISTXML-SV-IV-atomic-NCName-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="5513NISTSchema-SV-IV-atomic-ID-maxLength-1 tokoe:valid" result="pass"/><test-case name="5514NISTXML-SV-IV-atomic-ID-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="5515NISTXML-SV-IV-atomic-ID-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="5516NISTXML-SV-IV-atomic-ID-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="5517NISTXML-SV-IV-atomic-ID-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="5518NISTXML-SV-IV-atomic-ID-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="5519NISTSchema-SV-IV-atomic-ID-maxLength-2 tokoe:valid" result="pass"/><test-case name="5520NISTXML-SV-IV-atomic-ID-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="5521NISTXML-SV-IV-atomic-ID-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="5522NISTXML-SV-IV-atomic-ID-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="5523NISTXML-SV-IV-atomic-ID-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="5524NISTXML-SV-IV-atomic-ID-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="5525NISTSchema-SV-IV-atomic-ID-maxLength-3 tokoe:valid" result="pass"/><test-case name="5526NISTXML-SV-IV-atomic-ID-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="5527NISTXML-SV-IV-atomic-ID-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="5528NISTXML-SV-IV-atomic-ID-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="5529NISTXML-SV-IV-atomic-ID-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="5530NISTXML-SV-IV-atomic-ID-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="5531NISTSchema-SV-IV-atomic-ID-maxLength-4 tokoe:valid" result="pass"/><test-case name="5532NISTXML-SV-IV-atomic-ID-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="5533NISTXML-SV-IV-atomic-ID-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="5534NISTXML-SV-IV-atomic-ID-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="5535NISTXML-SV-IV-atomic-ID-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="5536NISTXML-SV-IV-atomic-ID-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="5537NISTSchema-SV-IV-atomic-ID-maxLength-5 tokoe:valid" result="pass"/><test-case name="5538NISTXML-SV-IV-atomic-ID-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="5539NISTXML-SV-IV-atomic-ID-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="5540NISTXML-SV-IV-atomic-ID-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="5541NISTXML-SV-IV-atomic-ID-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="5542NISTXML-SV-IV-atomic-ID-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="5543NISTSchema-SV-IV-atomic-ID-minLength-1 tokoe:valid" result="pass"/><test-case name="5544NISTXML-SV-IV-atomic-ID-minLength-1-1 tokoe:valid" result="pass"/><test-case name="5545NISTXML-SV-IV-atomic-ID-minLength-1-2 tokoe:valid" result="pass"/><test-case name="5546NISTXML-SV-IV-atomic-ID-minLength-1-3 tokoe:valid" result="pass"/><test-case name="5547NISTXML-SV-IV-atomic-ID-minLength-1-4 tokoe:valid" result="pass"/><test-case name="5548NISTXML-SV-IV-atomic-ID-minLength-1-5 tokoe:valid" result="pass"/><test-case name="5549NISTSchema-SV-IV-atomic-ID-minLength-2 tokoe:valid" result="pass"/><test-case name="5550NISTXML-SV-IV-atomic-ID-minLength-2-1 tokoe:valid" result="pass"/><test-case name="5551NISTXML-SV-IV-atomic-ID-minLength-2-2 tokoe:valid" result="pass"/><test-case name="5552NISTXML-SV-IV-atomic-ID-minLength-2-3 tokoe:valid" result="pass"/><test-case name="5553NISTXML-SV-IV-atomic-ID-minLength-2-4 tokoe:valid" result="pass"/><test-case name="5554NISTXML-SV-IV-atomic-ID-minLength-2-5 tokoe:valid" result="pass"/><test-case name="5555NISTSchema-SV-IV-atomic-ID-minLength-3 tokoe:valid" result="pass"/><test-case name="5556NISTXML-SV-IV-atomic-ID-minLength-3-1 tokoe:valid" result="pass"/><test-case name="5557NISTXML-SV-IV-atomic-ID-minLength-3-2 tokoe:valid" result="pass"/><test-case name="5558NISTXML-SV-IV-atomic-ID-minLength-3-3 tokoe:valid" result="pass"/><test-case name="5559NISTXML-SV-IV-atomic-ID-minLength-3-4 tokoe:valid" result="pass"/><test-case name="5560NISTXML-SV-IV-atomic-ID-minLength-3-5 tokoe:valid" result="pass"/><test-case name="5561NISTSchema-SV-IV-atomic-ID-minLength-4 tokoe:valid" result="pass"/><test-case name="5562NISTXML-SV-IV-atomic-ID-minLength-4-1 tokoe:valid" result="pass"/><test-case name="5563NISTXML-SV-IV-atomic-ID-minLength-4-2 tokoe:valid" result="pass"/><test-case name="5564NISTXML-SV-IV-atomic-ID-minLength-4-3 tokoe:valid" result="pass"/><test-case name="5565NISTXML-SV-IV-atomic-ID-minLength-4-4 tokoe:valid" result="pass"/><test-case name="5566NISTXML-SV-IV-atomic-ID-minLength-4-5 tokoe:valid" result="pass"/><test-case name="5567NISTSchema-SV-IV-atomic-ID-minLength-5 tokoe:valid" result="pass"/><test-case name="5568NISTXML-SV-IV-atomic-ID-minLength-5-1 tokoe:valid" result="pass"/><test-case name="5569NISTXML-SV-IV-atomic-ID-minLength-5-2 tokoe:valid" result="pass"/><test-case name="5570NISTXML-SV-IV-atomic-ID-minLength-5-3 tokoe:valid" result="pass"/><test-case name="5571NISTXML-SV-IV-atomic-ID-minLength-5-4 tokoe:valid" result="pass"/><test-case name="5572NISTXML-SV-IV-atomic-ID-minLength-5-5 tokoe:valid" result="pass"/><test-case name="5573NISTSchema-SV-IV-atomic-ID-length-1 tokoe:valid" result="pass"/><test-case name="5574NISTXML-SV-IV-atomic-ID-length-1-1 tokoe:valid" result="pass"/><test-case name="5575NISTXML-SV-IV-atomic-ID-length-1-2 tokoe:valid" result="pass"/><test-case name="5576NISTXML-SV-IV-atomic-ID-length-1-3 tokoe:valid" result="pass"/><test-case name="5577NISTXML-SV-IV-atomic-ID-length-1-4 tokoe:valid" result="pass"/><test-case name="5578NISTXML-SV-IV-atomic-ID-length-1-5 tokoe:valid" result="pass"/><test-case name="5579NISTSchema-SV-IV-atomic-ID-length-2 tokoe:valid" result="pass"/><test-case name="5580NISTXML-SV-IV-atomic-ID-length-2-1 tokoe:valid" result="pass"/><test-case name="5581NISTXML-SV-IV-atomic-ID-length-2-2 tokoe:valid" result="pass"/><test-case name="5582NISTXML-SV-IV-atomic-ID-length-2-3 tokoe:valid" result="pass"/><test-case name="5583NISTXML-SV-IV-atomic-ID-length-2-4 tokoe:valid" result="pass"/><test-case name="5584NISTXML-SV-IV-atomic-ID-length-2-5 tokoe:valid" result="pass"/><test-case name="5585NISTSchema-SV-IV-atomic-ID-length-3 tokoe:valid" result="pass"/><test-case name="5586NISTXML-SV-IV-atomic-ID-length-3-1 tokoe:valid" result="pass"/><test-case name="5587NISTXML-SV-IV-atomic-ID-length-3-2 tokoe:valid" result="pass"/><test-case name="5588NISTXML-SV-IV-atomic-ID-length-3-3 tokoe:valid" result="pass"/><test-case name="5589NISTXML-SV-IV-atomic-ID-length-3-4 tokoe:valid" result="pass"/><test-case name="5590NISTXML-SV-IV-atomic-ID-length-3-5 tokoe:valid" result="pass"/><test-case name="5591NISTSchema-SV-IV-atomic-ID-length-4 tokoe:valid" result="pass"/><test-case name="5592NISTXML-SV-IV-atomic-ID-length-4-1 tokoe:valid" result="pass"/><test-case name="5593NISTXML-SV-IV-atomic-ID-length-4-2 tokoe:valid" result="pass"/><test-case name="5594NISTXML-SV-IV-atomic-ID-length-4-3 tokoe:valid" result="pass"/><test-case name="5595NISTXML-SV-IV-atomic-ID-length-4-4 tokoe:valid" result="pass"/><test-case name="5596NISTXML-SV-IV-atomic-ID-length-4-5 tokoe:valid" result="pass"/><test-case name="5597NISTSchema-SV-IV-atomic-ID-length-5 tokoe:valid" result="pass"/><test-case name="5598NISTXML-SV-IV-atomic-ID-length-5-1 tokoe:valid" result="pass"/><test-case name="5599NISTXML-SV-IV-atomic-ID-length-5-2 tokoe:valid" result="pass"/><test-case name="5600NISTXML-SV-IV-atomic-ID-length-5-3 tokoe:valid" result="pass"/><test-case name="5601NISTXML-SV-IV-atomic-ID-length-5-4 tokoe:valid" result="pass"/><test-case name="5602NISTXML-SV-IV-atomic-ID-length-5-5 tokoe:valid" result="pass"/><test-case name="5603NISTSchema-SV-IV-atomic-ID-pattern-1 tokoe:valid" result="pass"/><test-case name="5604NISTXML-SV-IV-atomic-ID-pattern-1-1 tokoe:valid" result="pass"/><test-case name="5605NISTXML-SV-IV-atomic-ID-pattern-1-2 tokoe:valid" result="pass"/><test-case name="5606NISTXML-SV-IV-atomic-ID-pattern-1-3 tokoe:valid" result="pass"/><test-case name="5607NISTXML-SV-IV-atomic-ID-pattern-1-4 tokoe:valid" result="pass"/><test-case name="5608NISTXML-SV-IV-atomic-ID-pattern-1-5 tokoe:valid" result="pass"/><test-case name="5609NISTSchema-SV-IV-atomic-ID-pattern-2 tokoe:valid" result="pass"/><test-case name="5610NISTXML-SV-IV-atomic-ID-pattern-2-1 tokoe:valid" result="pass"/><test-case name="5611NISTXML-SV-IV-atomic-ID-pattern-2-2 tokoe:valid" result="pass"/><test-case name="5612NISTXML-SV-IV-atomic-ID-pattern-2-3 tokoe:valid" result="pass"/><test-case name="5613NISTXML-SV-IV-atomic-ID-pattern-2-4 tokoe:valid" result="pass"/><test-case name="5614NISTXML-SV-IV-atomic-ID-pattern-2-5 tokoe:valid" result="pass"/><test-case name="5615NISTSchema-SV-IV-atomic-ID-pattern-3 tokoe:valid" result="pass"/><test-case name="5616NISTXML-SV-IV-atomic-ID-pattern-3-1 tokoe:valid" result="pass"/><test-case name="5617NISTXML-SV-IV-atomic-ID-pattern-3-2 tokoe:valid" result="pass"/><test-case name="5618NISTXML-SV-IV-atomic-ID-pattern-3-3 tokoe:valid" result="pass"/><test-case name="5619NISTXML-SV-IV-atomic-ID-pattern-3-4 tokoe:valid" result="pass"/><test-case name="5620NISTXML-SV-IV-atomic-ID-pattern-3-5 tokoe:valid" result="pass"/><test-case name="5621NISTSchema-SV-IV-atomic-ID-pattern-4 tokoe:valid" result="pass"/><test-case name="5622NISTXML-SV-IV-atomic-ID-pattern-4-1 tokoe:valid" result="pass"/><test-case name="5623NISTXML-SV-IV-atomic-ID-pattern-4-2 tokoe:valid" result="pass"/><test-case name="5624NISTXML-SV-IV-atomic-ID-pattern-4-3 tokoe:valid" result="pass"/><test-case name="5625NISTXML-SV-IV-atomic-ID-pattern-4-4 tokoe:valid" result="pass"/><test-case name="5626NISTXML-SV-IV-atomic-ID-pattern-4-5 tokoe:valid" result="pass"/><test-case name="5627NISTSchema-SV-IV-atomic-ID-pattern-5 tokoe:valid" result="pass"/><test-case name="5628NISTXML-SV-IV-atomic-ID-pattern-5-1 tokoe:valid" result="pass"/><test-case name="5629NISTXML-SV-IV-atomic-ID-pattern-5-2 tokoe:valid" result="pass"/><test-case name="5630NISTXML-SV-IV-atomic-ID-pattern-5-3 tokoe:valid" result="pass"/><test-case name="5631NISTXML-SV-IV-atomic-ID-pattern-5-4 tokoe:valid" result="pass"/><test-case name="5632NISTXML-SV-IV-atomic-ID-pattern-5-5 tokoe:valid" result="pass"/><test-case name="5633NISTSchema-SV-IV-atomic-ID-enumeration-1 tokoe:valid" result="pass"/><test-case name="5634NISTXML-SV-IV-atomic-ID-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="5635NISTXML-SV-IV-atomic-ID-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="5636NISTXML-SV-IV-atomic-ID-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="5637NISTXML-SV-IV-atomic-ID-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="5638NISTXML-SV-IV-atomic-ID-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="5639NISTSchema-SV-IV-atomic-ID-enumeration-2 tokoe:valid" result="pass"/><test-case name="5640NISTXML-SV-IV-atomic-ID-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="5641NISTXML-SV-IV-atomic-ID-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="5642NISTXML-SV-IV-atomic-ID-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="5643NISTXML-SV-IV-atomic-ID-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="5644NISTXML-SV-IV-atomic-ID-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="5645NISTSchema-SV-IV-atomic-ID-enumeration-3 tokoe:valid" result="pass"/><test-case name="5646NISTXML-SV-IV-atomic-ID-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="5647NISTXML-SV-IV-atomic-ID-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="5648NISTXML-SV-IV-atomic-ID-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="5649NISTXML-SV-IV-atomic-ID-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="5650NISTXML-SV-IV-atomic-ID-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="5651NISTSchema-SV-IV-atomic-ID-enumeration-4 tokoe:valid" result="pass"/><test-case name="5652NISTXML-SV-IV-atomic-ID-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="5653NISTXML-SV-IV-atomic-ID-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="5654NISTXML-SV-IV-atomic-ID-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="5655NISTXML-SV-IV-atomic-ID-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="5656NISTXML-SV-IV-atomic-ID-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="5657NISTSchema-SV-IV-atomic-ID-enumeration-5 tokoe:valid" result="pass"/><test-case name="5658NISTXML-SV-IV-atomic-ID-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="5659NISTXML-SV-IV-atomic-ID-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="5660NISTXML-SV-IV-atomic-ID-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="5661NISTXML-SV-IV-atomic-ID-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="5662NISTXML-SV-IV-atomic-ID-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="5663NISTSchema-SV-IV-atomic-ID-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="5664NISTXML-SV-IV-atomic-ID-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="5665NISTXML-SV-IV-atomic-ID-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="5666NISTXML-SV-IV-atomic-ID-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="5667NISTXML-SV-IV-atomic-ID-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="5668NISTXML-SV-IV-atomic-ID-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="5669NISTSchema-SV-IV-atomic-language-maxLength-1 tokoe:valid" result="pass"/><test-case name="5670NISTXML-SV-IV-atomic-language-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="5671NISTXML-SV-IV-atomic-language-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="5672NISTXML-SV-IV-atomic-language-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="5673NISTXML-SV-IV-atomic-language-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="5674NISTXML-SV-IV-atomic-language-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="5675NISTSchema-SV-IV-atomic-language-maxLength-2 tokoe:valid" result="pass"/><test-case name="5676NISTXML-SV-IV-atomic-language-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="5677NISTXML-SV-IV-atomic-language-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="5678NISTXML-SV-IV-atomic-language-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="5679NISTXML-SV-IV-atomic-language-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="5680NISTXML-SV-IV-atomic-language-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="5681NISTSchema-SV-IV-atomic-language-maxLength-3 tokoe:valid" result="pass"/><test-case name="5682NISTXML-SV-IV-atomic-language-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="5683NISTXML-SV-IV-atomic-language-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="5684NISTXML-SV-IV-atomic-language-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="5685NISTXML-SV-IV-atomic-language-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="5686NISTXML-SV-IV-atomic-language-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="5687NISTSchema-SV-IV-atomic-language-maxLength-4 tokoe:valid" result="pass"/><test-case name="5688NISTXML-SV-IV-atomic-language-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="5689NISTXML-SV-IV-atomic-language-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="5690NISTXML-SV-IV-atomic-language-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="5691NISTXML-SV-IV-atomic-language-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="5692NISTXML-SV-IV-atomic-language-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="5693NISTSchema-SV-IV-atomic-language-maxLength-5 tokoe:valid" result="pass"/><test-case name="5694NISTXML-SV-IV-atomic-language-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="5695NISTXML-SV-IV-atomic-language-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="5696NISTXML-SV-IV-atomic-language-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="5697NISTXML-SV-IV-atomic-language-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="5698NISTXML-SV-IV-atomic-language-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="5699NISTSchema-SV-IV-atomic-language-minLength-1 tokoe:valid" result="pass"/><test-case name="5700NISTXML-SV-IV-atomic-language-minLength-1-1 tokoe:valid" result="pass"/><test-case name="5701NISTXML-SV-IV-atomic-language-minLength-1-2 tokoe:valid" result="pass"/><test-case name="5702NISTXML-SV-IV-atomic-language-minLength-1-3 tokoe:valid" result="pass"/><test-case name="5703NISTXML-SV-IV-atomic-language-minLength-1-4 tokoe:valid" result="pass"/><test-case name="5704NISTXML-SV-IV-atomic-language-minLength-1-5 tokoe:valid" result="pass"/><test-case name="5705NISTSchema-SV-IV-atomic-language-minLength-2 tokoe:valid" result="pass"/><test-case name="5706NISTXML-SV-IV-atomic-language-minLength-2-1 tokoe:valid" result="pass"/><test-case name="5707NISTXML-SV-IV-atomic-language-minLength-2-2 tokoe:valid" result="pass"/><test-case name="5708NISTXML-SV-IV-atomic-language-minLength-2-3 tokoe:valid" result="pass"/><test-case name="5709NISTXML-SV-IV-atomic-language-minLength-2-4 tokoe:valid" result="pass"/><test-case name="5710NISTXML-SV-IV-atomic-language-minLength-2-5 tokoe:valid" result="pass"/><test-case name="5711NISTSchema-SV-IV-atomic-language-minLength-3 tokoe:valid" result="pass"/><test-case name="5712NISTXML-SV-IV-atomic-language-minLength-3-1 tokoe:valid" result="pass"/><test-case name="5713NISTXML-SV-IV-atomic-language-minLength-3-2 tokoe:valid" result="pass"/><test-case name="5714NISTXML-SV-IV-atomic-language-minLength-3-3 tokoe:valid" result="pass"/><test-case name="5715NISTXML-SV-IV-atomic-language-minLength-3-4 tokoe:valid" result="pass"/><test-case name="5716NISTXML-SV-IV-atomic-language-minLength-3-5 tokoe:valid" result="pass"/><test-case name="5717NISTSchema-SV-IV-atomic-language-minLength-4 tokoe:valid" result="pass"/><test-case name="5718NISTXML-SV-IV-atomic-language-minLength-4-1 tokoe:valid" result="pass"/><test-case name="5719NISTXML-SV-IV-atomic-language-minLength-4-2 tokoe:valid" result="pass"/><test-case name="5720NISTXML-SV-IV-atomic-language-minLength-4-3 tokoe:valid" result="pass"/><test-case name="5721NISTXML-SV-IV-atomic-language-minLength-4-4 tokoe:valid" result="pass"/><test-case name="5722NISTXML-SV-IV-atomic-language-minLength-4-5 tokoe:valid" result="pass"/><test-case name="5723NISTSchema-SV-IV-atomic-language-minLength-5 tokoe:valid" result="pass"/><test-case name="5724NISTXML-SV-IV-atomic-language-minLength-5-1 tokoe:valid" result="pass"/><test-case name="5725NISTXML-SV-IV-atomic-language-minLength-5-2 tokoe:valid" result="pass"/><test-case name="5726NISTXML-SV-IV-atomic-language-minLength-5-3 tokoe:valid" result="pass"/><test-case name="5727NISTXML-SV-IV-atomic-language-minLength-5-4 tokoe:valid" result="pass"/><test-case name="5728NISTXML-SV-IV-atomic-language-minLength-5-5 tokoe:valid" result="pass"/><test-case name="5729NISTSchema-SV-IV-atomic-language-length-1 tokoe:valid" result="pass"/><test-case name="5730NISTXML-SV-IV-atomic-language-length-1-1 tokoe:valid" result="pass"/><test-case name="5731NISTXML-SV-IV-atomic-language-length-1-2 tokoe:valid" result="pass"/><test-case name="5732NISTXML-SV-IV-atomic-language-length-1-3 tokoe:valid" result="pass"/><test-case name="5733NISTXML-SV-IV-atomic-language-length-1-4 tokoe:valid" result="pass"/><test-case name="5734NISTXML-SV-IV-atomic-language-length-1-5 tokoe:valid" result="pass"/><test-case name="5735NISTSchema-SV-IV-atomic-language-length-2 tokoe:valid" result="pass"/><test-case name="5736NISTXML-SV-IV-atomic-language-length-2-1 tokoe:valid" result="pass"/><test-case name="5737NISTXML-SV-IV-atomic-language-length-2-2 tokoe:valid" result="pass"/><test-case name="5738NISTXML-SV-IV-atomic-language-length-2-3 tokoe:valid" result="pass"/><test-case name="5739NISTXML-SV-IV-atomic-language-length-2-4 tokoe:valid" result="pass"/><test-case name="5740NISTXML-SV-IV-atomic-language-length-2-5 tokoe:valid" result="pass"/><test-case name="5741NISTSchema-SV-IV-atomic-language-length-3 tokoe:valid" result="pass"/><test-case name="5742NISTXML-SV-IV-atomic-language-length-3-1 tokoe:valid" result="pass"/><test-case name="5743NISTXML-SV-IV-atomic-language-length-3-2 tokoe:valid" result="pass"/><test-case name="5744NISTXML-SV-IV-atomic-language-length-3-3 tokoe:valid" result="pass"/><test-case name="5745NISTXML-SV-IV-atomic-language-length-3-4 tokoe:valid" result="pass"/><test-case name="5746NISTXML-SV-IV-atomic-language-length-3-5 tokoe:valid" result="pass"/><test-case name="5747NISTSchema-SV-IV-atomic-language-length-4 tokoe:valid" result="pass"/><test-case name="5748NISTXML-SV-IV-atomic-language-length-4-1 tokoe:valid" result="pass"/><test-case name="5749NISTXML-SV-IV-atomic-language-length-4-2 tokoe:valid" result="pass"/><test-case name="5750NISTXML-SV-IV-atomic-language-length-4-3 tokoe:valid" result="pass"/><test-case name="5751NISTXML-SV-IV-atomic-language-length-4-4 tokoe:valid" result="pass"/><test-case name="5752NISTXML-SV-IV-atomic-language-length-4-5 tokoe:valid" result="pass"/><test-case name="5753NISTSchema-SV-IV-atomic-language-length-5 tokoe:valid" result="pass"/><test-case name="5754NISTXML-SV-IV-atomic-language-length-5-1 tokoe:valid" result="pass"/><test-case name="5755NISTXML-SV-IV-atomic-language-length-5-2 tokoe:valid" result="pass"/><test-case name="5756NISTXML-SV-IV-atomic-language-length-5-3 tokoe:valid" result="pass"/><test-case name="5757NISTXML-SV-IV-atomic-language-length-5-4 tokoe:valid" result="pass"/><test-case name="5758NISTXML-SV-IV-atomic-language-length-5-5 tokoe:valid" result="pass"/><test-case name="5759NISTSchema-SV-IV-atomic-language-pattern-1 tokoe:valid" result="pass"/><test-case name="5760NISTXML-SV-IV-atomic-language-pattern-1-1 tokoe:valid" result="pass"/><test-case name="5761NISTXML-SV-IV-atomic-language-pattern-1-2 tokoe:valid" result="pass"/><test-case name="5762NISTXML-SV-IV-atomic-language-pattern-1-3 tokoe:valid" result="pass"/><test-case name="5763NISTXML-SV-IV-atomic-language-pattern-1-4 tokoe:valid" result="pass"/><test-case name="5764NISTXML-SV-IV-atomic-language-pattern-1-5 tokoe:valid" result="pass"/><test-case name="5765NISTSchema-SV-IV-atomic-language-pattern-2 tokoe:valid" result="pass"/><test-case name="5766NISTXML-SV-IV-atomic-language-pattern-2-1 tokoe:valid" result="pass"/><test-case name="5767NISTXML-SV-IV-atomic-language-pattern-2-2 tokoe:valid" result="pass"/><test-case name="5768NISTXML-SV-IV-atomic-language-pattern-2-3 tokoe:valid" result="pass"/><test-case name="5769NISTXML-SV-IV-atomic-language-pattern-2-4 tokoe:valid" result="pass"/><test-case name="5770NISTXML-SV-IV-atomic-language-pattern-2-5 tokoe:valid" result="pass"/><test-case name="5771NISTSchema-SV-IV-atomic-language-pattern-3 tokoe:valid" result="pass"/><test-case name="5772NISTXML-SV-IV-atomic-language-pattern-3-1 tokoe:valid" result="pass"/><test-case name="5773NISTXML-SV-IV-atomic-language-pattern-3-2 tokoe:valid" result="pass"/><test-case name="5774NISTXML-SV-IV-atomic-language-pattern-3-3 tokoe:valid" result="pass"/><test-case name="5775NISTXML-SV-IV-atomic-language-pattern-3-4 tokoe:valid" result="pass"/><test-case name="5776NISTXML-SV-IV-atomic-language-pattern-3-5 tokoe:valid" result="pass"/><test-case name="5777NISTSchema-SV-IV-atomic-language-pattern-4 tokoe:valid" result="pass"/><test-case name="5778NISTXML-SV-IV-atomic-language-pattern-4-1 tokoe:valid" result="pass"/><test-case name="5779NISTXML-SV-IV-atomic-language-pattern-4-2 tokoe:valid" result="pass"/><test-case name="5780NISTXML-SV-IV-atomic-language-pattern-4-3 tokoe:valid" result="pass"/><test-case name="5781NISTXML-SV-IV-atomic-language-pattern-4-4 tokoe:valid" result="pass"/><test-case name="5782NISTXML-SV-IV-atomic-language-pattern-4-5 tokoe:valid" result="pass"/><test-case name="5783NISTSchema-SV-IV-atomic-language-pattern-5 tokoe:valid" result="pass"/><test-case name="5784NISTXML-SV-IV-atomic-language-pattern-5-1 tokoe:valid" result="pass"/><test-case name="5785NISTXML-SV-IV-atomic-language-pattern-5-2 tokoe:valid" result="pass"/><test-case name="5786NISTXML-SV-IV-atomic-language-pattern-5-3 tokoe:valid" result="pass"/><test-case name="5787NISTXML-SV-IV-atomic-language-pattern-5-4 tokoe:valid" result="pass"/><test-case name="5788NISTXML-SV-IV-atomic-language-pattern-5-5 tokoe:valid" result="pass"/><test-case name="5789NISTSchema-SV-IV-atomic-language-enumeration-1 tokoe:valid" result="pass"/><test-case name="5790NISTXML-SV-IV-atomic-language-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="5791NISTXML-SV-IV-atomic-language-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="5792NISTXML-SV-IV-atomic-language-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="5793NISTXML-SV-IV-atomic-language-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="5794NISTXML-SV-IV-atomic-language-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="5795NISTSchema-SV-IV-atomic-language-enumeration-2 tokoe:valid" result="pass"/><test-case name="5796NISTXML-SV-IV-atomic-language-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="5797NISTXML-SV-IV-atomic-language-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="5798NISTXML-SV-IV-atomic-language-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="5799NISTXML-SV-IV-atomic-language-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="5800NISTXML-SV-IV-atomic-language-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="5801NISTSchema-SV-IV-atomic-language-enumeration-3 tokoe:valid" result="pass"/><test-case name="5802NISTXML-SV-IV-atomic-language-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="5803NISTXML-SV-IV-atomic-language-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="5804NISTXML-SV-IV-atomic-language-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="5805NISTXML-SV-IV-atomic-language-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="5806NISTXML-SV-IV-atomic-language-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="5807NISTSchema-SV-IV-atomic-language-enumeration-4 tokoe:valid" result="pass"/><test-case name="5808NISTXML-SV-IV-atomic-language-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="5809NISTXML-SV-IV-atomic-language-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="5810NISTXML-SV-IV-atomic-language-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="5811NISTXML-SV-IV-atomic-language-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="5812NISTXML-SV-IV-atomic-language-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="5813NISTSchema-SV-IV-atomic-language-enumeration-5 tokoe:valid" result="pass"/><test-case name="5814NISTXML-SV-IV-atomic-language-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="5815NISTXML-SV-IV-atomic-language-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="5816NISTXML-SV-IV-atomic-language-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="5817NISTXML-SV-IV-atomic-language-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="5818NISTXML-SV-IV-atomic-language-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="5819NISTSchema-SV-IV-atomic-language-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="5820NISTXML-SV-IV-atomic-language-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="5821NISTXML-SV-IV-atomic-language-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="5822NISTXML-SV-IV-atomic-language-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="5823NISTXML-SV-IV-atomic-language-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="5824NISTXML-SV-IV-atomic-language-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="5825NISTSchema-SV-IV-atomic-anyURI-maxLength-1 tokoe:valid" result="pass"/><test-case name="5826NISTXML-SV-IV-atomic-anyURI-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="5827NISTXML-SV-IV-atomic-anyURI-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="5828NISTXML-SV-IV-atomic-anyURI-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="5829NISTXML-SV-IV-atomic-anyURI-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="5830NISTXML-SV-IV-atomic-anyURI-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="5831NISTSchema-SV-IV-atomic-anyURI-maxLength-2 tokoe:valid" result="pass"/><test-case name="5832NISTXML-SV-IV-atomic-anyURI-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="5833NISTXML-SV-IV-atomic-anyURI-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="5834NISTXML-SV-IV-atomic-anyURI-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="5835NISTXML-SV-IV-atomic-anyURI-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="5836NISTXML-SV-IV-atomic-anyURI-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="5837NISTSchema-SV-IV-atomic-anyURI-maxLength-3 tokoe:valid" result="pass"/><test-case name="5838NISTXML-SV-IV-atomic-anyURI-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="5839NISTXML-SV-IV-atomic-anyURI-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="5840NISTXML-SV-IV-atomic-anyURI-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="5841NISTXML-SV-IV-atomic-anyURI-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="5842NISTXML-SV-IV-atomic-anyURI-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="5843NISTSchema-SV-IV-atomic-anyURI-maxLength-4 tokoe:valid" result="pass"/><test-case name="5844NISTXML-SV-IV-atomic-anyURI-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="5845NISTXML-SV-IV-atomic-anyURI-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="5846NISTXML-SV-IV-atomic-anyURI-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="5847NISTXML-SV-IV-atomic-anyURI-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="5848NISTXML-SV-IV-atomic-anyURI-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="5849NISTSchema-SV-IV-atomic-anyURI-maxLength-5 tokoe:valid" result="pass"/><test-case name="5850NISTXML-SV-IV-atomic-anyURI-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="5851NISTXML-SV-IV-atomic-anyURI-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="5852NISTXML-SV-IV-atomic-anyURI-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="5853NISTXML-SV-IV-atomic-anyURI-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="5854NISTXML-SV-IV-atomic-anyURI-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="5855NISTSchema-SV-IV-atomic-anyURI-minLength-1 tokoe:valid" result="pass"/><test-case name="5856NISTXML-SV-IV-atomic-anyURI-minLength-1-1 tokoe:valid" result="pass"/><test-case name="5857NISTXML-SV-IV-atomic-anyURI-minLength-1-2 tokoe:valid" result="pass"/><test-case name="5858NISTXML-SV-IV-atomic-anyURI-minLength-1-3 tokoe:valid" result="pass"/><test-case name="5859NISTXML-SV-IV-atomic-anyURI-minLength-1-4 tokoe:valid" result="pass"/><test-case name="5860NISTXML-SV-IV-atomic-anyURI-minLength-1-5 tokoe:valid" result="pass"/><test-case name="5861NISTSchema-SV-IV-atomic-anyURI-minLength-2 tokoe:valid" result="pass"/><test-case name="5862NISTXML-SV-IV-atomic-anyURI-minLength-2-1 tokoe:valid" result="pass"/><test-case name="5863NISTXML-SV-IV-atomic-anyURI-minLength-2-2 tokoe:valid" result="pass"/><test-case name="5864NISTXML-SV-IV-atomic-anyURI-minLength-2-3 tokoe:valid" result="pass"/><test-case name="5865NISTXML-SV-IV-atomic-anyURI-minLength-2-4 tokoe:valid" result="pass"/><test-case name="5866NISTXML-SV-IV-atomic-anyURI-minLength-2-5 tokoe:valid" result="pass"/><test-case name="5867NISTSchema-SV-IV-atomic-anyURI-minLength-3 tokoe:valid" result="pass"/><test-case name="5868NISTXML-SV-IV-atomic-anyURI-minLength-3-1 tokoe:valid" result="pass"/><test-case name="5869NISTXML-SV-IV-atomic-anyURI-minLength-3-2 tokoe:valid" result="pass"/><test-case name="5870NISTXML-SV-IV-atomic-anyURI-minLength-3-3 tokoe:valid" result="pass"/><test-case name="5871NISTXML-SV-IV-atomic-anyURI-minLength-3-4 tokoe:valid" result="pass"/><test-case name="5872NISTXML-SV-IV-atomic-anyURI-minLength-3-5 tokoe:valid" result="pass"/><test-case name="5873NISTSchema-SV-IV-atomic-anyURI-minLength-4 tokoe:valid" result="pass"/><test-case name="5874NISTXML-SV-IV-atomic-anyURI-minLength-4-1 tokoe:valid" result="pass"/><test-case name="5875NISTXML-SV-IV-atomic-anyURI-minLength-4-2 tokoe:valid" result="pass"/><test-case name="5876NISTXML-SV-IV-atomic-anyURI-minLength-4-3 tokoe:valid" result="pass"/><test-case name="5877NISTXML-SV-IV-atomic-anyURI-minLength-4-4 tokoe:valid" result="pass"/><test-case name="5878NISTXML-SV-IV-atomic-anyURI-minLength-4-5 tokoe:valid" result="pass"/><test-case name="5879NISTSchema-SV-IV-atomic-anyURI-minLength-5 tokoe:valid" result="pass"/><test-case name="5880NISTXML-SV-IV-atomic-anyURI-minLength-5-1 tokoe:valid" result="pass"/><test-case name="5881NISTXML-SV-IV-atomic-anyURI-minLength-5-2 tokoe:valid" result="pass"/><test-case name="5882NISTXML-SV-IV-atomic-anyURI-minLength-5-3 tokoe:valid" result="pass"/><test-case name="5883NISTXML-SV-IV-atomic-anyURI-minLength-5-4 tokoe:valid" result="pass"/><test-case name="5884NISTXML-SV-IV-atomic-anyURI-minLength-5-5 tokoe:valid" result="pass"/><test-case name="5885NISTSchema-SV-IV-atomic-anyURI-length-1 tokoe:valid" result="pass"/><test-case name="5886NISTXML-SV-IV-atomic-anyURI-length-1-1 tokoe:valid" result="pass"/><test-case name="5887NISTXML-SV-IV-atomic-anyURI-length-1-2 tokoe:valid" result="pass"/><test-case name="5888NISTXML-SV-IV-atomic-anyURI-length-1-3 tokoe:valid" result="pass"/><test-case name="5889NISTXML-SV-IV-atomic-anyURI-length-1-4 tokoe:valid" result="pass"/><test-case name="5890NISTXML-SV-IV-atomic-anyURI-length-1-5 tokoe:valid" result="pass"/><test-case name="5891NISTSchema-SV-IV-atomic-anyURI-length-2 tokoe:valid" result="pass"/><test-case name="5892NISTXML-SV-IV-atomic-anyURI-length-2-1 tokoe:valid" result="pass"/><test-case name="5893NISTXML-SV-IV-atomic-anyURI-length-2-2 tokoe:valid" result="pass"/><test-case name="5894NISTXML-SV-IV-atomic-anyURI-length-2-3 tokoe:valid" result="pass"/><test-case name="5895NISTXML-SV-IV-atomic-anyURI-length-2-4 tokoe:valid" result="pass"/><test-case name="5896NISTXML-SV-IV-atomic-anyURI-length-2-5 tokoe:valid" result="pass"/><test-case name="5897NISTSchema-SV-IV-atomic-anyURI-length-3 tokoe:valid" result="pass"/><test-case name="5898NISTXML-SV-IV-atomic-anyURI-length-3-1 tokoe:valid" result="pass"/><test-case name="5899NISTXML-SV-IV-atomic-anyURI-length-3-2 tokoe:valid" result="pass"/><test-case name="5900NISTXML-SV-IV-atomic-anyURI-length-3-3 tokoe:valid" result="pass"/><test-case name="5901NISTXML-SV-IV-atomic-anyURI-length-3-4 tokoe:valid" result="pass"/><test-case name="5902NISTXML-SV-IV-atomic-anyURI-length-3-5 tokoe:valid" result="pass"/><test-case name="5903NISTSchema-SV-IV-atomic-anyURI-length-4 tokoe:valid" result="pass"/><test-case name="5904NISTXML-SV-IV-atomic-anyURI-length-4-1 tokoe:valid" result="pass"/><test-case name="5905NISTXML-SV-IV-atomic-anyURI-length-4-2 tokoe:valid" result="pass"/><test-case name="5906NISTXML-SV-IV-atomic-anyURI-length-4-3 tokoe:valid" result="pass"/><test-case name="5907NISTXML-SV-IV-atomic-anyURI-length-4-4 tokoe:valid" result="pass"/><test-case name="5908NISTXML-SV-IV-atomic-anyURI-length-4-5 tokoe:valid" result="pass"/><test-case name="5909NISTSchema-SV-IV-atomic-anyURI-length-5 tokoe:valid" result="pass"/><test-case name="5910NISTXML-SV-IV-atomic-anyURI-length-5-1 tokoe:valid" result="pass"/><test-case name="5911NISTXML-SV-IV-atomic-anyURI-length-5-2 tokoe:valid" result="pass"/><test-case name="5912NISTXML-SV-IV-atomic-anyURI-length-5-3 tokoe:valid" result="pass"/><test-case name="5913NISTXML-SV-IV-atomic-anyURI-length-5-4 tokoe:valid" result="pass"/><test-case name="5914NISTXML-SV-IV-atomic-anyURI-length-5-5 tokoe:valid" result="pass"/><test-case name="5915NISTSchema-SV-IV-atomic-anyURI-pattern-1 tokoe:valid" result="pass"/><test-case name="5916NISTXML-SV-IV-atomic-anyURI-pattern-1-1 tokoe:valid" result="pass"/><test-case name="5917NISTXML-SV-IV-atomic-anyURI-pattern-1-2 tokoe:valid" result="pass"/><test-case name="5918NISTXML-SV-IV-atomic-anyURI-pattern-1-3 tokoe:valid" result="pass"/><test-case name="5919NISTXML-SV-IV-atomic-anyURI-pattern-1-4 tokoe:valid" result="pass"/><test-case name="5920NISTXML-SV-IV-atomic-anyURI-pattern-1-5 tokoe:valid" result="pass"/><test-case name="5921NISTSchema-SV-IV-atomic-anyURI-pattern-2 tokoe:valid" result="pass"/><test-case name="5922NISTXML-SV-IV-atomic-anyURI-pattern-2-1 tokoe:valid" result="pass"/><test-case name="5923NISTXML-SV-IV-atomic-anyURI-pattern-2-2 tokoe:valid" result="pass"/><test-case name="5924NISTXML-SV-IV-atomic-anyURI-pattern-2-3 tokoe:valid" result="pass"/><test-case name="5925NISTXML-SV-IV-atomic-anyURI-pattern-2-4 tokoe:valid" result="pass"/><test-case name="5926NISTXML-SV-IV-atomic-anyURI-pattern-2-5 tokoe:valid" result="pass"/><test-case name="5927NISTSchema-SV-IV-atomic-anyURI-pattern-3 tokoe:valid" result="pass"/><test-case name="5928NISTXML-SV-IV-atomic-anyURI-pattern-3-1 tokoe:valid" result="pass"/><test-case name="5929NISTXML-SV-IV-atomic-anyURI-pattern-3-2 tokoe:valid" result="pass"/><test-case name="5930NISTXML-SV-IV-atomic-anyURI-pattern-3-3 tokoe:valid" result="pass"/><test-case name="5931NISTXML-SV-IV-atomic-anyURI-pattern-3-4 tokoe:valid" result="pass"/><test-case name="5932NISTXML-SV-IV-atomic-anyURI-pattern-3-5 tokoe:valid" result="pass"/><test-case name="5933NISTSchema-SV-IV-atomic-anyURI-pattern-4 tokoe:valid" result="pass"/><test-case name="5934NISTXML-SV-IV-atomic-anyURI-pattern-4-1 tokoe:valid" result="pass"/><test-case name="5935NISTXML-SV-IV-atomic-anyURI-pattern-4-2 tokoe:valid" result="pass"/><test-case name="5936NISTXML-SV-IV-atomic-anyURI-pattern-4-3 tokoe:valid" result="pass"/><test-case name="5937NISTXML-SV-IV-atomic-anyURI-pattern-4-4 tokoe:valid" result="pass"/><test-case name="5938NISTXML-SV-IV-atomic-anyURI-pattern-4-5 tokoe:valid" result="pass"/><test-case name="5939NISTSchema-SV-IV-atomic-anyURI-pattern-5 tokoe:valid" result="pass"/><test-case name="5940NISTXML-SV-IV-atomic-anyURI-pattern-5-1 tokoe:valid" result="pass"/><test-case name="5941NISTXML-SV-IV-atomic-anyURI-pattern-5-2 tokoe:valid" result="pass"/><test-case name="5942NISTXML-SV-IV-atomic-anyURI-pattern-5-3 tokoe:valid" result="pass"/><test-case name="5943NISTXML-SV-IV-atomic-anyURI-pattern-5-4 tokoe:valid" result="pass"/><test-case name="5944NISTXML-SV-IV-atomic-anyURI-pattern-5-5 tokoe:valid" result="pass"/><test-case name="5945NISTSchema-SV-IV-atomic-anyURI-enumeration-1 tokoe:valid" result="pass"/><test-case name="5946NISTXML-SV-IV-atomic-anyURI-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="5947NISTXML-SV-IV-atomic-anyURI-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="5948NISTXML-SV-IV-atomic-anyURI-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="5949NISTXML-SV-IV-atomic-anyURI-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="5950NISTXML-SV-IV-atomic-anyURI-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="5951NISTSchema-SV-IV-atomic-anyURI-enumeration-2 tokoe:valid" result="pass"/><test-case name="5952NISTXML-SV-IV-atomic-anyURI-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="5953NISTXML-SV-IV-atomic-anyURI-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="5954NISTXML-SV-IV-atomic-anyURI-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="5955NISTXML-SV-IV-atomic-anyURI-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="5956NISTXML-SV-IV-atomic-anyURI-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="5957NISTSchema-SV-IV-atomic-anyURI-enumeration-3 tokoe:valid" result="pass"/><test-case name="5958NISTXML-SV-IV-atomic-anyURI-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="5959NISTXML-SV-IV-atomic-anyURI-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="5960NISTXML-SV-IV-atomic-anyURI-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="5961NISTXML-SV-IV-atomic-anyURI-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="5962NISTXML-SV-IV-atomic-anyURI-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="5963NISTSchema-SV-IV-atomic-anyURI-enumeration-4 tokoe:valid" result="pass"/><test-case name="5964NISTXML-SV-IV-atomic-anyURI-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="5965NISTXML-SV-IV-atomic-anyURI-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="5966NISTXML-SV-IV-atomic-anyURI-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="5967NISTXML-SV-IV-atomic-anyURI-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="5968NISTXML-SV-IV-atomic-anyURI-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="5969NISTSchema-SV-IV-atomic-anyURI-enumeration-5 tokoe:valid" result="pass"/><test-case name="5970NISTXML-SV-IV-atomic-anyURI-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="5971NISTXML-SV-IV-atomic-anyURI-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="5972NISTXML-SV-IV-atomic-anyURI-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="5973NISTXML-SV-IV-atomic-anyURI-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="5974NISTXML-SV-IV-atomic-anyURI-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="5975NISTSchema-SV-IV-atomic-anyURI-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="5976NISTXML-SV-IV-atomic-anyURI-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="5977NISTXML-SV-IV-atomic-anyURI-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="5978NISTXML-SV-IV-atomic-anyURI-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="5979NISTXML-SV-IV-atomic-anyURI-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="5980NISTXML-SV-IV-atomic-anyURI-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="5981NISTSchema-SV-IV-atomic-QName-maxLength-1 tokoe:valid" result="pass"/><test-case name="5982NISTXML-SV-IV-atomic-QName-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="5983NISTXML-SV-IV-atomic-QName-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="5984NISTXML-SV-IV-atomic-QName-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="5985NISTXML-SV-IV-atomic-QName-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="5986NISTXML-SV-IV-atomic-QName-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="5987NISTSchema-SV-IV-atomic-QName-maxLength-2 tokoe:valid" result="pass"/><test-case name="5988NISTXML-SV-IV-atomic-QName-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="5989NISTXML-SV-IV-atomic-QName-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="5990NISTXML-SV-IV-atomic-QName-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="5991NISTXML-SV-IV-atomic-QName-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="5992NISTXML-SV-IV-atomic-QName-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="5993NISTSchema-SV-IV-atomic-QName-maxLength-3 tokoe:valid" result="pass"/><test-case name="5994NISTXML-SV-IV-atomic-QName-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="5995NISTXML-SV-IV-atomic-QName-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="5996NISTXML-SV-IV-atomic-QName-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="5997NISTXML-SV-IV-atomic-QName-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="5998NISTXML-SV-IV-atomic-QName-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="5999NISTSchema-SV-IV-atomic-QName-maxLength-4 tokoe:valid" result="pass"/><test-case name="6000NISTXML-SV-IV-atomic-QName-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="6001NISTXML-SV-IV-atomic-QName-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="6002NISTXML-SV-IV-atomic-QName-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="6003NISTXML-SV-IV-atomic-QName-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="6004NISTXML-SV-IV-atomic-QName-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="6005NISTSchema-SV-IV-atomic-QName-maxLength-5 tokoe:valid" result="pass"/><test-case name="6006NISTXML-SV-IV-atomic-QName-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="6007NISTXML-SV-IV-atomic-QName-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="6008NISTXML-SV-IV-atomic-QName-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="6009NISTXML-SV-IV-atomic-QName-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="6010NISTXML-SV-IV-atomic-QName-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="6011NISTSchema-SV-IV-atomic-QName-minLength-1 tokoe:valid" result="pass"/><test-case name="6012NISTXML-SV-IV-atomic-QName-minLength-1-1 tokoe:valid" result="pass"/><test-case name="6013NISTXML-SV-IV-atomic-QName-minLength-1-2 tokoe:valid" result="pass"/><test-case name="6014NISTXML-SV-IV-atomic-QName-minLength-1-3 tokoe:valid" result="pass"/><test-case name="6015NISTXML-SV-IV-atomic-QName-minLength-1-4 tokoe:valid" result="pass"/><test-case name="6016NISTXML-SV-IV-atomic-QName-minLength-1-5 tokoe:valid" result="pass"/><test-case name="6017NISTSchema-SV-IV-atomic-QName-minLength-2 tokoe:valid" result="pass"/><test-case name="6018NISTXML-SV-IV-atomic-QName-minLength-2-1 tokoe:valid" result="pass"/><test-case name="6019NISTXML-SV-IV-atomic-QName-minLength-2-2 tokoe:valid" result="pass"/><test-case name="6020NISTXML-SV-IV-atomic-QName-minLength-2-3 tokoe:valid" result="pass"/><test-case name="6021NISTXML-SV-IV-atomic-QName-minLength-2-4 tokoe:valid" result="pass"/><test-case name="6022NISTXML-SV-IV-atomic-QName-minLength-2-5 tokoe:valid" result="pass"/><test-case name="6023NISTSchema-SV-IV-atomic-QName-minLength-3 tokoe:valid" result="pass"/><test-case name="6024NISTXML-SV-IV-atomic-QName-minLength-3-1 tokoe:valid" result="pass"/><test-case name="6025NISTXML-SV-IV-atomic-QName-minLength-3-2 tokoe:valid" result="pass"/><test-case name="6026NISTXML-SV-IV-atomic-QName-minLength-3-3 tokoe:valid" result="pass"/><test-case name="6027NISTXML-SV-IV-atomic-QName-minLength-3-4 tokoe:valid" result="pass"/><test-case name="6028NISTXML-SV-IV-atomic-QName-minLength-3-5 tokoe:valid" result="pass"/><test-case name="6029NISTSchema-SV-IV-atomic-QName-minLength-4 tokoe:valid" result="pass"/><test-case name="6030NISTXML-SV-IV-atomic-QName-minLength-4-1 tokoe:valid" result="pass"/><test-case name="6031NISTXML-SV-IV-atomic-QName-minLength-4-2 tokoe:valid" result="pass"/><test-case name="6032NISTXML-SV-IV-atomic-QName-minLength-4-3 tokoe:valid" result="pass"/><test-case name="6033NISTXML-SV-IV-atomic-QName-minLength-4-4 tokoe:valid" result="pass"/><test-case name="6034NISTXML-SV-IV-atomic-QName-minLength-4-5 tokoe:valid" result="pass"/><test-case name="6035NISTSchema-SV-IV-atomic-QName-minLength-5 tokoe:valid" result="pass"/><test-case name="6036NISTXML-SV-IV-atomic-QName-minLength-5-1 tokoe:valid" result="pass"/><test-case name="6037NISTXML-SV-IV-atomic-QName-minLength-5-2 tokoe:valid" result="pass"/><test-case name="6038NISTXML-SV-IV-atomic-QName-minLength-5-3 tokoe:valid" result="pass"/><test-case name="6039NISTXML-SV-IV-atomic-QName-minLength-5-4 tokoe:valid" result="pass"/><test-case name="6040NISTXML-SV-IV-atomic-QName-minLength-5-5 tokoe:valid" result="pass"/><test-case name="6041NISTSchema-SV-IV-atomic-QName-length-1 tokoe:valid" result="pass"/><test-case name="6042NISTXML-SV-IV-atomic-QName-length-1-1 tokoe:valid" result="pass"/><test-case name="6043NISTXML-SV-IV-atomic-QName-length-1-2 tokoe:valid" result="pass"/><test-case name="6044NISTXML-SV-IV-atomic-QName-length-1-3 tokoe:valid" result="pass"/><test-case name="6045NISTXML-SV-IV-atomic-QName-length-1-4 tokoe:valid" result="pass"/><test-case name="6046NISTXML-SV-IV-atomic-QName-length-1-5 tokoe:valid" result="pass"/><test-case name="6047NISTSchema-SV-IV-atomic-QName-length-2 tokoe:valid" result="pass"/><test-case name="6048NISTXML-SV-IV-atomic-QName-length-2-1 tokoe:valid" result="pass"/><test-case name="6049NISTXML-SV-IV-atomic-QName-length-2-2 tokoe:valid" result="pass"/><test-case name="6050NISTXML-SV-IV-atomic-QName-length-2-3 tokoe:valid" result="pass"/><test-case name="6051NISTXML-SV-IV-atomic-QName-length-2-4 tokoe:valid" result="pass"/><test-case name="6052NISTXML-SV-IV-atomic-QName-length-2-5 tokoe:valid" result="pass"/><test-case name="6053NISTSchema-SV-IV-atomic-QName-length-3 tokoe:valid" result="pass"/><test-case name="6054NISTXML-SV-IV-atomic-QName-length-3-1 tokoe:valid" result="pass"/><test-case name="6055NISTXML-SV-IV-atomic-QName-length-3-2 tokoe:valid" result="pass"/><test-case name="6056NISTXML-SV-IV-atomic-QName-length-3-3 tokoe:valid" result="pass"/><test-case name="6057NISTXML-SV-IV-atomic-QName-length-3-4 tokoe:valid" result="pass"/><test-case name="6058NISTXML-SV-IV-atomic-QName-length-3-5 tokoe:valid" result="pass"/><test-case name="6059NISTSchema-SV-IV-atomic-QName-length-4 tokoe:valid" result="pass"/><test-case name="6060NISTXML-SV-IV-atomic-QName-length-4-1 tokoe:valid" result="pass"/><test-case name="6061NISTXML-SV-IV-atomic-QName-length-4-2 tokoe:valid" result="pass"/><test-case name="6062NISTXML-SV-IV-atomic-QName-length-4-3 tokoe:valid" result="pass"/><test-case name="6063NISTXML-SV-IV-atomic-QName-length-4-4 tokoe:valid" result="pass"/><test-case name="6064NISTXML-SV-IV-atomic-QName-length-4-5 tokoe:valid" result="pass"/><test-case name="6065NISTSchema-SV-IV-atomic-QName-length-5 tokoe:valid" result="pass"/><test-case name="6066NISTXML-SV-IV-atomic-QName-length-5-1 tokoe:valid" result="pass"/><test-case name="6067NISTXML-SV-IV-atomic-QName-length-5-2 tokoe:valid" result="pass"/><test-case name="6068NISTXML-SV-IV-atomic-QName-length-5-3 tokoe:valid" result="pass"/><test-case name="6069NISTXML-SV-IV-atomic-QName-length-5-4 tokoe:valid" result="pass"/><test-case name="6070NISTXML-SV-IV-atomic-QName-length-5-5 tokoe:valid" result="pass"/><test-case name="6071NISTSchema-SV-IV-atomic-QName-pattern-1 tokoe:valid" result="pass"/><test-case name="6072NISTXML-SV-IV-atomic-QName-pattern-1-1 tokoe:valid" result="pass"/><test-case name="6073NISTXML-SV-IV-atomic-QName-pattern-1-2 tokoe:valid" result="pass"/><test-case name="6074NISTXML-SV-IV-atomic-QName-pattern-1-3 tokoe:valid" result="pass"/><test-case name="6075NISTXML-SV-IV-atomic-QName-pattern-1-4 tokoe:valid" result="pass"/><test-case name="6076NISTXML-SV-IV-atomic-QName-pattern-1-5 tokoe:valid" result="pass"/><test-case name="6077NISTSchema-SV-IV-atomic-QName-pattern-2 tokoe:valid" result="pass"/><test-case name="6078NISTXML-SV-IV-atomic-QName-pattern-2-1 tokoe:valid" result="pass"/><test-case name="6079NISTXML-SV-IV-atomic-QName-pattern-2-2 tokoe:valid" result="pass"/><test-case name="6080NISTXML-SV-IV-atomic-QName-pattern-2-3 tokoe:valid" result="pass"/><test-case name="6081NISTXML-SV-IV-atomic-QName-pattern-2-4 tokoe:valid" result="pass"/><test-case name="6082NISTXML-SV-IV-atomic-QName-pattern-2-5 tokoe:valid" result="pass"/><test-case name="6083NISTSchema-SV-IV-atomic-QName-pattern-3 tokoe:valid" result="pass"/><test-case name="6084NISTXML-SV-IV-atomic-QName-pattern-3-1 tokoe:valid" result="pass"/><test-case name="6085NISTXML-SV-IV-atomic-QName-pattern-3-2 tokoe:valid" result="pass"/><test-case name="6086NISTXML-SV-IV-atomic-QName-pattern-3-3 tokoe:valid" result="pass"/><test-case name="6087NISTXML-SV-IV-atomic-QName-pattern-3-4 tokoe:valid" result="pass"/><test-case name="6088NISTXML-SV-IV-atomic-QName-pattern-3-5 tokoe:valid" result="pass"/><test-case name="6089NISTSchema-SV-IV-atomic-QName-pattern-4 tokoe:valid" result="pass"/><test-case name="6090NISTXML-SV-IV-atomic-QName-pattern-4-1 tokoe:valid" result="pass"/><test-case name="6091NISTXML-SV-IV-atomic-QName-pattern-4-2 tokoe:valid" result="pass"/><test-case name="6092NISTXML-SV-IV-atomic-QName-pattern-4-3 tokoe:valid" result="pass"/><test-case name="6093NISTXML-SV-IV-atomic-QName-pattern-4-4 tokoe:valid" result="pass"/><test-case name="6094NISTXML-SV-IV-atomic-QName-pattern-4-5 tokoe:valid" result="pass"/><test-case name="6095NISTSchema-SV-IV-atomic-QName-pattern-5 tokoe:valid" result="pass"/><test-case name="6096NISTXML-SV-IV-atomic-QName-pattern-5-1 tokoe:valid" result="pass"/><test-case name="6097NISTXML-SV-IV-atomic-QName-pattern-5-2 tokoe:valid" result="pass"/><test-case name="6098NISTXML-SV-IV-atomic-QName-pattern-5-3 tokoe:valid" result="pass"/><test-case name="6099NISTXML-SV-IV-atomic-QName-pattern-5-4 tokoe:valid" result="pass"/><test-case name="6100NISTXML-SV-IV-atomic-QName-pattern-5-5 tokoe:valid" result="pass"/><test-case name="6101NISTSchema-SV-IV-atomic-QName-enumeration-1 tokoe:valid" result="pass"/><test-case name="6102NISTXML-SV-IV-atomic-QName-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="6103NISTXML-SV-IV-atomic-QName-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="6104NISTXML-SV-IV-atomic-QName-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="6105NISTXML-SV-IV-atomic-QName-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="6106NISTXML-SV-IV-atomic-QName-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="6107NISTSchema-SV-IV-atomic-QName-enumeration-2 tokoe:valid" result="pass"/><test-case name="6108NISTXML-SV-IV-atomic-QName-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="6109NISTXML-SV-IV-atomic-QName-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="6110NISTXML-SV-IV-atomic-QName-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="6111NISTXML-SV-IV-atomic-QName-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="6112NISTXML-SV-IV-atomic-QName-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="6113NISTSchema-SV-IV-atomic-QName-enumeration-3 tokoe:valid" result="pass"/><test-case name="6114NISTXML-SV-IV-atomic-QName-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="6115NISTXML-SV-IV-atomic-QName-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="6116NISTXML-SV-IV-atomic-QName-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="6117NISTXML-SV-IV-atomic-QName-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="6118NISTXML-SV-IV-atomic-QName-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="6119NISTSchema-SV-IV-atomic-QName-enumeration-4 tokoe:valid" result="pass"/><test-case name="6120NISTXML-SV-IV-atomic-QName-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="6121NISTXML-SV-IV-atomic-QName-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="6122NISTXML-SV-IV-atomic-QName-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="6123NISTXML-SV-IV-atomic-QName-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="6124NISTXML-SV-IV-atomic-QName-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="6125NISTSchema-SV-IV-atomic-QName-enumeration-5 tokoe:valid" result="pass"/><test-case name="6126NISTXML-SV-IV-atomic-QName-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="6127NISTXML-SV-IV-atomic-QName-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="6128NISTXML-SV-IV-atomic-QName-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="6129NISTXML-SV-IV-atomic-QName-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="6130NISTXML-SV-IV-atomic-QName-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="6131NISTSchema-SV-IV-atomic-QName-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="6132NISTXML-SV-IV-atomic-QName-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="6133NISTXML-SV-IV-atomic-QName-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="6134NISTXML-SV-IV-atomic-QName-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="6135NISTXML-SV-IV-atomic-QName-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="6136NISTXML-SV-IV-atomic-QName-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="6137NISTSchema-SV-IV-atomic-boolean-pattern-1 tokoe:valid" result="pass"/><test-case name="6138NISTXML-SV-IV-atomic-boolean-pattern-1-1 tokoe:valid" result="pass"/><test-case name="6139NISTXML-SV-IV-atomic-boolean-pattern-1-2 tokoe:valid" result="pass"/><test-case name="6140NISTXML-SV-IV-atomic-boolean-pattern-1-3 tokoe:valid" result="pass"/><test-case name="6141NISTXML-SV-IV-atomic-boolean-pattern-1-4 tokoe:valid" result="pass"/><test-case name="6142NISTXML-SV-IV-atomic-boolean-pattern-1-5 tokoe:valid" result="pass"/><test-case name="6143NISTSchema-SV-IV-atomic-boolean-pattern-2 tokoe:valid" result="pass"/><test-case name="6144NISTXML-SV-IV-atomic-boolean-pattern-2-1 tokoe:valid" result="pass"/><test-case name="6145NISTXML-SV-IV-atomic-boolean-pattern-2-2 tokoe:valid" result="pass"/><test-case name="6146NISTXML-SV-IV-atomic-boolean-pattern-2-3 tokoe:valid" result="pass"/><test-case name="6147NISTXML-SV-IV-atomic-boolean-pattern-2-4 tokoe:valid" result="pass"/><test-case name="6148NISTXML-SV-IV-atomic-boolean-pattern-2-5 tokoe:valid" result="pass"/><test-case name="6149NISTSchema-SV-IV-atomic-boolean-pattern-3 tokoe:valid" result="pass"/><test-case name="6150NISTXML-SV-IV-atomic-boolean-pattern-3-1 tokoe:valid" result="pass"/><test-case name="6151NISTXML-SV-IV-atomic-boolean-pattern-3-2 tokoe:valid" result="pass"/><test-case name="6152NISTXML-SV-IV-atomic-boolean-pattern-3-3 tokoe:valid" result="pass"/><test-case name="6153NISTXML-SV-IV-atomic-boolean-pattern-3-4 tokoe:valid" result="pass"/><test-case name="6154NISTXML-SV-IV-atomic-boolean-pattern-3-5 tokoe:valid" result="pass"/><test-case name="6155NISTSchema-SV-IV-atomic-boolean-pattern-4 tokoe:valid" result="pass"/><test-case name="6156NISTXML-SV-IV-atomic-boolean-pattern-4-1 tokoe:valid" result="pass"/><test-case name="6157NISTXML-SV-IV-atomic-boolean-pattern-4-2 tokoe:valid" result="pass"/><test-case name="6158NISTXML-SV-IV-atomic-boolean-pattern-4-3 tokoe:valid" result="pass"/><test-case name="6159NISTXML-SV-IV-atomic-boolean-pattern-4-4 tokoe:valid" result="pass"/><test-case name="6160NISTXML-SV-IV-atomic-boolean-pattern-4-5 tokoe:valid" result="pass"/><test-case name="6161NISTSchema-SV-IV-atomic-boolean-pattern-5 tokoe:valid" result="pass"/><test-case name="6162NISTXML-SV-IV-atomic-boolean-pattern-5-1 tokoe:valid" result="pass"/><test-case name="6163NISTXML-SV-IV-atomic-boolean-pattern-5-2 tokoe:valid" result="pass"/><test-case name="6164NISTXML-SV-IV-atomic-boolean-pattern-5-3 tokoe:valid" result="pass"/><test-case name="6165NISTXML-SV-IV-atomic-boolean-pattern-5-4 tokoe:valid" result="pass"/><test-case name="6166NISTXML-SV-IV-atomic-boolean-pattern-5-5 tokoe:valid" result="pass"/><test-case name="6167NISTSchema-SV-IV-atomic-boolean-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="6168NISTXML-SV-IV-atomic-boolean-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="6169NISTXML-SV-IV-atomic-boolean-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="6170NISTXML-SV-IV-atomic-boolean-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="6171NISTXML-SV-IV-atomic-boolean-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="6172NISTXML-SV-IV-atomic-boolean-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="6173NISTSchema-SV-IV-atomic-boolean-whiteSpace-2 tokoe:valid" result="pass"/><test-case name="6174NISTXML-SV-IV-atomic-boolean-whiteSpace-2-1 tokoe:valid" result="pass"/><test-case name="6175NISTXML-SV-IV-atomic-boolean-whiteSpace-2-2 tokoe:valid" result="pass"/><test-case name="6176NISTXML-SV-IV-atomic-boolean-whiteSpace-2-3 tokoe:valid" result="pass"/><test-case name="6177NISTXML-SV-IV-atomic-boolean-whiteSpace-2-4 tokoe:valid" result="pass"/><test-case name="6178NISTXML-SV-IV-atomic-boolean-whiteSpace-2-5 tokoe:valid" result="pass"/><test-case name="6179NISTSchema-SV-IV-atomic-boolean-whiteSpace-3 tokoe:valid" result="pass"/><test-case name="6180NISTXML-SV-IV-atomic-boolean-whiteSpace-3-1 tokoe:valid" result="pass"/><test-case name="6181NISTXML-SV-IV-atomic-boolean-whiteSpace-3-2 tokoe:valid" result="pass"/><test-case name="6182NISTXML-SV-IV-atomic-boolean-whiteSpace-3-3 tokoe:valid" result="pass"/><test-case name="6183NISTXML-SV-IV-atomic-boolean-whiteSpace-3-4 tokoe:valid" result="pass"/><test-case name="6184NISTXML-SV-IV-atomic-boolean-whiteSpace-3-5 tokoe:valid" result="pass"/><test-case name="6185NISTSchema-SV-IV-atomic-boolean-whiteSpace-4 tokoe:valid" result="pass"/><test-case name="6186NISTXML-SV-IV-atomic-boolean-whiteSpace-4-1 tokoe:valid" result="pass"/><test-case name="6187NISTXML-SV-IV-atomic-boolean-whiteSpace-4-2 tokoe:valid" result="pass"/><test-case name="6188NISTXML-SV-IV-atomic-boolean-whiteSpace-4-3 tokoe:valid" result="pass"/><test-case name="6189NISTXML-SV-IV-atomic-boolean-whiteSpace-4-4 tokoe:valid" result="pass"/><test-case name="6190NISTXML-SV-IV-atomic-boolean-whiteSpace-4-5 tokoe:valid" result="pass"/><test-case name="6191NISTSchema-SV-IV-atomic-boolean-whiteSpace-5 tokoe:valid" result="pass"/><test-case name="6192NISTXML-SV-IV-atomic-boolean-whiteSpace-5-1 tokoe:valid" result="pass"/><test-case name="6193NISTXML-SV-IV-atomic-boolean-whiteSpace-5-2 tokoe:valid" result="pass"/><test-case name="6194NISTXML-SV-IV-atomic-boolean-whiteSpace-5-3 tokoe:valid" result="pass"/><test-case name="6195NISTXML-SV-IV-atomic-boolean-whiteSpace-5-4 tokoe:valid" result="pass"/><test-case name="6196NISTXML-SV-IV-atomic-boolean-whiteSpace-5-5 tokoe:valid" result="pass"/><test-case name="6197NISTSchema-SV-IV-atomic-base64Binary-maxLength-1 tokoe:valid" result="pass"/><test-case name="6198NISTXML-SV-IV-atomic-base64Binary-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="6199NISTXML-SV-IV-atomic-base64Binary-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="6200NISTXML-SV-IV-atomic-base64Binary-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="6201NISTXML-SV-IV-atomic-base64Binary-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="6202NISTXML-SV-IV-atomic-base64Binary-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="6203NISTSchema-SV-IV-atomic-base64Binary-maxLength-2 tokoe:valid" result="pass"/><test-case name="6204NISTXML-SV-IV-atomic-base64Binary-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="6205NISTXML-SV-IV-atomic-base64Binary-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="6206NISTXML-SV-IV-atomic-base64Binary-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="6207NISTXML-SV-IV-atomic-base64Binary-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="6208NISTXML-SV-IV-atomic-base64Binary-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="6209NISTSchema-SV-IV-atomic-base64Binary-maxLength-3 tokoe:valid" result="pass"/><test-case name="6210NISTXML-SV-IV-atomic-base64Binary-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="6211NISTXML-SV-IV-atomic-base64Binary-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="6212NISTXML-SV-IV-atomic-base64Binary-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="6213NISTXML-SV-IV-atomic-base64Binary-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="6214NISTXML-SV-IV-atomic-base64Binary-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="6215NISTSchema-SV-IV-atomic-base64Binary-maxLength-4 tokoe:valid" result="pass"/><test-case name="6216NISTXML-SV-IV-atomic-base64Binary-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="6217NISTXML-SV-IV-atomic-base64Binary-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="6218NISTXML-SV-IV-atomic-base64Binary-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="6219NISTXML-SV-IV-atomic-base64Binary-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="6220NISTXML-SV-IV-atomic-base64Binary-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="6221NISTSchema-SV-IV-atomic-base64Binary-maxLength-5 tokoe:valid" result="pass"/><test-case name="6222NISTXML-SV-IV-atomic-base64Binary-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="6223NISTXML-SV-IV-atomic-base64Binary-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="6224NISTXML-SV-IV-atomic-base64Binary-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="6225NISTXML-SV-IV-atomic-base64Binary-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="6226NISTXML-SV-IV-atomic-base64Binary-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="6227NISTSchema-SV-IV-atomic-base64Binary-minLength-1 tokoe:valid" result="pass"/><test-case name="6228NISTXML-SV-IV-atomic-base64Binary-minLength-1-1 tokoe:valid" result="pass"/><test-case name="6229NISTXML-SV-IV-atomic-base64Binary-minLength-1-2 tokoe:valid" result="pass"/><test-case name="6230NISTXML-SV-IV-atomic-base64Binary-minLength-1-3 tokoe:valid" result="pass"/><test-case name="6231NISTXML-SV-IV-atomic-base64Binary-minLength-1-4 tokoe:valid" result="pass"/><test-case name="6232NISTXML-SV-IV-atomic-base64Binary-minLength-1-5 tokoe:valid" result="pass"/><test-case name="6233NISTSchema-SV-IV-atomic-base64Binary-minLength-2 tokoe:valid" result="pass"/><test-case name="6234NISTXML-SV-IV-atomic-base64Binary-minLength-2-1 tokoe:valid" result="pass"/><test-case name="6235NISTXML-SV-IV-atomic-base64Binary-minLength-2-2 tokoe:valid" result="pass"/><test-case name="6236NISTXML-SV-IV-atomic-base64Binary-minLength-2-3 tokoe:valid" result="pass"/><test-case name="6237NISTXML-SV-IV-atomic-base64Binary-minLength-2-4 tokoe:valid" result="pass"/><test-case name="6238NISTXML-SV-IV-atomic-base64Binary-minLength-2-5 tokoe:valid" result="pass"/><test-case name="6239NISTSchema-SV-IV-atomic-base64Binary-minLength-3 tokoe:valid" result="pass"/><test-case name="6240NISTXML-SV-IV-atomic-base64Binary-minLength-3-1 tokoe:valid" result="pass"/><test-case name="6241NISTXML-SV-IV-atomic-base64Binary-minLength-3-2 tokoe:valid" result="pass"/><test-case name="6242NISTXML-SV-IV-atomic-base64Binary-minLength-3-3 tokoe:valid" result="pass"/><test-case name="6243NISTXML-SV-IV-atomic-base64Binary-minLength-3-4 tokoe:valid" result="pass"/><test-case name="6244NISTXML-SV-IV-atomic-base64Binary-minLength-3-5 tokoe:valid" result="pass"/><test-case name="6245NISTSchema-SV-IV-atomic-base64Binary-minLength-4 tokoe:valid" result="pass"/><test-case name="6246NISTXML-SV-IV-atomic-base64Binary-minLength-4-1 tokoe:valid" result="pass"/><test-case name="6247NISTXML-SV-IV-atomic-base64Binary-minLength-4-2 tokoe:valid" result="pass"/><test-case name="6248NISTXML-SV-IV-atomic-base64Binary-minLength-4-3 tokoe:valid" result="pass"/><test-case name="6249NISTXML-SV-IV-atomic-base64Binary-minLength-4-4 tokoe:valid" result="pass"/><test-case name="6250NISTXML-SV-IV-atomic-base64Binary-minLength-4-5 tokoe:valid" result="pass"/><test-case name="6251NISTSchema-SV-IV-atomic-base64Binary-minLength-5 tokoe:valid" result="pass"/><test-case name="6252NISTXML-SV-IV-atomic-base64Binary-minLength-5-1 tokoe:valid" result="pass"/><test-case name="6253NISTXML-SV-IV-atomic-base64Binary-minLength-5-2 tokoe:valid" result="pass"/><test-case name="6254NISTXML-SV-IV-atomic-base64Binary-minLength-5-3 tokoe:valid" result="pass"/><test-case name="6255NISTXML-SV-IV-atomic-base64Binary-minLength-5-4 tokoe:valid" result="pass"/><test-case name="6256NISTXML-SV-IV-atomic-base64Binary-minLength-5-5 tokoe:valid" result="pass"/><test-case name="6257NISTSchema-SV-IV-atomic-base64Binary-length-1 tokoe:valid" result="pass"/><test-case name="6258NISTXML-SV-IV-atomic-base64Binary-length-1-1 tokoe:valid" result="pass"/><test-case name="6259NISTXML-SV-IV-atomic-base64Binary-length-1-2 tokoe:valid" result="pass"/><test-case name="6260NISTXML-SV-IV-atomic-base64Binary-length-1-3 tokoe:valid" result="pass"/><test-case name="6261NISTXML-SV-IV-atomic-base64Binary-length-1-4 tokoe:valid" result="pass"/><test-case name="6262NISTXML-SV-IV-atomic-base64Binary-length-1-5 tokoe:valid" result="pass"/><test-case name="6263NISTSchema-SV-IV-atomic-base64Binary-length-2 tokoe:valid" result="pass"/><test-case name="6264NISTXML-SV-IV-atomic-base64Binary-length-2-1 tokoe:valid" result="pass"/><test-case name="6265NISTXML-SV-IV-atomic-base64Binary-length-2-2 tokoe:valid" result="pass"/><test-case name="6266NISTXML-SV-IV-atomic-base64Binary-length-2-3 tokoe:valid" result="pass"/><test-case name="6267NISTXML-SV-IV-atomic-base64Binary-length-2-4 tokoe:valid" result="pass"/><test-case name="6268NISTXML-SV-IV-atomic-base64Binary-length-2-5 tokoe:valid" result="pass"/><test-case name="6269NISTSchema-SV-IV-atomic-base64Binary-length-3 tokoe:valid" result="pass"/><test-case name="6270NISTXML-SV-IV-atomic-base64Binary-length-3-1 tokoe:valid" result="pass"/><test-case name="6271NISTXML-SV-IV-atomic-base64Binary-length-3-2 tokoe:valid" result="pass"/><test-case name="6272NISTXML-SV-IV-atomic-base64Binary-length-3-3 tokoe:valid" result="pass"/><test-case name="6273NISTXML-SV-IV-atomic-base64Binary-length-3-4 tokoe:valid" result="pass"/><test-case name="6274NISTXML-SV-IV-atomic-base64Binary-length-3-5 tokoe:valid" result="pass"/><test-case name="6275NISTSchema-SV-IV-atomic-base64Binary-length-4 tokoe:valid" result="pass"/><test-case name="6276NISTXML-SV-IV-atomic-base64Binary-length-4-1 tokoe:valid" result="pass"/><test-case name="6277NISTXML-SV-IV-atomic-base64Binary-length-4-2 tokoe:valid" result="pass"/><test-case name="6278NISTXML-SV-IV-atomic-base64Binary-length-4-3 tokoe:valid" result="pass"/><test-case name="6279NISTXML-SV-IV-atomic-base64Binary-length-4-4 tokoe:valid" result="pass"/><test-case name="6280NISTXML-SV-IV-atomic-base64Binary-length-4-5 tokoe:valid" result="pass"/><test-case name="6281NISTSchema-SV-IV-atomic-base64Binary-length-5 tokoe:valid" result="pass"/><test-case name="6282NISTXML-SV-IV-atomic-base64Binary-length-5-1 tokoe:valid" result="pass"/><test-case name="6283NISTXML-SV-IV-atomic-base64Binary-length-5-2 tokoe:valid" result="pass"/><test-case name="6284NISTXML-SV-IV-atomic-base64Binary-length-5-3 tokoe:valid" result="pass"/><test-case name="6285NISTXML-SV-IV-atomic-base64Binary-length-5-4 tokoe:valid" result="pass"/><test-case name="6286NISTXML-SV-IV-atomic-base64Binary-length-5-5 tokoe:valid" result="pass"/><test-case name="6287NISTSchema-SV-IV-atomic-base64Binary-pattern-1 tokoe:valid" result="pass"/><test-case name="6288NISTXML-SV-IV-atomic-base64Binary-pattern-1-1 tokoe:valid" result="pass"/><test-case name="6289NISTXML-SV-IV-atomic-base64Binary-pattern-1-2 tokoe:valid" result="pass"/><test-case name="6290NISTXML-SV-IV-atomic-base64Binary-pattern-1-3 tokoe:valid" result="pass"/><test-case name="6291NISTXML-SV-IV-atomic-base64Binary-pattern-1-4 tokoe:valid" result="pass"/><test-case name="6292NISTXML-SV-IV-atomic-base64Binary-pattern-1-5 tokoe:valid" result="pass"/><test-case name="6293NISTSchema-SV-IV-atomic-base64Binary-pattern-2 tokoe:valid" result="pass"/><test-case name="6294NISTXML-SV-IV-atomic-base64Binary-pattern-2-1 tokoe:valid" result="pass"/><test-case name="6295NISTXML-SV-IV-atomic-base64Binary-pattern-2-2 tokoe:valid" result="pass"/><test-case name="6296NISTXML-SV-IV-atomic-base64Binary-pattern-2-3 tokoe:valid" result="pass"/><test-case name="6297NISTXML-SV-IV-atomic-base64Binary-pattern-2-4 tokoe:valid" result="pass"/><test-case name="6298NISTXML-SV-IV-atomic-base64Binary-pattern-2-5 tokoe:valid" result="pass"/><test-case name="6299NISTSchema-SV-IV-atomic-base64Binary-pattern-3 tokoe:valid" result="pass"/><test-case name="6300NISTXML-SV-IV-atomic-base64Binary-pattern-3-1 tokoe:valid" result="pass"/><test-case name="6301NISTXML-SV-IV-atomic-base64Binary-pattern-3-2 tokoe:valid" result="pass"/><test-case name="6302NISTXML-SV-IV-atomic-base64Binary-pattern-3-3 tokoe:valid" result="pass"/><test-case name="6303NISTXML-SV-IV-atomic-base64Binary-pattern-3-4 tokoe:valid" result="pass"/><test-case name="6304NISTXML-SV-IV-atomic-base64Binary-pattern-3-5 tokoe:valid" result="pass"/><test-case name="6305NISTSchema-SV-IV-atomic-base64Binary-pattern-4 tokoe:valid" result="pass"/><test-case name="6306NISTXML-SV-IV-atomic-base64Binary-pattern-4-1 tokoe:valid" result="pass"/><test-case name="6307NISTXML-SV-IV-atomic-base64Binary-pattern-4-2 tokoe:valid" result="pass"/><test-case name="6308NISTXML-SV-IV-atomic-base64Binary-pattern-4-3 tokoe:valid" result="pass"/><test-case name="6309NISTXML-SV-IV-atomic-base64Binary-pattern-4-4 tokoe:valid" result="pass"/><test-case name="6310NISTXML-SV-IV-atomic-base64Binary-pattern-4-5 tokoe:valid" result="pass"/><test-case name="6311NISTSchema-SV-IV-atomic-base64Binary-pattern-5 tokoe:valid" result="pass"/><test-case name="6312NISTXML-SV-IV-atomic-base64Binary-pattern-5-1 tokoe:valid" result="pass"/><test-case name="6313NISTXML-SV-IV-atomic-base64Binary-pattern-5-2 tokoe:valid" result="pass"/><test-case name="6314NISTXML-SV-IV-atomic-base64Binary-pattern-5-3 tokoe:valid" result="pass"/><test-case name="6315NISTXML-SV-IV-atomic-base64Binary-pattern-5-4 tokoe:valid" result="pass"/><test-case name="6316NISTXML-SV-IV-atomic-base64Binary-pattern-5-5 tokoe:valid" result="pass"/><test-case name="6317NISTSchema-SV-IV-atomic-base64Binary-enumeration-1 tokoe:valid" result="pass"/><test-case name="6318NISTXML-SV-IV-atomic-base64Binary-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="6319NISTXML-SV-IV-atomic-base64Binary-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="6320NISTXML-SV-IV-atomic-base64Binary-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="6321NISTXML-SV-IV-atomic-base64Binary-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="6322NISTXML-SV-IV-atomic-base64Binary-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="6323NISTSchema-SV-IV-atomic-base64Binary-enumeration-2 tokoe:valid" result="pass"/><test-case name="6324NISTXML-SV-IV-atomic-base64Binary-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="6325NISTXML-SV-IV-atomic-base64Binary-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="6326NISTXML-SV-IV-atomic-base64Binary-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="6327NISTXML-SV-IV-atomic-base64Binary-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="6328NISTXML-SV-IV-atomic-base64Binary-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="6329NISTSchema-SV-IV-atomic-base64Binary-enumeration-3 tokoe:valid" result="pass"/><test-case name="6330NISTXML-SV-IV-atomic-base64Binary-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="6331NISTXML-SV-IV-atomic-base64Binary-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="6332NISTXML-SV-IV-atomic-base64Binary-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="6333NISTXML-SV-IV-atomic-base64Binary-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="6334NISTXML-SV-IV-atomic-base64Binary-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="6335NISTSchema-SV-IV-atomic-base64Binary-enumeration-4 tokoe:valid" result="pass"/><test-case name="6336NISTXML-SV-IV-atomic-base64Binary-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="6337NISTXML-SV-IV-atomic-base64Binary-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="6338NISTXML-SV-IV-atomic-base64Binary-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="6339NISTXML-SV-IV-atomic-base64Binary-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="6340NISTXML-SV-IV-atomic-base64Binary-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="6341NISTSchema-SV-IV-atomic-base64Binary-enumeration-5 tokoe:valid" result="pass"/><test-case name="6342NISTXML-SV-IV-atomic-base64Binary-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="6343NISTXML-SV-IV-atomic-base64Binary-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="6344NISTXML-SV-IV-atomic-base64Binary-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="6345NISTXML-SV-IV-atomic-base64Binary-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="6346NISTXML-SV-IV-atomic-base64Binary-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="6347NISTSchema-SV-IV-atomic-base64Binary-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="6348NISTXML-SV-IV-atomic-base64Binary-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="6349NISTXML-SV-IV-atomic-base64Binary-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="6350NISTXML-SV-IV-atomic-base64Binary-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="6351NISTXML-SV-IV-atomic-base64Binary-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="6352NISTXML-SV-IV-atomic-base64Binary-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="6353NISTSchema-SV-IV-atomic-hexBinary-maxLength-1 tokoe:valid" result="pass"/><test-case name="6354NISTXML-SV-IV-atomic-hexBinary-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="6355NISTXML-SV-IV-atomic-hexBinary-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="6356NISTXML-SV-IV-atomic-hexBinary-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="6357NISTXML-SV-IV-atomic-hexBinary-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="6358NISTXML-SV-IV-atomic-hexBinary-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="6359NISTSchema-SV-IV-atomic-hexBinary-maxLength-2 tokoe:valid" result="pass"/><test-case name="6360NISTXML-SV-IV-atomic-hexBinary-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="6361NISTXML-SV-IV-atomic-hexBinary-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="6362NISTXML-SV-IV-atomic-hexBinary-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="6363NISTXML-SV-IV-atomic-hexBinary-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="6364NISTXML-SV-IV-atomic-hexBinary-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="6365NISTSchema-SV-IV-atomic-hexBinary-maxLength-3 tokoe:valid" result="pass"/><test-case name="6366NISTXML-SV-IV-atomic-hexBinary-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="6367NISTXML-SV-IV-atomic-hexBinary-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="6368NISTXML-SV-IV-atomic-hexBinary-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="6369NISTXML-SV-IV-atomic-hexBinary-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="6370NISTXML-SV-IV-atomic-hexBinary-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="6371NISTSchema-SV-IV-atomic-hexBinary-maxLength-4 tokoe:valid" result="pass"/><test-case name="6372NISTXML-SV-IV-atomic-hexBinary-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="6373NISTXML-SV-IV-atomic-hexBinary-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="6374NISTXML-SV-IV-atomic-hexBinary-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="6375NISTXML-SV-IV-atomic-hexBinary-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="6376NISTXML-SV-IV-atomic-hexBinary-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="6377NISTSchema-SV-IV-atomic-hexBinary-maxLength-5 tokoe:valid" result="pass"/><test-case name="6378NISTXML-SV-IV-atomic-hexBinary-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="6379NISTXML-SV-IV-atomic-hexBinary-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="6380NISTXML-SV-IV-atomic-hexBinary-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="6381NISTXML-SV-IV-atomic-hexBinary-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="6382NISTXML-SV-IV-atomic-hexBinary-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="6383NISTSchema-SV-IV-atomic-hexBinary-minLength-1 tokoe:valid" result="pass"/><test-case name="6384NISTXML-SV-IV-atomic-hexBinary-minLength-1-1 tokoe:valid" result="pass"/><test-case name="6385NISTXML-SV-IV-atomic-hexBinary-minLength-1-2 tokoe:valid" result="pass"/><test-case name="6386NISTXML-SV-IV-atomic-hexBinary-minLength-1-3 tokoe:valid" result="pass"/><test-case name="6387NISTXML-SV-IV-atomic-hexBinary-minLength-1-4 tokoe:valid" result="pass"/><test-case name="6388NISTXML-SV-IV-atomic-hexBinary-minLength-1-5 tokoe:valid" result="pass"/><test-case name="6389NISTSchema-SV-IV-atomic-hexBinary-minLength-2 tokoe:valid" result="pass"/><test-case name="6390NISTXML-SV-IV-atomic-hexBinary-minLength-2-1 tokoe:valid" result="pass"/><test-case name="6391NISTXML-SV-IV-atomic-hexBinary-minLength-2-2 tokoe:valid" result="pass"/><test-case name="6392NISTXML-SV-IV-atomic-hexBinary-minLength-2-3 tokoe:valid" result="pass"/><test-case name="6393NISTXML-SV-IV-atomic-hexBinary-minLength-2-4 tokoe:valid" result="pass"/><test-case name="6394NISTXML-SV-IV-atomic-hexBinary-minLength-2-5 tokoe:valid" result="pass"/><test-case name="6395NISTSchema-SV-IV-atomic-hexBinary-minLength-3 tokoe:valid" result="pass"/><test-case name="6396NISTXML-SV-IV-atomic-hexBinary-minLength-3-1 tokoe:valid" result="pass"/><test-case name="6397NISTXML-SV-IV-atomic-hexBinary-minLength-3-2 tokoe:valid" result="pass"/><test-case name="6398NISTXML-SV-IV-atomic-hexBinary-minLength-3-3 tokoe:valid" result="pass"/><test-case name="6399NISTXML-SV-IV-atomic-hexBinary-minLength-3-4 tokoe:valid" result="pass"/><test-case name="6400NISTXML-SV-IV-atomic-hexBinary-minLength-3-5 tokoe:valid" result="pass"/><test-case name="6401NISTSchema-SV-IV-atomic-hexBinary-minLength-4 tokoe:valid" result="pass"/><test-case name="6402NISTXML-SV-IV-atomic-hexBinary-minLength-4-1 tokoe:valid" result="pass"/><test-case name="6403NISTXML-SV-IV-atomic-hexBinary-minLength-4-2 tokoe:valid" result="pass"/><test-case name="6404NISTXML-SV-IV-atomic-hexBinary-minLength-4-3 tokoe:valid" result="pass"/><test-case name="6405NISTXML-SV-IV-atomic-hexBinary-minLength-4-4 tokoe:valid" result="pass"/><test-case name="6406NISTXML-SV-IV-atomic-hexBinary-minLength-4-5 tokoe:valid" result="pass"/><test-case name="6407NISTSchema-SV-IV-atomic-hexBinary-minLength-5 tokoe:valid" result="pass"/><test-case name="6408NISTXML-SV-IV-atomic-hexBinary-minLength-5-1 tokoe:valid" result="pass"/><test-case name="6409NISTXML-SV-IV-atomic-hexBinary-minLength-5-2 tokoe:valid" result="pass"/><test-case name="6410NISTXML-SV-IV-atomic-hexBinary-minLength-5-3 tokoe:valid" result="pass"/><test-case name="6411NISTXML-SV-IV-atomic-hexBinary-minLength-5-4 tokoe:valid" result="pass"/><test-case name="6412NISTXML-SV-IV-atomic-hexBinary-minLength-5-5 tokoe:valid" result="pass"/><test-case name="6413NISTSchema-SV-IV-atomic-hexBinary-length-1 tokoe:valid" result="pass"/><test-case name="6414NISTXML-SV-IV-atomic-hexBinary-length-1-1 tokoe:valid" result="pass"/><test-case name="6415NISTXML-SV-IV-atomic-hexBinary-length-1-2 tokoe:valid" result="pass"/><test-case name="6416NISTXML-SV-IV-atomic-hexBinary-length-1-3 tokoe:valid" result="pass"/><test-case name="6417NISTXML-SV-IV-atomic-hexBinary-length-1-4 tokoe:valid" result="pass"/><test-case name="6418NISTXML-SV-IV-atomic-hexBinary-length-1-5 tokoe:valid" result="pass"/><test-case name="6419NISTSchema-SV-IV-atomic-hexBinary-length-2 tokoe:valid" result="pass"/><test-case name="6420NISTXML-SV-IV-atomic-hexBinary-length-2-1 tokoe:valid" result="pass"/><test-case name="6421NISTXML-SV-IV-atomic-hexBinary-length-2-2 tokoe:valid" result="pass"/><test-case name="6422NISTXML-SV-IV-atomic-hexBinary-length-2-3 tokoe:valid" result="pass"/><test-case name="6423NISTXML-SV-IV-atomic-hexBinary-length-2-4 tokoe:valid" result="pass"/><test-case name="6424NISTXML-SV-IV-atomic-hexBinary-length-2-5 tokoe:valid" result="pass"/><test-case name="6425NISTSchema-SV-IV-atomic-hexBinary-length-3 tokoe:valid" result="pass"/><test-case name="6426NISTXML-SV-IV-atomic-hexBinary-length-3-1 tokoe:valid" result="pass"/><test-case name="6427NISTXML-SV-IV-atomic-hexBinary-length-3-2 tokoe:valid" result="pass"/><test-case name="6428NISTXML-SV-IV-atomic-hexBinary-length-3-3 tokoe:valid" result="pass"/><test-case name="6429NISTXML-SV-IV-atomic-hexBinary-length-3-4 tokoe:valid" result="pass"/><test-case name="6430NISTXML-SV-IV-atomic-hexBinary-length-3-5 tokoe:valid" result="pass"/><test-case name="6431NISTSchema-SV-IV-atomic-hexBinary-length-4 tokoe:valid" result="pass"/><test-case name="6432NISTXML-SV-IV-atomic-hexBinary-length-4-1 tokoe:valid" result="pass"/><test-case name="6433NISTXML-SV-IV-atomic-hexBinary-length-4-2 tokoe:valid" result="pass"/><test-case name="6434NISTXML-SV-IV-atomic-hexBinary-length-4-3 tokoe:valid" result="pass"/><test-case name="6435NISTXML-SV-IV-atomic-hexBinary-length-4-4 tokoe:valid" result="pass"/><test-case name="6436NISTXML-SV-IV-atomic-hexBinary-length-4-5 tokoe:valid" result="pass"/><test-case name="6437NISTSchema-SV-IV-atomic-hexBinary-length-5 tokoe:valid" result="pass"/><test-case name="6438NISTXML-SV-IV-atomic-hexBinary-length-5-1 tokoe:valid" result="pass"/><test-case name="6439NISTXML-SV-IV-atomic-hexBinary-length-5-2 tokoe:valid" result="pass"/><test-case name="6440NISTXML-SV-IV-atomic-hexBinary-length-5-3 tokoe:valid" result="pass"/><test-case name="6441NISTXML-SV-IV-atomic-hexBinary-length-5-4 tokoe:valid" result="pass"/><test-case name="6442NISTXML-SV-IV-atomic-hexBinary-length-5-5 tokoe:valid" result="pass"/><test-case name="6443NISTSchema-SV-IV-atomic-hexBinary-pattern-1 tokoe:valid" result="pass"/><test-case name="6444NISTXML-SV-IV-atomic-hexBinary-pattern-1-1 tokoe:valid" result="pass"/><test-case name="6445NISTXML-SV-IV-atomic-hexBinary-pattern-1-2 tokoe:valid" result="pass"/><test-case name="6446NISTXML-SV-IV-atomic-hexBinary-pattern-1-3 tokoe:valid" result="pass"/><test-case name="6447NISTXML-SV-IV-atomic-hexBinary-pattern-1-4 tokoe:valid" result="pass"/><test-case name="6448NISTXML-SV-IV-atomic-hexBinary-pattern-1-5 tokoe:valid" result="pass"/><test-case name="6449NISTSchema-SV-IV-atomic-hexBinary-pattern-2 tokoe:valid" result="pass"/><test-case name="6450NISTXML-SV-IV-atomic-hexBinary-pattern-2-1 tokoe:valid" result="pass"/><test-case name="6451NISTXML-SV-IV-atomic-hexBinary-pattern-2-2 tokoe:valid" result="pass"/><test-case name="6452NISTXML-SV-IV-atomic-hexBinary-pattern-2-3 tokoe:valid" result="pass"/><test-case name="6453NISTXML-SV-IV-atomic-hexBinary-pattern-2-4 tokoe:valid" result="pass"/><test-case name="6454NISTXML-SV-IV-atomic-hexBinary-pattern-2-5 tokoe:valid" result="pass"/><test-case name="6455NISTSchema-SV-IV-atomic-hexBinary-pattern-3 tokoe:valid" result="pass"/><test-case name="6456NISTXML-SV-IV-atomic-hexBinary-pattern-3-1 tokoe:valid" result="pass"/><test-case name="6457NISTXML-SV-IV-atomic-hexBinary-pattern-3-2 tokoe:valid" result="pass"/><test-case name="6458NISTXML-SV-IV-atomic-hexBinary-pattern-3-3 tokoe:valid" result="pass"/><test-case name="6459NISTXML-SV-IV-atomic-hexBinary-pattern-3-4 tokoe:valid" result="pass"/><test-case name="6460NISTXML-SV-IV-atomic-hexBinary-pattern-3-5 tokoe:valid" result="pass"/><test-case name="6461NISTSchema-SV-IV-atomic-hexBinary-pattern-4 tokoe:valid" result="pass"/><test-case name="6462NISTXML-SV-IV-atomic-hexBinary-pattern-4-1 tokoe:valid" result="pass"/><test-case name="6463NISTXML-SV-IV-atomic-hexBinary-pattern-4-2 tokoe:valid" result="pass"/><test-case name="6464NISTXML-SV-IV-atomic-hexBinary-pattern-4-3 tokoe:valid" result="pass"/><test-case name="6465NISTXML-SV-IV-atomic-hexBinary-pattern-4-4 tokoe:valid" result="pass"/><test-case name="6466NISTXML-SV-IV-atomic-hexBinary-pattern-4-5 tokoe:valid" result="pass"/><test-case name="6467NISTSchema-SV-IV-atomic-hexBinary-pattern-5 tokoe:valid" result="pass"/><test-case name="6468NISTXML-SV-IV-atomic-hexBinary-pattern-5-1 tokoe:valid" result="pass"/><test-case name="6469NISTXML-SV-IV-atomic-hexBinary-pattern-5-2 tokoe:valid" result="pass"/><test-case name="6470NISTXML-SV-IV-atomic-hexBinary-pattern-5-3 tokoe:valid" result="pass"/><test-case name="6471NISTXML-SV-IV-atomic-hexBinary-pattern-5-4 tokoe:valid" result="pass"/><test-case name="6472NISTXML-SV-IV-atomic-hexBinary-pattern-5-5 tokoe:valid" result="pass"/><test-case name="6473NISTSchema-SV-IV-atomic-hexBinary-enumeration-1 tokoe:valid" result="pass"/><test-case name="6474NISTXML-SV-IV-atomic-hexBinary-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="6475NISTXML-SV-IV-atomic-hexBinary-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="6476NISTXML-SV-IV-atomic-hexBinary-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="6477NISTXML-SV-IV-atomic-hexBinary-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="6478NISTXML-SV-IV-atomic-hexBinary-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="6479NISTSchema-SV-IV-atomic-hexBinary-enumeration-2 tokoe:valid" result="pass"/><test-case name="6480NISTXML-SV-IV-atomic-hexBinary-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="6481NISTXML-SV-IV-atomic-hexBinary-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="6482NISTXML-SV-IV-atomic-hexBinary-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="6483NISTXML-SV-IV-atomic-hexBinary-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="6484NISTXML-SV-IV-atomic-hexBinary-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="6485NISTSchema-SV-IV-atomic-hexBinary-enumeration-3 tokoe:valid" result="pass"/><test-case name="6486NISTXML-SV-IV-atomic-hexBinary-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="6487NISTXML-SV-IV-atomic-hexBinary-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="6488NISTXML-SV-IV-atomic-hexBinary-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="6489NISTXML-SV-IV-atomic-hexBinary-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="6490NISTXML-SV-IV-atomic-hexBinary-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="6491NISTSchema-SV-IV-atomic-hexBinary-enumeration-4 tokoe:valid" result="pass"/><test-case name="6492NISTXML-SV-IV-atomic-hexBinary-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="6493NISTXML-SV-IV-atomic-hexBinary-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="6494NISTXML-SV-IV-atomic-hexBinary-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="6495NISTXML-SV-IV-atomic-hexBinary-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="6496NISTXML-SV-IV-atomic-hexBinary-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="6497NISTSchema-SV-IV-atomic-hexBinary-enumeration-5 tokoe:valid" result="pass"/><test-case name="6498NISTXML-SV-IV-atomic-hexBinary-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="6499NISTXML-SV-IV-atomic-hexBinary-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="6500NISTXML-SV-IV-atomic-hexBinary-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="6501NISTXML-SV-IV-atomic-hexBinary-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="6502NISTXML-SV-IV-atomic-hexBinary-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="6503NISTSchema-SV-IV-atomic-hexBinary-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="6504NISTXML-SV-IV-atomic-hexBinary-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="6505NISTXML-SV-IV-atomic-hexBinary-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="6506NISTXML-SV-IV-atomic-hexBinary-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="6507NISTXML-SV-IV-atomic-hexBinary-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="6508NISTXML-SV-IV-atomic-hexBinary-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="6509NISTSchema-SV-II-atomic-double-pattern-1 tokoe:valid" result="pass"/><test-case name="6510NISTXML-SV-II-atomic-double-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="6511NISTXML-SV-II-atomic-double-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="6512NISTXML-SV-II-atomic-double-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="6513NISTXML-SV-II-atomic-double-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="6514NISTXML-SV-II-atomic-double-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="6515NISTSchema-SV-II-atomic-double-pattern-2 tokoe:valid" result="pass"/><test-case name="6516NISTXML-SV-II-atomic-double-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="6517NISTXML-SV-II-atomic-double-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="6518NISTXML-SV-II-atomic-double-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="6519NISTXML-SV-II-atomic-double-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="6520NISTXML-SV-II-atomic-double-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="6521NISTSchema-SV-II-atomic-double-pattern-3 tokoe:valid" result="pass"/><test-case name="6522NISTXML-SV-II-atomic-double-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="6523NISTXML-SV-II-atomic-double-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="6524NISTXML-SV-II-atomic-double-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="6525NISTXML-SV-II-atomic-double-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="6526NISTXML-SV-II-atomic-double-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="6527NISTSchema-SV-II-atomic-double-pattern-4 tokoe:valid" result="pass"/><test-case name="6528NISTXML-SV-II-atomic-double-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="6529NISTXML-SV-II-atomic-double-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="6530NISTXML-SV-II-atomic-double-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="6531NISTXML-SV-II-atomic-double-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="6532NISTXML-SV-II-atomic-double-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="6533NISTSchema-SV-II-atomic-double-pattern-5 tokoe:valid" result="pass"/><test-case name="6534NISTXML-SV-II-atomic-double-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="6535NISTXML-SV-II-atomic-double-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="6536NISTXML-SV-II-atomic-double-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="6537NISTXML-SV-II-atomic-double-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="6538NISTXML-SV-II-atomic-double-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="6539NISTSchema-SV-II-atomic-double-enumeration-1 tokoe:valid" result="pass"/><test-case name="6540NISTXML-SV-II-atomic-double-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="6541NISTXML-SV-II-atomic-double-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="6542NISTXML-SV-II-atomic-double-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="6543NISTXML-SV-II-atomic-double-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="6544NISTXML-SV-II-atomic-double-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="6545NISTSchema-SV-II-atomic-double-enumeration-2 tokoe:valid" result="pass"/><test-case name="6546NISTXML-SV-II-atomic-double-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="6547NISTXML-SV-II-atomic-double-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="6548NISTXML-SV-II-atomic-double-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="6549NISTXML-SV-II-atomic-double-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="6550NISTXML-SV-II-atomic-double-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="6551NISTSchema-SV-II-atomic-double-enumeration-3 tokoe:valid" result="pass"/><test-case name="6552NISTXML-SV-II-atomic-double-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="6553NISTXML-SV-II-atomic-double-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="6554NISTXML-SV-II-atomic-double-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="6555NISTXML-SV-II-atomic-double-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="6556NISTXML-SV-II-atomic-double-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="6557NISTSchema-SV-II-atomic-double-enumeration-4 tokoe:valid" result="pass"/><test-case name="6558NISTXML-SV-II-atomic-double-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="6559NISTXML-SV-II-atomic-double-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="6560NISTXML-SV-II-atomic-double-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="6561NISTXML-SV-II-atomic-double-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="6562NISTXML-SV-II-atomic-double-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="6563NISTSchema-SV-II-atomic-double-enumeration-5 tokoe:valid" result="pass"/><test-case name="6564NISTXML-SV-II-atomic-double-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="6565NISTXML-SV-II-atomic-double-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="6566NISTXML-SV-II-atomic-double-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="6567NISTXML-SV-II-atomic-double-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="6568NISTXML-SV-II-atomic-double-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="6569NISTSchema-SV-II-atomic-float-pattern-1 tokoe:valid" result="pass"/><test-case name="6570NISTXML-SV-II-atomic-float-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="6571NISTXML-SV-II-atomic-float-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="6572NISTXML-SV-II-atomic-float-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="6573NISTXML-SV-II-atomic-float-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="6574NISTXML-SV-II-atomic-float-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="6575NISTSchema-SV-II-atomic-float-pattern-2 tokoe:valid" result="pass"/><test-case name="6576NISTXML-SV-II-atomic-float-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="6577NISTXML-SV-II-atomic-float-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="6578NISTXML-SV-II-atomic-float-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="6579NISTXML-SV-II-atomic-float-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="6580NISTXML-SV-II-atomic-float-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="6581NISTSchema-SV-II-atomic-float-pattern-3 tokoe:valid" result="pass"/><test-case name="6582NISTXML-SV-II-atomic-float-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="6583NISTXML-SV-II-atomic-float-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="6584NISTXML-SV-II-atomic-float-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="6585NISTXML-SV-II-atomic-float-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="6586NISTXML-SV-II-atomic-float-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="6587NISTSchema-SV-II-atomic-float-pattern-4 tokoe:valid" result="pass"/><test-case name="6588NISTXML-SV-II-atomic-float-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="6589NISTXML-SV-II-atomic-float-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="6590NISTXML-SV-II-atomic-float-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="6591NISTXML-SV-II-atomic-float-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="6592NISTXML-SV-II-atomic-float-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="6593NISTSchema-SV-II-atomic-float-pattern-5 tokoe:valid" result="pass"/><test-case name="6594NISTXML-SV-II-atomic-float-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="6595NISTXML-SV-II-atomic-float-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="6596NISTXML-SV-II-atomic-float-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="6597NISTXML-SV-II-atomic-float-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="6598NISTXML-SV-II-atomic-float-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="6599NISTSchema-SV-II-atomic-float-enumeration-1 tokoe:valid" result="pass"/><test-case name="6600NISTXML-SV-II-atomic-float-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="6601NISTXML-SV-II-atomic-float-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="6602NISTXML-SV-II-atomic-float-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="6603NISTXML-SV-II-atomic-float-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="6604NISTXML-SV-II-atomic-float-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="6605NISTSchema-SV-II-atomic-float-enumeration-2 tokoe:valid" result="pass"/><test-case name="6606NISTXML-SV-II-atomic-float-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="6607NISTXML-SV-II-atomic-float-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="6608NISTXML-SV-II-atomic-float-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="6609NISTXML-SV-II-atomic-float-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="6610NISTXML-SV-II-atomic-float-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="6611NISTSchema-SV-II-atomic-float-enumeration-3 tokoe:valid" result="pass"/><test-case name="6612NISTXML-SV-II-atomic-float-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="6613NISTXML-SV-II-atomic-float-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="6614NISTXML-SV-II-atomic-float-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="6615NISTXML-SV-II-atomic-float-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="6616NISTXML-SV-II-atomic-float-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="6617NISTSchema-SV-II-atomic-float-enumeration-4 tokoe:valid" result="pass"/><test-case name="6618NISTXML-SV-II-atomic-float-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="6619NISTXML-SV-II-atomic-float-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="6620NISTXML-SV-II-atomic-float-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="6621NISTXML-SV-II-atomic-float-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="6622NISTXML-SV-II-atomic-float-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="6623NISTSchema-SV-II-atomic-float-enumeration-5 tokoe:valid" result="pass"/><test-case name="6624NISTXML-SV-II-atomic-float-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="6625NISTXML-SV-II-atomic-float-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="6626NISTXML-SV-II-atomic-float-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="6627NISTXML-SV-II-atomic-float-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="6628NISTXML-SV-II-atomic-float-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="6629NISTSchema-SV-II-atomic-decimal-minInclusive-2 tokoe:valid" result="pass"/><test-case name="6630NISTXML-SV-II-atomic-decimal-minInclusive-2-1 tokoe:invalid" result="pass"/><test-case name="6631NISTXML-SV-II-atomic-decimal-minInclusive-2-2 tokoe:invalid" result="pass"/><test-case name="6632NISTXML-SV-II-atomic-decimal-minInclusive-2-3 tokoe:invalid" result="pass"/><test-case name="6633NISTXML-SV-II-atomic-decimal-minInclusive-2-4 tokoe:invalid" result="pass"/><test-case name="6634NISTXML-SV-II-atomic-decimal-minInclusive-2-5 tokoe:invalid" result="fail"/><test-case name="6635NISTSchema-SV-II-atomic-decimal-minInclusive-3 tokoe:valid" result="pass"/><test-case name="6636NISTXML-SV-II-atomic-decimal-minInclusive-3-1 tokoe:invalid" result="pass"/><test-case name="6637NISTXML-SV-II-atomic-decimal-minInclusive-3-2 tokoe:invalid" result="pass"/><test-case name="6638NISTXML-SV-II-atomic-decimal-minInclusive-3-3 tokoe:invalid" result="pass"/><test-case name="6639NISTXML-SV-II-atomic-decimal-minInclusive-3-4 tokoe:invalid" result="pass"/><test-case name="6640NISTXML-SV-II-atomic-decimal-minInclusive-3-5 tokoe:invalid" result="fail"/><test-case name="6641NISTSchema-SV-II-atomic-decimal-minInclusive-4 tokoe:valid" result="pass"/><test-case name="6642NISTXML-SV-II-atomic-decimal-minInclusive-4-1 tokoe:invalid" result="pass"/><test-case name="6643NISTXML-SV-II-atomic-decimal-minInclusive-4-2 tokoe:invalid" result="pass"/><test-case name="6644NISTXML-SV-II-atomic-decimal-minInclusive-4-3 tokoe:invalid" result="pass"/><test-case name="6645NISTXML-SV-II-atomic-decimal-minInclusive-4-4 tokoe:invalid" result="pass"/><test-case name="6646NISTXML-SV-II-atomic-decimal-minInclusive-4-5 tokoe:invalid" result="fail"/><test-case name="6647NISTSchema-SV-II-atomic-decimal-minInclusive-5 tokoe:valid" result="pass"/><test-case name="6648NISTXML-SV-II-atomic-decimal-minInclusive-5-1 tokoe:invalid" result="pass"/><test-case name="6649NISTXML-SV-II-atomic-decimal-minInclusive-5-2 tokoe:invalid" result="pass"/><test-case name="6650NISTXML-SV-II-atomic-decimal-minInclusive-5-3 tokoe:invalid" result="pass"/><test-case name="6651NISTXML-SV-II-atomic-decimal-minInclusive-5-4 tokoe:invalid" result="pass"/><test-case name="6652NISTXML-SV-II-atomic-decimal-minInclusive-5-5 tokoe:invalid" result="fail"/><test-case name="6653NISTSchema-SV-II-atomic-decimal-minInclusive-6 tokoe:valid" result="pass"/><test-case name="6654NISTXML-SV-II-atomic-decimal-minInclusive-6-1 tokoe:invalid" result="pass"/><test-case name="6655NISTXML-SV-II-atomic-decimal-minInclusive-6-2 tokoe:invalid" result="pass"/><test-case name="6656NISTXML-SV-II-atomic-decimal-minInclusive-6-3 tokoe:invalid" result="pass"/><test-case name="6657NISTXML-SV-II-atomic-decimal-minInclusive-6-4 tokoe:invalid" result="pass"/><test-case name="6658NISTXML-SV-II-atomic-decimal-minInclusive-6-5 tokoe:invalid" result="fail"/><test-case name="6659NISTSchema-SV-II-atomic-decimal-maxInclusive-1 tokoe:valid" result="pass"/><test-case name="6660NISTXML-SV-II-atomic-decimal-maxInclusive-1-1 tokoe:invalid" result="fail"/><test-case name="6661NISTXML-SV-II-atomic-decimal-maxInclusive-1-2 tokoe:invalid" result="pass"/><test-case name="6662NISTXML-SV-II-atomic-decimal-maxInclusive-1-3 tokoe:invalid" result="pass"/><test-case name="6663NISTXML-SV-II-atomic-decimal-maxInclusive-1-4 tokoe:invalid" result="pass"/><test-case name="6664NISTXML-SV-II-atomic-decimal-maxInclusive-1-5 tokoe:invalid" result="pass"/><test-case name="6665NISTSchema-SV-II-atomic-decimal-maxInclusive-2 tokoe:valid" result="pass"/><test-case name="6666NISTXML-SV-II-atomic-decimal-maxInclusive-2-1 tokoe:invalid" result="fail"/><test-case name="6667NISTXML-SV-II-atomic-decimal-maxInclusive-2-2 tokoe:invalid" result="pass"/><test-case name="6668NISTXML-SV-II-atomic-decimal-maxInclusive-2-3 tokoe:invalid" result="pass"/><test-case name="6669NISTXML-SV-II-atomic-decimal-maxInclusive-2-4 tokoe:invalid" result="pass"/><test-case name="6670NISTXML-SV-II-atomic-decimal-maxInclusive-2-5 tokoe:invalid" result="pass"/><test-case name="6671NISTSchema-SV-II-atomic-decimal-maxInclusive-3 tokoe:valid" result="pass"/><test-case name="6672NISTXML-SV-II-atomic-decimal-maxInclusive-3-1 tokoe:invalid" result="fail"/><test-case name="6673NISTXML-SV-II-atomic-decimal-maxInclusive-3-2 tokoe:invalid" result="pass"/><test-case name="6674NISTXML-SV-II-atomic-decimal-maxInclusive-3-3 tokoe:invalid" result="pass"/><test-case name="6675NISTXML-SV-II-atomic-decimal-maxInclusive-3-4 tokoe:invalid" result="pass"/><test-case name="6676NISTXML-SV-II-atomic-decimal-maxInclusive-3-5 tokoe:invalid" result="pass"/><test-case name="6677NISTSchema-SV-II-atomic-decimal-maxInclusive-4 tokoe:valid" result="pass"/><test-case name="6678NISTXML-SV-II-atomic-decimal-maxInclusive-4-1 tokoe:invalid" result="fail"/><test-case name="6679NISTXML-SV-II-atomic-decimal-maxInclusive-4-2 tokoe:invalid" result="pass"/><test-case name="6680NISTXML-SV-II-atomic-decimal-maxInclusive-4-3 tokoe:invalid" result="pass"/><test-case name="6681NISTXML-SV-II-atomic-decimal-maxInclusive-4-4 tokoe:invalid" result="pass"/><test-case name="6682NISTXML-SV-II-atomic-decimal-maxInclusive-4-5 tokoe:invalid" result="pass"/><test-case name="6683NISTSchema-SV-II-atomic-decimal-maxInclusive-5 tokoe:valid" result="pass"/><test-case name="6684NISTXML-SV-II-atomic-decimal-maxInclusive-5-1 tokoe:invalid" result="fail"/><test-case name="6685NISTXML-SV-II-atomic-decimal-maxInclusive-5-2 tokoe:invalid" result="pass"/><test-case name="6686NISTXML-SV-II-atomic-decimal-maxInclusive-5-3 tokoe:invalid" result="pass"/><test-case name="6687NISTXML-SV-II-atomic-decimal-maxInclusive-5-4 tokoe:invalid" result="pass"/><test-case name="6688NISTXML-SV-II-atomic-decimal-maxInclusive-5-5 tokoe:invalid" result="pass"/><test-case name="6689NISTSchema-SV-II-atomic-decimal-fractionDigits-1 tokoe:valid" result="pass"/><test-case name="6690NISTXML-SV-II-atomic-decimal-fractionDigits-1-1 tokoe:invalid" result="pass"/><test-case name="6691NISTXML-SV-II-atomic-decimal-fractionDigits-1-2 tokoe:invalid" result="pass"/><test-case name="6692NISTXML-SV-II-atomic-decimal-fractionDigits-1-3 tokoe:invalid" result="pass"/><test-case name="6693NISTXML-SV-II-atomic-decimal-fractionDigits-1-4 tokoe:invalid" result="pass"/><test-case name="6694NISTXML-SV-II-atomic-decimal-fractionDigits-1-5 tokoe:invalid" result="pass"/><test-case name="6695NISTSchema-SV-II-atomic-decimal-fractionDigits-2 tokoe:valid" result="pass"/><test-case name="6696NISTXML-SV-II-atomic-decimal-fractionDigits-2-1 tokoe:invalid" result="pass"/><test-case name="6697NISTXML-SV-II-atomic-decimal-fractionDigits-2-2 tokoe:invalid" result="pass"/><test-case name="6698NISTXML-SV-II-atomic-decimal-fractionDigits-2-3 tokoe:invalid" result="pass"/><test-case name="6699NISTXML-SV-II-atomic-decimal-fractionDigits-2-4 tokoe:invalid" result="pass"/><test-case name="6700NISTXML-SV-II-atomic-decimal-fractionDigits-2-5 tokoe:invalid" result="pass"/><test-case name="6701NISTSchema-SV-II-atomic-decimal-fractionDigits-3 tokoe:valid" result="pass"/><test-case name="6702NISTXML-SV-II-atomic-decimal-fractionDigits-3-1 tokoe:invalid" result="pass"/><test-case name="6703NISTXML-SV-II-atomic-decimal-fractionDigits-3-2 tokoe:invalid" result="pass"/><test-case name="6704NISTXML-SV-II-atomic-decimal-fractionDigits-3-3 tokoe:invalid" result="pass"/><test-case name="6705NISTXML-SV-II-atomic-decimal-fractionDigits-3-4 tokoe:invalid" result="pass"/><test-case name="6706NISTXML-SV-II-atomic-decimal-fractionDigits-3-5 tokoe:invalid" result="pass"/><test-case name="6707NISTSchema-SV-II-atomic-decimal-fractionDigits-4 tokoe:valid" result="pass"/><test-case name="6708NISTXML-SV-II-atomic-decimal-fractionDigits-4-1 tokoe:invalid" result="pass"/><test-case name="6709NISTXML-SV-II-atomic-decimal-fractionDigits-4-2 tokoe:invalid" result="pass"/><test-case name="6710NISTXML-SV-II-atomic-decimal-fractionDigits-4-3 tokoe:invalid" result="pass"/><test-case name="6711NISTXML-SV-II-atomic-decimal-fractionDigits-4-4 tokoe:invalid" result="pass"/><test-case name="6712NISTXML-SV-II-atomic-decimal-fractionDigits-4-5 tokoe:invalid" result="pass"/><test-case name="6713NISTSchema-SV-II-atomic-decimal-fractionDigits-5 tokoe:valid" result="pass"/><test-case name="6714NISTXML-SV-II-atomic-decimal-fractionDigits-5-1 tokoe:invalid" result="pass"/><test-case name="6715NISTXML-SV-II-atomic-decimal-fractionDigits-5-2 tokoe:invalid" result="pass"/><test-case name="6716NISTXML-SV-II-atomic-decimal-fractionDigits-5-3 tokoe:invalid" result="pass"/><test-case name="6717NISTXML-SV-II-atomic-decimal-fractionDigits-5-4 tokoe:invalid" result="pass"/><test-case name="6718NISTXML-SV-II-atomic-decimal-fractionDigits-5-5 tokoe:invalid" result="pass"/><test-case name="6719NISTSchema-SV-II-atomic-decimal-totalDigits-1 tokoe:valid" result="pass"/><test-case name="6720NISTXML-SV-II-atomic-decimal-totalDigits-1-1 tokoe:invalid" result="pass"/><test-case name="6721NISTXML-SV-II-atomic-decimal-totalDigits-1-2 tokoe:invalid" result="pass"/><test-case name="6722NISTXML-SV-II-atomic-decimal-totalDigits-1-3 tokoe:invalid" result="pass"/><test-case name="6723NISTXML-SV-II-atomic-decimal-totalDigits-1-4 tokoe:invalid" result="pass"/><test-case name="6724NISTXML-SV-II-atomic-decimal-totalDigits-1-5 tokoe:invalid" result="pass"/><test-case name="6725NISTSchema-SV-II-atomic-decimal-totalDigits-2 tokoe:valid" result="pass"/><test-case name="6726NISTXML-SV-II-atomic-decimal-totalDigits-2-1 tokoe:invalid" result="pass"/><test-case name="6727NISTXML-SV-II-atomic-decimal-totalDigits-2-2 tokoe:invalid" result="pass"/><test-case name="6728NISTXML-SV-II-atomic-decimal-totalDigits-2-3 tokoe:invalid" result="pass"/><test-case name="6729NISTXML-SV-II-atomic-decimal-totalDigits-2-4 tokoe:invalid" result="pass"/><test-case name="6730NISTXML-SV-II-atomic-decimal-totalDigits-2-5 tokoe:invalid" result="pass"/><test-case name="6731NISTSchema-SV-II-atomic-decimal-totalDigits-3 tokoe:valid" result="pass"/><test-case name="6732NISTXML-SV-II-atomic-decimal-totalDigits-3-1 tokoe:invalid" result="pass"/><test-case name="6733NISTXML-SV-II-atomic-decimal-totalDigits-3-2 tokoe:invalid" result="pass"/><test-case name="6734NISTXML-SV-II-atomic-decimal-totalDigits-3-3 tokoe:invalid" result="pass"/><test-case name="6735NISTXML-SV-II-atomic-decimal-totalDigits-3-4 tokoe:invalid" result="pass"/><test-case name="6736NISTXML-SV-II-atomic-decimal-totalDigits-3-5 tokoe:invalid" result="pass"/><test-case name="6737NISTSchema-SV-II-atomic-decimal-totalDigits-4 tokoe:valid" result="pass"/><test-case name="6738NISTXML-SV-II-atomic-decimal-totalDigits-4-1 tokoe:invalid" result="pass"/><test-case name="6739NISTXML-SV-II-atomic-decimal-totalDigits-4-2 tokoe:invalid" result="pass"/><test-case name="6740NISTXML-SV-II-atomic-decimal-totalDigits-4-3 tokoe:invalid" result="pass"/><test-case name="6741NISTXML-SV-II-atomic-decimal-totalDigits-4-4 tokoe:invalid" result="pass"/><test-case name="6742NISTXML-SV-II-atomic-decimal-totalDigits-4-5 tokoe:invalid" result="pass"/><test-case name="6743NISTSchema-SV-II-atomic-decimal-totalDigits-5 tokoe:valid" result="pass"/><test-case name="6744NISTXML-SV-II-atomic-decimal-totalDigits-5-1 tokoe:invalid" result="pass"/><test-case name="6745NISTXML-SV-II-atomic-decimal-totalDigits-5-2 tokoe:invalid" result="pass"/><test-case name="6746NISTXML-SV-II-atomic-decimal-totalDigits-5-3 tokoe:invalid" result="pass"/><test-case name="6747NISTXML-SV-II-atomic-decimal-totalDigits-5-4 tokoe:invalid" result="pass"/><test-case name="6748NISTXML-SV-II-atomic-decimal-totalDigits-5-5 tokoe:invalid" result="pass"/><test-case name="6749NISTSchema-SV-II-atomic-integer-minInclusive-2 tokoe:valid" result="pass"/><test-case name="6750NISTXML-SV-II-atomic-integer-minInclusive-2-1 tokoe:invalid" result="pass"/><test-case name="6751NISTXML-SV-II-atomic-integer-minInclusive-2-2 tokoe:invalid" result="pass"/><test-case name="6752NISTXML-SV-II-atomic-integer-minInclusive-2-3 tokoe:invalid" result="pass"/><test-case name="6753NISTXML-SV-II-atomic-integer-minInclusive-2-4 tokoe:invalid" result="pass"/><test-case name="6754NISTXML-SV-II-atomic-integer-minInclusive-2-5 tokoe:invalid" result="pass"/><test-case name="6755NISTSchema-SV-II-atomic-integer-minInclusive-3 tokoe:valid" result="pass"/><test-case name="6756NISTXML-SV-II-atomic-integer-minInclusive-3-1 tokoe:invalid" result="pass"/><test-case name="6757NISTXML-SV-II-atomic-integer-minInclusive-3-2 tokoe:invalid" result="pass"/><test-case name="6758NISTXML-SV-II-atomic-integer-minInclusive-3-3 tokoe:invalid" result="pass"/><test-case name="6759NISTXML-SV-II-atomic-integer-minInclusive-3-4 tokoe:invalid" result="pass"/><test-case name="6760NISTXML-SV-II-atomic-integer-minInclusive-3-5 tokoe:invalid" result="pass"/><test-case name="6761NISTSchema-SV-II-atomic-integer-minInclusive-4 tokoe:valid" result="pass"/><test-case name="6762NISTXML-SV-II-atomic-integer-minInclusive-4-1 tokoe:invalid" result="pass"/><test-case name="6763NISTXML-SV-II-atomic-integer-minInclusive-4-2 tokoe:invalid" result="pass"/><test-case name="6764NISTXML-SV-II-atomic-integer-minInclusive-4-3 tokoe:invalid" result="pass"/><test-case name="6765NISTXML-SV-II-atomic-integer-minInclusive-4-4 tokoe:invalid" result="pass"/><test-case name="6766NISTXML-SV-II-atomic-integer-minInclusive-4-5 tokoe:invalid" result="pass"/><test-case name="6767NISTSchema-SV-II-atomic-integer-minInclusive-5 tokoe:valid" result="pass"/><test-case name="6768NISTXML-SV-II-atomic-integer-minInclusive-5-1 tokoe:invalid" result="pass"/><test-case name="6769NISTXML-SV-II-atomic-integer-minInclusive-5-2 tokoe:invalid" result="pass"/><test-case name="6770NISTXML-SV-II-atomic-integer-minInclusive-5-3 tokoe:invalid" result="pass"/><test-case name="6771NISTXML-SV-II-atomic-integer-minInclusive-5-4 tokoe:invalid" result="pass"/><test-case name="6772NISTXML-SV-II-atomic-integer-minInclusive-5-5 tokoe:invalid" result="pass"/><test-case name="6773NISTSchema-SV-II-atomic-integer-minInclusive-6 tokoe:valid" result="pass"/><test-case name="6774NISTXML-SV-II-atomic-integer-minInclusive-6-1 tokoe:invalid" result="pass"/><test-case name="6775NISTXML-SV-II-atomic-integer-minInclusive-6-2 tokoe:invalid" result="pass"/><test-case name="6776NISTXML-SV-II-atomic-integer-minInclusive-6-3 tokoe:invalid" result="pass"/><test-case name="6777NISTXML-SV-II-atomic-integer-minInclusive-6-4 tokoe:invalid" result="pass"/><test-case name="6778NISTXML-SV-II-atomic-integer-minInclusive-6-5 tokoe:invalid" result="pass"/><test-case name="6779NISTSchema-SV-II-atomic-integer-maxInclusive-1 tokoe:valid" result="pass"/><test-case name="6780NISTXML-SV-II-atomic-integer-maxInclusive-1-1 tokoe:invalid" result="pass"/><test-case name="6781NISTXML-SV-II-atomic-integer-maxInclusive-1-2 tokoe:invalid" result="pass"/><test-case name="6782NISTXML-SV-II-atomic-integer-maxInclusive-1-3 tokoe:invalid" result="pass"/><test-case name="6783NISTXML-SV-II-atomic-integer-maxInclusive-1-4 tokoe:invalid" result="pass"/><test-case name="6784NISTXML-SV-II-atomic-integer-maxInclusive-1-5 tokoe:invalid" result="pass"/><test-case name="6785NISTSchema-SV-II-atomic-integer-maxInclusive-2 tokoe:valid" result="pass"/><test-case name="6786NISTXML-SV-II-atomic-integer-maxInclusive-2-1 tokoe:invalid" result="pass"/><test-case name="6787NISTXML-SV-II-atomic-integer-maxInclusive-2-2 tokoe:invalid" result="pass"/><test-case name="6788NISTXML-SV-II-atomic-integer-maxInclusive-2-3 tokoe:invalid" result="pass"/><test-case name="6789NISTXML-SV-II-atomic-integer-maxInclusive-2-4 tokoe:invalid" result="pass"/><test-case name="6790NISTXML-SV-II-atomic-integer-maxInclusive-2-5 tokoe:invalid" result="pass"/><test-case name="6791NISTSchema-SV-II-atomic-integer-maxInclusive-3 tokoe:valid" result="pass"/><test-case name="6792NISTXML-SV-II-atomic-integer-maxInclusive-3-1 tokoe:invalid" result="pass"/><test-case name="6793NISTXML-SV-II-atomic-integer-maxInclusive-3-2 tokoe:invalid" result="pass"/><test-case name="6794NISTXML-SV-II-atomic-integer-maxInclusive-3-3 tokoe:invalid" result="pass"/><test-case name="6795NISTXML-SV-II-atomic-integer-maxInclusive-3-4 tokoe:invalid" result="pass"/><test-case name="6796NISTXML-SV-II-atomic-integer-maxInclusive-3-5 tokoe:invalid" result="pass"/><test-case name="6797NISTSchema-SV-II-atomic-integer-maxInclusive-4 tokoe:valid" result="pass"/><test-case name="6798NISTXML-SV-II-atomic-integer-maxInclusive-4-1 tokoe:invalid" result="pass"/><test-case name="6799NISTXML-SV-II-atomic-integer-maxInclusive-4-2 tokoe:invalid" result="pass"/><test-case name="6800NISTXML-SV-II-atomic-integer-maxInclusive-4-3 tokoe:invalid" result="pass"/><test-case name="6801NISTXML-SV-II-atomic-integer-maxInclusive-4-4 tokoe:invalid" result="pass"/><test-case name="6802NISTXML-SV-II-atomic-integer-maxInclusive-4-5 tokoe:invalid" result="pass"/><test-case name="6803NISTSchema-SV-II-atomic-integer-maxInclusive-5 tokoe:valid" result="pass"/><test-case name="6804NISTXML-SV-II-atomic-integer-maxInclusive-5-1 tokoe:invalid" result="pass"/><test-case name="6805NISTXML-SV-II-atomic-integer-maxInclusive-5-2 tokoe:invalid" result="pass"/><test-case name="6806NISTXML-SV-II-atomic-integer-maxInclusive-5-3 tokoe:invalid" result="pass"/><test-case name="6807NISTXML-SV-II-atomic-integer-maxInclusive-5-4 tokoe:invalid" result="pass"/><test-case name="6808NISTXML-SV-II-atomic-integer-maxInclusive-5-5 tokoe:invalid" result="pass"/><test-case name="6809NISTSchema-SV-II-atomic-integer-totalDigits-1 tokoe:valid" result="pass"/><test-case name="6810NISTXML-SV-II-atomic-integer-totalDigits-1-1 tokoe:invalid" result="pass"/><test-case name="6811NISTXML-SV-II-atomic-integer-totalDigits-1-2 tokoe:invalid" result="pass"/><test-case name="6812NISTXML-SV-II-atomic-integer-totalDigits-1-3 tokoe:invalid" result="pass"/><test-case name="6813NISTXML-SV-II-atomic-integer-totalDigits-1-4 tokoe:invalid" result="pass"/><test-case name="6814NISTXML-SV-II-atomic-integer-totalDigits-1-5 tokoe:invalid" result="pass"/><test-case name="6815NISTSchema-SV-II-atomic-integer-totalDigits-2 tokoe:valid" result="pass"/><test-case name="6816NISTXML-SV-II-atomic-integer-totalDigits-2-1 tokoe:invalid" result="pass"/><test-case name="6817NISTXML-SV-II-atomic-integer-totalDigits-2-2 tokoe:invalid" result="pass"/><test-case name="6818NISTXML-SV-II-atomic-integer-totalDigits-2-3 tokoe:invalid" result="pass"/><test-case name="6819NISTXML-SV-II-atomic-integer-totalDigits-2-4 tokoe:invalid" result="pass"/><test-case name="6820NISTXML-SV-II-atomic-integer-totalDigits-2-5 tokoe:invalid" result="pass"/><test-case name="6821NISTSchema-SV-II-atomic-integer-totalDigits-3 tokoe:valid" result="pass"/><test-case name="6822NISTXML-SV-II-atomic-integer-totalDigits-3-1 tokoe:invalid" result="pass"/><test-case name="6823NISTXML-SV-II-atomic-integer-totalDigits-3-2 tokoe:invalid" result="pass"/><test-case name="6824NISTXML-SV-II-atomic-integer-totalDigits-3-3 tokoe:invalid" result="pass"/><test-case name="6825NISTXML-SV-II-atomic-integer-totalDigits-3-4 tokoe:invalid" result="pass"/><test-case name="6826NISTXML-SV-II-atomic-integer-totalDigits-3-5 tokoe:invalid" result="pass"/><test-case name="6827NISTSchema-SV-II-atomic-integer-totalDigits-4 tokoe:valid" result="pass"/><test-case name="6828NISTXML-SV-II-atomic-integer-totalDigits-4-1 tokoe:invalid" result="pass"/><test-case name="6829NISTXML-SV-II-atomic-integer-totalDigits-4-2 tokoe:invalid" result="pass"/><test-case name="6830NISTXML-SV-II-atomic-integer-totalDigits-4-3 tokoe:invalid" result="pass"/><test-case name="6831NISTXML-SV-II-atomic-integer-totalDigits-4-4 tokoe:invalid" result="pass"/><test-case name="6832NISTXML-SV-II-atomic-integer-totalDigits-4-5 tokoe:invalid" result="pass"/><test-case name="6833NISTSchema-SV-II-atomic-integer-totalDigits-5 tokoe:valid" result="pass"/><test-case name="6834NISTXML-SV-II-atomic-integer-totalDigits-5-1 tokoe:invalid" result="pass"/><test-case name="6835NISTXML-SV-II-atomic-integer-totalDigits-5-2 tokoe:invalid" result="pass"/><test-case name="6836NISTXML-SV-II-atomic-integer-totalDigits-5-3 tokoe:invalid" result="pass"/><test-case name="6837NISTXML-SV-II-atomic-integer-totalDigits-5-4 tokoe:invalid" result="pass"/><test-case name="6838NISTXML-SV-II-atomic-integer-totalDigits-5-5 tokoe:invalid" result="pass"/><test-case name="6839NISTSchema-SV-II-atomic-nonPositiveInteger-minInclusive-2 tokoe:valid" result="pass"/><test-case name="6840NISTXML-SV-II-atomic-nonPositiveInteger-minInclusive-2-1 tokoe:invalid" result="pass"/><test-case name="6841NISTXML-SV-II-atomic-nonPositiveInteger-minInclusive-2-2 tokoe:invalid" result="pass"/><test-case name="6842NISTXML-SV-II-atomic-nonPositiveInteger-minInclusive-2-3 tokoe:invalid" result="pass"/><test-case name="6843NISTXML-SV-II-atomic-nonPositiveInteger-minInclusive-2-4 tokoe:invalid" result="pass"/><test-case name="6844NISTXML-SV-II-atomic-nonPositiveInteger-minInclusive-2-5 tokoe:invalid" result="pass"/><test-case name="6845NISTSchema-SV-II-atomic-nonPositiveInteger-minInclusive-3 tokoe:valid" result="pass"/><test-case name="6846NISTXML-SV-II-atomic-nonPositiveInteger-minInclusive-3-1 tokoe:invalid" result="pass"/><test-case name="6847NISTXML-SV-II-atomic-nonPositiveInteger-minInclusive-3-2 tokoe:invalid" result="pass"/><test-case name="6848NISTXML-SV-II-atomic-nonPositiveInteger-minInclusive-3-3 tokoe:invalid" result="pass"/><test-case name="6849NISTXML-SV-II-atomic-nonPositiveInteger-minInclusive-3-4 tokoe:invalid" result="pass"/><test-case name="6850NISTXML-SV-II-atomic-nonPositiveInteger-minInclusive-3-5 tokoe:invalid" result="pass"/><test-case name="6851NISTSchema-SV-II-atomic-nonPositiveInteger-minInclusive-4 tokoe:valid" result="pass"/><test-case name="6852NISTXML-SV-II-atomic-nonPositiveInteger-minInclusive-4-1 tokoe:invalid" result="pass"/><test-case name="6853NISTXML-SV-II-atomic-nonPositiveInteger-minInclusive-4-2 tokoe:invalid" result="pass"/><test-case name="6854NISTXML-SV-II-atomic-nonPositiveInteger-minInclusive-4-3 tokoe:invalid" result="pass"/><test-case name="6855NISTXML-SV-II-atomic-nonPositiveInteger-minInclusive-4-4 tokoe:invalid" result="pass"/><test-case name="6856NISTXML-SV-II-atomic-nonPositiveInteger-minInclusive-4-5 tokoe:invalid" result="pass"/><test-case name="6857NISTSchema-SV-II-atomic-nonPositiveInteger-minInclusive-5 tokoe:valid" result="pass"/><test-case name="6858NISTXML-SV-II-atomic-nonPositiveInteger-minInclusive-5-1 tokoe:invalid" result="pass"/><test-case name="6859NISTXML-SV-II-atomic-nonPositiveInteger-minInclusive-5-2 tokoe:invalid" result="pass"/><test-case name="6860NISTXML-SV-II-atomic-nonPositiveInteger-minInclusive-5-3 tokoe:invalid" result="pass"/><test-case name="6861NISTXML-SV-II-atomic-nonPositiveInteger-minInclusive-5-4 tokoe:invalid" result="pass"/><test-case name="6862NISTXML-SV-II-atomic-nonPositiveInteger-minInclusive-5-5 tokoe:invalid" result="pass"/><test-case name="6863NISTSchema-SV-II-atomic-nonPositiveInteger-minInclusive-6 tokoe:valid" result="pass"/><test-case name="6864NISTXML-SV-II-atomic-nonPositiveInteger-minInclusive-6-1 tokoe:invalid" result="pass"/><test-case name="6865NISTXML-SV-II-atomic-nonPositiveInteger-minInclusive-6-2 tokoe:invalid" result="pass"/><test-case name="6866NISTXML-SV-II-atomic-nonPositiveInteger-minInclusive-6-3 tokoe:invalid" result="pass"/><test-case name="6867NISTXML-SV-II-atomic-nonPositiveInteger-minInclusive-6-4 tokoe:invalid" result="pass"/><test-case name="6868NISTXML-SV-II-atomic-nonPositiveInteger-minInclusive-6-5 tokoe:invalid" result="pass"/><test-case name="6869NISTSchema-SV-II-atomic-nonPositiveInteger-maxInclusive-1 tokoe:valid" result="pass"/><test-case name="6870NISTXML-SV-II-atomic-nonPositiveInteger-maxInclusive-1-1 tokoe:invalid" result="pass"/><test-case name="6871NISTXML-SV-II-atomic-nonPositiveInteger-maxInclusive-1-2 tokoe:invalid" result="pass"/><test-case name="6872NISTXML-SV-II-atomic-nonPositiveInteger-maxInclusive-1-3 tokoe:invalid" result="pass"/><test-case name="6873NISTXML-SV-II-atomic-nonPositiveInteger-maxInclusive-1-4 tokoe:invalid" result="pass"/><test-case name="6874NISTXML-SV-II-atomic-nonPositiveInteger-maxInclusive-1-5 tokoe:invalid" result="pass"/><test-case name="6875NISTSchema-SV-II-atomic-nonPositiveInteger-maxInclusive-2 tokoe:valid" result="pass"/><test-case name="6876NISTXML-SV-II-atomic-nonPositiveInteger-maxInclusive-2-1 tokoe:invalid" result="pass"/><test-case name="6877NISTXML-SV-II-atomic-nonPositiveInteger-maxInclusive-2-2 tokoe:invalid" result="pass"/><test-case name="6878NISTXML-SV-II-atomic-nonPositiveInteger-maxInclusive-2-3 tokoe:invalid" result="pass"/><test-case name="6879NISTXML-SV-II-atomic-nonPositiveInteger-maxInclusive-2-4 tokoe:invalid" result="pass"/><test-case name="6880NISTXML-SV-II-atomic-nonPositiveInteger-maxInclusive-2-5 tokoe:invalid" result="pass"/><test-case name="6881NISTSchema-SV-II-atomic-nonPositiveInteger-maxInclusive-3 tokoe:valid" result="pass"/><test-case name="6882NISTXML-SV-II-atomic-nonPositiveInteger-maxInclusive-3-1 tokoe:invalid" result="pass"/><test-case name="6883NISTXML-SV-II-atomic-nonPositiveInteger-maxInclusive-3-2 tokoe:invalid" result="pass"/><test-case name="6884NISTXML-SV-II-atomic-nonPositiveInteger-maxInclusive-3-3 tokoe:invalid" result="pass"/><test-case name="6885NISTXML-SV-II-atomic-nonPositiveInteger-maxInclusive-3-4 tokoe:invalid" result="pass"/><test-case name="6886NISTXML-SV-II-atomic-nonPositiveInteger-maxInclusive-3-5 tokoe:invalid" result="pass"/><test-case name="6887NISTSchema-SV-II-atomic-nonPositiveInteger-maxInclusive-4 tokoe:valid" result="pass"/><test-case name="6888NISTXML-SV-II-atomic-nonPositiveInteger-maxInclusive-4-1 tokoe:invalid" result="pass"/><test-case name="6889NISTXML-SV-II-atomic-nonPositiveInteger-maxInclusive-4-2 tokoe:invalid" result="pass"/><test-case name="6890NISTXML-SV-II-atomic-nonPositiveInteger-maxInclusive-4-3 tokoe:invalid" result="pass"/><test-case name="6891NISTXML-SV-II-atomic-nonPositiveInteger-maxInclusive-4-4 tokoe:invalid" result="pass"/><test-case name="6892NISTXML-SV-II-atomic-nonPositiveInteger-maxInclusive-4-5 tokoe:invalid" result="pass"/><test-case name="6893NISTSchema-SV-II-atomic-nonPositiveInteger-maxInclusive-5 tokoe:valid" result="pass"/><test-case name="6894NISTXML-SV-II-atomic-nonPositiveInteger-maxInclusive-5-1 tokoe:invalid" result="pass"/><test-case name="6895NISTXML-SV-II-atomic-nonPositiveInteger-maxInclusive-5-2 tokoe:invalid" result="pass"/><test-case name="6896NISTXML-SV-II-atomic-nonPositiveInteger-maxInclusive-5-3 tokoe:invalid" result="pass"/><test-case name="6897NISTXML-SV-II-atomic-nonPositiveInteger-maxInclusive-5-4 tokoe:invalid" result="pass"/><test-case name="6898NISTXML-SV-II-atomic-nonPositiveInteger-maxInclusive-5-5 tokoe:invalid" result="pass"/><test-case name="6899NISTSchema-SV-II-atomic-nonPositiveInteger-totalDigits-1 tokoe:valid" result="pass"/><test-case name="6900NISTXML-SV-II-atomic-nonPositiveInteger-totalDigits-1-1 tokoe:invalid" result="pass"/><test-case name="6901NISTXML-SV-II-atomic-nonPositiveInteger-totalDigits-1-2 tokoe:invalid" result="pass"/><test-case name="6902NISTXML-SV-II-atomic-nonPositiveInteger-totalDigits-1-3 tokoe:invalid" result="pass"/><test-case name="6903NISTXML-SV-II-atomic-nonPositiveInteger-totalDigits-1-4 tokoe:invalid" result="pass"/><test-case name="6904NISTXML-SV-II-atomic-nonPositiveInteger-totalDigits-1-5 tokoe:invalid" result="pass"/><test-case name="6905NISTSchema-SV-II-atomic-nonPositiveInteger-totalDigits-2 tokoe:valid" result="pass"/><test-case name="6906NISTXML-SV-II-atomic-nonPositiveInteger-totalDigits-2-1 tokoe:invalid" result="pass"/><test-case name="6907NISTXML-SV-II-atomic-nonPositiveInteger-totalDigits-2-2 tokoe:invalid" result="pass"/><test-case name="6908NISTXML-SV-II-atomic-nonPositiveInteger-totalDigits-2-3 tokoe:invalid" result="pass"/><test-case name="6909NISTXML-SV-II-atomic-nonPositiveInteger-totalDigits-2-4 tokoe:invalid" result="pass"/><test-case name="6910NISTXML-SV-II-atomic-nonPositiveInteger-totalDigits-2-5 tokoe:invalid" result="pass"/><test-case name="6911NISTSchema-SV-II-atomic-nonPositiveInteger-totalDigits-3 tokoe:valid" result="pass"/><test-case name="6912NISTXML-SV-II-atomic-nonPositiveInteger-totalDigits-3-1 tokoe:invalid" result="pass"/><test-case name="6913NISTXML-SV-II-atomic-nonPositiveInteger-totalDigits-3-2 tokoe:invalid" result="pass"/><test-case name="6914NISTXML-SV-II-atomic-nonPositiveInteger-totalDigits-3-3 tokoe:invalid" result="pass"/><test-case name="6915NISTXML-SV-II-atomic-nonPositiveInteger-totalDigits-3-4 tokoe:invalid" result="pass"/><test-case name="6916NISTXML-SV-II-atomic-nonPositiveInteger-totalDigits-3-5 tokoe:invalid" result="pass"/><test-case name="6917NISTSchema-SV-II-atomic-nonPositiveInteger-totalDigits-4 tokoe:valid" result="pass"/><test-case name="6918NISTXML-SV-II-atomic-nonPositiveInteger-totalDigits-4-1 tokoe:invalid" result="pass"/><test-case name="6919NISTXML-SV-II-atomic-nonPositiveInteger-totalDigits-4-2 tokoe:invalid" result="pass"/><test-case name="6920NISTXML-SV-II-atomic-nonPositiveInteger-totalDigits-4-3 tokoe:invalid" result="pass"/><test-case name="6921NISTXML-SV-II-atomic-nonPositiveInteger-totalDigits-4-4 tokoe:invalid" result="pass"/><test-case name="6922NISTXML-SV-II-atomic-nonPositiveInteger-totalDigits-4-5 tokoe:invalid" result="pass"/><test-case name="6923NISTSchema-SV-II-atomic-nonPositiveInteger-totalDigits-5 tokoe:valid" result="pass"/><test-case name="6924NISTXML-SV-II-atomic-nonPositiveInteger-totalDigits-5-1 tokoe:invalid" result="pass"/><test-case name="6925NISTXML-SV-II-atomic-nonPositiveInteger-totalDigits-5-2 tokoe:invalid" result="pass"/><test-case name="6926NISTXML-SV-II-atomic-nonPositiveInteger-totalDigits-5-3 tokoe:invalid" result="pass"/><test-case name="6927NISTXML-SV-II-atomic-nonPositiveInteger-totalDigits-5-4 tokoe:invalid" result="pass"/><test-case name="6928NISTXML-SV-II-atomic-nonPositiveInteger-totalDigits-5-5 tokoe:invalid" result="pass"/><test-case name="6929NISTSchema-SV-II-atomic-negativeInteger-minInclusive-2 tokoe:valid" result="pass"/><test-case name="6930NISTXML-SV-II-atomic-negativeInteger-minInclusive-2-1 tokoe:invalid" result="pass"/><test-case name="6931NISTXML-SV-II-atomic-negativeInteger-minInclusive-2-2 tokoe:invalid" result="pass"/><test-case name="6932NISTXML-SV-II-atomic-negativeInteger-minInclusive-2-3 tokoe:invalid" result="pass"/><test-case name="6933NISTXML-SV-II-atomic-negativeInteger-minInclusive-2-4 tokoe:invalid" result="pass"/><test-case name="6934NISTXML-SV-II-atomic-negativeInteger-minInclusive-2-5 tokoe:invalid" result="pass"/><test-case name="6935NISTSchema-SV-II-atomic-negativeInteger-minInclusive-3 tokoe:valid" result="pass"/><test-case name="6936NISTXML-SV-II-atomic-negativeInteger-minInclusive-3-1 tokoe:invalid" result="pass"/><test-case name="6937NISTXML-SV-II-atomic-negativeInteger-minInclusive-3-2 tokoe:invalid" result="pass"/><test-case name="6938NISTXML-SV-II-atomic-negativeInteger-minInclusive-3-3 tokoe:invalid" result="pass"/><test-case name="6939NISTXML-SV-II-atomic-negativeInteger-minInclusive-3-4 tokoe:invalid" result="pass"/><test-case name="6940NISTXML-SV-II-atomic-negativeInteger-minInclusive-3-5 tokoe:invalid" result="pass"/><test-case name="6941NISTSchema-SV-II-atomic-negativeInteger-minInclusive-4 tokoe:valid" result="pass"/><test-case name="6942NISTXML-SV-II-atomic-negativeInteger-minInclusive-4-1 tokoe:invalid" result="pass"/><test-case name="6943NISTXML-SV-II-atomic-negativeInteger-minInclusive-4-2 tokoe:invalid" result="pass"/><test-case name="6944NISTXML-SV-II-atomic-negativeInteger-minInclusive-4-3 tokoe:invalid" result="pass"/><test-case name="6945NISTXML-SV-II-atomic-negativeInteger-minInclusive-4-4 tokoe:invalid" result="pass"/><test-case name="6946NISTXML-SV-II-atomic-negativeInteger-minInclusive-4-5 tokoe:invalid" result="pass"/><test-case name="6947NISTSchema-SV-II-atomic-negativeInteger-minInclusive-5 tokoe:valid" result="pass"/><test-case name="6948NISTXML-SV-II-atomic-negativeInteger-minInclusive-5-1 tokoe:invalid" result="pass"/><test-case name="6949NISTXML-SV-II-atomic-negativeInteger-minInclusive-5-2 tokoe:invalid" result="pass"/><test-case name="6950NISTXML-SV-II-atomic-negativeInteger-minInclusive-5-3 tokoe:invalid" result="pass"/><test-case name="6951NISTXML-SV-II-atomic-negativeInteger-minInclusive-5-4 tokoe:invalid" result="pass"/><test-case name="6952NISTXML-SV-II-atomic-negativeInteger-minInclusive-5-5 tokoe:invalid" result="pass"/><test-case name="6953NISTSchema-SV-II-atomic-negativeInteger-minInclusive-6 tokoe:valid" result="pass"/><test-case name="6954NISTXML-SV-II-atomic-negativeInteger-minInclusive-6-1 tokoe:invalid" result="pass"/><test-case name="6955NISTXML-SV-II-atomic-negativeInteger-minInclusive-6-2 tokoe:invalid" result="pass"/><test-case name="6956NISTXML-SV-II-atomic-negativeInteger-minInclusive-6-3 tokoe:invalid" result="pass"/><test-case name="6957NISTXML-SV-II-atomic-negativeInteger-minInclusive-6-4 tokoe:invalid" result="pass"/><test-case name="6958NISTXML-SV-II-atomic-negativeInteger-minInclusive-6-5 tokoe:invalid" result="pass"/><test-case name="6959NISTSchema-SV-II-atomic-negativeInteger-maxInclusive-1 tokoe:valid" result="pass"/><test-case name="6960NISTXML-SV-II-atomic-negativeInteger-maxInclusive-1-1 tokoe:invalid" result="pass"/><test-case name="6961NISTXML-SV-II-atomic-negativeInteger-maxInclusive-1-2 tokoe:invalid" result="pass"/><test-case name="6962NISTXML-SV-II-atomic-negativeInteger-maxInclusive-1-3 tokoe:invalid" result="pass"/><test-case name="6963NISTXML-SV-II-atomic-negativeInteger-maxInclusive-1-4 tokoe:invalid" result="pass"/><test-case name="6964NISTXML-SV-II-atomic-negativeInteger-maxInclusive-1-5 tokoe:invalid" result="pass"/><test-case name="6965NISTSchema-SV-II-atomic-negativeInteger-maxInclusive-2 tokoe:valid" result="pass"/><test-case name="6966NISTXML-SV-II-atomic-negativeInteger-maxInclusive-2-1 tokoe:invalid" result="pass"/><test-case name="6967NISTXML-SV-II-atomic-negativeInteger-maxInclusive-2-2 tokoe:invalid" result="pass"/><test-case name="6968NISTXML-SV-II-atomic-negativeInteger-maxInclusive-2-3 tokoe:invalid" result="pass"/><test-case name="6969NISTXML-SV-II-atomic-negativeInteger-maxInclusive-2-4 tokoe:invalid" result="pass"/><test-case name="6970NISTXML-SV-II-atomic-negativeInteger-maxInclusive-2-5 tokoe:invalid" result="pass"/><test-case name="6971NISTSchema-SV-II-atomic-negativeInteger-maxInclusive-3 tokoe:valid" result="pass"/><test-case name="6972NISTXML-SV-II-atomic-negativeInteger-maxInclusive-3-1 tokoe:invalid" result="pass"/><test-case name="6973NISTXML-SV-II-atomic-negativeInteger-maxInclusive-3-2 tokoe:invalid" result="pass"/><test-case name="6974NISTXML-SV-II-atomic-negativeInteger-maxInclusive-3-3 tokoe:invalid" result="pass"/><test-case name="6975NISTXML-SV-II-atomic-negativeInteger-maxInclusive-3-4 tokoe:invalid" result="pass"/><test-case name="6976NISTXML-SV-II-atomic-negativeInteger-maxInclusive-3-5 tokoe:invalid" result="pass"/><test-case name="6977NISTSchema-SV-II-atomic-negativeInteger-maxInclusive-4 tokoe:valid" result="pass"/><test-case name="6978NISTXML-SV-II-atomic-negativeInteger-maxInclusive-4-1 tokoe:invalid" result="pass"/><test-case name="6979NISTXML-SV-II-atomic-negativeInteger-maxInclusive-4-2 tokoe:invalid" result="pass"/><test-case name="6980NISTXML-SV-II-atomic-negativeInteger-maxInclusive-4-3 tokoe:invalid" result="pass"/><test-case name="6981NISTXML-SV-II-atomic-negativeInteger-maxInclusive-4-4 tokoe:invalid" result="pass"/><test-case name="6982NISTXML-SV-II-atomic-negativeInteger-maxInclusive-4-5 tokoe:invalid" result="pass"/><test-case name="6983NISTSchema-SV-II-atomic-negativeInteger-maxInclusive-5 tokoe:valid" result="pass"/><test-case name="6984NISTXML-SV-II-atomic-negativeInteger-maxInclusive-5-1 tokoe:invalid" result="pass"/><test-case name="6985NISTXML-SV-II-atomic-negativeInteger-maxInclusive-5-2 tokoe:invalid" result="pass"/><test-case name="6986NISTXML-SV-II-atomic-negativeInteger-maxInclusive-5-3 tokoe:invalid" result="pass"/><test-case name="6987NISTXML-SV-II-atomic-negativeInteger-maxInclusive-5-4 tokoe:invalid" result="pass"/><test-case name="6988NISTXML-SV-II-atomic-negativeInteger-maxInclusive-5-5 tokoe:invalid" result="pass"/><test-case name="6989NISTSchema-SV-II-atomic-negativeInteger-totalDigits-1 tokoe:valid" result="pass"/><test-case name="6990NISTXML-SV-II-atomic-negativeInteger-totalDigits-1-1 tokoe:invalid" result="pass"/><test-case name="6991NISTXML-SV-II-atomic-negativeInteger-totalDigits-1-2 tokoe:invalid" result="pass"/><test-case name="6992NISTXML-SV-II-atomic-negativeInteger-totalDigits-1-3 tokoe:invalid" result="pass"/><test-case name="6993NISTXML-SV-II-atomic-negativeInteger-totalDigits-1-4 tokoe:invalid" result="pass"/><test-case name="6994NISTXML-SV-II-atomic-negativeInteger-totalDigits-1-5 tokoe:invalid" result="pass"/><test-case name="6995NISTSchema-SV-II-atomic-negativeInteger-totalDigits-2 tokoe:valid" result="pass"/><test-case name="6996NISTXML-SV-II-atomic-negativeInteger-totalDigits-2-1 tokoe:invalid" result="pass"/><test-case name="6997NISTXML-SV-II-atomic-negativeInteger-totalDigits-2-2 tokoe:invalid" result="pass"/><test-case name="6998NISTXML-SV-II-atomic-negativeInteger-totalDigits-2-3 tokoe:invalid" result="pass"/><test-case name="6999NISTXML-SV-II-atomic-negativeInteger-totalDigits-2-4 tokoe:invalid" result="pass"/><test-case name="7000NISTXML-SV-II-atomic-negativeInteger-totalDigits-2-5 tokoe:invalid" result="pass"/><test-case name="7001NISTSchema-SV-II-atomic-negativeInteger-totalDigits-3 tokoe:valid" result="pass"/><test-case name="7002NISTXML-SV-II-atomic-negativeInteger-totalDigits-3-1 tokoe:invalid" result="pass"/><test-case name="7003NISTXML-SV-II-atomic-negativeInteger-totalDigits-3-2 tokoe:invalid" result="pass"/><test-case name="7004NISTXML-SV-II-atomic-negativeInteger-totalDigits-3-3 tokoe:invalid" result="pass"/><test-case name="7005NISTXML-SV-II-atomic-negativeInteger-totalDigits-3-4 tokoe:invalid" result="pass"/><test-case name="7006NISTXML-SV-II-atomic-negativeInteger-totalDigits-3-5 tokoe:invalid" result="pass"/><test-case name="7007NISTSchema-SV-II-atomic-negativeInteger-totalDigits-4 tokoe:valid" result="pass"/><test-case name="7008NISTXML-SV-II-atomic-negativeInteger-totalDigits-4-1 tokoe:invalid" result="pass"/><test-case name="7009NISTXML-SV-II-atomic-negativeInteger-totalDigits-4-2 tokoe:invalid" result="pass"/><test-case name="7010NISTXML-SV-II-atomic-negativeInteger-totalDigits-4-3 tokoe:invalid" result="pass"/><test-case name="7011NISTXML-SV-II-atomic-negativeInteger-totalDigits-4-4 tokoe:invalid" result="pass"/><test-case name="7012NISTXML-SV-II-atomic-negativeInteger-totalDigits-4-5 tokoe:invalid" result="pass"/><test-case name="7013NISTSchema-SV-II-atomic-negativeInteger-totalDigits-5 tokoe:valid" result="pass"/><test-case name="7014NISTXML-SV-II-atomic-negativeInteger-totalDigits-5-1 tokoe:invalid" result="pass"/><test-case name="7015NISTXML-SV-II-atomic-negativeInteger-totalDigits-5-2 tokoe:invalid" result="pass"/><test-case name="7016NISTXML-SV-II-atomic-negativeInteger-totalDigits-5-3 tokoe:invalid" result="pass"/><test-case name="7017NISTXML-SV-II-atomic-negativeInteger-totalDigits-5-4 tokoe:invalid" result="pass"/><test-case name="7018NISTXML-SV-II-atomic-negativeInteger-totalDigits-5-5 tokoe:invalid" result="pass"/><test-case name="7019NISTSchema-SV-II-atomic-long-minInclusive-2 tokoe:valid" result="pass"/><test-case name="7020NISTXML-SV-II-atomic-long-minInclusive-2-1 tokoe:invalid" result="pass"/><test-case name="7021NISTXML-SV-II-atomic-long-minInclusive-2-2 tokoe:invalid" result="pass"/><test-case name="7022NISTXML-SV-II-atomic-long-minInclusive-2-3 tokoe:invalid" result="pass"/><test-case name="7023NISTXML-SV-II-atomic-long-minInclusive-2-4 tokoe:invalid" result="pass"/><test-case name="7024NISTXML-SV-II-atomic-long-minInclusive-2-5 tokoe:invalid" result="pass"/><test-case name="7025NISTSchema-SV-II-atomic-long-minInclusive-3 tokoe:valid" result="pass"/><test-case name="7026NISTXML-SV-II-atomic-long-minInclusive-3-1 tokoe:invalid" result="pass"/><test-case name="7027NISTXML-SV-II-atomic-long-minInclusive-3-2 tokoe:invalid" result="pass"/><test-case name="7028NISTXML-SV-II-atomic-long-minInclusive-3-3 tokoe:invalid" result="pass"/><test-case name="7029NISTXML-SV-II-atomic-long-minInclusive-3-4 tokoe:invalid" result="pass"/><test-case name="7030NISTXML-SV-II-atomic-long-minInclusive-3-5 tokoe:invalid" result="pass"/><test-case name="7031NISTSchema-SV-II-atomic-long-minInclusive-4 tokoe:valid" result="pass"/><test-case name="7032NISTXML-SV-II-atomic-long-minInclusive-4-1 tokoe:invalid" result="pass"/><test-case name="7033NISTXML-SV-II-atomic-long-minInclusive-4-2 tokoe:invalid" result="pass"/><test-case name="7034NISTXML-SV-II-atomic-long-minInclusive-4-3 tokoe:invalid" result="pass"/><test-case name="7035NISTXML-SV-II-atomic-long-minInclusive-4-4 tokoe:invalid" result="pass"/><test-case name="7036NISTXML-SV-II-atomic-long-minInclusive-4-5 tokoe:invalid" result="pass"/><test-case name="7037NISTSchema-SV-II-atomic-long-minInclusive-5 tokoe:valid" result="pass"/><test-case name="7038NISTXML-SV-II-atomic-long-minInclusive-5-1 tokoe:invalid" result="pass"/><test-case name="7039NISTXML-SV-II-atomic-long-minInclusive-5-2 tokoe:invalid" result="pass"/><test-case name="7040NISTXML-SV-II-atomic-long-minInclusive-5-3 tokoe:invalid" result="pass"/><test-case name="7041NISTXML-SV-II-atomic-long-minInclusive-5-4 tokoe:invalid" result="pass"/><test-case name="7042NISTXML-SV-II-atomic-long-minInclusive-5-5 tokoe:invalid" result="pass"/><test-case name="7043NISTSchema-SV-II-atomic-long-minInclusive-6 tokoe:valid" result="pass"/><test-case name="7044NISTXML-SV-II-atomic-long-minInclusive-6-1 tokoe:invalid" result="pass"/><test-case name="7045NISTXML-SV-II-atomic-long-minInclusive-6-2 tokoe:invalid" result="pass"/><test-case name="7046NISTXML-SV-II-atomic-long-minInclusive-6-3 tokoe:invalid" result="pass"/><test-case name="7047NISTXML-SV-II-atomic-long-minInclusive-6-4 tokoe:invalid" result="pass"/><test-case name="7048NISTXML-SV-II-atomic-long-minInclusive-6-5 tokoe:invalid" result="pass"/><test-case name="7049NISTSchema-SV-II-atomic-long-maxInclusive-1 tokoe:valid" result="pass"/><test-case name="7050NISTXML-SV-II-atomic-long-maxInclusive-1-1 tokoe:invalid" result="pass"/><test-case name="7051NISTXML-SV-II-atomic-long-maxInclusive-1-2 tokoe:invalid" result="pass"/><test-case name="7052NISTXML-SV-II-atomic-long-maxInclusive-1-3 tokoe:invalid" result="pass"/><test-case name="7053NISTXML-SV-II-atomic-long-maxInclusive-1-4 tokoe:invalid" result="pass"/><test-case name="7054NISTXML-SV-II-atomic-long-maxInclusive-1-5 tokoe:invalid" result="pass"/><test-case name="7055NISTSchema-SV-II-atomic-long-maxInclusive-2 tokoe:valid" result="pass"/><test-case name="7056NISTXML-SV-II-atomic-long-maxInclusive-2-1 tokoe:invalid" result="pass"/><test-case name="7057NISTXML-SV-II-atomic-long-maxInclusive-2-2 tokoe:invalid" result="pass"/><test-case name="7058NISTXML-SV-II-atomic-long-maxInclusive-2-3 tokoe:invalid" result="pass"/><test-case name="7059NISTXML-SV-II-atomic-long-maxInclusive-2-4 tokoe:invalid" result="pass"/><test-case name="7060NISTXML-SV-II-atomic-long-maxInclusive-2-5 tokoe:invalid" result="pass"/><test-case name="7061NISTSchema-SV-II-atomic-long-maxInclusive-3 tokoe:valid" result="pass"/><test-case name="7062NISTXML-SV-II-atomic-long-maxInclusive-3-1 tokoe:invalid" result="pass"/><test-case name="7063NISTXML-SV-II-atomic-long-maxInclusive-3-2 tokoe:invalid" result="pass"/><test-case name="7064NISTXML-SV-II-atomic-long-maxInclusive-3-3 tokoe:invalid" result="pass"/><test-case name="7065NISTXML-SV-II-atomic-long-maxInclusive-3-4 tokoe:invalid" result="pass"/><test-case name="7066NISTXML-SV-II-atomic-long-maxInclusive-3-5 tokoe:invalid" result="pass"/><test-case name="7067NISTSchema-SV-II-atomic-long-maxInclusive-4 tokoe:valid" result="pass"/><test-case name="7068NISTXML-SV-II-atomic-long-maxInclusive-4-1 tokoe:invalid" result="pass"/><test-case name="7069NISTXML-SV-II-atomic-long-maxInclusive-4-2 tokoe:invalid" result="pass"/><test-case name="7070NISTXML-SV-II-atomic-long-maxInclusive-4-3 tokoe:invalid" result="pass"/><test-case name="7071NISTXML-SV-II-atomic-long-maxInclusive-4-4 tokoe:invalid" result="pass"/><test-case name="7072NISTXML-SV-II-atomic-long-maxInclusive-4-5 tokoe:invalid" result="pass"/><test-case name="7073NISTSchema-SV-II-atomic-long-maxInclusive-5 tokoe:valid" result="pass"/><test-case name="7074NISTXML-SV-II-atomic-long-maxInclusive-5-1 tokoe:invalid" result="pass"/><test-case name="7075NISTXML-SV-II-atomic-long-maxInclusive-5-2 tokoe:invalid" result="pass"/><test-case name="7076NISTXML-SV-II-atomic-long-maxInclusive-5-3 tokoe:invalid" result="pass"/><test-case name="7077NISTXML-SV-II-atomic-long-maxInclusive-5-4 tokoe:invalid" result="pass"/><test-case name="7078NISTXML-SV-II-atomic-long-maxInclusive-5-5 tokoe:invalid" result="pass"/><test-case name="7079NISTSchema-SV-II-atomic-long-totalDigits-1 tokoe:valid" result="pass"/><test-case name="7080NISTXML-SV-II-atomic-long-totalDigits-1-1 tokoe:invalid" result="pass"/><test-case name="7081NISTXML-SV-II-atomic-long-totalDigits-1-2 tokoe:invalid" result="pass"/><test-case name="7082NISTXML-SV-II-atomic-long-totalDigits-1-3 tokoe:invalid" result="pass"/><test-case name="7083NISTXML-SV-II-atomic-long-totalDigits-1-4 tokoe:invalid" result="pass"/><test-case name="7084NISTXML-SV-II-atomic-long-totalDigits-1-5 tokoe:invalid" result="pass"/><test-case name="7085NISTSchema-SV-II-atomic-long-totalDigits-2 tokoe:valid" result="pass"/><test-case name="7086NISTXML-SV-II-atomic-long-totalDigits-2-1 tokoe:invalid" result="pass"/><test-case name="7087NISTXML-SV-II-atomic-long-totalDigits-2-2 tokoe:invalid" result="pass"/><test-case name="7088NISTXML-SV-II-atomic-long-totalDigits-2-3 tokoe:invalid" result="pass"/><test-case name="7089NISTXML-SV-II-atomic-long-totalDigits-2-4 tokoe:invalid" result="pass"/><test-case name="7090NISTXML-SV-II-atomic-long-totalDigits-2-5 tokoe:invalid" result="pass"/><test-case name="7091NISTSchema-SV-II-atomic-long-totalDigits-3 tokoe:valid" result="pass"/><test-case name="7092NISTXML-SV-II-atomic-long-totalDigits-3-1 tokoe:invalid" result="pass"/><test-case name="7093NISTXML-SV-II-atomic-long-totalDigits-3-2 tokoe:invalid" result="pass"/><test-case name="7094NISTXML-SV-II-atomic-long-totalDigits-3-3 tokoe:invalid" result="pass"/><test-case name="7095NISTXML-SV-II-atomic-long-totalDigits-3-4 tokoe:invalid" result="pass"/><test-case name="7096NISTXML-SV-II-atomic-long-totalDigits-3-5 tokoe:invalid" result="pass"/><test-case name="7097NISTSchema-SV-II-atomic-long-totalDigits-4 tokoe:valid" result="pass"/><test-case name="7098NISTXML-SV-II-atomic-long-totalDigits-4-1 tokoe:invalid" result="pass"/><test-case name="7099NISTXML-SV-II-atomic-long-totalDigits-4-2 tokoe:invalid" result="pass"/><test-case name="7100NISTXML-SV-II-atomic-long-totalDigits-4-3 tokoe:invalid" result="pass"/><test-case name="7101NISTXML-SV-II-atomic-long-totalDigits-4-4 tokoe:invalid" result="pass"/><test-case name="7102NISTXML-SV-II-atomic-long-totalDigits-4-5 tokoe:invalid" result="pass"/><test-case name="7103NISTSchema-SV-II-atomic-long-totalDigits-5 tokoe:valid" result="pass"/><test-case name="7104NISTXML-SV-II-atomic-long-totalDigits-5-1 tokoe:invalid" result="pass"/><test-case name="7105NISTXML-SV-II-atomic-long-totalDigits-5-2 tokoe:invalid" result="pass"/><test-case name="7106NISTXML-SV-II-atomic-long-totalDigits-5-3 tokoe:invalid" result="pass"/><test-case name="7107NISTXML-SV-II-atomic-long-totalDigits-5-4 tokoe:invalid" result="pass"/><test-case name="7108NISTXML-SV-II-atomic-long-totalDigits-5-5 tokoe:invalid" result="pass"/><test-case name="7109NISTSchema-SV-II-atomic-int-minInclusive-2 tokoe:valid" result="pass"/><test-case name="7110NISTXML-SV-II-atomic-int-minInclusive-2-1 tokoe:invalid" result="pass"/><test-case name="7111NISTXML-SV-II-atomic-int-minInclusive-2-2 tokoe:invalid" result="pass"/><test-case name="7112NISTXML-SV-II-atomic-int-minInclusive-2-3 tokoe:invalid" result="pass"/><test-case name="7113NISTXML-SV-II-atomic-int-minInclusive-2-4 tokoe:invalid" result="pass"/><test-case name="7114NISTXML-SV-II-atomic-int-minInclusive-2-5 tokoe:invalid" result="pass"/><test-case name="7115NISTSchema-SV-II-atomic-int-minInclusive-3 tokoe:valid" result="pass"/><test-case name="7116NISTXML-SV-II-atomic-int-minInclusive-3-1 tokoe:invalid" result="pass"/><test-case name="7117NISTXML-SV-II-atomic-int-minInclusive-3-2 tokoe:invalid" result="pass"/><test-case name="7118NISTXML-SV-II-atomic-int-minInclusive-3-3 tokoe:invalid" result="pass"/><test-case name="7119NISTXML-SV-II-atomic-int-minInclusive-3-4 tokoe:invalid" result="pass"/><test-case name="7120NISTXML-SV-II-atomic-int-minInclusive-3-5 tokoe:invalid" result="pass"/><test-case name="7121NISTSchema-SV-II-atomic-int-minInclusive-4 tokoe:valid" result="pass"/><test-case name="7122NISTXML-SV-II-atomic-int-minInclusive-4-1 tokoe:invalid" result="pass"/><test-case name="7123NISTXML-SV-II-atomic-int-minInclusive-4-2 tokoe:invalid" result="pass"/><test-case name="7124NISTXML-SV-II-atomic-int-minInclusive-4-3 tokoe:invalid" result="pass"/><test-case name="7125NISTXML-SV-II-atomic-int-minInclusive-4-4 tokoe:invalid" result="pass"/><test-case name="7126NISTXML-SV-II-atomic-int-minInclusive-4-5 tokoe:invalid" result="pass"/><test-case name="7127NISTSchema-SV-II-atomic-int-minInclusive-5 tokoe:valid" result="pass"/><test-case name="7128NISTXML-SV-II-atomic-int-minInclusive-5-1 tokoe:invalid" result="pass"/><test-case name="7129NISTXML-SV-II-atomic-int-minInclusive-5-2 tokoe:invalid" result="pass"/><test-case name="7130NISTXML-SV-II-atomic-int-minInclusive-5-3 tokoe:invalid" result="pass"/><test-case name="7131NISTXML-SV-II-atomic-int-minInclusive-5-4 tokoe:invalid" result="pass"/><test-case name="7132NISTXML-SV-II-atomic-int-minInclusive-5-5 tokoe:invalid" result="pass"/><test-case name="7133NISTSchema-SV-II-atomic-int-minInclusive-6 tokoe:valid" result="pass"/><test-case name="7134NISTXML-SV-II-atomic-int-minInclusive-6-1 tokoe:invalid" result="pass"/><test-case name="7135NISTXML-SV-II-atomic-int-minInclusive-6-2 tokoe:invalid" result="pass"/><test-case name="7136NISTXML-SV-II-atomic-int-minInclusive-6-3 tokoe:invalid" result="pass"/><test-case name="7137NISTXML-SV-II-atomic-int-minInclusive-6-4 tokoe:invalid" result="pass"/><test-case name="7138NISTXML-SV-II-atomic-int-minInclusive-6-5 tokoe:invalid" result="pass"/><test-case name="7139NISTSchema-SV-II-atomic-int-maxInclusive-1 tokoe:valid" result="pass"/><test-case name="7140NISTXML-SV-II-atomic-int-maxInclusive-1-1 tokoe:invalid" result="pass"/><test-case name="7141NISTXML-SV-II-atomic-int-maxInclusive-1-2 tokoe:invalid" result="pass"/><test-case name="7142NISTXML-SV-II-atomic-int-maxInclusive-1-3 tokoe:invalid" result="pass"/><test-case name="7143NISTXML-SV-II-atomic-int-maxInclusive-1-4 tokoe:invalid" result="pass"/><test-case name="7144NISTXML-SV-II-atomic-int-maxInclusive-1-5 tokoe:invalid" result="pass"/><test-case name="7145NISTSchema-SV-II-atomic-int-maxInclusive-2 tokoe:valid" result="pass"/><test-case name="7146NISTXML-SV-II-atomic-int-maxInclusive-2-1 tokoe:invalid" result="pass"/><test-case name="7147NISTXML-SV-II-atomic-int-maxInclusive-2-2 tokoe:invalid" result="pass"/><test-case name="7148NISTXML-SV-II-atomic-int-maxInclusive-2-3 tokoe:invalid" result="pass"/><test-case name="7149NISTXML-SV-II-atomic-int-maxInclusive-2-4 tokoe:invalid" result="pass"/><test-case name="7150NISTXML-SV-II-atomic-int-maxInclusive-2-5 tokoe:invalid" result="pass"/><test-case name="7151NISTSchema-SV-II-atomic-int-maxInclusive-3 tokoe:valid" result="pass"/><test-case name="7152NISTXML-SV-II-atomic-int-maxInclusive-3-1 tokoe:invalid" result="pass"/><test-case name="7153NISTXML-SV-II-atomic-int-maxInclusive-3-2 tokoe:invalid" result="pass"/><test-case name="7154NISTXML-SV-II-atomic-int-maxInclusive-3-3 tokoe:invalid" result="pass"/><test-case name="7155NISTXML-SV-II-atomic-int-maxInclusive-3-4 tokoe:invalid" result="pass"/><test-case name="7156NISTXML-SV-II-atomic-int-maxInclusive-3-5 tokoe:invalid" result="pass"/><test-case name="7157NISTSchema-SV-II-atomic-int-maxInclusive-4 tokoe:valid" result="pass"/><test-case name="7158NISTXML-SV-II-atomic-int-maxInclusive-4-1 tokoe:invalid" result="pass"/><test-case name="7159NISTXML-SV-II-atomic-int-maxInclusive-4-2 tokoe:invalid" result="pass"/><test-case name="7160NISTXML-SV-II-atomic-int-maxInclusive-4-3 tokoe:invalid" result="pass"/><test-case name="7161NISTXML-SV-II-atomic-int-maxInclusive-4-4 tokoe:invalid" result="pass"/><test-case name="7162NISTXML-SV-II-atomic-int-maxInclusive-4-5 tokoe:invalid" result="pass"/><test-case name="7163NISTSchema-SV-II-atomic-int-maxInclusive-5 tokoe:valid" result="pass"/><test-case name="7164NISTXML-SV-II-atomic-int-maxInclusive-5-1 tokoe:invalid" result="pass"/><test-case name="7165NISTXML-SV-II-atomic-int-maxInclusive-5-2 tokoe:invalid" result="pass"/><test-case name="7166NISTXML-SV-II-atomic-int-maxInclusive-5-3 tokoe:invalid" result="pass"/><test-case name="7167NISTXML-SV-II-atomic-int-maxInclusive-5-4 tokoe:invalid" result="pass"/><test-case name="7168NISTXML-SV-II-atomic-int-maxInclusive-5-5 tokoe:invalid" result="pass"/><test-case name="7169NISTSchema-SV-II-atomic-int-totalDigits-1 tokoe:valid" result="pass"/><test-case name="7170NISTXML-SV-II-atomic-int-totalDigits-1-1 tokoe:invalid" result="pass"/><test-case name="7171NISTXML-SV-II-atomic-int-totalDigits-1-2 tokoe:invalid" result="pass"/><test-case name="7172NISTXML-SV-II-atomic-int-totalDigits-1-3 tokoe:invalid" result="pass"/><test-case name="7173NISTXML-SV-II-atomic-int-totalDigits-1-4 tokoe:invalid" result="pass"/><test-case name="7174NISTXML-SV-II-atomic-int-totalDigits-1-5 tokoe:invalid" result="pass"/><test-case name="7175NISTSchema-SV-II-atomic-int-totalDigits-2 tokoe:valid" result="pass"/><test-case name="7176NISTXML-SV-II-atomic-int-totalDigits-2-1 tokoe:invalid" result="pass"/><test-case name="7177NISTXML-SV-II-atomic-int-totalDigits-2-2 tokoe:invalid" result="pass"/><test-case name="7178NISTXML-SV-II-atomic-int-totalDigits-2-3 tokoe:invalid" result="pass"/><test-case name="7179NISTXML-SV-II-atomic-int-totalDigits-2-4 tokoe:invalid" result="pass"/><test-case name="7180NISTXML-SV-II-atomic-int-totalDigits-2-5 tokoe:invalid" result="pass"/><test-case name="7181NISTSchema-SV-II-atomic-int-totalDigits-3 tokoe:valid" result="pass"/><test-case name="7182NISTXML-SV-II-atomic-int-totalDigits-3-1 tokoe:invalid" result="pass"/><test-case name="7183NISTXML-SV-II-atomic-int-totalDigits-3-2 tokoe:invalid" result="pass"/><test-case name="7184NISTXML-SV-II-atomic-int-totalDigits-3-3 tokoe:invalid" result="pass"/><test-case name="7185NISTXML-SV-II-atomic-int-totalDigits-3-4 tokoe:invalid" result="pass"/><test-case name="7186NISTXML-SV-II-atomic-int-totalDigits-3-5 tokoe:invalid" result="pass"/><test-case name="7187NISTSchema-SV-II-atomic-int-totalDigits-4 tokoe:valid" result="pass"/><test-case name="7188NISTXML-SV-II-atomic-int-totalDigits-4-1 tokoe:invalid" result="pass"/><test-case name="7189NISTXML-SV-II-atomic-int-totalDigits-4-2 tokoe:invalid" result="pass"/><test-case name="7190NISTXML-SV-II-atomic-int-totalDigits-4-3 tokoe:invalid" result="pass"/><test-case name="7191NISTXML-SV-II-atomic-int-totalDigits-4-4 tokoe:invalid" result="pass"/><test-case name="7192NISTXML-SV-II-atomic-int-totalDigits-4-5 tokoe:invalid" result="pass"/><test-case name="7193NISTSchema-SV-II-atomic-int-totalDigits-5 tokoe:valid" result="pass"/><test-case name="7194NISTXML-SV-II-atomic-int-totalDigits-5-1 tokoe:invalid" result="pass"/><test-case name="7195NISTXML-SV-II-atomic-int-totalDigits-5-2 tokoe:invalid" result="pass"/><test-case name="7196NISTXML-SV-II-atomic-int-totalDigits-5-3 tokoe:invalid" result="pass"/><test-case name="7197NISTXML-SV-II-atomic-int-totalDigits-5-4 tokoe:invalid" result="pass"/><test-case name="7198NISTXML-SV-II-atomic-int-totalDigits-5-5 tokoe:invalid" result="pass"/><test-case name="7199NISTSchema-SV-II-atomic-short-minInclusive-2 tokoe:valid" result="pass"/><test-case name="7200NISTXML-SV-II-atomic-short-minInclusive-2-1 tokoe:invalid" result="pass"/><test-case name="7201NISTXML-SV-II-atomic-short-minInclusive-2-2 tokoe:invalid" result="pass"/><test-case name="7202NISTXML-SV-II-atomic-short-minInclusive-2-3 tokoe:invalid" result="pass"/><test-case name="7203NISTXML-SV-II-atomic-short-minInclusive-2-4 tokoe:invalid" result="pass"/><test-case name="7204NISTXML-SV-II-atomic-short-minInclusive-2-5 tokoe:invalid" result="pass"/><test-case name="7205NISTSchema-SV-II-atomic-short-minInclusive-3 tokoe:valid" result="pass"/><test-case name="7206NISTXML-SV-II-atomic-short-minInclusive-3-1 tokoe:invalid" result="pass"/><test-case name="7207NISTXML-SV-II-atomic-short-minInclusive-3-2 tokoe:invalid" result="pass"/><test-case name="7208NISTXML-SV-II-atomic-short-minInclusive-3-3 tokoe:invalid" result="pass"/><test-case name="7209NISTXML-SV-II-atomic-short-minInclusive-3-4 tokoe:invalid" result="pass"/><test-case name="7210NISTXML-SV-II-atomic-short-minInclusive-3-5 tokoe:invalid" result="pass"/><test-case name="7211NISTSchema-SV-II-atomic-short-minInclusive-4 tokoe:valid" result="pass"/><test-case name="7212NISTXML-SV-II-atomic-short-minInclusive-4-1 tokoe:invalid" result="pass"/><test-case name="7213NISTXML-SV-II-atomic-short-minInclusive-4-2 tokoe:invalid" result="pass"/><test-case name="7214NISTXML-SV-II-atomic-short-minInclusive-4-3 tokoe:invalid" result="pass"/><test-case name="7215NISTXML-SV-II-atomic-short-minInclusive-4-4 tokoe:invalid" result="pass"/><test-case name="7216NISTXML-SV-II-atomic-short-minInclusive-4-5 tokoe:invalid" result="pass"/><test-case name="7217NISTSchema-SV-II-atomic-short-minInclusive-5 tokoe:valid" result="pass"/><test-case name="7218NISTXML-SV-II-atomic-short-minInclusive-5-1 tokoe:invalid" result="pass"/><test-case name="7219NISTXML-SV-II-atomic-short-minInclusive-5-2 tokoe:invalid" result="pass"/><test-case name="7220NISTXML-SV-II-atomic-short-minInclusive-5-3 tokoe:invalid" result="pass"/><test-case name="7221NISTXML-SV-II-atomic-short-minInclusive-5-4 tokoe:invalid" result="pass"/><test-case name="7222NISTXML-SV-II-atomic-short-minInclusive-5-5 tokoe:invalid" result="pass"/><test-case name="7223NISTSchema-SV-II-atomic-short-minInclusive-6 tokoe:valid" result="pass"/><test-case name="7224NISTXML-SV-II-atomic-short-minInclusive-6-1 tokoe:invalid" result="pass"/><test-case name="7225NISTXML-SV-II-atomic-short-minInclusive-6-2 tokoe:invalid" result="pass"/><test-case name="7226NISTXML-SV-II-atomic-short-minInclusive-6-3 tokoe:invalid" result="pass"/><test-case name="7227NISTXML-SV-II-atomic-short-minInclusive-6-4 tokoe:invalid" result="pass"/><test-case name="7228NISTXML-SV-II-atomic-short-minInclusive-6-5 tokoe:invalid" result="pass"/><test-case name="7229NISTSchema-SV-II-atomic-short-maxInclusive-1 tokoe:valid" result="pass"/><test-case name="7230NISTXML-SV-II-atomic-short-maxInclusive-1-1 tokoe:invalid" result="pass"/><test-case name="7231NISTXML-SV-II-atomic-short-maxInclusive-1-2 tokoe:invalid" result="pass"/><test-case name="7232NISTXML-SV-II-atomic-short-maxInclusive-1-3 tokoe:invalid" result="pass"/><test-case name="7233NISTXML-SV-II-atomic-short-maxInclusive-1-4 tokoe:invalid" result="pass"/><test-case name="7234NISTXML-SV-II-atomic-short-maxInclusive-1-5 tokoe:invalid" result="pass"/><test-case name="7235NISTSchema-SV-II-atomic-short-maxInclusive-2 tokoe:valid" result="pass"/><test-case name="7236NISTXML-SV-II-atomic-short-maxInclusive-2-1 tokoe:invalid" result="pass"/><test-case name="7237NISTXML-SV-II-atomic-short-maxInclusive-2-2 tokoe:invalid" result="pass"/><test-case name="7238NISTXML-SV-II-atomic-short-maxInclusive-2-3 tokoe:invalid" result="pass"/><test-case name="7239NISTXML-SV-II-atomic-short-maxInclusive-2-4 tokoe:invalid" result="pass"/><test-case name="7240NISTXML-SV-II-atomic-short-maxInclusive-2-5 tokoe:invalid" result="pass"/><test-case name="7241NISTSchema-SV-II-atomic-short-maxInclusive-3 tokoe:valid" result="pass"/><test-case name="7242NISTXML-SV-II-atomic-short-maxInclusive-3-1 tokoe:invalid" result="pass"/><test-case name="7243NISTXML-SV-II-atomic-short-maxInclusive-3-2 tokoe:invalid" result="pass"/><test-case name="7244NISTXML-SV-II-atomic-short-maxInclusive-3-3 tokoe:invalid" result="pass"/><test-case name="7245NISTXML-SV-II-atomic-short-maxInclusive-3-4 tokoe:invalid" result="pass"/><test-case name="7246NISTXML-SV-II-atomic-short-maxInclusive-3-5 tokoe:invalid" result="pass"/><test-case name="7247NISTSchema-SV-II-atomic-short-maxInclusive-4 tokoe:valid" result="pass"/><test-case name="7248NISTXML-SV-II-atomic-short-maxInclusive-4-1 tokoe:invalid" result="pass"/><test-case name="7249NISTXML-SV-II-atomic-short-maxInclusive-4-2 tokoe:invalid" result="pass"/><test-case name="7250NISTXML-SV-II-atomic-short-maxInclusive-4-3 tokoe:invalid" result="pass"/><test-case name="7251NISTXML-SV-II-atomic-short-maxInclusive-4-4 tokoe:invalid" result="pass"/><test-case name="7252NISTXML-SV-II-atomic-short-maxInclusive-4-5 tokoe:invalid" result="pass"/><test-case name="7253NISTSchema-SV-II-atomic-short-maxInclusive-5 tokoe:valid" result="pass"/><test-case name="7254NISTXML-SV-II-atomic-short-maxInclusive-5-1 tokoe:invalid" result="pass"/><test-case name="7255NISTXML-SV-II-atomic-short-maxInclusive-5-2 tokoe:invalid" result="pass"/><test-case name="7256NISTXML-SV-II-atomic-short-maxInclusive-5-3 tokoe:invalid" result="pass"/><test-case name="7257NISTXML-SV-II-atomic-short-maxInclusive-5-4 tokoe:invalid" result="pass"/><test-case name="7258NISTXML-SV-II-atomic-short-maxInclusive-5-5 tokoe:invalid" result="pass"/><test-case name="7259NISTSchema-SV-II-atomic-short-totalDigits-1 tokoe:valid" result="pass"/><test-case name="7260NISTXML-SV-II-atomic-short-totalDigits-1-1 tokoe:invalid" result="pass"/><test-case name="7261NISTXML-SV-II-atomic-short-totalDigits-1-2 tokoe:invalid" result="pass"/><test-case name="7262NISTXML-SV-II-atomic-short-totalDigits-1-3 tokoe:invalid" result="pass"/><test-case name="7263NISTXML-SV-II-atomic-short-totalDigits-1-4 tokoe:invalid" result="pass"/><test-case name="7264NISTXML-SV-II-atomic-short-totalDigits-1-5 tokoe:invalid" result="pass"/><test-case name="7265NISTSchema-SV-II-atomic-short-totalDigits-2 tokoe:valid" result="pass"/><test-case name="7266NISTXML-SV-II-atomic-short-totalDigits-2-1 tokoe:invalid" result="pass"/><test-case name="7267NISTXML-SV-II-atomic-short-totalDigits-2-2 tokoe:invalid" result="pass"/><test-case name="7268NISTXML-SV-II-atomic-short-totalDigits-2-3 tokoe:invalid" result="pass"/><test-case name="7269NISTXML-SV-II-atomic-short-totalDigits-2-4 tokoe:invalid" result="pass"/><test-case name="7270NISTXML-SV-II-atomic-short-totalDigits-2-5 tokoe:invalid" result="pass"/><test-case name="7271NISTSchema-SV-II-atomic-short-totalDigits-3 tokoe:valid" result="pass"/><test-case name="7272NISTXML-SV-II-atomic-short-totalDigits-3-1 tokoe:invalid" result="pass"/><test-case name="7273NISTXML-SV-II-atomic-short-totalDigits-3-2 tokoe:invalid" result="pass"/><test-case name="7274NISTXML-SV-II-atomic-short-totalDigits-3-3 tokoe:invalid" result="pass"/><test-case name="7275NISTXML-SV-II-atomic-short-totalDigits-3-4 tokoe:invalid" result="pass"/><test-case name="7276NISTXML-SV-II-atomic-short-totalDigits-3-5 tokoe:invalid" result="pass"/><test-case name="7277NISTSchema-SV-II-atomic-short-totalDigits-4 tokoe:valid" result="pass"/><test-case name="7278NISTXML-SV-II-atomic-short-totalDigits-4-1 tokoe:invalid" result="pass"/><test-case name="7279NISTXML-SV-II-atomic-short-totalDigits-4-2 tokoe:invalid" result="pass"/><test-case name="7280NISTXML-SV-II-atomic-short-totalDigits-4-3 tokoe:invalid" result="pass"/><test-case name="7281NISTXML-SV-II-atomic-short-totalDigits-4-4 tokoe:invalid" result="pass"/><test-case name="7282NISTXML-SV-II-atomic-short-totalDigits-4-5 tokoe:invalid" result="pass"/><test-case name="7283NISTSchema-SV-II-atomic-byte-minInclusive-2 tokoe:valid" result="pass"/><test-case name="7284NISTXML-SV-II-atomic-byte-minInclusive-2-1 tokoe:invalid" result="pass"/><test-case name="7285NISTXML-SV-II-atomic-byte-minInclusive-2-2 tokoe:invalid" result="pass"/><test-case name="7286NISTXML-SV-II-atomic-byte-minInclusive-2-3 tokoe:invalid" result="pass"/><test-case name="7287NISTXML-SV-II-atomic-byte-minInclusive-2-4 tokoe:invalid" result="pass"/><test-case name="7288NISTXML-SV-II-atomic-byte-minInclusive-2-5 tokoe:invalid" result="pass"/><test-case name="7289NISTSchema-SV-II-atomic-byte-minInclusive-3 tokoe:valid" result="pass"/><test-case name="7290NISTXML-SV-II-atomic-byte-minInclusive-3-1 tokoe:invalid" result="pass"/><test-case name="7291NISTXML-SV-II-atomic-byte-minInclusive-3-2 tokoe:invalid" result="pass"/><test-case name="7292NISTXML-SV-II-atomic-byte-minInclusive-3-3 tokoe:invalid" result="pass"/><test-case name="7293NISTXML-SV-II-atomic-byte-minInclusive-3-4 tokoe:invalid" result="pass"/><test-case name="7294NISTXML-SV-II-atomic-byte-minInclusive-3-5 tokoe:invalid" result="pass"/><test-case name="7295NISTSchema-SV-II-atomic-byte-minInclusive-4 tokoe:valid" result="pass"/><test-case name="7296NISTXML-SV-II-atomic-byte-minInclusive-4-1 tokoe:invalid" result="pass"/><test-case name="7297NISTXML-SV-II-atomic-byte-minInclusive-4-2 tokoe:invalid" result="pass"/><test-case name="7298NISTXML-SV-II-atomic-byte-minInclusive-4-3 tokoe:invalid" result="pass"/><test-case name="7299NISTXML-SV-II-atomic-byte-minInclusive-4-4 tokoe:invalid" result="pass"/><test-case name="7300NISTXML-SV-II-atomic-byte-minInclusive-4-5 tokoe:invalid" result="pass"/><test-case name="7301NISTSchema-SV-II-atomic-byte-minInclusive-5 tokoe:valid" result="pass"/><test-case name="7302NISTXML-SV-II-atomic-byte-minInclusive-5-1 tokoe:invalid" result="pass"/><test-case name="7303NISTXML-SV-II-atomic-byte-minInclusive-5-2 tokoe:invalid" result="pass"/><test-case name="7304NISTXML-SV-II-atomic-byte-minInclusive-5-3 tokoe:invalid" result="pass"/><test-case name="7305NISTXML-SV-II-atomic-byte-minInclusive-5-4 tokoe:invalid" result="pass"/><test-case name="7306NISTXML-SV-II-atomic-byte-minInclusive-5-5 tokoe:invalid" result="pass"/><test-case name="7307NISTSchema-SV-II-atomic-byte-minInclusive-6 tokoe:valid" result="pass"/><test-case name="7308NISTXML-SV-II-atomic-byte-minInclusive-6-1 tokoe:invalid" result="pass"/><test-case name="7309NISTXML-SV-II-atomic-byte-minInclusive-6-2 tokoe:invalid" result="pass"/><test-case name="7310NISTXML-SV-II-atomic-byte-minInclusive-6-3 tokoe:invalid" result="pass"/><test-case name="7311NISTXML-SV-II-atomic-byte-minInclusive-6-4 tokoe:invalid" result="pass"/><test-case name="7312NISTXML-SV-II-atomic-byte-minInclusive-6-5 tokoe:invalid" result="pass"/><test-case name="7313NISTSchema-SV-II-atomic-byte-maxInclusive-1 tokoe:valid" result="pass"/><test-case name="7314NISTXML-SV-II-atomic-byte-maxInclusive-1-1 tokoe:invalid" result="pass"/><test-case name="7315NISTXML-SV-II-atomic-byte-maxInclusive-1-2 tokoe:invalid" result="pass"/><test-case name="7316NISTXML-SV-II-atomic-byte-maxInclusive-1-3 tokoe:invalid" result="pass"/><test-case name="7317NISTXML-SV-II-atomic-byte-maxInclusive-1-4 tokoe:invalid" result="pass"/><test-case name="7318NISTXML-SV-II-atomic-byte-maxInclusive-1-5 tokoe:invalid" result="pass"/><test-case name="7319NISTSchema-SV-II-atomic-byte-maxInclusive-2 tokoe:valid" result="pass"/><test-case name="7320NISTXML-SV-II-atomic-byte-maxInclusive-2-1 tokoe:invalid" result="pass"/><test-case name="7321NISTXML-SV-II-atomic-byte-maxInclusive-2-2 tokoe:invalid" result="pass"/><test-case name="7322NISTXML-SV-II-atomic-byte-maxInclusive-2-3 tokoe:invalid" result="pass"/><test-case name="7323NISTXML-SV-II-atomic-byte-maxInclusive-2-4 tokoe:invalid" result="pass"/><test-case name="7324NISTXML-SV-II-atomic-byte-maxInclusive-2-5 tokoe:invalid" result="pass"/><test-case name="7325NISTSchema-SV-II-atomic-byte-maxInclusive-3 tokoe:valid" result="pass"/><test-case name="7326NISTXML-SV-II-atomic-byte-maxInclusive-3-1 tokoe:invalid" result="pass"/><test-case name="7327NISTXML-SV-II-atomic-byte-maxInclusive-3-2 tokoe:invalid" result="pass"/><test-case name="7328NISTXML-SV-II-atomic-byte-maxInclusive-3-3 tokoe:invalid" result="pass"/><test-case name="7329NISTXML-SV-II-atomic-byte-maxInclusive-3-4 tokoe:invalid" result="pass"/><test-case name="7330NISTXML-SV-II-atomic-byte-maxInclusive-3-5 tokoe:invalid" result="pass"/><test-case name="7331NISTSchema-SV-II-atomic-byte-maxInclusive-4 tokoe:valid" result="pass"/><test-case name="7332NISTXML-SV-II-atomic-byte-maxInclusive-4-1 tokoe:invalid" result="pass"/><test-case name="7333NISTXML-SV-II-atomic-byte-maxInclusive-4-2 tokoe:invalid" result="pass"/><test-case name="7334NISTXML-SV-II-atomic-byte-maxInclusive-4-3 tokoe:invalid" result="pass"/><test-case name="7335NISTXML-SV-II-atomic-byte-maxInclusive-4-4 tokoe:invalid" result="pass"/><test-case name="7336NISTXML-SV-II-atomic-byte-maxInclusive-4-5 tokoe:invalid" result="pass"/><test-case name="7337NISTSchema-SV-II-atomic-byte-maxInclusive-5 tokoe:valid" result="pass"/><test-case name="7338NISTXML-SV-II-atomic-byte-maxInclusive-5-1 tokoe:invalid" result="pass"/><test-case name="7339NISTXML-SV-II-atomic-byte-maxInclusive-5-2 tokoe:invalid" result="pass"/><test-case name="7340NISTXML-SV-II-atomic-byte-maxInclusive-5-3 tokoe:invalid" result="pass"/><test-case name="7341NISTXML-SV-II-atomic-byte-maxInclusive-5-4 tokoe:invalid" result="pass"/><test-case name="7342NISTXML-SV-II-atomic-byte-maxInclusive-5-5 tokoe:invalid" result="pass"/><test-case name="7343NISTSchema-SV-II-atomic-byte-totalDigits-1 tokoe:valid" result="pass"/><test-case name="7344NISTXML-SV-II-atomic-byte-totalDigits-1-1 tokoe:invalid" result="pass"/><test-case name="7345NISTXML-SV-II-atomic-byte-totalDigits-1-2 tokoe:invalid" result="pass"/><test-case name="7346NISTXML-SV-II-atomic-byte-totalDigits-1-3 tokoe:invalid" result="pass"/><test-case name="7347NISTXML-SV-II-atomic-byte-totalDigits-1-4 tokoe:invalid" result="pass"/><test-case name="7348NISTXML-SV-II-atomic-byte-totalDigits-1-5 tokoe:invalid" result="pass"/><test-case name="7349NISTSchema-SV-II-atomic-byte-totalDigits-2 tokoe:valid" result="pass"/><test-case name="7350NISTXML-SV-II-atomic-byte-totalDigits-2-1 tokoe:invalid" result="pass"/><test-case name="7351NISTXML-SV-II-atomic-byte-totalDigits-2-2 tokoe:invalid" result="pass"/><test-case name="7352NISTXML-SV-II-atomic-byte-totalDigits-2-3 tokoe:invalid" result="pass"/><test-case name="7353NISTXML-SV-II-atomic-byte-totalDigits-2-4 tokoe:invalid" result="pass"/><test-case name="7354NISTXML-SV-II-atomic-byte-totalDigits-2-5 tokoe:invalid" result="pass"/><test-case name="7355NISTSchema-SV-II-atomic-nonNegativeInteger-minInclusive-2 tokoe:valid" result="pass"/><test-case name="7356NISTXML-SV-II-atomic-nonNegativeInteger-minInclusive-2-1 tokoe:invalid" result="pass"/><test-case name="7357NISTXML-SV-II-atomic-nonNegativeInteger-minInclusive-2-2 tokoe:invalid" result="pass"/><test-case name="7358NISTXML-SV-II-atomic-nonNegativeInteger-minInclusive-2-3 tokoe:invalid" result="pass"/><test-case name="7359NISTXML-SV-II-atomic-nonNegativeInteger-minInclusive-2-4 tokoe:invalid" result="pass"/><test-case name="7360NISTXML-SV-II-atomic-nonNegativeInteger-minInclusive-2-5 tokoe:invalid" result="pass"/><test-case name="7361NISTSchema-SV-II-atomic-nonNegativeInteger-minInclusive-3 tokoe:valid" result="pass"/><test-case name="7362NISTXML-SV-II-atomic-nonNegativeInteger-minInclusive-3-1 tokoe:invalid" result="pass"/><test-case name="7363NISTXML-SV-II-atomic-nonNegativeInteger-minInclusive-3-2 tokoe:invalid" result="pass"/><test-case name="7364NISTXML-SV-II-atomic-nonNegativeInteger-minInclusive-3-3 tokoe:invalid" result="pass"/><test-case name="7365NISTXML-SV-II-atomic-nonNegativeInteger-minInclusive-3-4 tokoe:invalid" result="pass"/><test-case name="7366NISTXML-SV-II-atomic-nonNegativeInteger-minInclusive-3-5 tokoe:invalid" result="pass"/><test-case name="7367NISTSchema-SV-II-atomic-nonNegativeInteger-minInclusive-4 tokoe:valid" result="pass"/><test-case name="7368NISTXML-SV-II-atomic-nonNegativeInteger-minInclusive-4-1 tokoe:invalid" result="pass"/><test-case name="7369NISTXML-SV-II-atomic-nonNegativeInteger-minInclusive-4-2 tokoe:invalid" result="pass"/><test-case name="7370NISTXML-SV-II-atomic-nonNegativeInteger-minInclusive-4-3 tokoe:invalid" result="pass"/><test-case name="7371NISTXML-SV-II-atomic-nonNegativeInteger-minInclusive-4-4 tokoe:invalid" result="pass"/><test-case name="7372NISTXML-SV-II-atomic-nonNegativeInteger-minInclusive-4-5 tokoe:invalid" result="pass"/><test-case name="7373NISTSchema-SV-II-atomic-nonNegativeInteger-minInclusive-5 tokoe:valid" result="pass"/><test-case name="7374NISTXML-SV-II-atomic-nonNegativeInteger-minInclusive-5-1 tokoe:invalid" result="pass"/><test-case name="7375NISTXML-SV-II-atomic-nonNegativeInteger-minInclusive-5-2 tokoe:invalid" result="pass"/><test-case name="7376NISTXML-SV-II-atomic-nonNegativeInteger-minInclusive-5-3 tokoe:invalid" result="pass"/><test-case name="7377NISTXML-SV-II-atomic-nonNegativeInteger-minInclusive-5-4 tokoe:invalid" result="pass"/><test-case name="7378NISTXML-SV-II-atomic-nonNegativeInteger-minInclusive-5-5 tokoe:invalid" result="pass"/><test-case name="7379NISTSchema-SV-II-atomic-nonNegativeInteger-minInclusive-6 tokoe:valid" result="pass"/><test-case name="7380NISTXML-SV-II-atomic-nonNegativeInteger-minInclusive-6-1 tokoe:invalid" result="pass"/><test-case name="7381NISTXML-SV-II-atomic-nonNegativeInteger-minInclusive-6-2 tokoe:invalid" result="pass"/><test-case name="7382NISTXML-SV-II-atomic-nonNegativeInteger-minInclusive-6-3 tokoe:invalid" result="pass"/><test-case name="7383NISTXML-SV-II-atomic-nonNegativeInteger-minInclusive-6-4 tokoe:invalid" result="pass"/><test-case name="7384NISTXML-SV-II-atomic-nonNegativeInteger-minInclusive-6-5 tokoe:invalid" result="pass"/><test-case name="7385NISTSchema-SV-II-atomic-nonNegativeInteger-maxInclusive-1 tokoe:valid" result="pass"/><test-case name="7386NISTXML-SV-II-atomic-nonNegativeInteger-maxInclusive-1-1 tokoe:invalid" result="pass"/><test-case name="7387NISTXML-SV-II-atomic-nonNegativeInteger-maxInclusive-1-2 tokoe:invalid" result="pass"/><test-case name="7388NISTXML-SV-II-atomic-nonNegativeInteger-maxInclusive-1-3 tokoe:invalid" result="pass"/><test-case name="7389NISTXML-SV-II-atomic-nonNegativeInteger-maxInclusive-1-4 tokoe:invalid" result="pass"/><test-case name="7390NISTXML-SV-II-atomic-nonNegativeInteger-maxInclusive-1-5 tokoe:invalid" result="pass"/><test-case name="7391NISTSchema-SV-II-atomic-nonNegativeInteger-maxInclusive-2 tokoe:valid" result="pass"/><test-case name="7392NISTXML-SV-II-atomic-nonNegativeInteger-maxInclusive-2-1 tokoe:invalid" result="pass"/><test-case name="7393NISTXML-SV-II-atomic-nonNegativeInteger-maxInclusive-2-2 tokoe:invalid" result="pass"/><test-case name="7394NISTXML-SV-II-atomic-nonNegativeInteger-maxInclusive-2-3 tokoe:invalid" result="pass"/><test-case name="7395NISTXML-SV-II-atomic-nonNegativeInteger-maxInclusive-2-4 tokoe:invalid" result="pass"/><test-case name="7396NISTXML-SV-II-atomic-nonNegativeInteger-maxInclusive-2-5 tokoe:invalid" result="pass"/><test-case name="7397NISTSchema-SV-II-atomic-nonNegativeInteger-maxInclusive-3 tokoe:valid" result="pass"/><test-case name="7398NISTXML-SV-II-atomic-nonNegativeInteger-maxInclusive-3-1 tokoe:invalid" result="pass"/><test-case name="7399NISTXML-SV-II-atomic-nonNegativeInteger-maxInclusive-3-2 tokoe:invalid" result="pass"/><test-case name="7400NISTXML-SV-II-atomic-nonNegativeInteger-maxInclusive-3-3 tokoe:invalid" result="pass"/><test-case name="7401NISTXML-SV-II-atomic-nonNegativeInteger-maxInclusive-3-4 tokoe:invalid" result="pass"/><test-case name="7402NISTXML-SV-II-atomic-nonNegativeInteger-maxInclusive-3-5 tokoe:invalid" result="pass"/><test-case name="7403NISTSchema-SV-II-atomic-nonNegativeInteger-maxInclusive-4 tokoe:valid" result="pass"/><test-case name="7404NISTXML-SV-II-atomic-nonNegativeInteger-maxInclusive-4-1 tokoe:invalid" result="pass"/><test-case name="7405NISTXML-SV-II-atomic-nonNegativeInteger-maxInclusive-4-2 tokoe:invalid" result="pass"/><test-case name="7406NISTXML-SV-II-atomic-nonNegativeInteger-maxInclusive-4-3 tokoe:invalid" result="pass"/><test-case name="7407NISTXML-SV-II-atomic-nonNegativeInteger-maxInclusive-4-4 tokoe:invalid" result="pass"/><test-case name="7408NISTXML-SV-II-atomic-nonNegativeInteger-maxInclusive-4-5 tokoe:invalid" result="pass"/><test-case name="7409NISTSchema-SV-II-atomic-nonNegativeInteger-maxInclusive-5 tokoe:valid" result="pass"/><test-case name="7410NISTXML-SV-II-atomic-nonNegativeInteger-maxInclusive-5-1 tokoe:invalid" result="pass"/><test-case name="7411NISTXML-SV-II-atomic-nonNegativeInteger-maxInclusive-5-2 tokoe:invalid" result="pass"/><test-case name="7412NISTXML-SV-II-atomic-nonNegativeInteger-maxInclusive-5-3 tokoe:invalid" result="pass"/><test-case name="7413NISTXML-SV-II-atomic-nonNegativeInteger-maxInclusive-5-4 tokoe:invalid" result="pass"/><test-case name="7414NISTXML-SV-II-atomic-nonNegativeInteger-maxInclusive-5-5 tokoe:invalid" result="pass"/><test-case name="7415NISTSchema-SV-II-atomic-nonNegativeInteger-totalDigits-1 tokoe:valid" result="pass"/><test-case name="7416NISTXML-SV-II-atomic-nonNegativeInteger-totalDigits-1-1 tokoe:invalid" result="pass"/><test-case name="7417NISTXML-SV-II-atomic-nonNegativeInteger-totalDigits-1-2 tokoe:invalid" result="pass"/><test-case name="7418NISTXML-SV-II-atomic-nonNegativeInteger-totalDigits-1-3 tokoe:invalid" result="pass"/><test-case name="7419NISTXML-SV-II-atomic-nonNegativeInteger-totalDigits-1-4 tokoe:invalid" result="pass"/><test-case name="7420NISTXML-SV-II-atomic-nonNegativeInteger-totalDigits-1-5 tokoe:invalid" result="pass"/><test-case name="7421NISTSchema-SV-II-atomic-nonNegativeInteger-totalDigits-2 tokoe:valid" result="pass"/><test-case name="7422NISTXML-SV-II-atomic-nonNegativeInteger-totalDigits-2-1 tokoe:invalid" result="pass"/><test-case name="7423NISTXML-SV-II-atomic-nonNegativeInteger-totalDigits-2-2 tokoe:invalid" result="pass"/><test-case name="7424NISTXML-SV-II-atomic-nonNegativeInteger-totalDigits-2-3 tokoe:invalid" result="pass"/><test-case name="7425NISTXML-SV-II-atomic-nonNegativeInteger-totalDigits-2-4 tokoe:invalid" result="pass"/><test-case name="7426NISTXML-SV-II-atomic-nonNegativeInteger-totalDigits-2-5 tokoe:invalid" result="pass"/><test-case name="7427NISTSchema-SV-II-atomic-nonNegativeInteger-totalDigits-3 tokoe:valid" result="pass"/><test-case name="7428NISTXML-SV-II-atomic-nonNegativeInteger-totalDigits-3-1 tokoe:invalid" result="pass"/><test-case name="7429NISTXML-SV-II-atomic-nonNegativeInteger-totalDigits-3-2 tokoe:invalid" result="pass"/><test-case name="7430NISTXML-SV-II-atomic-nonNegativeInteger-totalDigits-3-3 tokoe:invalid" result="pass"/><test-case name="7431NISTXML-SV-II-atomic-nonNegativeInteger-totalDigits-3-4 tokoe:invalid" result="pass"/><test-case name="7432NISTXML-SV-II-atomic-nonNegativeInteger-totalDigits-3-5 tokoe:invalid" result="pass"/><test-case name="7433NISTSchema-SV-II-atomic-nonNegativeInteger-totalDigits-4 tokoe:valid" result="pass"/><test-case name="7434NISTXML-SV-II-atomic-nonNegativeInteger-totalDigits-4-1 tokoe:invalid" result="pass"/><test-case name="7435NISTXML-SV-II-atomic-nonNegativeInteger-totalDigits-4-2 tokoe:invalid" result="pass"/><test-case name="7436NISTXML-SV-II-atomic-nonNegativeInteger-totalDigits-4-3 tokoe:invalid" result="pass"/><test-case name="7437NISTXML-SV-II-atomic-nonNegativeInteger-totalDigits-4-4 tokoe:invalid" result="pass"/><test-case name="7438NISTXML-SV-II-atomic-nonNegativeInteger-totalDigits-4-5 tokoe:invalid" result="pass"/><test-case name="7439NISTSchema-SV-II-atomic-nonNegativeInteger-totalDigits-5 tokoe:valid" result="pass"/><test-case name="7440NISTXML-SV-II-atomic-nonNegativeInteger-totalDigits-5-1 tokoe:invalid" result="pass"/><test-case name="7441NISTXML-SV-II-atomic-nonNegativeInteger-totalDigits-5-2 tokoe:invalid" result="pass"/><test-case name="7442NISTXML-SV-II-atomic-nonNegativeInteger-totalDigits-5-3 tokoe:invalid" result="pass"/><test-case name="7443NISTXML-SV-II-atomic-nonNegativeInteger-totalDigits-5-4 tokoe:invalid" result="pass"/><test-case name="7444NISTXML-SV-II-atomic-nonNegativeInteger-totalDigits-5-5 tokoe:invalid" result="pass"/><test-case name="7445NISTSchema-SV-II-atomic-unsignedLong-minInclusive-2 tokoe:valid" result="pass"/><test-case name="7446NISTXML-SV-II-atomic-unsignedLong-minInclusive-2-1 tokoe:invalid" result="pass"/><test-case name="7447NISTXML-SV-II-atomic-unsignedLong-minInclusive-2-2 tokoe:invalid" result="pass"/><test-case name="7448NISTXML-SV-II-atomic-unsignedLong-minInclusive-2-3 tokoe:invalid" result="pass"/><test-case name="7449NISTXML-SV-II-atomic-unsignedLong-minInclusive-2-4 tokoe:invalid" result="pass"/><test-case name="7450NISTXML-SV-II-atomic-unsignedLong-minInclusive-2-5 tokoe:invalid" result="pass"/><test-case name="7451NISTSchema-SV-II-atomic-unsignedLong-minInclusive-3 tokoe:valid" result="pass"/><test-case name="7452NISTXML-SV-II-atomic-unsignedLong-minInclusive-3-1 tokoe:invalid" result="pass"/><test-case name="7453NISTXML-SV-II-atomic-unsignedLong-minInclusive-3-2 tokoe:invalid" result="pass"/><test-case name="7454NISTXML-SV-II-atomic-unsignedLong-minInclusive-3-3 tokoe:invalid" result="pass"/><test-case name="7455NISTXML-SV-II-atomic-unsignedLong-minInclusive-3-4 tokoe:invalid" result="pass"/><test-case name="7456NISTXML-SV-II-atomic-unsignedLong-minInclusive-3-5 tokoe:invalid" result="pass"/><test-case name="7457NISTSchema-SV-II-atomic-unsignedLong-minInclusive-4 tokoe:valid" result="pass"/><test-case name="7458NISTXML-SV-II-atomic-unsignedLong-minInclusive-4-1 tokoe:invalid" result="pass"/><test-case name="7459NISTXML-SV-II-atomic-unsignedLong-minInclusive-4-2 tokoe:invalid" result="pass"/><test-case name="7460NISTXML-SV-II-atomic-unsignedLong-minInclusive-4-3 tokoe:invalid" result="pass"/><test-case name="7461NISTXML-SV-II-atomic-unsignedLong-minInclusive-4-4 tokoe:invalid" result="pass"/><test-case name="7462NISTXML-SV-II-atomic-unsignedLong-minInclusive-4-5 tokoe:invalid" result="pass"/><test-case name="7463NISTSchema-SV-II-atomic-unsignedLong-minInclusive-5 tokoe:valid" result="pass"/><test-case name="7464NISTXML-SV-II-atomic-unsignedLong-minInclusive-5-1 tokoe:invalid" result="pass"/><test-case name="7465NISTXML-SV-II-atomic-unsignedLong-minInclusive-5-2 tokoe:invalid" result="pass"/><test-case name="7466NISTXML-SV-II-atomic-unsignedLong-minInclusive-5-3 tokoe:invalid" result="pass"/><test-case name="7467NISTXML-SV-II-atomic-unsignedLong-minInclusive-5-4 tokoe:invalid" result="pass"/><test-case name="7468NISTXML-SV-II-atomic-unsignedLong-minInclusive-5-5 tokoe:invalid" result="pass"/><test-case name="7469NISTSchema-SV-II-atomic-unsignedLong-minInclusive-6 tokoe:valid" result="pass"/><test-case name="7470NISTXML-SV-II-atomic-unsignedLong-minInclusive-6-1 tokoe:invalid" result="pass"/><test-case name="7471NISTXML-SV-II-atomic-unsignedLong-minInclusive-6-2 tokoe:invalid" result="pass"/><test-case name="7472NISTXML-SV-II-atomic-unsignedLong-minInclusive-6-3 tokoe:invalid" result="pass"/><test-case name="7473NISTXML-SV-II-atomic-unsignedLong-minInclusive-6-4 tokoe:invalid" result="pass"/><test-case name="7474NISTXML-SV-II-atomic-unsignedLong-minInclusive-6-5 tokoe:invalid" result="pass"/><test-case name="7475NISTSchema-SV-II-atomic-unsignedLong-maxInclusive-1 tokoe:valid" result="pass"/><test-case name="7476NISTXML-SV-II-atomic-unsignedLong-maxInclusive-1-1 tokoe:invalid" result="pass"/><test-case name="7477NISTXML-SV-II-atomic-unsignedLong-maxInclusive-1-2 tokoe:invalid" result="pass"/><test-case name="7478NISTXML-SV-II-atomic-unsignedLong-maxInclusive-1-3 tokoe:invalid" result="pass"/><test-case name="7479NISTXML-SV-II-atomic-unsignedLong-maxInclusive-1-4 tokoe:invalid" result="pass"/><test-case name="7480NISTXML-SV-II-atomic-unsignedLong-maxInclusive-1-5 tokoe:invalid" result="pass"/><test-case name="7481NISTSchema-SV-II-atomic-unsignedLong-maxInclusive-2 tokoe:valid" result="pass"/><test-case name="7482NISTXML-SV-II-atomic-unsignedLong-maxInclusive-2-1 tokoe:invalid" result="pass"/><test-case name="7483NISTXML-SV-II-atomic-unsignedLong-maxInclusive-2-2 tokoe:invalid" result="pass"/><test-case name="7484NISTXML-SV-II-atomic-unsignedLong-maxInclusive-2-3 tokoe:invalid" result="pass"/><test-case name="7485NISTXML-SV-II-atomic-unsignedLong-maxInclusive-2-4 tokoe:invalid" result="pass"/><test-case name="7486NISTXML-SV-II-atomic-unsignedLong-maxInclusive-2-5 tokoe:invalid" result="pass"/><test-case name="7487NISTSchema-SV-II-atomic-unsignedLong-maxInclusive-3 tokoe:valid" result="pass"/><test-case name="7488NISTXML-SV-II-atomic-unsignedLong-maxInclusive-3-1 tokoe:invalid" result="pass"/><test-case name="7489NISTXML-SV-II-atomic-unsignedLong-maxInclusive-3-2 tokoe:invalid" result="pass"/><test-case name="7490NISTXML-SV-II-atomic-unsignedLong-maxInclusive-3-3 tokoe:invalid" result="pass"/><test-case name="7491NISTXML-SV-II-atomic-unsignedLong-maxInclusive-3-4 tokoe:invalid" result="pass"/><test-case name="7492NISTXML-SV-II-atomic-unsignedLong-maxInclusive-3-5 tokoe:invalid" result="pass"/><test-case name="7493NISTSchema-SV-II-atomic-unsignedLong-maxInclusive-4 tokoe:valid" result="pass"/><test-case name="7494NISTXML-SV-II-atomic-unsignedLong-maxInclusive-4-1 tokoe:invalid" result="pass"/><test-case name="7495NISTXML-SV-II-atomic-unsignedLong-maxInclusive-4-2 tokoe:invalid" result="pass"/><test-case name="7496NISTXML-SV-II-atomic-unsignedLong-maxInclusive-4-3 tokoe:invalid" result="pass"/><test-case name="7497NISTXML-SV-II-atomic-unsignedLong-maxInclusive-4-4 tokoe:invalid" result="pass"/><test-case name="7498NISTXML-SV-II-atomic-unsignedLong-maxInclusive-4-5 tokoe:invalid" result="pass"/><test-case name="7499NISTSchema-SV-II-atomic-unsignedLong-maxInclusive-5 tokoe:valid" result="pass"/><test-case name="7500NISTXML-SV-II-atomic-unsignedLong-maxInclusive-5-1 tokoe:invalid" result="pass"/><test-case name="7501NISTXML-SV-II-atomic-unsignedLong-maxInclusive-5-2 tokoe:invalid" result="pass"/><test-case name="7502NISTXML-SV-II-atomic-unsignedLong-maxInclusive-5-3 tokoe:invalid" result="pass"/><test-case name="7503NISTXML-SV-II-atomic-unsignedLong-maxInclusive-5-4 tokoe:invalid" result="pass"/><test-case name="7504NISTXML-SV-II-atomic-unsignedLong-maxInclusive-5-5 tokoe:invalid" result="pass"/><test-case name="7505NISTSchema-SV-II-atomic-unsignedLong-totalDigits-1 tokoe:valid" result="pass"/><test-case name="7506NISTXML-SV-II-atomic-unsignedLong-totalDigits-1-1 tokoe:invalid" result="pass"/><test-case name="7507NISTXML-SV-II-atomic-unsignedLong-totalDigits-1-2 tokoe:invalid" result="pass"/><test-case name="7508NISTXML-SV-II-atomic-unsignedLong-totalDigits-1-3 tokoe:invalid" result="pass"/><test-case name="7509NISTXML-SV-II-atomic-unsignedLong-totalDigits-1-4 tokoe:invalid" result="pass"/><test-case name="7510NISTXML-SV-II-atomic-unsignedLong-totalDigits-1-5 tokoe:invalid" result="pass"/><test-case name="7511NISTSchema-SV-II-atomic-unsignedLong-totalDigits-2 tokoe:valid" result="pass"/><test-case name="7512NISTXML-SV-II-atomic-unsignedLong-totalDigits-2-1 tokoe:invalid" result="pass"/><test-case name="7513NISTXML-SV-II-atomic-unsignedLong-totalDigits-2-2 tokoe:invalid" result="pass"/><test-case name="7514NISTXML-SV-II-atomic-unsignedLong-totalDigits-2-3 tokoe:invalid" result="pass"/><test-case name="7515NISTXML-SV-II-atomic-unsignedLong-totalDigits-2-4 tokoe:invalid" result="pass"/><test-case name="7516NISTXML-SV-II-atomic-unsignedLong-totalDigits-2-5 tokoe:invalid" result="pass"/><test-case name="7517NISTSchema-SV-II-atomic-unsignedLong-totalDigits-3 tokoe:valid" result="pass"/><test-case name="7518NISTXML-SV-II-atomic-unsignedLong-totalDigits-3-1 tokoe:invalid" result="pass"/><test-case name="7519NISTXML-SV-II-atomic-unsignedLong-totalDigits-3-2 tokoe:invalid" result="pass"/><test-case name="7520NISTXML-SV-II-atomic-unsignedLong-totalDigits-3-3 tokoe:invalid" result="pass"/><test-case name="7521NISTXML-SV-II-atomic-unsignedLong-totalDigits-3-4 tokoe:invalid" result="pass"/><test-case name="7522NISTXML-SV-II-atomic-unsignedLong-totalDigits-3-5 tokoe:invalid" result="pass"/><test-case name="7523NISTSchema-SV-II-atomic-unsignedLong-totalDigits-4 tokoe:valid" result="pass"/><test-case name="7524NISTXML-SV-II-atomic-unsignedLong-totalDigits-4-1 tokoe:invalid" result="pass"/><test-case name="7525NISTXML-SV-II-atomic-unsignedLong-totalDigits-4-2 tokoe:invalid" result="pass"/><test-case name="7526NISTXML-SV-II-atomic-unsignedLong-totalDigits-4-3 tokoe:invalid" result="pass"/><test-case name="7527NISTXML-SV-II-atomic-unsignedLong-totalDigits-4-4 tokoe:invalid" result="pass"/><test-case name="7528NISTXML-SV-II-atomic-unsignedLong-totalDigits-4-5 tokoe:invalid" result="pass"/><test-case name="7529NISTSchema-SV-II-atomic-unsignedLong-totalDigits-5 tokoe:valid" result="pass"/><test-case name="7530NISTXML-SV-II-atomic-unsignedLong-totalDigits-5-1 tokoe:invalid" result="pass"/><test-case name="7531NISTXML-SV-II-atomic-unsignedLong-totalDigits-5-2 tokoe:invalid" result="pass"/><test-case name="7532NISTXML-SV-II-atomic-unsignedLong-totalDigits-5-3 tokoe:invalid" result="pass"/><test-case name="7533NISTXML-SV-II-atomic-unsignedLong-totalDigits-5-4 tokoe:invalid" result="pass"/><test-case name="7534NISTXML-SV-II-atomic-unsignedLong-totalDigits-5-5 tokoe:invalid" result="pass"/><test-case name="7535NISTSchema-SV-II-atomic-unsignedInt-minInclusive-2 tokoe:valid" result="pass"/><test-case name="7536NISTXML-SV-II-atomic-unsignedInt-minInclusive-2-1 tokoe:invalid" result="pass"/><test-case name="7537NISTXML-SV-II-atomic-unsignedInt-minInclusive-2-2 tokoe:invalid" result="pass"/><test-case name="7538NISTXML-SV-II-atomic-unsignedInt-minInclusive-2-3 tokoe:invalid" result="pass"/><test-case name="7539NISTXML-SV-II-atomic-unsignedInt-minInclusive-2-4 tokoe:invalid" result="pass"/><test-case name="7540NISTXML-SV-II-atomic-unsignedInt-minInclusive-2-5 tokoe:invalid" result="pass"/><test-case name="7541NISTSchema-SV-II-atomic-unsignedInt-minInclusive-3 tokoe:valid" result="pass"/><test-case name="7542NISTXML-SV-II-atomic-unsignedInt-minInclusive-3-1 tokoe:invalid" result="pass"/><test-case name="7543NISTXML-SV-II-atomic-unsignedInt-minInclusive-3-2 tokoe:invalid" result="pass"/><test-case name="7544NISTXML-SV-II-atomic-unsignedInt-minInclusive-3-3 tokoe:invalid" result="pass"/><test-case name="7545NISTXML-SV-II-atomic-unsignedInt-minInclusive-3-4 tokoe:invalid" result="pass"/><test-case name="7546NISTXML-SV-II-atomic-unsignedInt-minInclusive-3-5 tokoe:invalid" result="pass"/><test-case name="7547NISTSchema-SV-II-atomic-unsignedInt-minInclusive-4 tokoe:valid" result="pass"/><test-case name="7548NISTXML-SV-II-atomic-unsignedInt-minInclusive-4-1 tokoe:invalid" result="pass"/><test-case name="7549NISTXML-SV-II-atomic-unsignedInt-minInclusive-4-2 tokoe:invalid" result="pass"/><test-case name="7550NISTXML-SV-II-atomic-unsignedInt-minInclusive-4-3 tokoe:invalid" result="pass"/><test-case name="7551NISTXML-SV-II-atomic-unsignedInt-minInclusive-4-4 tokoe:invalid" result="pass"/><test-case name="7552NISTXML-SV-II-atomic-unsignedInt-minInclusive-4-5 tokoe:invalid" result="pass"/><test-case name="7553NISTSchema-SV-II-atomic-unsignedInt-minInclusive-5 tokoe:valid" result="pass"/><test-case name="7554NISTXML-SV-II-atomic-unsignedInt-minInclusive-5-1 tokoe:invalid" result="pass"/><test-case name="7555NISTXML-SV-II-atomic-unsignedInt-minInclusive-5-2 tokoe:invalid" result="pass"/><test-case name="7556NISTXML-SV-II-atomic-unsignedInt-minInclusive-5-3 tokoe:invalid" result="pass"/><test-case name="7557NISTXML-SV-II-atomic-unsignedInt-minInclusive-5-4 tokoe:invalid" result="pass"/><test-case name="7558NISTXML-SV-II-atomic-unsignedInt-minInclusive-5-5 tokoe:invalid" result="pass"/><test-case name="7559NISTSchema-SV-II-atomic-unsignedInt-minInclusive-6 tokoe:valid" result="pass"/><test-case name="7560NISTXML-SV-II-atomic-unsignedInt-minInclusive-6-1 tokoe:invalid" result="pass"/><test-case name="7561NISTXML-SV-II-atomic-unsignedInt-minInclusive-6-2 tokoe:invalid" result="pass"/><test-case name="7562NISTXML-SV-II-atomic-unsignedInt-minInclusive-6-3 tokoe:invalid" result="pass"/><test-case name="7563NISTXML-SV-II-atomic-unsignedInt-minInclusive-6-4 tokoe:invalid" result="pass"/><test-case name="7564NISTXML-SV-II-atomic-unsignedInt-minInclusive-6-5 tokoe:invalid" result="pass"/><test-case name="7565NISTSchema-SV-II-atomic-unsignedInt-maxInclusive-1 tokoe:valid" result="pass"/><test-case name="7566NISTXML-SV-II-atomic-unsignedInt-maxInclusive-1-1 tokoe:invalid" result="pass"/><test-case name="7567NISTXML-SV-II-atomic-unsignedInt-maxInclusive-1-2 tokoe:invalid" result="pass"/><test-case name="7568NISTXML-SV-II-atomic-unsignedInt-maxInclusive-1-3 tokoe:invalid" result="pass"/><test-case name="7569NISTXML-SV-II-atomic-unsignedInt-maxInclusive-1-4 tokoe:invalid" result="pass"/><test-case name="7570NISTXML-SV-II-atomic-unsignedInt-maxInclusive-1-5 tokoe:invalid" result="pass"/><test-case name="7571NISTSchema-SV-II-atomic-unsignedInt-maxInclusive-2 tokoe:valid" result="pass"/><test-case name="7572NISTXML-SV-II-atomic-unsignedInt-maxInclusive-2-1 tokoe:invalid" result="pass"/><test-case name="7573NISTXML-SV-II-atomic-unsignedInt-maxInclusive-2-2 tokoe:invalid" result="pass"/><test-case name="7574NISTXML-SV-II-atomic-unsignedInt-maxInclusive-2-3 tokoe:invalid" result="pass"/><test-case name="7575NISTXML-SV-II-atomic-unsignedInt-maxInclusive-2-4 tokoe:invalid" result="pass"/><test-case name="7576NISTXML-SV-II-atomic-unsignedInt-maxInclusive-2-5 tokoe:invalid" result="pass"/><test-case name="7577NISTSchema-SV-II-atomic-unsignedInt-maxInclusive-3 tokoe:valid" result="pass"/><test-case name="7578NISTXML-SV-II-atomic-unsignedInt-maxInclusive-3-1 tokoe:invalid" result="pass"/><test-case name="7579NISTXML-SV-II-atomic-unsignedInt-maxInclusive-3-2 tokoe:invalid" result="pass"/><test-case name="7580NISTXML-SV-II-atomic-unsignedInt-maxInclusive-3-3 tokoe:invalid" result="pass"/><test-case name="7581NISTXML-SV-II-atomic-unsignedInt-maxInclusive-3-4 tokoe:invalid" result="pass"/><test-case name="7582NISTXML-SV-II-atomic-unsignedInt-maxInclusive-3-5 tokoe:invalid" result="pass"/><test-case name="7583NISTSchema-SV-II-atomic-unsignedInt-maxInclusive-4 tokoe:valid" result="pass"/><test-case name="7584NISTXML-SV-II-atomic-unsignedInt-maxInclusive-4-1 tokoe:invalid" result="pass"/><test-case name="7585NISTXML-SV-II-atomic-unsignedInt-maxInclusive-4-2 tokoe:invalid" result="pass"/><test-case name="7586NISTXML-SV-II-atomic-unsignedInt-maxInclusive-4-3 tokoe:invalid" result="pass"/><test-case name="7587NISTXML-SV-II-atomic-unsignedInt-maxInclusive-4-4 tokoe:invalid" result="pass"/><test-case name="7588NISTXML-SV-II-atomic-unsignedInt-maxInclusive-4-5 tokoe:invalid" result="pass"/><test-case name="7589NISTSchema-SV-II-atomic-unsignedInt-maxInclusive-5 tokoe:valid" result="pass"/><test-case name="7590NISTXML-SV-II-atomic-unsignedInt-maxInclusive-5-1 tokoe:invalid" result="pass"/><test-case name="7591NISTXML-SV-II-atomic-unsignedInt-maxInclusive-5-2 tokoe:invalid" result="pass"/><test-case name="7592NISTXML-SV-II-atomic-unsignedInt-maxInclusive-5-3 tokoe:invalid" result="pass"/><test-case name="7593NISTXML-SV-II-atomic-unsignedInt-maxInclusive-5-4 tokoe:invalid" result="pass"/><test-case name="7594NISTXML-SV-II-atomic-unsignedInt-maxInclusive-5-5 tokoe:invalid" result="pass"/><test-case name="7595NISTSchema-SV-II-atomic-unsignedInt-totalDigits-1 tokoe:valid" result="pass"/><test-case name="7596NISTXML-SV-II-atomic-unsignedInt-totalDigits-1-1 tokoe:invalid" result="pass"/><test-case name="7597NISTXML-SV-II-atomic-unsignedInt-totalDigits-1-2 tokoe:invalid" result="pass"/><test-case name="7598NISTXML-SV-II-atomic-unsignedInt-totalDigits-1-3 tokoe:invalid" result="pass"/><test-case name="7599NISTXML-SV-II-atomic-unsignedInt-totalDigits-1-4 tokoe:invalid" result="pass"/><test-case name="7600NISTXML-SV-II-atomic-unsignedInt-totalDigits-1-5 tokoe:invalid" result="pass"/><test-case name="7601NISTSchema-SV-II-atomic-unsignedInt-totalDigits-2 tokoe:valid" result="pass"/><test-case name="7602NISTXML-SV-II-atomic-unsignedInt-totalDigits-2-1 tokoe:invalid" result="pass"/><test-case name="7603NISTXML-SV-II-atomic-unsignedInt-totalDigits-2-2 tokoe:invalid" result="pass"/><test-case name="7604NISTXML-SV-II-atomic-unsignedInt-totalDigits-2-3 tokoe:invalid" result="pass"/><test-case name="7605NISTXML-SV-II-atomic-unsignedInt-totalDigits-2-4 tokoe:invalid" result="pass"/><test-case name="7606NISTXML-SV-II-atomic-unsignedInt-totalDigits-2-5 tokoe:invalid" result="pass"/><test-case name="7607NISTSchema-SV-II-atomic-unsignedInt-totalDigits-3 tokoe:valid" result="pass"/><test-case name="7608NISTXML-SV-II-atomic-unsignedInt-totalDigits-3-1 tokoe:invalid" result="pass"/><test-case name="7609NISTXML-SV-II-atomic-unsignedInt-totalDigits-3-2 tokoe:invalid" result="pass"/><test-case name="7610NISTXML-SV-II-atomic-unsignedInt-totalDigits-3-3 tokoe:invalid" result="pass"/><test-case name="7611NISTXML-SV-II-atomic-unsignedInt-totalDigits-3-4 tokoe:invalid" result="pass"/><test-case name="7612NISTXML-SV-II-atomic-unsignedInt-totalDigits-3-5 tokoe:invalid" result="pass"/><test-case name="7613NISTSchema-SV-II-atomic-unsignedInt-totalDigits-4 tokoe:valid" result="pass"/><test-case name="7614NISTXML-SV-II-atomic-unsignedInt-totalDigits-4-1 tokoe:invalid" result="pass"/><test-case name="7615NISTXML-SV-II-atomic-unsignedInt-totalDigits-4-2 tokoe:invalid" result="pass"/><test-case name="7616NISTXML-SV-II-atomic-unsignedInt-totalDigits-4-3 tokoe:invalid" result="pass"/><test-case name="7617NISTXML-SV-II-atomic-unsignedInt-totalDigits-4-4 tokoe:invalid" result="pass"/><test-case name="7618NISTXML-SV-II-atomic-unsignedInt-totalDigits-4-5 tokoe:invalid" result="pass"/><test-case name="7619NISTSchema-SV-II-atomic-unsignedInt-totalDigits-5 tokoe:valid" result="pass"/><test-case name="7620NISTXML-SV-II-atomic-unsignedInt-totalDigits-5-1 tokoe:invalid" result="pass"/><test-case name="7621NISTXML-SV-II-atomic-unsignedInt-totalDigits-5-2 tokoe:invalid" result="pass"/><test-case name="7622NISTXML-SV-II-atomic-unsignedInt-totalDigits-5-3 tokoe:invalid" result="pass"/><test-case name="7623NISTXML-SV-II-atomic-unsignedInt-totalDigits-5-4 tokoe:invalid" result="pass"/><test-case name="7624NISTXML-SV-II-atomic-unsignedInt-totalDigits-5-5 tokoe:invalid" result="pass"/><test-case name="7625NISTSchema-SV-II-atomic-unsignedShort-minInclusive-2 tokoe:valid" result="pass"/><test-case name="7626NISTXML-SV-II-atomic-unsignedShort-minInclusive-2-1 tokoe:invalid" result="pass"/><test-case name="7627NISTXML-SV-II-atomic-unsignedShort-minInclusive-2-2 tokoe:invalid" result="pass"/><test-case name="7628NISTXML-SV-II-atomic-unsignedShort-minInclusive-2-3 tokoe:invalid" result="pass"/><test-case name="7629NISTXML-SV-II-atomic-unsignedShort-minInclusive-2-4 tokoe:invalid" result="pass"/><test-case name="7630NISTXML-SV-II-atomic-unsignedShort-minInclusive-2-5 tokoe:invalid" result="pass"/><test-case name="7631NISTSchema-SV-II-atomic-unsignedShort-minInclusive-3 tokoe:valid" result="pass"/><test-case name="7632NISTXML-SV-II-atomic-unsignedShort-minInclusive-3-1 tokoe:invalid" result="pass"/><test-case name="7633NISTXML-SV-II-atomic-unsignedShort-minInclusive-3-2 tokoe:invalid" result="pass"/><test-case name="7634NISTXML-SV-II-atomic-unsignedShort-minInclusive-3-3 tokoe:invalid" result="pass"/><test-case name="7635NISTXML-SV-II-atomic-unsignedShort-minInclusive-3-4 tokoe:invalid" result="pass"/><test-case name="7636NISTXML-SV-II-atomic-unsignedShort-minInclusive-3-5 tokoe:invalid" result="pass"/><test-case name="7637NISTSchema-SV-II-atomic-unsignedShort-minInclusive-4 tokoe:valid" result="pass"/><test-case name="7638NISTXML-SV-II-atomic-unsignedShort-minInclusive-4-1 tokoe:invalid" result="pass"/><test-case name="7639NISTXML-SV-II-atomic-unsignedShort-minInclusive-4-2 tokoe:invalid" result="pass"/><test-case name="7640NISTXML-SV-II-atomic-unsignedShort-minInclusive-4-3 tokoe:invalid" result="pass"/><test-case name="7641NISTXML-SV-II-atomic-unsignedShort-minInclusive-4-4 tokoe:invalid" result="pass"/><test-case name="7642NISTXML-SV-II-atomic-unsignedShort-minInclusive-4-5 tokoe:invalid" result="pass"/><test-case name="7643NISTSchema-SV-II-atomic-unsignedShort-minInclusive-5 tokoe:valid" result="pass"/><test-case name="7644NISTXML-SV-II-atomic-unsignedShort-minInclusive-5-1 tokoe:invalid" result="pass"/><test-case name="7645NISTXML-SV-II-atomic-unsignedShort-minInclusive-5-2 tokoe:invalid" result="pass"/><test-case name="7646NISTXML-SV-II-atomic-unsignedShort-minInclusive-5-3 tokoe:invalid" result="pass"/><test-case name="7647NISTXML-SV-II-atomic-unsignedShort-minInclusive-5-4 tokoe:invalid" result="pass"/><test-case name="7648NISTXML-SV-II-atomic-unsignedShort-minInclusive-5-5 tokoe:invalid" result="pass"/><test-case name="7649NISTSchema-SV-II-atomic-unsignedShort-minInclusive-6 tokoe:valid" result="pass"/><test-case name="7650NISTXML-SV-II-atomic-unsignedShort-minInclusive-6-1 tokoe:invalid" result="pass"/><test-case name="7651NISTXML-SV-II-atomic-unsignedShort-minInclusive-6-2 tokoe:invalid" result="pass"/><test-case name="7652NISTXML-SV-II-atomic-unsignedShort-minInclusive-6-3 tokoe:invalid" result="pass"/><test-case name="7653NISTXML-SV-II-atomic-unsignedShort-minInclusive-6-4 tokoe:invalid" result="pass"/><test-case name="7654NISTXML-SV-II-atomic-unsignedShort-minInclusive-6-5 tokoe:invalid" result="pass"/><test-case name="7655NISTSchema-SV-II-atomic-unsignedShort-maxInclusive-1 tokoe:valid" result="pass"/><test-case name="7656NISTXML-SV-II-atomic-unsignedShort-maxInclusive-1-1 tokoe:invalid" result="pass"/><test-case name="7657NISTXML-SV-II-atomic-unsignedShort-maxInclusive-1-2 tokoe:invalid" result="pass"/><test-case name="7658NISTXML-SV-II-atomic-unsignedShort-maxInclusive-1-3 tokoe:invalid" result="pass"/><test-case name="7659NISTXML-SV-II-atomic-unsignedShort-maxInclusive-1-4 tokoe:invalid" result="pass"/><test-case name="7660NISTXML-SV-II-atomic-unsignedShort-maxInclusive-1-5 tokoe:invalid" result="pass"/><test-case name="7661NISTSchema-SV-II-atomic-unsignedShort-maxInclusive-2 tokoe:valid" result="pass"/><test-case name="7662NISTXML-SV-II-atomic-unsignedShort-maxInclusive-2-1 tokoe:invalid" result="pass"/><test-case name="7663NISTXML-SV-II-atomic-unsignedShort-maxInclusive-2-2 tokoe:invalid" result="pass"/><test-case name="7664NISTXML-SV-II-atomic-unsignedShort-maxInclusive-2-3 tokoe:invalid" result="pass"/><test-case name="7665NISTXML-SV-II-atomic-unsignedShort-maxInclusive-2-4 tokoe:invalid" result="pass"/><test-case name="7666NISTXML-SV-II-atomic-unsignedShort-maxInclusive-2-5 tokoe:invalid" result="pass"/><test-case name="7667NISTSchema-SV-II-atomic-unsignedShort-maxInclusive-3 tokoe:valid" result="pass"/><test-case name="7668NISTXML-SV-II-atomic-unsignedShort-maxInclusive-3-1 tokoe:invalid" result="pass"/><test-case name="7669NISTXML-SV-II-atomic-unsignedShort-maxInclusive-3-2 tokoe:invalid" result="pass"/><test-case name="7670NISTXML-SV-II-atomic-unsignedShort-maxInclusive-3-3 tokoe:invalid" result="pass"/><test-case name="7671NISTXML-SV-II-atomic-unsignedShort-maxInclusive-3-4 tokoe:invalid" result="pass"/><test-case name="7672NISTXML-SV-II-atomic-unsignedShort-maxInclusive-3-5 tokoe:invalid" result="pass"/><test-case name="7673NISTSchema-SV-II-atomic-unsignedShort-maxInclusive-4 tokoe:valid" result="pass"/><test-case name="7674NISTXML-SV-II-atomic-unsignedShort-maxInclusive-4-1 tokoe:invalid" result="pass"/><test-case name="7675NISTXML-SV-II-atomic-unsignedShort-maxInclusive-4-2 tokoe:invalid" result="pass"/><test-case name="7676NISTXML-SV-II-atomic-unsignedShort-maxInclusive-4-3 tokoe:invalid" result="pass"/><test-case name="7677NISTXML-SV-II-atomic-unsignedShort-maxInclusive-4-4 tokoe:invalid" result="pass"/><test-case name="7678NISTXML-SV-II-atomic-unsignedShort-maxInclusive-4-5 tokoe:invalid" result="pass"/><test-case name="7679NISTSchema-SV-II-atomic-unsignedShort-maxInclusive-5 tokoe:valid" result="pass"/><test-case name="7680NISTXML-SV-II-atomic-unsignedShort-maxInclusive-5-1 tokoe:invalid" result="pass"/><test-case name="7681NISTXML-SV-II-atomic-unsignedShort-maxInclusive-5-2 tokoe:invalid" result="pass"/><test-case name="7682NISTXML-SV-II-atomic-unsignedShort-maxInclusive-5-3 tokoe:invalid" result="pass"/><test-case name="7683NISTXML-SV-II-atomic-unsignedShort-maxInclusive-5-4 tokoe:invalid" result="pass"/><test-case name="7684NISTXML-SV-II-atomic-unsignedShort-maxInclusive-5-5 tokoe:invalid" result="pass"/><test-case name="7685NISTSchema-SV-II-atomic-unsignedShort-totalDigits-1 tokoe:valid" result="pass"/><test-case name="7686NISTXML-SV-II-atomic-unsignedShort-totalDigits-1-1 tokoe:invalid" result="pass"/><test-case name="7687NISTXML-SV-II-atomic-unsignedShort-totalDigits-1-2 tokoe:invalid" result="pass"/><test-case name="7688NISTXML-SV-II-atomic-unsignedShort-totalDigits-1-3 tokoe:invalid" result="pass"/><test-case name="7689NISTXML-SV-II-atomic-unsignedShort-totalDigits-1-4 tokoe:invalid" result="pass"/><test-case name="7690NISTXML-SV-II-atomic-unsignedShort-totalDigits-1-5 tokoe:invalid" result="pass"/><test-case name="7691NISTSchema-SV-II-atomic-unsignedShort-totalDigits-2 tokoe:valid" result="pass"/><test-case name="7692NISTXML-SV-II-atomic-unsignedShort-totalDigits-2-1 tokoe:invalid" result="pass"/><test-case name="7693NISTXML-SV-II-atomic-unsignedShort-totalDigits-2-2 tokoe:invalid" result="pass"/><test-case name="7694NISTXML-SV-II-atomic-unsignedShort-totalDigits-2-3 tokoe:invalid" result="pass"/><test-case name="7695NISTXML-SV-II-atomic-unsignedShort-totalDigits-2-4 tokoe:invalid" result="pass"/><test-case name="7696NISTXML-SV-II-atomic-unsignedShort-totalDigits-2-5 tokoe:invalid" result="pass"/><test-case name="7697NISTSchema-SV-II-atomic-unsignedShort-totalDigits-3 tokoe:valid" result="pass"/><test-case name="7698NISTXML-SV-II-atomic-unsignedShort-totalDigits-3-1 tokoe:invalid" result="pass"/><test-case name="7699NISTXML-SV-II-atomic-unsignedShort-totalDigits-3-2 tokoe:invalid" result="pass"/><test-case name="7700NISTXML-SV-II-atomic-unsignedShort-totalDigits-3-3 tokoe:invalid" result="pass"/><test-case name="7701NISTXML-SV-II-atomic-unsignedShort-totalDigits-3-4 tokoe:invalid" result="pass"/><test-case name="7702NISTXML-SV-II-atomic-unsignedShort-totalDigits-3-5 tokoe:invalid" result="pass"/><test-case name="7703NISTSchema-SV-II-atomic-unsignedShort-totalDigits-4 tokoe:valid" result="pass"/><test-case name="7704NISTXML-SV-II-atomic-unsignedShort-totalDigits-4-1 tokoe:invalid" result="pass"/><test-case name="7705NISTXML-SV-II-atomic-unsignedShort-totalDigits-4-2 tokoe:invalid" result="pass"/><test-case name="7706NISTXML-SV-II-atomic-unsignedShort-totalDigits-4-3 tokoe:invalid" result="pass"/><test-case name="7707NISTXML-SV-II-atomic-unsignedShort-totalDigits-4-4 tokoe:invalid" result="pass"/><test-case name="7708NISTXML-SV-II-atomic-unsignedShort-totalDigits-4-5 tokoe:invalid" result="pass"/><test-case name="7709NISTSchema-SV-II-atomic-unsignedByte-minInclusive-2 tokoe:valid" result="pass"/><test-case name="7710NISTXML-SV-II-atomic-unsignedByte-minInclusive-2-1 tokoe:invalid" result="pass"/><test-case name="7711NISTXML-SV-II-atomic-unsignedByte-minInclusive-2-2 tokoe:invalid" result="pass"/><test-case name="7712NISTXML-SV-II-atomic-unsignedByte-minInclusive-2-3 tokoe:invalid" result="pass"/><test-case name="7713NISTXML-SV-II-atomic-unsignedByte-minInclusive-2-4 tokoe:invalid" result="pass"/><test-case name="7714NISTXML-SV-II-atomic-unsignedByte-minInclusive-2-5 tokoe:invalid" result="pass"/><test-case name="7715NISTSchema-SV-II-atomic-unsignedByte-minInclusive-3 tokoe:valid" result="pass"/><test-case name="7716NISTXML-SV-II-atomic-unsignedByte-minInclusive-3-1 tokoe:invalid" result="pass"/><test-case name="7717NISTXML-SV-II-atomic-unsignedByte-minInclusive-3-2 tokoe:invalid" result="pass"/><test-case name="7718NISTXML-SV-II-atomic-unsignedByte-minInclusive-3-3 tokoe:invalid" result="pass"/><test-case name="7719NISTXML-SV-II-atomic-unsignedByte-minInclusive-3-4 tokoe:invalid" result="pass"/><test-case name="7720NISTXML-SV-II-atomic-unsignedByte-minInclusive-3-5 tokoe:invalid" result="pass"/><test-case name="7721NISTSchema-SV-II-atomic-unsignedByte-minInclusive-4 tokoe:valid" result="pass"/><test-case name="7722NISTXML-SV-II-atomic-unsignedByte-minInclusive-4-1 tokoe:invalid" result="pass"/><test-case name="7723NISTXML-SV-II-atomic-unsignedByte-minInclusive-4-2 tokoe:invalid" result="pass"/><test-case name="7724NISTXML-SV-II-atomic-unsignedByte-minInclusive-4-3 tokoe:invalid" result="pass"/><test-case name="7725NISTXML-SV-II-atomic-unsignedByte-minInclusive-4-4 tokoe:invalid" result="pass"/><test-case name="7726NISTXML-SV-II-atomic-unsignedByte-minInclusive-4-5 tokoe:invalid" result="pass"/><test-case name="7727NISTSchema-SV-II-atomic-unsignedByte-minInclusive-5 tokoe:valid" result="pass"/><test-case name="7728NISTXML-SV-II-atomic-unsignedByte-minInclusive-5-1 tokoe:invalid" result="pass"/><test-case name="7729NISTXML-SV-II-atomic-unsignedByte-minInclusive-5-2 tokoe:invalid" result="pass"/><test-case name="7730NISTXML-SV-II-atomic-unsignedByte-minInclusive-5-3 tokoe:invalid" result="pass"/><test-case name="7731NISTXML-SV-II-atomic-unsignedByte-minInclusive-5-4 tokoe:invalid" result="pass"/><test-case name="7732NISTXML-SV-II-atomic-unsignedByte-minInclusive-5-5 tokoe:invalid" result="pass"/><test-case name="7733NISTSchema-SV-II-atomic-unsignedByte-minInclusive-6 tokoe:valid" result="pass"/><test-case name="7734NISTXML-SV-II-atomic-unsignedByte-minInclusive-6-1 tokoe:invalid" result="pass"/><test-case name="7735NISTXML-SV-II-atomic-unsignedByte-minInclusive-6-2 tokoe:invalid" result="pass"/><test-case name="7736NISTXML-SV-II-atomic-unsignedByte-minInclusive-6-3 tokoe:invalid" result="pass"/><test-case name="7737NISTXML-SV-II-atomic-unsignedByte-minInclusive-6-4 tokoe:invalid" result="pass"/><test-case name="7738NISTXML-SV-II-atomic-unsignedByte-minInclusive-6-5 tokoe:invalid" result="pass"/><test-case name="7739NISTSchema-SV-II-atomic-unsignedByte-maxInclusive-1 tokoe:valid" result="pass"/><test-case name="7740NISTXML-SV-II-atomic-unsignedByte-maxInclusive-1-1 tokoe:invalid" result="pass"/><test-case name="7741NISTXML-SV-II-atomic-unsignedByte-maxInclusive-1-2 tokoe:invalid" result="pass"/><test-case name="7742NISTXML-SV-II-atomic-unsignedByte-maxInclusive-1-3 tokoe:invalid" result="pass"/><test-case name="7743NISTXML-SV-II-atomic-unsignedByte-maxInclusive-1-4 tokoe:invalid" result="pass"/><test-case name="7744NISTXML-SV-II-atomic-unsignedByte-maxInclusive-1-5 tokoe:invalid" result="pass"/><test-case name="7745NISTSchema-SV-II-atomic-unsignedByte-maxInclusive-2 tokoe:valid" result="pass"/><test-case name="7746NISTXML-SV-II-atomic-unsignedByte-maxInclusive-2-1 tokoe:invalid" result="pass"/><test-case name="7747NISTXML-SV-II-atomic-unsignedByte-maxInclusive-2-2 tokoe:invalid" result="pass"/><test-case name="7748NISTXML-SV-II-atomic-unsignedByte-maxInclusive-2-3 tokoe:invalid" result="pass"/><test-case name="7749NISTXML-SV-II-atomic-unsignedByte-maxInclusive-2-4 tokoe:invalid" result="pass"/><test-case name="7750NISTXML-SV-II-atomic-unsignedByte-maxInclusive-2-5 tokoe:invalid" result="pass"/><test-case name="7751NISTSchema-SV-II-atomic-unsignedByte-maxInclusive-3 tokoe:valid" result="pass"/><test-case name="7752NISTXML-SV-II-atomic-unsignedByte-maxInclusive-3-1 tokoe:invalid" result="pass"/><test-case name="7753NISTXML-SV-II-atomic-unsignedByte-maxInclusive-3-2 tokoe:invalid" result="pass"/><test-case name="7754NISTXML-SV-II-atomic-unsignedByte-maxInclusive-3-3 tokoe:invalid" result="pass"/><test-case name="7755NISTXML-SV-II-atomic-unsignedByte-maxInclusive-3-4 tokoe:invalid" result="pass"/><test-case name="7756NISTXML-SV-II-atomic-unsignedByte-maxInclusive-3-5 tokoe:invalid" result="pass"/><test-case name="7757NISTSchema-SV-II-atomic-unsignedByte-maxInclusive-4 tokoe:valid" result="pass"/><test-case name="7758NISTXML-SV-II-atomic-unsignedByte-maxInclusive-4-1 tokoe:invalid" result="pass"/><test-case name="7759NISTXML-SV-II-atomic-unsignedByte-maxInclusive-4-2 tokoe:invalid" result="pass"/><test-case name="7760NISTXML-SV-II-atomic-unsignedByte-maxInclusive-4-3 tokoe:invalid" result="pass"/><test-case name="7761NISTXML-SV-II-atomic-unsignedByte-maxInclusive-4-4 tokoe:invalid" result="pass"/><test-case name="7762NISTXML-SV-II-atomic-unsignedByte-maxInclusive-4-5 tokoe:invalid" result="pass"/><test-case name="7763NISTSchema-SV-II-atomic-unsignedByte-maxInclusive-5 tokoe:valid" result="pass"/><test-case name="7764NISTXML-SV-II-atomic-unsignedByte-maxInclusive-5-1 tokoe:invalid" result="pass"/><test-case name="7765NISTXML-SV-II-atomic-unsignedByte-maxInclusive-5-2 tokoe:invalid" result="pass"/><test-case name="7766NISTXML-SV-II-atomic-unsignedByte-maxInclusive-5-3 tokoe:invalid" result="pass"/><test-case name="7767NISTXML-SV-II-atomic-unsignedByte-maxInclusive-5-4 tokoe:invalid" result="pass"/><test-case name="7768NISTXML-SV-II-atomic-unsignedByte-maxInclusive-5-5 tokoe:invalid" result="pass"/><test-case name="7769NISTSchema-SV-II-atomic-unsignedByte-totalDigits-1 tokoe:valid" result="pass"/><test-case name="7770NISTXML-SV-II-atomic-unsignedByte-totalDigits-1-1 tokoe:invalid" result="pass"/><test-case name="7771NISTXML-SV-II-atomic-unsignedByte-totalDigits-1-2 tokoe:invalid" result="pass"/><test-case name="7772NISTXML-SV-II-atomic-unsignedByte-totalDigits-1-3 tokoe:invalid" result="pass"/><test-case name="7773NISTXML-SV-II-atomic-unsignedByte-totalDigits-1-4 tokoe:invalid" result="pass"/><test-case name="7774NISTXML-SV-II-atomic-unsignedByte-totalDigits-1-5 tokoe:invalid" result="pass"/><test-case name="7775NISTSchema-SV-II-atomic-unsignedByte-totalDigits-2 tokoe:valid" result="pass"/><test-case name="7776NISTXML-SV-II-atomic-unsignedByte-totalDigits-2-1 tokoe:invalid" result="pass"/><test-case name="7777NISTXML-SV-II-atomic-unsignedByte-totalDigits-2-2 tokoe:invalid" result="pass"/><test-case name="7778NISTXML-SV-II-atomic-unsignedByte-totalDigits-2-3 tokoe:invalid" result="pass"/><test-case name="7779NISTXML-SV-II-atomic-unsignedByte-totalDigits-2-4 tokoe:invalid" result="pass"/><test-case name="7780NISTXML-SV-II-atomic-unsignedByte-totalDigits-2-5 tokoe:invalid" result="pass"/><test-case name="7781NISTSchema-SV-II-atomic-positiveInteger-minInclusive-2 tokoe:valid" result="pass"/><test-case name="7782NISTXML-SV-II-atomic-positiveInteger-minInclusive-2-1 tokoe:invalid" result="pass"/><test-case name="7783NISTXML-SV-II-atomic-positiveInteger-minInclusive-2-2 tokoe:invalid" result="pass"/><test-case name="7784NISTXML-SV-II-atomic-positiveInteger-minInclusive-2-3 tokoe:invalid" result="pass"/><test-case name="7785NISTXML-SV-II-atomic-positiveInteger-minInclusive-2-4 tokoe:invalid" result="pass"/><test-case name="7786NISTXML-SV-II-atomic-positiveInteger-minInclusive-2-5 tokoe:invalid" result="pass"/><test-case name="7787NISTSchema-SV-II-atomic-positiveInteger-minInclusive-3 tokoe:valid" result="pass"/><test-case name="7788NISTXML-SV-II-atomic-positiveInteger-minInclusive-3-1 tokoe:invalid" result="pass"/><test-case name="7789NISTXML-SV-II-atomic-positiveInteger-minInclusive-3-2 tokoe:invalid" result="pass"/><test-case name="7790NISTXML-SV-II-atomic-positiveInteger-minInclusive-3-3 tokoe:invalid" result="pass"/><test-case name="7791NISTXML-SV-II-atomic-positiveInteger-minInclusive-3-4 tokoe:invalid" result="pass"/><test-case name="7792NISTXML-SV-II-atomic-positiveInteger-minInclusive-3-5 tokoe:invalid" result="pass"/><test-case name="7793NISTSchema-SV-II-atomic-positiveInteger-minInclusive-4 tokoe:valid" result="pass"/><test-case name="7794NISTXML-SV-II-atomic-positiveInteger-minInclusive-4-1 tokoe:invalid" result="pass"/><test-case name="7795NISTXML-SV-II-atomic-positiveInteger-minInclusive-4-2 tokoe:invalid" result="pass"/><test-case name="7796NISTXML-SV-II-atomic-positiveInteger-minInclusive-4-3 tokoe:invalid" result="pass"/><test-case name="7797NISTXML-SV-II-atomic-positiveInteger-minInclusive-4-4 tokoe:invalid" result="pass"/><test-case name="7798NISTXML-SV-II-atomic-positiveInteger-minInclusive-4-5 tokoe:invalid" result="pass"/><test-case name="7799NISTSchema-SV-II-atomic-positiveInteger-minInclusive-5 tokoe:valid" result="pass"/><test-case name="7800NISTXML-SV-II-atomic-positiveInteger-minInclusive-5-1 tokoe:invalid" result="pass"/><test-case name="7801NISTXML-SV-II-atomic-positiveInteger-minInclusive-5-2 tokoe:invalid" result="pass"/><test-case name="7802NISTXML-SV-II-atomic-positiveInteger-minInclusive-5-3 tokoe:invalid" result="pass"/><test-case name="7803NISTXML-SV-II-atomic-positiveInteger-minInclusive-5-4 tokoe:invalid" result="pass"/><test-case name="7804NISTXML-SV-II-atomic-positiveInteger-minInclusive-5-5 tokoe:invalid" result="pass"/><test-case name="7805NISTSchema-SV-II-atomic-positiveInteger-minInclusive-6 tokoe:valid" result="pass"/><test-case name="7806NISTXML-SV-II-atomic-positiveInteger-minInclusive-6-1 tokoe:invalid" result="pass"/><test-case name="7807NISTXML-SV-II-atomic-positiveInteger-minInclusive-6-2 tokoe:invalid" result="pass"/><test-case name="7808NISTXML-SV-II-atomic-positiveInteger-minInclusive-6-3 tokoe:invalid" result="pass"/><test-case name="7809NISTXML-SV-II-atomic-positiveInteger-minInclusive-6-4 tokoe:invalid" result="pass"/><test-case name="7810NISTXML-SV-II-atomic-positiveInteger-minInclusive-6-5 tokoe:invalid" result="pass"/><test-case name="7811NISTSchema-SV-II-atomic-positiveInteger-maxInclusive-1 tokoe:valid" result="pass"/><test-case name="7812NISTXML-SV-II-atomic-positiveInteger-maxInclusive-1-1 tokoe:invalid" result="pass"/><test-case name="7813NISTXML-SV-II-atomic-positiveInteger-maxInclusive-1-2 tokoe:invalid" result="pass"/><test-case name="7814NISTXML-SV-II-atomic-positiveInteger-maxInclusive-1-3 tokoe:invalid" result="pass"/><test-case name="7815NISTXML-SV-II-atomic-positiveInteger-maxInclusive-1-4 tokoe:invalid" result="pass"/><test-case name="7816NISTXML-SV-II-atomic-positiveInteger-maxInclusive-1-5 tokoe:invalid" result="pass"/><test-case name="7817NISTSchema-SV-II-atomic-positiveInteger-maxInclusive-2 tokoe:valid" result="pass"/><test-case name="7818NISTXML-SV-II-atomic-positiveInteger-maxInclusive-2-1 tokoe:invalid" result="pass"/><test-case name="7819NISTXML-SV-II-atomic-positiveInteger-maxInclusive-2-2 tokoe:invalid" result="pass"/><test-case name="7820NISTXML-SV-II-atomic-positiveInteger-maxInclusive-2-3 tokoe:invalid" result="pass"/><test-case name="7821NISTXML-SV-II-atomic-positiveInteger-maxInclusive-2-4 tokoe:invalid" result="pass"/><test-case name="7822NISTXML-SV-II-atomic-positiveInteger-maxInclusive-2-5 tokoe:invalid" result="pass"/><test-case name="7823NISTSchema-SV-II-atomic-positiveInteger-maxInclusive-3 tokoe:valid" result="pass"/><test-case name="7824NISTXML-SV-II-atomic-positiveInteger-maxInclusive-3-1 tokoe:invalid" result="pass"/><test-case name="7825NISTXML-SV-II-atomic-positiveInteger-maxInclusive-3-2 tokoe:invalid" result="pass"/><test-case name="7826NISTXML-SV-II-atomic-positiveInteger-maxInclusive-3-3 tokoe:invalid" result="pass"/><test-case name="7827NISTXML-SV-II-atomic-positiveInteger-maxInclusive-3-4 tokoe:invalid" result="pass"/><test-case name="7828NISTXML-SV-II-atomic-positiveInteger-maxInclusive-3-5 tokoe:invalid" result="pass"/><test-case name="7829NISTSchema-SV-II-atomic-positiveInteger-maxInclusive-4 tokoe:valid" result="pass"/><test-case name="7830NISTXML-SV-II-atomic-positiveInteger-maxInclusive-4-1 tokoe:invalid" result="pass"/><test-case name="7831NISTXML-SV-II-atomic-positiveInteger-maxInclusive-4-2 tokoe:invalid" result="pass"/><test-case name="7832NISTXML-SV-II-atomic-positiveInteger-maxInclusive-4-3 tokoe:invalid" result="pass"/><test-case name="7833NISTXML-SV-II-atomic-positiveInteger-maxInclusive-4-4 tokoe:invalid" result="pass"/><test-case name="7834NISTXML-SV-II-atomic-positiveInteger-maxInclusive-4-5 tokoe:invalid" result="pass"/><test-case name="7835NISTSchema-SV-II-atomic-positiveInteger-maxInclusive-5 tokoe:valid" result="pass"/><test-case name="7836NISTXML-SV-II-atomic-positiveInteger-maxInclusive-5-1 tokoe:invalid" result="pass"/><test-case name="7837NISTXML-SV-II-atomic-positiveInteger-maxInclusive-5-2 tokoe:invalid" result="pass"/><test-case name="7838NISTXML-SV-II-atomic-positiveInteger-maxInclusive-5-3 tokoe:invalid" result="pass"/><test-case name="7839NISTXML-SV-II-atomic-positiveInteger-maxInclusive-5-4 tokoe:invalid" result="pass"/><test-case name="7840NISTXML-SV-II-atomic-positiveInteger-maxInclusive-5-5 tokoe:invalid" result="pass"/><test-case name="7841NISTSchema-SV-II-atomic-positiveInteger-totalDigits-1 tokoe:valid" result="pass"/><test-case name="7842NISTXML-SV-II-atomic-positiveInteger-totalDigits-1-1 tokoe:invalid" result="pass"/><test-case name="7843NISTXML-SV-II-atomic-positiveInteger-totalDigits-1-2 tokoe:invalid" result="pass"/><test-case name="7844NISTXML-SV-II-atomic-positiveInteger-totalDigits-1-3 tokoe:invalid" result="pass"/><test-case name="7845NISTXML-SV-II-atomic-positiveInteger-totalDigits-1-4 tokoe:invalid" result="pass"/><test-case name="7846NISTXML-SV-II-atomic-positiveInteger-totalDigits-1-5 tokoe:invalid" result="pass"/><test-case name="7847NISTSchema-SV-II-atomic-positiveInteger-totalDigits-2 tokoe:valid" result="pass"/><test-case name="7848NISTXML-SV-II-atomic-positiveInteger-totalDigits-2-1 tokoe:invalid" result="pass"/><test-case name="7849NISTXML-SV-II-atomic-positiveInteger-totalDigits-2-2 tokoe:invalid" result="pass"/><test-case name="7850NISTXML-SV-II-atomic-positiveInteger-totalDigits-2-3 tokoe:invalid" result="pass"/><test-case name="7851NISTXML-SV-II-atomic-positiveInteger-totalDigits-2-4 tokoe:invalid" result="pass"/><test-case name="7852NISTXML-SV-II-atomic-positiveInteger-totalDigits-2-5 tokoe:invalid" result="pass"/><test-case name="7853NISTSchema-SV-II-atomic-positiveInteger-totalDigits-3 tokoe:valid" result="pass"/><test-case name="7854NISTXML-SV-II-atomic-positiveInteger-totalDigits-3-1 tokoe:invalid" result="pass"/><test-case name="7855NISTXML-SV-II-atomic-positiveInteger-totalDigits-3-2 tokoe:invalid" result="pass"/><test-case name="7856NISTXML-SV-II-atomic-positiveInteger-totalDigits-3-3 tokoe:invalid" result="pass"/><test-case name="7857NISTXML-SV-II-atomic-positiveInteger-totalDigits-3-4 tokoe:invalid" result="pass"/><test-case name="7858NISTXML-SV-II-atomic-positiveInteger-totalDigits-3-5 tokoe:invalid" result="pass"/><test-case name="7859NISTSchema-SV-II-atomic-positiveInteger-totalDigits-4 tokoe:valid" result="pass"/><test-case name="7860NISTXML-SV-II-atomic-positiveInteger-totalDigits-4-1 tokoe:invalid" result="pass"/><test-case name="7861NISTXML-SV-II-atomic-positiveInteger-totalDigits-4-2 tokoe:invalid" result="pass"/><test-case name="7862NISTXML-SV-II-atomic-positiveInteger-totalDigits-4-3 tokoe:invalid" result="pass"/><test-case name="7863NISTXML-SV-II-atomic-positiveInteger-totalDigits-4-4 tokoe:invalid" result="pass"/><test-case name="7864NISTXML-SV-II-atomic-positiveInteger-totalDigits-4-5 tokoe:invalid" result="pass"/><test-case name="7865NISTSchema-SV-II-atomic-positiveInteger-totalDigits-5 tokoe:valid" result="pass"/><test-case name="7866NISTXML-SV-II-atomic-positiveInteger-totalDigits-5-1 tokoe:invalid" result="pass"/><test-case name="7867NISTXML-SV-II-atomic-positiveInteger-totalDigits-5-2 tokoe:invalid" result="pass"/><test-case name="7868NISTXML-SV-II-atomic-positiveInteger-totalDigits-5-3 tokoe:invalid" result="pass"/><test-case name="7869NISTXML-SV-II-atomic-positiveInteger-totalDigits-5-4 tokoe:invalid" result="pass"/><test-case name="7870NISTXML-SV-II-atomic-positiveInteger-totalDigits-5-5 tokoe:invalid" result="pass"/><test-case name="7871NISTSchema-SV-II-atomic-duration-minInclusive-2 tokoe:valid" result="pass"/><test-case name="7872NISTXML-SV-II-atomic-duration-minInclusive-2-1 tokoe:invalid" result="pass"/><test-case name="7873NISTXML-SV-II-atomic-duration-minInclusive-2-2 tokoe:invalid" result="pass"/><test-case name="7874NISTXML-SV-II-atomic-duration-minInclusive-2-3 tokoe:invalid" result="pass"/><test-case name="7875NISTXML-SV-II-atomic-duration-minInclusive-2-4 tokoe:invalid" result="pass"/><test-case name="7876NISTXML-SV-II-atomic-duration-minInclusive-2-5 tokoe:invalid" result="pass"/><test-case name="7877NISTSchema-SV-II-atomic-duration-minInclusive-3 tokoe:valid" result="pass"/><test-case name="7878NISTXML-SV-II-atomic-duration-minInclusive-3-1 tokoe:invalid" result="pass"/><test-case name="7879NISTXML-SV-II-atomic-duration-minInclusive-3-2 tokoe:invalid" result="pass"/><test-case name="7880NISTXML-SV-II-atomic-duration-minInclusive-3-3 tokoe:invalid" result="pass"/><test-case name="7881NISTXML-SV-II-atomic-duration-minInclusive-3-4 tokoe:invalid" result="pass"/><test-case name="7882NISTXML-SV-II-atomic-duration-minInclusive-3-5 tokoe:invalid" result="pass"/><test-case name="7883NISTSchema-SV-II-atomic-duration-minInclusive-4 tokoe:valid" result="pass"/><test-case name="7884NISTXML-SV-II-atomic-duration-minInclusive-4-1 tokoe:invalid" result="pass"/><test-case name="7885NISTXML-SV-II-atomic-duration-minInclusive-4-2 tokoe:invalid" result="pass"/><test-case name="7886NISTXML-SV-II-atomic-duration-minInclusive-4-3 tokoe:invalid" result="pass"/><test-case name="7887NISTXML-SV-II-atomic-duration-minInclusive-4-4 tokoe:invalid" result="pass"/><test-case name="7888NISTXML-SV-II-atomic-duration-minInclusive-4-5 tokoe:invalid" result="pass"/><test-case name="7889NISTSchema-SV-II-atomic-duration-minInclusive-5 tokoe:valid" result="pass"/><test-case name="7890NISTXML-SV-II-atomic-duration-minInclusive-5-1 tokoe:invalid" result="pass"/><test-case name="7891NISTXML-SV-II-atomic-duration-minInclusive-5-2 tokoe:invalid" result="pass"/><test-case name="7892NISTXML-SV-II-atomic-duration-minInclusive-5-3 tokoe:invalid" result="pass"/><test-case name="7893NISTXML-SV-II-atomic-duration-minInclusive-5-4 tokoe:invalid" result="pass"/><test-case name="7894NISTXML-SV-II-atomic-duration-minInclusive-5-5 tokoe:invalid" result="pass"/><test-case name="7895NISTSchema-SV-II-atomic-duration-minInclusive-6 tokoe:valid" result="pass"/><test-case name="7896NISTXML-SV-II-atomic-duration-minInclusive-6-1 tokoe:invalid" result="pass"/><test-case name="7897NISTXML-SV-II-atomic-duration-minInclusive-6-2 tokoe:invalid" result="pass"/><test-case name="7898NISTXML-SV-II-atomic-duration-minInclusive-6-3 tokoe:invalid" result="pass"/><test-case name="7899NISTXML-SV-II-atomic-duration-minInclusive-6-4 tokoe:invalid" result="pass"/><test-case name="7900NISTXML-SV-II-atomic-duration-minInclusive-6-5 tokoe:invalid" result="pass"/><test-case name="7901NISTSchema-SV-II-atomic-duration-maxInclusive-1 tokoe:valid" result="pass"/><test-case name="7902NISTXML-SV-II-atomic-duration-maxInclusive-1-1 tokoe:invalid" result="pass"/><test-case name="7903NISTXML-SV-II-atomic-duration-maxInclusive-1-2 tokoe:invalid" result="pass"/><test-case name="7904NISTXML-SV-II-atomic-duration-maxInclusive-1-3 tokoe:invalid" result="pass"/><test-case name="7905NISTXML-SV-II-atomic-duration-maxInclusive-1-4 tokoe:invalid" result="pass"/><test-case name="7906NISTXML-SV-II-atomic-duration-maxInclusive-1-5 tokoe:invalid" result="pass"/><test-case name="7907NISTSchema-SV-II-atomic-duration-maxInclusive-2 tokoe:valid" result="pass"/><test-case name="7908NISTXML-SV-II-atomic-duration-maxInclusive-2-1 tokoe:invalid" result="pass"/><test-case name="7909NISTXML-SV-II-atomic-duration-maxInclusive-2-2 tokoe:invalid" result="pass"/><test-case name="7910NISTXML-SV-II-atomic-duration-maxInclusive-2-3 tokoe:invalid" result="pass"/><test-case name="7911NISTXML-SV-II-atomic-duration-maxInclusive-2-4 tokoe:invalid" result="pass"/><test-case name="7912NISTXML-SV-II-atomic-duration-maxInclusive-2-5 tokoe:invalid" result="pass"/><test-case name="7913NISTSchema-SV-II-atomic-duration-maxInclusive-3 tokoe:valid" result="pass"/><test-case name="7914NISTXML-SV-II-atomic-duration-maxInclusive-3-1 tokoe:invalid" result="pass"/><test-case name="7915NISTXML-SV-II-atomic-duration-maxInclusive-3-2 tokoe:invalid" result="pass"/><test-case name="7916NISTXML-SV-II-atomic-duration-maxInclusive-3-3 tokoe:invalid" result="pass"/><test-case name="7917NISTXML-SV-II-atomic-duration-maxInclusive-3-4 tokoe:invalid" result="pass"/><test-case name="7918NISTXML-SV-II-atomic-duration-maxInclusive-3-5 tokoe:invalid" result="pass"/><test-case name="7919NISTSchema-SV-II-atomic-duration-maxInclusive-4 tokoe:valid" result="pass"/><test-case name="7920NISTXML-SV-II-atomic-duration-maxInclusive-4-1 tokoe:invalid" result="pass"/><test-case name="7921NISTXML-SV-II-atomic-duration-maxInclusive-4-2 tokoe:invalid" result="pass"/><test-case name="7922NISTXML-SV-II-atomic-duration-maxInclusive-4-3 tokoe:invalid" result="pass"/><test-case name="7923NISTXML-SV-II-atomic-duration-maxInclusive-4-4 tokoe:invalid" result="pass"/><test-case name="7924NISTXML-SV-II-atomic-duration-maxInclusive-4-5 tokoe:invalid" result="pass"/><test-case name="7925NISTSchema-SV-II-atomic-duration-maxInclusive-5 tokoe:valid" result="pass"/><test-case name="7926NISTXML-SV-II-atomic-duration-maxInclusive-5-1 tokoe:invalid" result="pass"/><test-case name="7927NISTXML-SV-II-atomic-duration-maxInclusive-5-2 tokoe:invalid" result="pass"/><test-case name="7928NISTXML-SV-II-atomic-duration-maxInclusive-5-3 tokoe:invalid" result="pass"/><test-case name="7929NISTXML-SV-II-atomic-duration-maxInclusive-5-4 tokoe:invalid" result="pass"/><test-case name="7930NISTXML-SV-II-atomic-duration-maxInclusive-5-5 tokoe:invalid" result="pass"/><test-case name="7931NISTSchema-SV-II-atomic-dateTime-minInclusive-2 tokoe:valid" result="pass"/><test-case name="7932NISTXML-SV-II-atomic-dateTime-minInclusive-2-1 tokoe:invalid" result="pass"/><test-case name="7933NISTXML-SV-II-atomic-dateTime-minInclusive-2-2 tokoe:invalid" result="pass"/><test-case name="7934NISTXML-SV-II-atomic-dateTime-minInclusive-2-3 tokoe:invalid" result="pass"/><test-case name="7935NISTXML-SV-II-atomic-dateTime-minInclusive-2-4 tokoe:invalid" result="pass"/><test-case name="7936NISTXML-SV-II-atomic-dateTime-minInclusive-2-5 tokoe:invalid" result="pass"/><test-case name="7937NISTSchema-SV-II-atomic-dateTime-minInclusive-3 tokoe:valid" result="pass"/><test-case name="7938NISTXML-SV-II-atomic-dateTime-minInclusive-3-1 tokoe:invalid" result="pass"/><test-case name="7939NISTXML-SV-II-atomic-dateTime-minInclusive-3-2 tokoe:invalid" result="pass"/><test-case name="7940NISTXML-SV-II-atomic-dateTime-minInclusive-3-3 tokoe:invalid" result="pass"/><test-case name="7941NISTXML-SV-II-atomic-dateTime-minInclusive-3-4 tokoe:invalid" result="pass"/><test-case name="7942NISTXML-SV-II-atomic-dateTime-minInclusive-3-5 tokoe:invalid" result="pass"/><test-case name="7943NISTSchema-SV-II-atomic-dateTime-minInclusive-4 tokoe:valid" result="pass"/><test-case name="7944NISTXML-SV-II-atomic-dateTime-minInclusive-4-1 tokoe:invalid" result="pass"/><test-case name="7945NISTXML-SV-II-atomic-dateTime-minInclusive-4-2 tokoe:invalid" result="pass"/><test-case name="7946NISTXML-SV-II-atomic-dateTime-minInclusive-4-3 tokoe:invalid" result="pass"/><test-case name="7947NISTXML-SV-II-atomic-dateTime-minInclusive-4-4 tokoe:invalid" result="pass"/><test-case name="7948NISTXML-SV-II-atomic-dateTime-minInclusive-4-5 tokoe:invalid" result="pass"/><test-case name="7949NISTSchema-SV-II-atomic-dateTime-minInclusive-5 tokoe:valid" result="pass"/><test-case name="7950NISTXML-SV-II-atomic-dateTime-minInclusive-5-1 tokoe:invalid" result="pass"/><test-case name="7951NISTXML-SV-II-atomic-dateTime-minInclusive-5-2 tokoe:invalid" result="pass"/><test-case name="7952NISTXML-SV-II-atomic-dateTime-minInclusive-5-3 tokoe:invalid" result="pass"/><test-case name="7953NISTXML-SV-II-atomic-dateTime-minInclusive-5-4 tokoe:invalid" result="pass"/><test-case name="7954NISTXML-SV-II-atomic-dateTime-minInclusive-5-5 tokoe:invalid" result="pass"/><test-case name="7955NISTSchema-SV-II-atomic-dateTime-minInclusive-6 tokoe:valid" result="pass"/><test-case name="7956NISTXML-SV-II-atomic-dateTime-minInclusive-6-1 tokoe:invalid" result="pass"/><test-case name="7957NISTXML-SV-II-atomic-dateTime-minInclusive-6-2 tokoe:invalid" result="pass"/><test-case name="7958NISTXML-SV-II-atomic-dateTime-minInclusive-6-3 tokoe:invalid" result="pass"/><test-case name="7959NISTXML-SV-II-atomic-dateTime-minInclusive-6-4 tokoe:invalid" result="pass"/><test-case name="7960NISTXML-SV-II-atomic-dateTime-minInclusive-6-5 tokoe:invalid" result="pass"/><test-case name="7961NISTSchema-SV-II-atomic-dateTime-maxInclusive-1 tokoe:valid" result="pass"/><test-case name="7962NISTXML-SV-II-atomic-dateTime-maxInclusive-1-1 tokoe:invalid" result="pass"/><test-case name="7963NISTXML-SV-II-atomic-dateTime-maxInclusive-1-2 tokoe:invalid" result="pass"/><test-case name="7964NISTXML-SV-II-atomic-dateTime-maxInclusive-1-3 tokoe:invalid" result="pass"/><test-case name="7965NISTXML-SV-II-atomic-dateTime-maxInclusive-1-4 tokoe:invalid" result="pass"/><test-case name="7966NISTXML-SV-II-atomic-dateTime-maxInclusive-1-5 tokoe:invalid" result="pass"/><test-case name="7967NISTSchema-SV-II-atomic-dateTime-maxInclusive-2 tokoe:valid" result="pass"/><test-case name="7968NISTXML-SV-II-atomic-dateTime-maxInclusive-2-1 tokoe:invalid" result="pass"/><test-case name="7969NISTXML-SV-II-atomic-dateTime-maxInclusive-2-2 tokoe:invalid" result="pass"/><test-case name="7970NISTXML-SV-II-atomic-dateTime-maxInclusive-2-3 tokoe:invalid" result="pass"/><test-case name="7971NISTXML-SV-II-atomic-dateTime-maxInclusive-2-4 tokoe:invalid" result="pass"/><test-case name="7972NISTXML-SV-II-atomic-dateTime-maxInclusive-2-5 tokoe:invalid" result="pass"/><test-case name="7973NISTSchema-SV-II-atomic-dateTime-maxInclusive-3 tokoe:valid" result="pass"/><test-case name="7974NISTXML-SV-II-atomic-dateTime-maxInclusive-3-1 tokoe:invalid" result="pass"/><test-case name="7975NISTXML-SV-II-atomic-dateTime-maxInclusive-3-2 tokoe:invalid" result="pass"/><test-case name="7976NISTXML-SV-II-atomic-dateTime-maxInclusive-3-3 tokoe:invalid" result="pass"/><test-case name="7977NISTXML-SV-II-atomic-dateTime-maxInclusive-3-4 tokoe:invalid" result="pass"/><test-case name="7978NISTXML-SV-II-atomic-dateTime-maxInclusive-3-5 tokoe:invalid" result="pass"/><test-case name="7979NISTSchema-SV-II-atomic-dateTime-maxInclusive-4 tokoe:valid" result="pass"/><test-case name="7980NISTXML-SV-II-atomic-dateTime-maxInclusive-4-1 tokoe:invalid" result="pass"/><test-case name="7981NISTXML-SV-II-atomic-dateTime-maxInclusive-4-2 tokoe:invalid" result="pass"/><test-case name="7982NISTXML-SV-II-atomic-dateTime-maxInclusive-4-3 tokoe:invalid" result="pass"/><test-case name="7983NISTXML-SV-II-atomic-dateTime-maxInclusive-4-4 tokoe:invalid" result="pass"/><test-case name="7984NISTXML-SV-II-atomic-dateTime-maxInclusive-4-5 tokoe:invalid" result="pass"/><test-case name="7985NISTSchema-SV-II-atomic-dateTime-maxInclusive-5 tokoe:valid" result="pass"/><test-case name="7986NISTXML-SV-II-atomic-dateTime-maxInclusive-5-1 tokoe:invalid" result="pass"/><test-case name="7987NISTXML-SV-II-atomic-dateTime-maxInclusive-5-2 tokoe:invalid" result="pass"/><test-case name="7988NISTXML-SV-II-atomic-dateTime-maxInclusive-5-3 tokoe:invalid" result="pass"/><test-case name="7989NISTXML-SV-II-atomic-dateTime-maxInclusive-5-4 tokoe:invalid" result="pass"/><test-case name="7990NISTXML-SV-II-atomic-dateTime-maxInclusive-5-5 tokoe:invalid" result="pass"/><test-case name="7991NISTSchema-SV-II-atomic-time-minInclusive-2 tokoe:valid" result="pass"/><test-case name="7992NISTXML-SV-II-atomic-time-minInclusive-2-1 tokoe:invalid" result="pass"/><test-case name="7993NISTXML-SV-II-atomic-time-minInclusive-2-2 tokoe:invalid" result="pass"/><test-case name="7994NISTXML-SV-II-atomic-time-minInclusive-2-3 tokoe:invalid" result="pass"/><test-case name="7995NISTXML-SV-II-atomic-time-minInclusive-2-4 tokoe:invalid" result="pass"/><test-case name="7996NISTXML-SV-II-atomic-time-minInclusive-2-5 tokoe:invalid" result="pass"/><test-case name="7997NISTSchema-SV-II-atomic-time-minInclusive-3 tokoe:valid" result="pass"/><test-case name="7998NISTXML-SV-II-atomic-time-minInclusive-3-1 tokoe:invalid" result="pass"/><test-case name="7999NISTXML-SV-II-atomic-time-minInclusive-3-2 tokoe:invalid" result="pass"/><test-case name="8000NISTXML-SV-II-atomic-time-minInclusive-3-3 tokoe:invalid" result="pass"/><test-case name="8001NISTXML-SV-II-atomic-time-minInclusive-3-4 tokoe:invalid" result="pass"/><test-case name="8002NISTXML-SV-II-atomic-time-minInclusive-3-5 tokoe:invalid" result="pass"/><test-case name="8003NISTSchema-SV-II-atomic-time-minInclusive-4 tokoe:valid" result="pass"/><test-case name="8004NISTXML-SV-II-atomic-time-minInclusive-4-1 tokoe:invalid" result="pass"/><test-case name="8005NISTXML-SV-II-atomic-time-minInclusive-4-2 tokoe:invalid" result="pass"/><test-case name="8006NISTXML-SV-II-atomic-time-minInclusive-4-3 tokoe:invalid" result="pass"/><test-case name="8007NISTXML-SV-II-atomic-time-minInclusive-4-4 tokoe:invalid" result="pass"/><test-case name="8008NISTXML-SV-II-atomic-time-minInclusive-4-5 tokoe:invalid" result="pass"/><test-case name="8009NISTSchema-SV-II-atomic-time-minInclusive-5 tokoe:valid" result="pass"/><test-case name="8010NISTXML-SV-II-atomic-time-minInclusive-5-1 tokoe:invalid" result="pass"/><test-case name="8011NISTXML-SV-II-atomic-time-minInclusive-5-2 tokoe:invalid" result="pass"/><test-case name="8012NISTXML-SV-II-atomic-time-minInclusive-5-3 tokoe:invalid" result="pass"/><test-case name="8013NISTXML-SV-II-atomic-time-minInclusive-5-4 tokoe:invalid" result="pass"/><test-case name="8014NISTXML-SV-II-atomic-time-minInclusive-5-5 tokoe:invalid" result="pass"/><test-case name="8015NISTSchema-SV-II-atomic-time-minInclusive-6 tokoe:valid" result="pass"/><test-case name="8016NISTXML-SV-II-atomic-time-minInclusive-6-1 tokoe:invalid" result="pass"/><test-case name="8017NISTXML-SV-II-atomic-time-minInclusive-6-2 tokoe:invalid" result="pass"/><test-case name="8018NISTXML-SV-II-atomic-time-minInclusive-6-3 tokoe:invalid" result="pass"/><test-case name="8019NISTXML-SV-II-atomic-time-minInclusive-6-4 tokoe:invalid" result="pass"/><test-case name="8020NISTXML-SV-II-atomic-time-minInclusive-6-5 tokoe:invalid" result="pass"/><test-case name="8021NISTSchema-SV-II-atomic-time-maxInclusive-1 tokoe:valid" result="pass"/><test-case name="8022NISTXML-SV-II-atomic-time-maxInclusive-1-1 tokoe:invalid" result="pass"/><test-case name="8023NISTXML-SV-II-atomic-time-maxInclusive-1-2 tokoe:invalid" result="pass"/><test-case name="8024NISTXML-SV-II-atomic-time-maxInclusive-1-3 tokoe:invalid" result="pass"/><test-case name="8025NISTXML-SV-II-atomic-time-maxInclusive-1-4 tokoe:invalid" result="pass"/><test-case name="8026NISTXML-SV-II-atomic-time-maxInclusive-1-5 tokoe:invalid" result="pass"/><test-case name="8027NISTSchema-SV-II-atomic-time-maxInclusive-2 tokoe:valid" result="pass"/><test-case name="8028NISTXML-SV-II-atomic-time-maxInclusive-2-1 tokoe:invalid" result="pass"/><test-case name="8029NISTXML-SV-II-atomic-time-maxInclusive-2-2 tokoe:invalid" result="pass"/><test-case name="8030NISTXML-SV-II-atomic-time-maxInclusive-2-3 tokoe:invalid" result="pass"/><test-case name="8031NISTXML-SV-II-atomic-time-maxInclusive-2-4 tokoe:invalid" result="pass"/><test-case name="8032NISTXML-SV-II-atomic-time-maxInclusive-2-5 tokoe:invalid" result="pass"/><test-case name="8033NISTSchema-SV-II-atomic-time-maxInclusive-3 tokoe:valid" result="pass"/><test-case name="8034NISTXML-SV-II-atomic-time-maxInclusive-3-1 tokoe:invalid" result="pass"/><test-case name="8035NISTXML-SV-II-atomic-time-maxInclusive-3-2 tokoe:invalid" result="pass"/><test-case name="8036NISTXML-SV-II-atomic-time-maxInclusive-3-3 tokoe:invalid" result="pass"/><test-case name="8037NISTXML-SV-II-atomic-time-maxInclusive-3-4 tokoe:invalid" result="pass"/><test-case name="8038NISTXML-SV-II-atomic-time-maxInclusive-3-5 tokoe:invalid" result="pass"/><test-case name="8039NISTSchema-SV-II-atomic-time-maxInclusive-4 tokoe:valid" result="pass"/><test-case name="8040NISTXML-SV-II-atomic-time-maxInclusive-4-1 tokoe:invalid" result="pass"/><test-case name="8041NISTXML-SV-II-atomic-time-maxInclusive-4-2 tokoe:invalid" result="pass"/><test-case name="8042NISTXML-SV-II-atomic-time-maxInclusive-4-3 tokoe:invalid" result="pass"/><test-case name="8043NISTXML-SV-II-atomic-time-maxInclusive-4-4 tokoe:invalid" result="pass"/><test-case name="8044NISTXML-SV-II-atomic-time-maxInclusive-4-5 tokoe:invalid" result="pass"/><test-case name="8045NISTSchema-SV-II-atomic-time-maxInclusive-5 tokoe:valid" result="pass"/><test-case name="8046NISTXML-SV-II-atomic-time-maxInclusive-5-1 tokoe:invalid" result="pass"/><test-case name="8047NISTXML-SV-II-atomic-time-maxInclusive-5-2 tokoe:invalid" result="pass"/><test-case name="8048NISTXML-SV-II-atomic-time-maxInclusive-5-3 tokoe:invalid" result="pass"/><test-case name="8049NISTXML-SV-II-atomic-time-maxInclusive-5-4 tokoe:invalid" result="pass"/><test-case name="8050NISTXML-SV-II-atomic-time-maxInclusive-5-5 tokoe:invalid" result="pass"/><test-case name="8051NISTSchema-SV-II-atomic-date-minInclusive-2 tokoe:valid" result="pass"/><test-case name="8052NISTXML-SV-II-atomic-date-minInclusive-2-1 tokoe:invalid" result="pass"/><test-case name="8053NISTXML-SV-II-atomic-date-minInclusive-2-2 tokoe:invalid" result="pass"/><test-case name="8054NISTXML-SV-II-atomic-date-minInclusive-2-3 tokoe:invalid" result="pass"/><test-case name="8055NISTXML-SV-II-atomic-date-minInclusive-2-4 tokoe:invalid" result="pass"/><test-case name="8056NISTXML-SV-II-atomic-date-minInclusive-2-5 tokoe:invalid" result="pass"/><test-case name="8057NISTSchema-SV-II-atomic-date-minInclusive-3 tokoe:valid" result="pass"/><test-case name="8058NISTXML-SV-II-atomic-date-minInclusive-3-1 tokoe:invalid" result="pass"/><test-case name="8059NISTXML-SV-II-atomic-date-minInclusive-3-2 tokoe:invalid" result="pass"/><test-case name="8060NISTXML-SV-II-atomic-date-minInclusive-3-3 tokoe:invalid" result="pass"/><test-case name="8061NISTXML-SV-II-atomic-date-minInclusive-3-4 tokoe:invalid" result="pass"/><test-case name="8062NISTXML-SV-II-atomic-date-minInclusive-3-5 tokoe:invalid" result="pass"/><test-case name="8063NISTSchema-SV-II-atomic-date-minInclusive-4 tokoe:valid" result="pass"/><test-case name="8064NISTXML-SV-II-atomic-date-minInclusive-4-1 tokoe:invalid" result="pass"/><test-case name="8065NISTXML-SV-II-atomic-date-minInclusive-4-2 tokoe:invalid" result="pass"/><test-case name="8066NISTXML-SV-II-atomic-date-minInclusive-4-3 tokoe:invalid" result="pass"/><test-case name="8067NISTXML-SV-II-atomic-date-minInclusive-4-4 tokoe:invalid" result="pass"/><test-case name="8068NISTXML-SV-II-atomic-date-minInclusive-4-5 tokoe:invalid" result="pass"/><test-case name="8069NISTSchema-SV-II-atomic-date-minInclusive-5 tokoe:valid" result="pass"/><test-case name="8070NISTXML-SV-II-atomic-date-minInclusive-5-1 tokoe:invalid" result="pass"/><test-case name="8071NISTXML-SV-II-atomic-date-minInclusive-5-2 tokoe:invalid" result="pass"/><test-case name="8072NISTXML-SV-II-atomic-date-minInclusive-5-3 tokoe:invalid" result="pass"/><test-case name="8073NISTXML-SV-II-atomic-date-minInclusive-5-4 tokoe:invalid" result="pass"/><test-case name="8074NISTXML-SV-II-atomic-date-minInclusive-5-5 tokoe:invalid" result="pass"/><test-case name="8075NISTSchema-SV-II-atomic-date-minInclusive-6 tokoe:valid" result="pass"/><test-case name="8076NISTXML-SV-II-atomic-date-minInclusive-6-1 tokoe:invalid" result="pass"/><test-case name="8077NISTXML-SV-II-atomic-date-minInclusive-6-2 tokoe:invalid" result="pass"/><test-case name="8078NISTXML-SV-II-atomic-date-minInclusive-6-3 tokoe:invalid" result="pass"/><test-case name="8079NISTXML-SV-II-atomic-date-minInclusive-6-4 tokoe:invalid" result="pass"/><test-case name="8080NISTXML-SV-II-atomic-date-minInclusive-6-5 tokoe:invalid" result="pass"/><test-case name="8081NISTSchema-SV-II-atomic-date-maxInclusive-1 tokoe:valid" result="pass"/><test-case name="8082NISTXML-SV-II-atomic-date-maxInclusive-1-1 tokoe:invalid" result="pass"/><test-case name="8083NISTXML-SV-II-atomic-date-maxInclusive-1-2 tokoe:invalid" result="pass"/><test-case name="8084NISTXML-SV-II-atomic-date-maxInclusive-1-3 tokoe:invalid" result="pass"/><test-case name="8085NISTXML-SV-II-atomic-date-maxInclusive-1-4 tokoe:invalid" result="pass"/><test-case name="8086NISTXML-SV-II-atomic-date-maxInclusive-1-5 tokoe:invalid" result="pass"/><test-case name="8087NISTSchema-SV-II-atomic-date-maxInclusive-2 tokoe:valid" result="pass"/><test-case name="8088NISTXML-SV-II-atomic-date-maxInclusive-2-1 tokoe:invalid" result="pass"/><test-case name="8089NISTXML-SV-II-atomic-date-maxInclusive-2-2 tokoe:invalid" result="pass"/><test-case name="8090NISTXML-SV-II-atomic-date-maxInclusive-2-3 tokoe:invalid" result="pass"/><test-case name="8091NISTXML-SV-II-atomic-date-maxInclusive-2-4 tokoe:invalid" result="pass"/><test-case name="8092NISTXML-SV-II-atomic-date-maxInclusive-2-5 tokoe:invalid" result="pass"/><test-case name="8093NISTSchema-SV-II-atomic-date-maxInclusive-3 tokoe:valid" result="pass"/><test-case name="8094NISTXML-SV-II-atomic-date-maxInclusive-3-1 tokoe:invalid" result="pass"/><test-case name="8095NISTXML-SV-II-atomic-date-maxInclusive-3-2 tokoe:invalid" result="pass"/><test-case name="8096NISTXML-SV-II-atomic-date-maxInclusive-3-3 tokoe:invalid" result="pass"/><test-case name="8097NISTXML-SV-II-atomic-date-maxInclusive-3-4 tokoe:invalid" result="pass"/><test-case name="8098NISTXML-SV-II-atomic-date-maxInclusive-3-5 tokoe:invalid" result="pass"/><test-case name="8099NISTSchema-SV-II-atomic-date-maxInclusive-4 tokoe:valid" result="pass"/><test-case name="8100NISTXML-SV-II-atomic-date-maxInclusive-4-1 tokoe:invalid" result="pass"/><test-case name="8101NISTXML-SV-II-atomic-date-maxInclusive-4-2 tokoe:invalid" result="pass"/><test-case name="8102NISTXML-SV-II-atomic-date-maxInclusive-4-3 tokoe:invalid" result="pass"/><test-case name="8103NISTXML-SV-II-atomic-date-maxInclusive-4-4 tokoe:invalid" result="pass"/><test-case name="8104NISTXML-SV-II-atomic-date-maxInclusive-4-5 tokoe:invalid" result="pass"/><test-case name="8105NISTSchema-SV-II-atomic-date-maxInclusive-5 tokoe:valid" result="pass"/><test-case name="8106NISTXML-SV-II-atomic-date-maxInclusive-5-1 tokoe:invalid" result="pass"/><test-case name="8107NISTXML-SV-II-atomic-date-maxInclusive-5-2 tokoe:invalid" result="pass"/><test-case name="8108NISTXML-SV-II-atomic-date-maxInclusive-5-3 tokoe:invalid" result="pass"/><test-case name="8109NISTXML-SV-II-atomic-date-maxInclusive-5-4 tokoe:invalid" result="pass"/><test-case name="8110NISTXML-SV-II-atomic-date-maxInclusive-5-5 tokoe:invalid" result="pass"/><test-case name="8111NISTSchema-SV-II-atomic-gYearMonth-minInclusive-2 tokoe:valid" result="pass"/><test-case name="8112NISTXML-SV-II-atomic-gYearMonth-minInclusive-2-1 tokoe:invalid" result="pass"/><test-case name="8113NISTXML-SV-II-atomic-gYearMonth-minInclusive-2-2 tokoe:invalid" result="pass"/><test-case name="8114NISTXML-SV-II-atomic-gYearMonth-minInclusive-2-3 tokoe:invalid" result="pass"/><test-case name="8115NISTXML-SV-II-atomic-gYearMonth-minInclusive-2-4 tokoe:invalid" result="pass"/><test-case name="8116NISTXML-SV-II-atomic-gYearMonth-minInclusive-2-5 tokoe:invalid" result="pass"/><test-case name="8117NISTSchema-SV-II-atomic-gYearMonth-minInclusive-3 tokoe:valid" result="pass"/><test-case name="8118NISTXML-SV-II-atomic-gYearMonth-minInclusive-3-1 tokoe:invalid" result="pass"/><test-case name="8119NISTXML-SV-II-atomic-gYearMonth-minInclusive-3-2 tokoe:invalid" result="pass"/><test-case name="8120NISTXML-SV-II-atomic-gYearMonth-minInclusive-3-3 tokoe:invalid" result="pass"/><test-case name="8121NISTXML-SV-II-atomic-gYearMonth-minInclusive-3-4 tokoe:invalid" result="pass"/><test-case name="8122NISTXML-SV-II-atomic-gYearMonth-minInclusive-3-5 tokoe:invalid" result="pass"/><test-case name="8123NISTSchema-SV-II-atomic-gYearMonth-minInclusive-4 tokoe:valid" result="pass"/><test-case name="8124NISTXML-SV-II-atomic-gYearMonth-minInclusive-4-1 tokoe:invalid" result="pass"/><test-case name="8125NISTXML-SV-II-atomic-gYearMonth-minInclusive-4-2 tokoe:invalid" result="pass"/><test-case name="8126NISTXML-SV-II-atomic-gYearMonth-minInclusive-4-3 tokoe:invalid" result="pass"/><test-case name="8127NISTXML-SV-II-atomic-gYearMonth-minInclusive-4-4 tokoe:invalid" result="pass"/><test-case name="8128NISTXML-SV-II-atomic-gYearMonth-minInclusive-4-5 tokoe:invalid" result="pass"/><test-case name="8129NISTSchema-SV-II-atomic-gYearMonth-minInclusive-5 tokoe:valid" result="pass"/><test-case name="8130NISTXML-SV-II-atomic-gYearMonth-minInclusive-5-1 tokoe:invalid" result="pass"/><test-case name="8131NISTXML-SV-II-atomic-gYearMonth-minInclusive-5-2 tokoe:invalid" result="pass"/><test-case name="8132NISTXML-SV-II-atomic-gYearMonth-minInclusive-5-3 tokoe:invalid" result="pass"/><test-case name="8133NISTXML-SV-II-atomic-gYearMonth-minInclusive-5-4 tokoe:invalid" result="pass"/><test-case name="8134NISTXML-SV-II-atomic-gYearMonth-minInclusive-5-5 tokoe:invalid" result="pass"/><test-case name="8135NISTSchema-SV-II-atomic-gYearMonth-minInclusive-6 tokoe:valid" result="pass"/><test-case name="8136NISTXML-SV-II-atomic-gYearMonth-minInclusive-6-1 tokoe:invalid" result="pass"/><test-case name="8137NISTXML-SV-II-atomic-gYearMonth-minInclusive-6-2 tokoe:invalid" result="pass"/><test-case name="8138NISTXML-SV-II-atomic-gYearMonth-minInclusive-6-3 tokoe:invalid" result="pass"/><test-case name="8139NISTXML-SV-II-atomic-gYearMonth-minInclusive-6-4 tokoe:invalid" result="pass"/><test-case name="8140NISTXML-SV-II-atomic-gYearMonth-minInclusive-6-5 tokoe:invalid" result="pass"/><test-case name="8141NISTSchema-SV-II-atomic-gYearMonth-maxInclusive-1 tokoe:valid" result="pass"/><test-case name="8142NISTXML-SV-II-atomic-gYearMonth-maxInclusive-1-1 tokoe:invalid" result="pass"/><test-case name="8143NISTXML-SV-II-atomic-gYearMonth-maxInclusive-1-2 tokoe:invalid" result="pass"/><test-case name="8144NISTXML-SV-II-atomic-gYearMonth-maxInclusive-1-3 tokoe:invalid" result="pass"/><test-case name="8145NISTXML-SV-II-atomic-gYearMonth-maxInclusive-1-4 tokoe:invalid" result="pass"/><test-case name="8146NISTXML-SV-II-atomic-gYearMonth-maxInclusive-1-5 tokoe:invalid" result="pass"/><test-case name="8147NISTSchema-SV-II-atomic-gYearMonth-maxInclusive-2 tokoe:valid" result="pass"/><test-case name="8148NISTXML-SV-II-atomic-gYearMonth-maxInclusive-2-1 tokoe:invalid" result="pass"/><test-case name="8149NISTXML-SV-II-atomic-gYearMonth-maxInclusive-2-2 tokoe:invalid" result="pass"/><test-case name="8150NISTXML-SV-II-atomic-gYearMonth-maxInclusive-2-3 tokoe:invalid" result="pass"/><test-case name="8151NISTXML-SV-II-atomic-gYearMonth-maxInclusive-2-4 tokoe:invalid" result="pass"/><test-case name="8152NISTXML-SV-II-atomic-gYearMonth-maxInclusive-2-5 tokoe:invalid" result="pass"/><test-case name="8153NISTSchema-SV-II-atomic-gYearMonth-maxInclusive-3 tokoe:valid" result="pass"/><test-case name="8154NISTXML-SV-II-atomic-gYearMonth-maxInclusive-3-1 tokoe:invalid" result="pass"/><test-case name="8155NISTXML-SV-II-atomic-gYearMonth-maxInclusive-3-2 tokoe:invalid" result="pass"/><test-case name="8156NISTXML-SV-II-atomic-gYearMonth-maxInclusive-3-3 tokoe:invalid" result="pass"/><test-case name="8157NISTXML-SV-II-atomic-gYearMonth-maxInclusive-3-4 tokoe:invalid" result="pass"/><test-case name="8158NISTXML-SV-II-atomic-gYearMonth-maxInclusive-3-5 tokoe:invalid" result="pass"/><test-case name="8159NISTSchema-SV-II-atomic-gYearMonth-maxInclusive-4 tokoe:valid" result="pass"/><test-case name="8160NISTXML-SV-II-atomic-gYearMonth-maxInclusive-4-1 tokoe:invalid" result="pass"/><test-case name="8161NISTXML-SV-II-atomic-gYearMonth-maxInclusive-4-2 tokoe:invalid" result="pass"/><test-case name="8162NISTXML-SV-II-atomic-gYearMonth-maxInclusive-4-3 tokoe:invalid" result="pass"/><test-case name="8163NISTXML-SV-II-atomic-gYearMonth-maxInclusive-4-4 tokoe:invalid" result="pass"/><test-case name="8164NISTXML-SV-II-atomic-gYearMonth-maxInclusive-4-5 tokoe:invalid" result="pass"/><test-case name="8165NISTSchema-SV-II-atomic-gYearMonth-maxInclusive-5 tokoe:valid" result="pass"/><test-case name="8166NISTXML-SV-II-atomic-gYearMonth-maxInclusive-5-1 tokoe:invalid" result="pass"/><test-case name="8167NISTXML-SV-II-atomic-gYearMonth-maxInclusive-5-2 tokoe:invalid" result="pass"/><test-case name="8168NISTXML-SV-II-atomic-gYearMonth-maxInclusive-5-3 tokoe:invalid" result="pass"/><test-case name="8169NISTXML-SV-II-atomic-gYearMonth-maxInclusive-5-4 tokoe:invalid" result="pass"/><test-case name="8170NISTXML-SV-II-atomic-gYearMonth-maxInclusive-5-5 tokoe:invalid" result="pass"/><test-case name="8171NISTSchema-SV-II-atomic-gYear-minInclusive-2 tokoe:valid" result="pass"/><test-case name="8172NISTXML-SV-II-atomic-gYear-minInclusive-2-1 tokoe:invalid" result="pass"/><test-case name="8173NISTXML-SV-II-atomic-gYear-minInclusive-2-2 tokoe:invalid" result="pass"/><test-case name="8174NISTXML-SV-II-atomic-gYear-minInclusive-2-3 tokoe:invalid" result="pass"/><test-case name="8175NISTXML-SV-II-atomic-gYear-minInclusive-2-4 tokoe:invalid" result="pass"/><test-case name="8176NISTXML-SV-II-atomic-gYear-minInclusive-2-5 tokoe:invalid" result="pass"/><test-case name="8177NISTSchema-SV-II-atomic-gYear-minInclusive-3 tokoe:valid" result="pass"/><test-case name="8178NISTXML-SV-II-atomic-gYear-minInclusive-3-1 tokoe:invalid" result="pass"/><test-case name="8179NISTXML-SV-II-atomic-gYear-minInclusive-3-2 tokoe:invalid" result="pass"/><test-case name="8180NISTXML-SV-II-atomic-gYear-minInclusive-3-3 tokoe:invalid" result="pass"/><test-case name="8181NISTXML-SV-II-atomic-gYear-minInclusive-3-4 tokoe:invalid" result="pass"/><test-case name="8182NISTXML-SV-II-atomic-gYear-minInclusive-3-5 tokoe:invalid" result="pass"/><test-case name="8183NISTSchema-SV-II-atomic-gYear-minInclusive-4 tokoe:valid" result="pass"/><test-case name="8184NISTXML-SV-II-atomic-gYear-minInclusive-4-1 tokoe:invalid" result="pass"/><test-case name="8185NISTXML-SV-II-atomic-gYear-minInclusive-4-2 tokoe:invalid" result="pass"/><test-case name="8186NISTXML-SV-II-atomic-gYear-minInclusive-4-3 tokoe:invalid" result="pass"/><test-case name="8187NISTXML-SV-II-atomic-gYear-minInclusive-4-4 tokoe:invalid" result="pass"/><test-case name="8188NISTXML-SV-II-atomic-gYear-minInclusive-4-5 tokoe:invalid" result="pass"/><test-case name="8189NISTSchema-SV-II-atomic-gYear-minInclusive-5 tokoe:valid" result="pass"/><test-case name="8190NISTXML-SV-II-atomic-gYear-minInclusive-5-1 tokoe:invalid" result="pass"/><test-case name="8191NISTXML-SV-II-atomic-gYear-minInclusive-5-2 tokoe:invalid" result="pass"/><test-case name="8192NISTXML-SV-II-atomic-gYear-minInclusive-5-3 tokoe:invalid" result="pass"/><test-case name="8193NISTXML-SV-II-atomic-gYear-minInclusive-5-4 tokoe:invalid" result="pass"/><test-case name="8194NISTXML-SV-II-atomic-gYear-minInclusive-5-5 tokoe:invalid" result="pass"/><test-case name="8195NISTSchema-SV-II-atomic-gYear-minInclusive-6 tokoe:valid" result="pass"/><test-case name="8196NISTXML-SV-II-atomic-gYear-minInclusive-6-1 tokoe:invalid" result="pass"/><test-case name="8197NISTXML-SV-II-atomic-gYear-minInclusive-6-2 tokoe:invalid" result="pass"/><test-case name="8198NISTXML-SV-II-atomic-gYear-minInclusive-6-3 tokoe:invalid" result="pass"/><test-case name="8199NISTXML-SV-II-atomic-gYear-minInclusive-6-4 tokoe:invalid" result="pass"/><test-case name="8200NISTXML-SV-II-atomic-gYear-minInclusive-6-5 tokoe:invalid" result="pass"/><test-case name="8201NISTSchema-SV-II-atomic-gYear-maxInclusive-1 tokoe:valid" result="pass"/><test-case name="8202NISTXML-SV-II-atomic-gYear-maxInclusive-1-1 tokoe:invalid" result="pass"/><test-case name="8203NISTXML-SV-II-atomic-gYear-maxInclusive-1-2 tokoe:invalid" result="pass"/><test-case name="8204NISTXML-SV-II-atomic-gYear-maxInclusive-1-3 tokoe:invalid" result="pass"/><test-case name="8205NISTXML-SV-II-atomic-gYear-maxInclusive-1-4 tokoe:invalid" result="pass"/><test-case name="8206NISTXML-SV-II-atomic-gYear-maxInclusive-1-5 tokoe:invalid" result="pass"/><test-case name="8207NISTSchema-SV-II-atomic-gYear-maxInclusive-2 tokoe:valid" result="pass"/><test-case name="8208NISTXML-SV-II-atomic-gYear-maxInclusive-2-1 tokoe:invalid" result="pass"/><test-case name="8209NISTXML-SV-II-atomic-gYear-maxInclusive-2-2 tokoe:invalid" result="pass"/><test-case name="8210NISTXML-SV-II-atomic-gYear-maxInclusive-2-3 tokoe:invalid" result="pass"/><test-case name="8211NISTXML-SV-II-atomic-gYear-maxInclusive-2-4 tokoe:invalid" result="pass"/><test-case name="8212NISTXML-SV-II-atomic-gYear-maxInclusive-2-5 tokoe:invalid" result="pass"/><test-case name="8213NISTSchema-SV-II-atomic-gYear-maxInclusive-3 tokoe:valid" result="pass"/><test-case name="8214NISTXML-SV-II-atomic-gYear-maxInclusive-3-1 tokoe:invalid" result="pass"/><test-case name="8215NISTXML-SV-II-atomic-gYear-maxInclusive-3-2 tokoe:invalid" result="pass"/><test-case name="8216NISTXML-SV-II-atomic-gYear-maxInclusive-3-3 tokoe:invalid" result="pass"/><test-case name="8217NISTXML-SV-II-atomic-gYear-maxInclusive-3-4 tokoe:invalid" result="pass"/><test-case name="8218NISTXML-SV-II-atomic-gYear-maxInclusive-3-5 tokoe:invalid" result="pass"/><test-case name="8219NISTSchema-SV-II-atomic-gYear-maxInclusive-4 tokoe:valid" result="pass"/><test-case name="8220NISTXML-SV-II-atomic-gYear-maxInclusive-4-1 tokoe:invalid" result="pass"/><test-case name="8221NISTXML-SV-II-atomic-gYear-maxInclusive-4-2 tokoe:invalid" result="pass"/><test-case name="8222NISTXML-SV-II-atomic-gYear-maxInclusive-4-3 tokoe:invalid" result="pass"/><test-case name="8223NISTXML-SV-II-atomic-gYear-maxInclusive-4-4 tokoe:invalid" result="pass"/><test-case name="8224NISTXML-SV-II-atomic-gYear-maxInclusive-4-5 tokoe:invalid" result="pass"/><test-case name="8225NISTSchema-SV-II-atomic-gYear-maxInclusive-5 tokoe:valid" result="pass"/><test-case name="8226NISTXML-SV-II-atomic-gYear-maxInclusive-5-1 tokoe:invalid" result="pass"/><test-case name="8227NISTXML-SV-II-atomic-gYear-maxInclusive-5-2 tokoe:invalid" result="pass"/><test-case name="8228NISTXML-SV-II-atomic-gYear-maxInclusive-5-3 tokoe:invalid" result="pass"/><test-case name="8229NISTXML-SV-II-atomic-gYear-maxInclusive-5-4 tokoe:invalid" result="pass"/><test-case name="8230NISTXML-SV-II-atomic-gYear-maxInclusive-5-5 tokoe:invalid" result="pass"/><test-case name="8231NISTSchema-SV-II-atomic-gMonthDay-minInclusive-2 tokoe:valid" result="pass"/><test-case name="8232NISTXML-SV-II-atomic-gMonthDay-minInclusive-2-1 tokoe:invalid" result="pass"/><test-case name="8233NISTXML-SV-II-atomic-gMonthDay-minInclusive-2-2 tokoe:invalid" result="pass"/><test-case name="8234NISTXML-SV-II-atomic-gMonthDay-minInclusive-2-3 tokoe:invalid" result="pass"/><test-case name="8235NISTXML-SV-II-atomic-gMonthDay-minInclusive-2-4 tokoe:invalid" result="pass"/><test-case name="8236NISTXML-SV-II-atomic-gMonthDay-minInclusive-2-5 tokoe:invalid" result="pass"/><test-case name="8237NISTSchema-SV-II-atomic-gMonthDay-minInclusive-3 tokoe:valid" result="pass"/><test-case name="8238NISTXML-SV-II-atomic-gMonthDay-minInclusive-3-1 tokoe:invalid" result="pass"/><test-case name="8239NISTXML-SV-II-atomic-gMonthDay-minInclusive-3-2 tokoe:invalid" result="pass"/><test-case name="8240NISTXML-SV-II-atomic-gMonthDay-minInclusive-3-3 tokoe:invalid" result="pass"/><test-case name="8241NISTXML-SV-II-atomic-gMonthDay-minInclusive-3-4 tokoe:invalid" result="pass"/><test-case name="8242NISTXML-SV-II-atomic-gMonthDay-minInclusive-3-5 tokoe:invalid" result="pass"/><test-case name="8243NISTSchema-SV-II-atomic-gMonthDay-minInclusive-4 tokoe:valid" result="pass"/><test-case name="8244NISTXML-SV-II-atomic-gMonthDay-minInclusive-4-1 tokoe:invalid" result="pass"/><test-case name="8245NISTXML-SV-II-atomic-gMonthDay-minInclusive-4-2 tokoe:invalid" result="pass"/><test-case name="8246NISTXML-SV-II-atomic-gMonthDay-minInclusive-4-3 tokoe:invalid" result="pass"/><test-case name="8247NISTXML-SV-II-atomic-gMonthDay-minInclusive-4-4 tokoe:invalid" result="pass"/><test-case name="8248NISTXML-SV-II-atomic-gMonthDay-minInclusive-4-5 tokoe:invalid" result="pass"/><test-case name="8249NISTSchema-SV-II-atomic-gMonthDay-minInclusive-5 tokoe:valid" result="pass"/><test-case name="8250NISTXML-SV-II-atomic-gMonthDay-minInclusive-5-1 tokoe:invalid" result="pass"/><test-case name="8251NISTXML-SV-II-atomic-gMonthDay-minInclusive-5-2 tokoe:invalid" result="pass"/><test-case name="8252NISTXML-SV-II-atomic-gMonthDay-minInclusive-5-3 tokoe:invalid" result="pass"/><test-case name="8253NISTXML-SV-II-atomic-gMonthDay-minInclusive-5-4 tokoe:invalid" result="pass"/><test-case name="8254NISTXML-SV-II-atomic-gMonthDay-minInclusive-5-5 tokoe:invalid" result="pass"/><test-case name="8255NISTSchema-SV-II-atomic-gMonthDay-minInclusive-6 tokoe:valid" result="pass"/><test-case name="8256NISTXML-SV-II-atomic-gMonthDay-minInclusive-6-1 tokoe:invalid" result="pass"/><test-case name="8257NISTXML-SV-II-atomic-gMonthDay-minInclusive-6-2 tokoe:invalid" result="pass"/><test-case name="8258NISTXML-SV-II-atomic-gMonthDay-minInclusive-6-3 tokoe:invalid" result="pass"/><test-case name="8259NISTXML-SV-II-atomic-gMonthDay-minInclusive-6-4 tokoe:invalid" result="pass"/><test-case name="8260NISTXML-SV-II-atomic-gMonthDay-minInclusive-6-5 tokoe:invalid" result="pass"/><test-case name="8261NISTSchema-SV-II-atomic-gMonthDay-maxInclusive-1 tokoe:valid" result="pass"/><test-case name="8262NISTXML-SV-II-atomic-gMonthDay-maxInclusive-1-1 tokoe:invalid" result="pass"/><test-case name="8263NISTXML-SV-II-atomic-gMonthDay-maxInclusive-1-2 tokoe:invalid" result="pass"/><test-case name="8264NISTXML-SV-II-atomic-gMonthDay-maxInclusive-1-3 tokoe:invalid" result="pass"/><test-case name="8265NISTXML-SV-II-atomic-gMonthDay-maxInclusive-1-4 tokoe:invalid" result="pass"/><test-case name="8266NISTXML-SV-II-atomic-gMonthDay-maxInclusive-1-5 tokoe:invalid" result="pass"/><test-case name="8267NISTSchema-SV-II-atomic-gMonthDay-maxInclusive-2 tokoe:valid" result="pass"/><test-case name="8268NISTXML-SV-II-atomic-gMonthDay-maxInclusive-2-1 tokoe:invalid" result="pass"/><test-case name="8269NISTXML-SV-II-atomic-gMonthDay-maxInclusive-2-2 tokoe:invalid" result="pass"/><test-case name="8270NISTXML-SV-II-atomic-gMonthDay-maxInclusive-2-3 tokoe:invalid" result="pass"/><test-case name="8271NISTXML-SV-II-atomic-gMonthDay-maxInclusive-2-4 tokoe:invalid" result="pass"/><test-case name="8272NISTXML-SV-II-atomic-gMonthDay-maxInclusive-2-5 tokoe:invalid" result="pass"/><test-case name="8273NISTSchema-SV-II-atomic-gMonthDay-maxInclusive-3 tokoe:valid" result="pass"/><test-case name="8274NISTXML-SV-II-atomic-gMonthDay-maxInclusive-3-1 tokoe:invalid" result="pass"/><test-case name="8275NISTXML-SV-II-atomic-gMonthDay-maxInclusive-3-2 tokoe:invalid" result="pass"/><test-case name="8276NISTXML-SV-II-atomic-gMonthDay-maxInclusive-3-3 tokoe:invalid" result="pass"/><test-case name="8277NISTXML-SV-II-atomic-gMonthDay-maxInclusive-3-4 tokoe:invalid" result="pass"/><test-case name="8278NISTXML-SV-II-atomic-gMonthDay-maxInclusive-3-5 tokoe:invalid" result="pass"/><test-case name="8279NISTSchema-SV-II-atomic-gMonthDay-maxInclusive-4 tokoe:valid" result="pass"/><test-case name="8280NISTXML-SV-II-atomic-gMonthDay-maxInclusive-4-1 tokoe:invalid" result="pass"/><test-case name="8281NISTXML-SV-II-atomic-gMonthDay-maxInclusive-4-2 tokoe:invalid" result="pass"/><test-case name="8282NISTXML-SV-II-atomic-gMonthDay-maxInclusive-4-3 tokoe:invalid" result="pass"/><test-case name="8283NISTXML-SV-II-atomic-gMonthDay-maxInclusive-4-4 tokoe:invalid" result="pass"/><test-case name="8284NISTXML-SV-II-atomic-gMonthDay-maxInclusive-4-5 tokoe:invalid" result="pass"/><test-case name="8285NISTSchema-SV-II-atomic-gMonthDay-maxInclusive-5 tokoe:valid" result="pass"/><test-case name="8286NISTXML-SV-II-atomic-gMonthDay-maxInclusive-5-1 tokoe:invalid" result="pass"/><test-case name="8287NISTXML-SV-II-atomic-gMonthDay-maxInclusive-5-2 tokoe:invalid" result="pass"/><test-case name="8288NISTXML-SV-II-atomic-gMonthDay-maxInclusive-5-3 tokoe:invalid" result="pass"/><test-case name="8289NISTXML-SV-II-atomic-gMonthDay-maxInclusive-5-4 tokoe:invalid" result="pass"/><test-case name="8290NISTXML-SV-II-atomic-gMonthDay-maxInclusive-5-5 tokoe:invalid" result="pass"/><test-case name="8291NISTSchema-SV-II-atomic-gDay-minInclusive-3 tokoe:valid" result="pass"/><test-case name="8292NISTXML-SV-II-atomic-gDay-minInclusive-3-1 tokoe:invalid" result="pass"/><test-case name="8293NISTXML-SV-II-atomic-gDay-minInclusive-3-2 tokoe:invalid" result="pass"/><test-case name="8294NISTXML-SV-II-atomic-gDay-minInclusive-3-3 tokoe:invalid" result="pass"/><test-case name="8295NISTXML-SV-II-atomic-gDay-minInclusive-3-4 tokoe:invalid" result="pass"/><test-case name="8296NISTXML-SV-II-atomic-gDay-minInclusive-3-5 tokoe:invalid" result="pass"/><test-case name="8297NISTSchema-SV-II-atomic-gDay-minInclusive-4 tokoe:valid" result="pass"/><test-case name="8298NISTXML-SV-II-atomic-gDay-minInclusive-4-1 tokoe:invalid" result="pass"/><test-case name="8299NISTXML-SV-II-atomic-gDay-minInclusive-4-2 tokoe:invalid" result="pass"/><test-case name="8300NISTXML-SV-II-atomic-gDay-minInclusive-4-3 tokoe:invalid" result="pass"/><test-case name="8301NISTXML-SV-II-atomic-gDay-minInclusive-4-4 tokoe:invalid" result="pass"/><test-case name="8302NISTXML-SV-II-atomic-gDay-minInclusive-4-5 tokoe:invalid" result="pass"/><test-case name="8303NISTSchema-SV-II-atomic-gDay-minInclusive-5 tokoe:valid" result="pass"/><test-case name="8304NISTXML-SV-II-atomic-gDay-minInclusive-5-1 tokoe:invalid" result="pass"/><test-case name="8305NISTXML-SV-II-atomic-gDay-minInclusive-5-2 tokoe:invalid" result="pass"/><test-case name="8306NISTXML-SV-II-atomic-gDay-minInclusive-5-3 tokoe:invalid" result="pass"/><test-case name="8307NISTXML-SV-II-atomic-gDay-minInclusive-5-4 tokoe:invalid" result="pass"/><test-case name="8308NISTXML-SV-II-atomic-gDay-minInclusive-5-5 tokoe:invalid" result="pass"/><test-case name="8309NISTSchema-SV-II-atomic-gDay-minInclusive-6 tokoe:valid" result="pass"/><test-case name="8310NISTXML-SV-II-atomic-gDay-minInclusive-6-1 tokoe:invalid" result="pass"/><test-case name="8311NISTXML-SV-II-atomic-gDay-minInclusive-6-2 tokoe:invalid" result="pass"/><test-case name="8312NISTXML-SV-II-atomic-gDay-minInclusive-6-3 tokoe:invalid" result="pass"/><test-case name="8313NISTXML-SV-II-atomic-gDay-minInclusive-6-4 tokoe:invalid" result="pass"/><test-case name="8314NISTXML-SV-II-atomic-gDay-minInclusive-6-5 tokoe:invalid" result="pass"/><test-case name="8315NISTSchema-SV-II-atomic-gDay-maxInclusive-1 tokoe:valid" result="pass"/><test-case name="8316NISTXML-SV-II-atomic-gDay-maxInclusive-1-1 tokoe:invalid" result="pass"/><test-case name="8317NISTXML-SV-II-atomic-gDay-maxInclusive-1-2 tokoe:invalid" result="pass"/><test-case name="8318NISTXML-SV-II-atomic-gDay-maxInclusive-1-3 tokoe:invalid" result="pass"/><test-case name="8319NISTXML-SV-II-atomic-gDay-maxInclusive-1-4 tokoe:invalid" result="pass"/><test-case name="8320NISTXML-SV-II-atomic-gDay-maxInclusive-1-5 tokoe:invalid" result="pass"/><test-case name="8321NISTSchema-SV-II-atomic-gDay-maxInclusive-2 tokoe:valid" result="pass"/><test-case name="8322NISTXML-SV-II-atomic-gDay-maxInclusive-2-1 tokoe:invalid" result="pass"/><test-case name="8323NISTSchema-SV-II-atomic-gDay-maxInclusive-3 tokoe:valid" result="pass"/><test-case name="8324NISTXML-SV-II-atomic-gDay-maxInclusive-3-1 tokoe:invalid" result="pass"/><test-case name="8325NISTXML-SV-II-atomic-gDay-maxInclusive-3-2 tokoe:invalid" result="pass"/><test-case name="8326NISTXML-SV-II-atomic-gDay-maxInclusive-3-3 tokoe:invalid" result="pass"/><test-case name="8327NISTXML-SV-II-atomic-gDay-maxInclusive-3-4 tokoe:invalid" result="pass"/><test-case name="8328NISTXML-SV-II-atomic-gDay-maxInclusive-3-5 tokoe:invalid" result="pass"/><test-case name="8329NISTSchema-SV-II-atomic-gDay-maxInclusive-4 tokoe:valid" result="pass"/><test-case name="8330NISTXML-SV-II-atomic-gDay-maxInclusive-4-1 tokoe:invalid" result="pass"/><test-case name="8331NISTXML-SV-II-atomic-gDay-maxInclusive-4-2 tokoe:invalid" result="pass"/><test-case name="8332NISTXML-SV-II-atomic-gDay-maxInclusive-4-3 tokoe:invalid" result="pass"/><test-case name="8333NISTXML-SV-II-atomic-gDay-maxInclusive-4-4 tokoe:invalid" result="pass"/><test-case name="8334NISTXML-SV-II-atomic-gDay-maxInclusive-4-5 tokoe:invalid" result="pass"/><test-case name="8335NISTSchema-SV-II-atomic-gDay-maxInclusive-5 tokoe:valid" result="pass"/><test-case name="8336NISTXML-SV-II-atomic-gDay-maxInclusive-5-1 tokoe:invalid" result="pass"/><test-case name="8337NISTXML-SV-II-atomic-gDay-maxInclusive-5-2 tokoe:invalid" result="pass"/><test-case name="8338NISTXML-SV-II-atomic-gDay-maxInclusive-5-3 tokoe:invalid" result="pass"/><test-case name="8339NISTXML-SV-II-atomic-gDay-maxInclusive-5-4 tokoe:invalid" result="pass"/><test-case name="8340NISTXML-SV-II-atomic-gDay-maxInclusive-5-5 tokoe:invalid" result="pass"/><test-case name="8341NISTSchema-SV-II-atomic-gMonth-minInclusive-2 tokoe:valid" result="pass"/><test-case name="8342NISTXML-SV-II-atomic-gMonth-minInclusive-2-1 tokoe:invalid" result="pass"/><test-case name="8343NISTXML-SV-II-atomic-gMonth-minInclusive-2-2 tokoe:invalid" result="pass"/><test-case name="8344NISTXML-SV-II-atomic-gMonth-minInclusive-2-3 tokoe:invalid" result="pass"/><test-case name="8345NISTXML-SV-II-atomic-gMonth-minInclusive-2-4 tokoe:invalid" result="pass"/><test-case name="8346NISTXML-SV-II-atomic-gMonth-minInclusive-2-5 tokoe:invalid" result="pass"/><test-case name="8347NISTSchema-SV-II-atomic-gMonth-minInclusive-3 tokoe:valid" result="pass"/><test-case name="8348NISTXML-SV-II-atomic-gMonth-minInclusive-3-1 tokoe:invalid" result="pass"/><test-case name="8349NISTXML-SV-II-atomic-gMonth-minInclusive-3-2 tokoe:invalid" result="pass"/><test-case name="8350NISTXML-SV-II-atomic-gMonth-minInclusive-3-3 tokoe:invalid" result="pass"/><test-case name="8351NISTXML-SV-II-atomic-gMonth-minInclusive-3-4 tokoe:invalid" result="pass"/><test-case name="8352NISTXML-SV-II-atomic-gMonth-minInclusive-3-5 tokoe:invalid" result="pass"/><test-case name="8353NISTSchema-SV-II-atomic-gMonth-minInclusive-4 tokoe:valid" result="pass"/><test-case name="8354NISTXML-SV-II-atomic-gMonth-minInclusive-4-1 tokoe:invalid" result="pass"/><test-case name="8355NISTXML-SV-II-atomic-gMonth-minInclusive-4-2 tokoe:invalid" result="pass"/><test-case name="8356NISTXML-SV-II-atomic-gMonth-minInclusive-4-3 tokoe:invalid" result="pass"/><test-case name="8357NISTXML-SV-II-atomic-gMonth-minInclusive-4-4 tokoe:invalid" result="pass"/><test-case name="8358NISTXML-SV-II-atomic-gMonth-minInclusive-4-5 tokoe:invalid" result="pass"/><test-case name="8359NISTSchema-SV-II-atomic-gMonth-minInclusive-5 tokoe:valid" result="pass"/><test-case name="8360NISTXML-SV-II-atomic-gMonth-minInclusive-5-1 tokoe:invalid" result="pass"/><test-case name="8361NISTXML-SV-II-atomic-gMonth-minInclusive-5-2 tokoe:invalid" result="pass"/><test-case name="8362NISTXML-SV-II-atomic-gMonth-minInclusive-5-3 tokoe:invalid" result="pass"/><test-case name="8363NISTXML-SV-II-atomic-gMonth-minInclusive-5-4 tokoe:invalid" result="pass"/><test-case name="8364NISTXML-SV-II-atomic-gMonth-minInclusive-5-5 tokoe:invalid" result="pass"/><test-case name="8365NISTSchema-SV-II-atomic-gMonth-minInclusive-6 tokoe:valid" result="pass"/><test-case name="8366NISTXML-SV-II-atomic-gMonth-minInclusive-6-1 tokoe:invalid" result="pass"/><test-case name="8367NISTXML-SV-II-atomic-gMonth-minInclusive-6-2 tokoe:invalid" result="pass"/><test-case name="8368NISTXML-SV-II-atomic-gMonth-minInclusive-6-3 tokoe:invalid" result="pass"/><test-case name="8369NISTXML-SV-II-atomic-gMonth-minInclusive-6-4 tokoe:invalid" result="pass"/><test-case name="8370NISTXML-SV-II-atomic-gMonth-minInclusive-6-5 tokoe:invalid" result="pass"/><test-case name="8371NISTSchema-SV-II-atomic-gMonth-maxInclusive-1 tokoe:valid" result="pass"/><test-case name="8372NISTXML-SV-II-atomic-gMonth-maxInclusive-1-1 tokoe:invalid" result="pass"/><test-case name="8373NISTXML-SV-II-atomic-gMonth-maxInclusive-1-2 tokoe:invalid" result="pass"/><test-case name="8374NISTXML-SV-II-atomic-gMonth-maxInclusive-1-3 tokoe:invalid" result="pass"/><test-case name="8375NISTXML-SV-II-atomic-gMonth-maxInclusive-1-4 tokoe:invalid" result="pass"/><test-case name="8376NISTXML-SV-II-atomic-gMonth-maxInclusive-1-5 tokoe:invalid" result="pass"/><test-case name="8377NISTSchema-SV-II-atomic-gMonth-maxInclusive-2 tokoe:valid" result="pass"/><test-case name="8378NISTXML-SV-II-atomic-gMonth-maxInclusive-2-1 tokoe:invalid" result="pass"/><test-case name="8379NISTXML-SV-II-atomic-gMonth-maxInclusive-2-2 tokoe:invalid" result="pass"/><test-case name="8380NISTXML-SV-II-atomic-gMonth-maxInclusive-2-3 tokoe:invalid" result="pass"/><test-case name="8381NISTXML-SV-II-atomic-gMonth-maxInclusive-2-4 tokoe:invalid" result="pass"/><test-case name="8382NISTXML-SV-II-atomic-gMonth-maxInclusive-2-5 tokoe:invalid" result="pass"/><test-case name="8383NISTSchema-SV-II-atomic-gMonth-maxInclusive-3 tokoe:valid" result="pass"/><test-case name="8384NISTXML-SV-II-atomic-gMonth-maxInclusive-3-1 tokoe:invalid" result="pass"/><test-case name="8385NISTXML-SV-II-atomic-gMonth-maxInclusive-3-2 tokoe:invalid" result="pass"/><test-case name="8386NISTXML-SV-II-atomic-gMonth-maxInclusive-3-3 tokoe:invalid" result="pass"/><test-case name="8387NISTXML-SV-II-atomic-gMonth-maxInclusive-3-4 tokoe:invalid" result="pass"/><test-case name="8388NISTXML-SV-II-atomic-gMonth-maxInclusive-3-5 tokoe:invalid" result="pass"/><test-case name="8389NISTSchema-SV-II-atomic-gMonth-maxInclusive-4 tokoe:valid" result="pass"/><test-case name="8390NISTXML-SV-II-atomic-gMonth-maxInclusive-4-1 tokoe:invalid" result="pass"/><test-case name="8391NISTXML-SV-II-atomic-gMonth-maxInclusive-4-2 tokoe:invalid" result="pass"/><test-case name="8392NISTXML-SV-II-atomic-gMonth-maxInclusive-4-3 tokoe:invalid" result="pass"/><test-case name="8393NISTXML-SV-II-atomic-gMonth-maxInclusive-4-4 tokoe:invalid" result="pass"/><test-case name="8394NISTXML-SV-II-atomic-gMonth-maxInclusive-4-5 tokoe:invalid" result="pass"/><test-case name="8395NISTSchema-SV-II-atomic-gMonth-maxInclusive-5 tokoe:valid" result="pass"/><test-case name="8396NISTXML-SV-II-atomic-gMonth-maxInclusive-5-1 tokoe:invalid" result="pass"/><test-case name="8397NISTXML-SV-II-atomic-gMonth-maxInclusive-5-2 tokoe:invalid" result="pass"/><test-case name="8398NISTXML-SV-II-atomic-gMonth-maxInclusive-5-3 tokoe:invalid" result="pass"/><test-case name="8399NISTXML-SV-II-atomic-gMonth-maxInclusive-5-4 tokoe:invalid" result="pass"/><test-case name="8400NISTXML-SV-II-atomic-gMonth-maxInclusive-5-5 tokoe:invalid" result="pass"/><test-case name="8401NISTSchema-SV-II-atomic-decimal-minExclusive-1 tokoe:valid" result="pass"/><test-case name="8402NISTXML-SV-II-atomic-decimal-minExclusive-1-1 tokoe:invalid" result="pass"/><test-case name="8403NISTSchema-SV-II-atomic-decimal-minExclusive-2 tokoe:valid" result="pass"/><test-case name="8404NISTXML-SV-II-atomic-decimal-minExclusive-2-1 tokoe:invalid" result="pass"/><test-case name="8405NISTXML-SV-II-atomic-decimal-minExclusive-2-2 tokoe:invalid" result="pass"/><test-case name="8406NISTXML-SV-II-atomic-decimal-minExclusive-2-3 tokoe:invalid" result="pass"/><test-case name="8407NISTXML-SV-II-atomic-decimal-minExclusive-2-4 tokoe:invalid" result="pass"/><test-case name="8408NISTXML-SV-II-atomic-decimal-minExclusive-2-5 tokoe:invalid" result="pass"/><test-case name="8409NISTSchema-SV-II-atomic-decimal-minExclusive-3 tokoe:valid" result="pass"/><test-case name="8410NISTXML-SV-II-atomic-decimal-minExclusive-3-1 tokoe:invalid" result="pass"/><test-case name="8411NISTXML-SV-II-atomic-decimal-minExclusive-3-2 tokoe:invalid" result="pass"/><test-case name="8412NISTXML-SV-II-atomic-decimal-minExclusive-3-3 tokoe:invalid" result="pass"/><test-case name="8413NISTXML-SV-II-atomic-decimal-minExclusive-3-4 tokoe:invalid" result="pass"/><test-case name="8414NISTXML-SV-II-atomic-decimal-minExclusive-3-5 tokoe:invalid" result="pass"/><test-case name="8415NISTSchema-SV-II-atomic-decimal-minExclusive-4 tokoe:valid" result="pass"/><test-case name="8416NISTXML-SV-II-atomic-decimal-minExclusive-4-1 tokoe:invalid" result="pass"/><test-case name="8417NISTXML-SV-II-atomic-decimal-minExclusive-4-2 tokoe:invalid" result="pass"/><test-case name="8418NISTXML-SV-II-atomic-decimal-minExclusive-4-3 tokoe:invalid" result="pass"/><test-case name="8419NISTXML-SV-II-atomic-decimal-minExclusive-4-4 tokoe:invalid" result="pass"/><test-case name="8420NISTXML-SV-II-atomic-decimal-minExclusive-4-5 tokoe:invalid" result="pass"/><test-case name="8421NISTSchema-SV-II-atomic-decimal-minExclusive-5 tokoe:valid" result="pass"/><test-case name="8422NISTXML-SV-II-atomic-decimal-minExclusive-5-1 tokoe:invalid" result="pass"/><test-case name="8423NISTXML-SV-II-atomic-decimal-minExclusive-5-2 tokoe:invalid" result="pass"/><test-case name="8424NISTXML-SV-II-atomic-decimal-minExclusive-5-3 tokoe:invalid" result="pass"/><test-case name="8425NISTXML-SV-II-atomic-decimal-minExclusive-5-4 tokoe:invalid" result="pass"/><test-case name="8426NISTXML-SV-II-atomic-decimal-minExclusive-5-5 tokoe:invalid" result="pass"/><test-case name="8427NISTSchema-SV-II-atomic-decimal-maxExclusive-1 tokoe:valid" result="pass"/><test-case name="8428NISTXML-SV-II-atomic-decimal-maxExclusive-1-1 tokoe:invalid" result="pass"/><test-case name="8429NISTXML-SV-II-atomic-decimal-maxExclusive-1-2 tokoe:invalid" result="pass"/><test-case name="8430NISTXML-SV-II-atomic-decimal-maxExclusive-1-3 tokoe:invalid" result="pass"/><test-case name="8431NISTXML-SV-II-atomic-decimal-maxExclusive-1-4 tokoe:invalid" result="pass"/><test-case name="8432NISTXML-SV-II-atomic-decimal-maxExclusive-1-5 tokoe:invalid" result="pass"/><test-case name="8433NISTSchema-SV-II-atomic-decimal-maxExclusive-2 tokoe:valid" result="pass"/><test-case name="8434NISTXML-SV-II-atomic-decimal-maxExclusive-2-1 tokoe:invalid" result="pass"/><test-case name="8435NISTXML-SV-II-atomic-decimal-maxExclusive-2-2 tokoe:invalid" result="pass"/><test-case name="8436NISTXML-SV-II-atomic-decimal-maxExclusive-2-3 tokoe:invalid" result="pass"/><test-case name="8437NISTXML-SV-II-atomic-decimal-maxExclusive-2-4 tokoe:invalid" result="pass"/><test-case name="8438NISTXML-SV-II-atomic-decimal-maxExclusive-2-5 tokoe:invalid" result="pass"/><test-case name="8439NISTSchema-SV-II-atomic-decimal-maxExclusive-3 tokoe:valid" result="pass"/><test-case name="8440NISTXML-SV-II-atomic-decimal-maxExclusive-3-1 tokoe:invalid" result="pass"/><test-case name="8441NISTXML-SV-II-atomic-decimal-maxExclusive-3-2 tokoe:invalid" result="pass"/><test-case name="8442NISTXML-SV-II-atomic-decimal-maxExclusive-3-3 tokoe:invalid" result="pass"/><test-case name="8443NISTXML-SV-II-atomic-decimal-maxExclusive-3-4 tokoe:invalid" result="pass"/><test-case name="8444NISTXML-SV-II-atomic-decimal-maxExclusive-3-5 tokoe:invalid" result="pass"/><test-case name="8445NISTSchema-SV-II-atomic-decimal-maxExclusive-4 tokoe:valid" result="pass"/><test-case name="8446NISTXML-SV-II-atomic-decimal-maxExclusive-4-1 tokoe:invalid" result="pass"/><test-case name="8447NISTXML-SV-II-atomic-decimal-maxExclusive-4-2 tokoe:invalid" result="pass"/><test-case name="8448NISTXML-SV-II-atomic-decimal-maxExclusive-4-3 tokoe:invalid" result="pass"/><test-case name="8449NISTXML-SV-II-atomic-decimal-maxExclusive-4-4 tokoe:invalid" result="pass"/><test-case name="8450NISTXML-SV-II-atomic-decimal-maxExclusive-4-5 tokoe:invalid" result="pass"/><test-case name="8451NISTSchema-SV-II-atomic-decimal-maxExclusive-5 tokoe:valid" result="pass"/><test-case name="8452NISTXML-SV-II-atomic-decimal-maxExclusive-5-1 tokoe:invalid" result="pass"/><test-case name="8453NISTSchema-SV-II-atomic-decimal-pattern-1 tokoe:valid" result="pass"/><test-case name="8454NISTXML-SV-II-atomic-decimal-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="8455NISTXML-SV-II-atomic-decimal-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="8456NISTXML-SV-II-atomic-decimal-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="8457NISTXML-SV-II-atomic-decimal-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="8458NISTXML-SV-II-atomic-decimal-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="8459NISTSchema-SV-II-atomic-decimal-pattern-2 tokoe:valid" result="pass"/><test-case name="8460NISTXML-SV-II-atomic-decimal-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="8461NISTXML-SV-II-atomic-decimal-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="8462NISTXML-SV-II-atomic-decimal-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="8463NISTXML-SV-II-atomic-decimal-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="8464NISTXML-SV-II-atomic-decimal-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="8465NISTSchema-SV-II-atomic-decimal-pattern-3 tokoe:valid" result="pass"/><test-case name="8466NISTXML-SV-II-atomic-decimal-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="8467NISTXML-SV-II-atomic-decimal-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="8468NISTXML-SV-II-atomic-decimal-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="8469NISTXML-SV-II-atomic-decimal-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="8470NISTXML-SV-II-atomic-decimal-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="8471NISTSchema-SV-II-atomic-decimal-pattern-4 tokoe:valid" result="pass"/><test-case name="8472NISTXML-SV-II-atomic-decimal-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="8473NISTXML-SV-II-atomic-decimal-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="8474NISTXML-SV-II-atomic-decimal-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="8475NISTXML-SV-II-atomic-decimal-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="8476NISTXML-SV-II-atomic-decimal-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="8477NISTSchema-SV-II-atomic-decimal-pattern-5 tokoe:valid" result="pass"/><test-case name="8478NISTXML-SV-II-atomic-decimal-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="8479NISTXML-SV-II-atomic-decimal-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="8480NISTXML-SV-II-atomic-decimal-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="8481NISTXML-SV-II-atomic-decimal-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="8482NISTXML-SV-II-atomic-decimal-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="8483NISTSchema-SV-II-atomic-decimal-enumeration-1 tokoe:valid" result="pass"/><test-case name="8484NISTXML-SV-II-atomic-decimal-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="8485NISTXML-SV-II-atomic-decimal-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="8486NISTXML-SV-II-atomic-decimal-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="8487NISTXML-SV-II-atomic-decimal-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="8488NISTXML-SV-II-atomic-decimal-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="8489NISTSchema-SV-II-atomic-decimal-enumeration-2 tokoe:valid" result="pass"/><test-case name="8490NISTXML-SV-II-atomic-decimal-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="8491NISTXML-SV-II-atomic-decimal-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="8492NISTXML-SV-II-atomic-decimal-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="8493NISTXML-SV-II-atomic-decimal-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="8494NISTXML-SV-II-atomic-decimal-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="8495NISTSchema-SV-II-atomic-decimal-enumeration-3 tokoe:valid" result="pass"/><test-case name="8496NISTXML-SV-II-atomic-decimal-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="8497NISTXML-SV-II-atomic-decimal-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="8498NISTXML-SV-II-atomic-decimal-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="8499NISTXML-SV-II-atomic-decimal-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="8500NISTXML-SV-II-atomic-decimal-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="8501NISTSchema-SV-II-atomic-decimal-enumeration-4 tokoe:valid" result="pass"/><test-case name="8502NISTXML-SV-II-atomic-decimal-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="8503NISTXML-SV-II-atomic-decimal-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="8504NISTXML-SV-II-atomic-decimal-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="8505NISTXML-SV-II-atomic-decimal-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="8506NISTXML-SV-II-atomic-decimal-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="8507NISTSchema-SV-II-atomic-decimal-enumeration-5 tokoe:valid" result="pass"/><test-case name="8508NISTXML-SV-II-atomic-decimal-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="8509NISTXML-SV-II-atomic-decimal-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="8510NISTXML-SV-II-atomic-decimal-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="8511NISTXML-SV-II-atomic-decimal-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="8512NISTXML-SV-II-atomic-decimal-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="8513NISTSchema-SV-II-atomic-integer-minExclusive-1 tokoe:valid" result="pass"/><test-case name="8514NISTXML-SV-II-atomic-integer-minExclusive-1-1 tokoe:invalid" result="pass"/><test-case name="8515NISTSchema-SV-II-atomic-integer-minExclusive-2 tokoe:valid" result="pass"/><test-case name="8516NISTXML-SV-II-atomic-integer-minExclusive-2-1 tokoe:invalid" result="pass"/><test-case name="8517NISTXML-SV-II-atomic-integer-minExclusive-2-2 tokoe:invalid" result="pass"/><test-case name="8518NISTXML-SV-II-atomic-integer-minExclusive-2-3 tokoe:invalid" result="pass"/><test-case name="8519NISTXML-SV-II-atomic-integer-minExclusive-2-4 tokoe:invalid" result="pass"/><test-case name="8520NISTXML-SV-II-atomic-integer-minExclusive-2-5 tokoe:invalid" result="pass"/><test-case name="8521NISTSchema-SV-II-atomic-integer-minExclusive-3 tokoe:valid" result="pass"/><test-case name="8522NISTXML-SV-II-atomic-integer-minExclusive-3-1 tokoe:invalid" result="pass"/><test-case name="8523NISTXML-SV-II-atomic-integer-minExclusive-3-2 tokoe:invalid" result="pass"/><test-case name="8524NISTXML-SV-II-atomic-integer-minExclusive-3-3 tokoe:invalid" result="pass"/><test-case name="8525NISTXML-SV-II-atomic-integer-minExclusive-3-4 tokoe:invalid" result="pass"/><test-case name="8526NISTXML-SV-II-atomic-integer-minExclusive-3-5 tokoe:invalid" result="pass"/><test-case name="8527NISTSchema-SV-II-atomic-integer-minExclusive-4 tokoe:valid" result="pass"/><test-case name="8528NISTXML-SV-II-atomic-integer-minExclusive-4-1 tokoe:invalid" result="pass"/><test-case name="8529NISTXML-SV-II-atomic-integer-minExclusive-4-2 tokoe:invalid" result="pass"/><test-case name="8530NISTXML-SV-II-atomic-integer-minExclusive-4-3 tokoe:invalid" result="pass"/><test-case name="8531NISTXML-SV-II-atomic-integer-minExclusive-4-4 tokoe:invalid" result="pass"/><test-case name="8532NISTXML-SV-II-atomic-integer-minExclusive-4-5 tokoe:invalid" result="pass"/><test-case name="8533NISTSchema-SV-II-atomic-integer-minExclusive-5 tokoe:valid" result="pass"/><test-case name="8534NISTXML-SV-II-atomic-integer-minExclusive-5-1 tokoe:invalid" result="pass"/><test-case name="8535NISTXML-SV-II-atomic-integer-minExclusive-5-2 tokoe:invalid" result="pass"/><test-case name="8536NISTXML-SV-II-atomic-integer-minExclusive-5-3 tokoe:invalid" result="pass"/><test-case name="8537NISTXML-SV-II-atomic-integer-minExclusive-5-4 tokoe:invalid" result="pass"/><test-case name="8538NISTXML-SV-II-atomic-integer-minExclusive-5-5 tokoe:invalid" result="pass"/><test-case name="8539NISTSchema-SV-II-atomic-integer-maxExclusive-1 tokoe:valid" result="pass"/><test-case name="8540NISTXML-SV-II-atomic-integer-maxExclusive-1-1 tokoe:invalid" result="pass"/><test-case name="8541NISTXML-SV-II-atomic-integer-maxExclusive-1-2 tokoe:invalid" result="pass"/><test-case name="8542NISTXML-SV-II-atomic-integer-maxExclusive-1-3 tokoe:invalid" result="pass"/><test-case name="8543NISTXML-SV-II-atomic-integer-maxExclusive-1-4 tokoe:invalid" result="pass"/><test-case name="8544NISTXML-SV-II-atomic-integer-maxExclusive-1-5 tokoe:invalid" result="pass"/><test-case name="8545NISTSchema-SV-II-atomic-integer-maxExclusive-2 tokoe:valid" result="pass"/><test-case name="8546NISTXML-SV-II-atomic-integer-maxExclusive-2-1 tokoe:invalid" result="pass"/><test-case name="8547NISTXML-SV-II-atomic-integer-maxExclusive-2-2 tokoe:invalid" result="pass"/><test-case name="8548NISTXML-SV-II-atomic-integer-maxExclusive-2-3 tokoe:invalid" result="pass"/><test-case name="8549NISTXML-SV-II-atomic-integer-maxExclusive-2-4 tokoe:invalid" result="pass"/><test-case name="8550NISTXML-SV-II-atomic-integer-maxExclusive-2-5 tokoe:invalid" result="pass"/><test-case name="8551NISTSchema-SV-II-atomic-integer-maxExclusive-3 tokoe:valid" result="pass"/><test-case name="8552NISTXML-SV-II-atomic-integer-maxExclusive-3-1 tokoe:invalid" result="pass"/><test-case name="8553NISTXML-SV-II-atomic-integer-maxExclusive-3-2 tokoe:invalid" result="pass"/><test-case name="8554NISTXML-SV-II-atomic-integer-maxExclusive-3-3 tokoe:invalid" result="pass"/><test-case name="8555NISTXML-SV-II-atomic-integer-maxExclusive-3-4 tokoe:invalid" result="pass"/><test-case name="8556NISTXML-SV-II-atomic-integer-maxExclusive-3-5 tokoe:invalid" result="pass"/><test-case name="8557NISTSchema-SV-II-atomic-integer-maxExclusive-4 tokoe:valid" result="pass"/><test-case name="8558NISTXML-SV-II-atomic-integer-maxExclusive-4-1 tokoe:invalid" result="pass"/><test-case name="8559NISTXML-SV-II-atomic-integer-maxExclusive-4-2 tokoe:invalid" result="pass"/><test-case name="8560NISTXML-SV-II-atomic-integer-maxExclusive-4-3 tokoe:invalid" result="pass"/><test-case name="8561NISTXML-SV-II-atomic-integer-maxExclusive-4-4 tokoe:invalid" result="pass"/><test-case name="8562NISTXML-SV-II-atomic-integer-maxExclusive-4-5 tokoe:invalid" result="pass"/><test-case name="8563NISTSchema-SV-II-atomic-integer-maxExclusive-5 tokoe:valid" result="pass"/><test-case name="8564NISTXML-SV-II-atomic-integer-maxExclusive-5-1 tokoe:invalid" result="pass"/><test-case name="8565NISTSchema-SV-II-atomic-integer-pattern-1 tokoe:valid" result="pass"/><test-case name="8566NISTXML-SV-II-atomic-integer-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="8567NISTXML-SV-II-atomic-integer-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="8568NISTXML-SV-II-atomic-integer-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="8569NISTXML-SV-II-atomic-integer-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="8570NISTXML-SV-II-atomic-integer-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="8571NISTSchema-SV-II-atomic-integer-pattern-2 tokoe:valid" result="pass"/><test-case name="8572NISTXML-SV-II-atomic-integer-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="8573NISTXML-SV-II-atomic-integer-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="8574NISTXML-SV-II-atomic-integer-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="8575NISTXML-SV-II-atomic-integer-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="8576NISTXML-SV-II-atomic-integer-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="8577NISTSchema-SV-II-atomic-integer-pattern-3 tokoe:valid" result="pass"/><test-case name="8578NISTXML-SV-II-atomic-integer-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="8579NISTXML-SV-II-atomic-integer-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="8580NISTXML-SV-II-atomic-integer-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="8581NISTXML-SV-II-atomic-integer-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="8582NISTXML-SV-II-atomic-integer-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="8583NISTSchema-SV-II-atomic-integer-pattern-4 tokoe:valid" result="pass"/><test-case name="8584NISTXML-SV-II-atomic-integer-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="8585NISTXML-SV-II-atomic-integer-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="8586NISTXML-SV-II-atomic-integer-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="8587NISTXML-SV-II-atomic-integer-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="8588NISTXML-SV-II-atomic-integer-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="8589NISTSchema-SV-II-atomic-integer-pattern-5 tokoe:valid" result="pass"/><test-case name="8590NISTXML-SV-II-atomic-integer-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="8591NISTXML-SV-II-atomic-integer-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="8592NISTXML-SV-II-atomic-integer-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="8593NISTXML-SV-II-atomic-integer-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="8594NISTXML-SV-II-atomic-integer-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="8595NISTSchema-SV-II-atomic-integer-enumeration-1 tokoe:valid" result="pass"/><test-case name="8596NISTXML-SV-II-atomic-integer-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="8597NISTXML-SV-II-atomic-integer-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="8598NISTXML-SV-II-atomic-integer-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="8599NISTXML-SV-II-atomic-integer-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="8600NISTXML-SV-II-atomic-integer-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="8601NISTSchema-SV-II-atomic-integer-enumeration-2 tokoe:valid" result="pass"/><test-case name="8602NISTXML-SV-II-atomic-integer-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="8603NISTXML-SV-II-atomic-integer-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="8604NISTXML-SV-II-atomic-integer-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="8605NISTXML-SV-II-atomic-integer-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="8606NISTXML-SV-II-atomic-integer-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="8607NISTSchema-SV-II-atomic-integer-enumeration-3 tokoe:valid" result="pass"/><test-case name="8608NISTXML-SV-II-atomic-integer-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="8609NISTXML-SV-II-atomic-integer-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="8610NISTXML-SV-II-atomic-integer-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="8611NISTXML-SV-II-atomic-integer-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="8612NISTXML-SV-II-atomic-integer-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="8613NISTSchema-SV-II-atomic-integer-enumeration-4 tokoe:valid" result="pass"/><test-case name="8614NISTXML-SV-II-atomic-integer-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="8615NISTXML-SV-II-atomic-integer-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="8616NISTXML-SV-II-atomic-integer-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="8617NISTXML-SV-II-atomic-integer-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="8618NISTXML-SV-II-atomic-integer-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="8619NISTSchema-SV-II-atomic-integer-enumeration-5 tokoe:valid" result="pass"/><test-case name="8620NISTXML-SV-II-atomic-integer-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="8621NISTXML-SV-II-atomic-integer-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="8622NISTXML-SV-II-atomic-integer-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="8623NISTXML-SV-II-atomic-integer-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="8624NISTXML-SV-II-atomic-integer-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="8625NISTSchema-SV-II-atomic-nonPositiveInteger-minExclusive-1 tokoe:valid" result="pass"/><test-case name="8626NISTXML-SV-II-atomic-nonPositiveInteger-minExclusive-1-1 tokoe:invalid" result="pass"/><test-case name="8627NISTSchema-SV-II-atomic-nonPositiveInteger-minExclusive-2 tokoe:valid" result="pass"/><test-case name="8628NISTXML-SV-II-atomic-nonPositiveInteger-minExclusive-2-1 tokoe:invalid" result="pass"/><test-case name="8629NISTXML-SV-II-atomic-nonPositiveInteger-minExclusive-2-2 tokoe:invalid" result="pass"/><test-case name="8630NISTXML-SV-II-atomic-nonPositiveInteger-minExclusive-2-3 tokoe:invalid" result="pass"/><test-case name="8631NISTXML-SV-II-atomic-nonPositiveInteger-minExclusive-2-4 tokoe:invalid" result="pass"/><test-case name="8632NISTXML-SV-II-atomic-nonPositiveInteger-minExclusive-2-5 tokoe:invalid" result="pass"/><test-case name="8633NISTSchema-SV-II-atomic-nonPositiveInteger-minExclusive-3 tokoe:valid" result="pass"/><test-case name="8634NISTXML-SV-II-atomic-nonPositiveInteger-minExclusive-3-1 tokoe:invalid" result="pass"/><test-case name="8635NISTXML-SV-II-atomic-nonPositiveInteger-minExclusive-3-2 tokoe:invalid" result="pass"/><test-case name="8636NISTXML-SV-II-atomic-nonPositiveInteger-minExclusive-3-3 tokoe:invalid" result="pass"/><test-case name="8637NISTXML-SV-II-atomic-nonPositiveInteger-minExclusive-3-4 tokoe:invalid" result="pass"/><test-case name="8638NISTXML-SV-II-atomic-nonPositiveInteger-minExclusive-3-5 tokoe:invalid" result="pass"/><test-case name="8639NISTSchema-SV-II-atomic-nonPositiveInteger-minExclusive-4 tokoe:valid" result="pass"/><test-case name="8640NISTXML-SV-II-atomic-nonPositiveInteger-minExclusive-4-1 tokoe:invalid" result="pass"/><test-case name="8641NISTXML-SV-II-atomic-nonPositiveInteger-minExclusive-4-2 tokoe:invalid" result="pass"/><test-case name="8642NISTXML-SV-II-atomic-nonPositiveInteger-minExclusive-4-3 tokoe:invalid" result="pass"/><test-case name="8643NISTXML-SV-II-atomic-nonPositiveInteger-minExclusive-4-4 tokoe:invalid" result="pass"/><test-case name="8644NISTXML-SV-II-atomic-nonPositiveInteger-minExclusive-4-5 tokoe:invalid" result="pass"/><test-case name="8645NISTSchema-SV-II-atomic-nonPositiveInteger-minExclusive-5 tokoe:valid" result="pass"/><test-case name="8646NISTXML-SV-II-atomic-nonPositiveInteger-minExclusive-5-1 tokoe:invalid" result="pass"/><test-case name="8647NISTXML-SV-II-atomic-nonPositiveInteger-minExclusive-5-2 tokoe:invalid" result="pass"/><test-case name="8648NISTXML-SV-II-atomic-nonPositiveInteger-minExclusive-5-3 tokoe:invalid" result="pass"/><test-case name="8649NISTXML-SV-II-atomic-nonPositiveInteger-minExclusive-5-4 tokoe:invalid" result="pass"/><test-case name="8650NISTXML-SV-II-atomic-nonPositiveInteger-minExclusive-5-5 tokoe:invalid" result="pass"/><test-case name="8651NISTSchema-SV-II-atomic-nonPositiveInteger-maxExclusive-1 tokoe:valid" result="pass"/><test-case name="8652NISTXML-SV-II-atomic-nonPositiveInteger-maxExclusive-1-1 tokoe:invalid" result="pass"/><test-case name="8653NISTXML-SV-II-atomic-nonPositiveInteger-maxExclusive-1-2 tokoe:invalid" result="pass"/><test-case name="8654NISTXML-SV-II-atomic-nonPositiveInteger-maxExclusive-1-3 tokoe:invalid" result="pass"/><test-case name="8655NISTXML-SV-II-atomic-nonPositiveInteger-maxExclusive-1-4 tokoe:invalid" result="pass"/><test-case name="8656NISTXML-SV-II-atomic-nonPositiveInteger-maxExclusive-1-5 tokoe:invalid" result="pass"/><test-case name="8657NISTSchema-SV-II-atomic-nonPositiveInteger-maxExclusive-2 tokoe:valid" result="pass"/><test-case name="8658NISTXML-SV-II-atomic-nonPositiveInteger-maxExclusive-2-1 tokoe:invalid" result="pass"/><test-case name="8659NISTXML-SV-II-atomic-nonPositiveInteger-maxExclusive-2-2 tokoe:invalid" result="pass"/><test-case name="8660NISTXML-SV-II-atomic-nonPositiveInteger-maxExclusive-2-3 tokoe:invalid" result="pass"/><test-case name="8661NISTXML-SV-II-atomic-nonPositiveInteger-maxExclusive-2-4 tokoe:invalid" result="pass"/><test-case name="8662NISTXML-SV-II-atomic-nonPositiveInteger-maxExclusive-2-5 tokoe:invalid" result="pass"/><test-case name="8663NISTSchema-SV-II-atomic-nonPositiveInteger-maxExclusive-3 tokoe:valid" result="pass"/><test-case name="8664NISTXML-SV-II-atomic-nonPositiveInteger-maxExclusive-3-1 tokoe:invalid" result="pass"/><test-case name="8665NISTXML-SV-II-atomic-nonPositiveInteger-maxExclusive-3-2 tokoe:invalid" result="pass"/><test-case name="8666NISTXML-SV-II-atomic-nonPositiveInteger-maxExclusive-3-3 tokoe:invalid" result="pass"/><test-case name="8667NISTXML-SV-II-atomic-nonPositiveInteger-maxExclusive-3-4 tokoe:invalid" result="pass"/><test-case name="8668NISTXML-SV-II-atomic-nonPositiveInteger-maxExclusive-3-5 tokoe:invalid" result="pass"/><test-case name="8669NISTSchema-SV-II-atomic-nonPositiveInteger-maxExclusive-4 tokoe:valid" result="pass"/><test-case name="8670NISTXML-SV-II-atomic-nonPositiveInteger-maxExclusive-4-1 tokoe:invalid" result="pass"/><test-case name="8671NISTXML-SV-II-atomic-nonPositiveInteger-maxExclusive-4-2 tokoe:invalid" result="pass"/><test-case name="8672NISTXML-SV-II-atomic-nonPositiveInteger-maxExclusive-4-3 tokoe:invalid" result="pass"/><test-case name="8673NISTXML-SV-II-atomic-nonPositiveInteger-maxExclusive-4-4 tokoe:invalid" result="pass"/><test-case name="8674NISTXML-SV-II-atomic-nonPositiveInteger-maxExclusive-4-5 tokoe:invalid" result="pass"/><test-case name="8675NISTSchema-SV-II-atomic-nonPositiveInteger-maxExclusive-5 tokoe:valid" result="pass"/><test-case name="8676NISTXML-SV-II-atomic-nonPositiveInteger-maxExclusive-5-1 tokoe:invalid" result="pass"/><test-case name="8677NISTSchema-SV-II-atomic-nonPositiveInteger-pattern-1 tokoe:valid" result="pass"/><test-case name="8678NISTXML-SV-II-atomic-nonPositiveInteger-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="8679NISTXML-SV-II-atomic-nonPositiveInteger-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="8680NISTXML-SV-II-atomic-nonPositiveInteger-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="8681NISTXML-SV-II-atomic-nonPositiveInteger-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="8682NISTXML-SV-II-atomic-nonPositiveInteger-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="8683NISTSchema-SV-II-atomic-nonPositiveInteger-pattern-2 tokoe:valid" result="pass"/><test-case name="8684NISTXML-SV-II-atomic-nonPositiveInteger-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="8685NISTXML-SV-II-atomic-nonPositiveInteger-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="8686NISTXML-SV-II-atomic-nonPositiveInteger-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="8687NISTXML-SV-II-atomic-nonPositiveInteger-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="8688NISTXML-SV-II-atomic-nonPositiveInteger-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="8689NISTSchema-SV-II-atomic-nonPositiveInteger-pattern-3 tokoe:valid" result="pass"/><test-case name="8690NISTXML-SV-II-atomic-nonPositiveInteger-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="8691NISTXML-SV-II-atomic-nonPositiveInteger-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="8692NISTXML-SV-II-atomic-nonPositiveInteger-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="8693NISTXML-SV-II-atomic-nonPositiveInteger-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="8694NISTXML-SV-II-atomic-nonPositiveInteger-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="8695NISTSchema-SV-II-atomic-nonPositiveInteger-pattern-4 tokoe:valid" result="pass"/><test-case name="8696NISTXML-SV-II-atomic-nonPositiveInteger-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="8697NISTXML-SV-II-atomic-nonPositiveInteger-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="8698NISTXML-SV-II-atomic-nonPositiveInteger-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="8699NISTXML-SV-II-atomic-nonPositiveInteger-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="8700NISTXML-SV-II-atomic-nonPositiveInteger-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="8701NISTSchema-SV-II-atomic-nonPositiveInteger-pattern-5 tokoe:valid" result="pass"/><test-case name="8702NISTXML-SV-II-atomic-nonPositiveInteger-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="8703NISTXML-SV-II-atomic-nonPositiveInteger-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="8704NISTXML-SV-II-atomic-nonPositiveInteger-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="8705NISTXML-SV-II-atomic-nonPositiveInteger-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="8706NISTXML-SV-II-atomic-nonPositiveInteger-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="8707NISTSchema-SV-II-atomic-nonPositiveInteger-enumeration-1 tokoe:valid" result="pass"/><test-case name="8708NISTXML-SV-II-atomic-nonPositiveInteger-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="8709NISTXML-SV-II-atomic-nonPositiveInteger-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="8710NISTXML-SV-II-atomic-nonPositiveInteger-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="8711NISTXML-SV-II-atomic-nonPositiveInteger-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="8712NISTXML-SV-II-atomic-nonPositiveInteger-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="8713NISTSchema-SV-II-atomic-nonPositiveInteger-enumeration-2 tokoe:valid" result="pass"/><test-case name="8714NISTXML-SV-II-atomic-nonPositiveInteger-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="8715NISTXML-SV-II-atomic-nonPositiveInteger-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="8716NISTXML-SV-II-atomic-nonPositiveInteger-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="8717NISTXML-SV-II-atomic-nonPositiveInteger-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="8718NISTXML-SV-II-atomic-nonPositiveInteger-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="8719NISTSchema-SV-II-atomic-nonPositiveInteger-enumeration-3 tokoe:valid" result="pass"/><test-case name="8720NISTXML-SV-II-atomic-nonPositiveInteger-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="8721NISTXML-SV-II-atomic-nonPositiveInteger-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="8722NISTXML-SV-II-atomic-nonPositiveInteger-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="8723NISTXML-SV-II-atomic-nonPositiveInteger-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="8724NISTXML-SV-II-atomic-nonPositiveInteger-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="8725NISTSchema-SV-II-atomic-nonPositiveInteger-enumeration-4 tokoe:valid" result="pass"/><test-case name="8726NISTXML-SV-II-atomic-nonPositiveInteger-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="8727NISTXML-SV-II-atomic-nonPositiveInteger-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="8728NISTXML-SV-II-atomic-nonPositiveInteger-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="8729NISTXML-SV-II-atomic-nonPositiveInteger-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="8730NISTXML-SV-II-atomic-nonPositiveInteger-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="8731NISTSchema-SV-II-atomic-nonPositiveInteger-enumeration-5 tokoe:valid" result="pass"/><test-case name="8732NISTXML-SV-II-atomic-nonPositiveInteger-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="8733NISTXML-SV-II-atomic-nonPositiveInteger-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="8734NISTXML-SV-II-atomic-nonPositiveInteger-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="8735NISTXML-SV-II-atomic-nonPositiveInteger-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="8736NISTXML-SV-II-atomic-nonPositiveInteger-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="8737NISTSchema-SV-II-atomic-negativeInteger-minExclusive-1 tokoe:valid" result="pass"/><test-case name="8738NISTXML-SV-II-atomic-negativeInteger-minExclusive-1-1 tokoe:invalid" result="pass"/><test-case name="8739NISTSchema-SV-II-atomic-negativeInteger-minExclusive-2 tokoe:valid" result="pass"/><test-case name="8740NISTXML-SV-II-atomic-negativeInteger-minExclusive-2-1 tokoe:invalid" result="pass"/><test-case name="8741NISTXML-SV-II-atomic-negativeInteger-minExclusive-2-2 tokoe:invalid" result="pass"/><test-case name="8742NISTXML-SV-II-atomic-negativeInteger-minExclusive-2-3 tokoe:invalid" result="pass"/><test-case name="8743NISTXML-SV-II-atomic-negativeInteger-minExclusive-2-4 tokoe:invalid" result="pass"/><test-case name="8744NISTXML-SV-II-atomic-negativeInteger-minExclusive-2-5 tokoe:invalid" result="pass"/><test-case name="8745NISTSchema-SV-II-atomic-negativeInteger-minExclusive-3 tokoe:valid" result="pass"/><test-case name="8746NISTXML-SV-II-atomic-negativeInteger-minExclusive-3-1 tokoe:invalid" result="pass"/><test-case name="8747NISTXML-SV-II-atomic-negativeInteger-minExclusive-3-2 tokoe:invalid" result="pass"/><test-case name="8748NISTXML-SV-II-atomic-negativeInteger-minExclusive-3-3 tokoe:invalid" result="pass"/><test-case name="8749NISTXML-SV-II-atomic-negativeInteger-minExclusive-3-4 tokoe:invalid" result="pass"/><test-case name="8750NISTXML-SV-II-atomic-negativeInteger-minExclusive-3-5 tokoe:invalid" result="pass"/><test-case name="8751NISTSchema-SV-II-atomic-negativeInteger-minExclusive-4 tokoe:valid" result="pass"/><test-case name="8752NISTXML-SV-II-atomic-negativeInteger-minExclusive-4-1 tokoe:invalid" result="pass"/><test-case name="8753NISTXML-SV-II-atomic-negativeInteger-minExclusive-4-2 tokoe:invalid" result="pass"/><test-case name="8754NISTXML-SV-II-atomic-negativeInteger-minExclusive-4-3 tokoe:invalid" result="pass"/><test-case name="8755NISTXML-SV-II-atomic-negativeInteger-minExclusive-4-4 tokoe:invalid" result="pass"/><test-case name="8756NISTXML-SV-II-atomic-negativeInteger-minExclusive-4-5 tokoe:invalid" result="pass"/><test-case name="8757NISTSchema-SV-II-atomic-negativeInteger-minExclusive-5 tokoe:valid" result="pass"/><test-case name="8758NISTXML-SV-II-atomic-negativeInteger-minExclusive-5-1 tokoe:invalid" result="pass"/><test-case name="8759NISTXML-SV-II-atomic-negativeInteger-minExclusive-5-2 tokoe:invalid" result="pass"/><test-case name="8760NISTXML-SV-II-atomic-negativeInteger-minExclusive-5-3 tokoe:invalid" result="pass"/><test-case name="8761NISTXML-SV-II-atomic-negativeInteger-minExclusive-5-4 tokoe:invalid" result="pass"/><test-case name="8762NISTXML-SV-II-atomic-negativeInteger-minExclusive-5-5 tokoe:invalid" result="pass"/><test-case name="8763NISTSchema-SV-II-atomic-negativeInteger-maxExclusive-1 tokoe:valid" result="pass"/><test-case name="8764NISTXML-SV-II-atomic-negativeInteger-maxExclusive-1-1 tokoe:invalid" result="pass"/><test-case name="8765NISTXML-SV-II-atomic-negativeInteger-maxExclusive-1-2 tokoe:invalid" result="pass"/><test-case name="8766NISTXML-SV-II-atomic-negativeInteger-maxExclusive-1-3 tokoe:invalid" result="pass"/><test-case name="8767NISTXML-SV-II-atomic-negativeInteger-maxExclusive-1-4 tokoe:invalid" result="pass"/><test-case name="8768NISTXML-SV-II-atomic-negativeInteger-maxExclusive-1-5 tokoe:invalid" result="pass"/><test-case name="8769NISTSchema-SV-II-atomic-negativeInteger-maxExclusive-2 tokoe:valid" result="pass"/><test-case name="8770NISTXML-SV-II-atomic-negativeInteger-maxExclusive-2-1 tokoe:invalid" result="pass"/><test-case name="8771NISTXML-SV-II-atomic-negativeInteger-maxExclusive-2-2 tokoe:invalid" result="pass"/><test-case name="8772NISTXML-SV-II-atomic-negativeInteger-maxExclusive-2-3 tokoe:invalid" result="pass"/><test-case name="8773NISTXML-SV-II-atomic-negativeInteger-maxExclusive-2-4 tokoe:invalid" result="pass"/><test-case name="8774NISTXML-SV-II-atomic-negativeInteger-maxExclusive-2-5 tokoe:invalid" result="pass"/><test-case name="8775NISTSchema-SV-II-atomic-negativeInteger-maxExclusive-3 tokoe:valid" result="pass"/><test-case name="8776NISTXML-SV-II-atomic-negativeInteger-maxExclusive-3-1 tokoe:invalid" result="pass"/><test-case name="8777NISTXML-SV-II-atomic-negativeInteger-maxExclusive-3-2 tokoe:invalid" result="pass"/><test-case name="8778NISTXML-SV-II-atomic-negativeInteger-maxExclusive-3-3 tokoe:invalid" result="pass"/><test-case name="8779NISTXML-SV-II-atomic-negativeInteger-maxExclusive-3-4 tokoe:invalid" result="pass"/><test-case name="8780NISTXML-SV-II-atomic-negativeInteger-maxExclusive-3-5 tokoe:invalid" result="pass"/><test-case name="8781NISTSchema-SV-II-atomic-negativeInteger-maxExclusive-4 tokoe:valid" result="pass"/><test-case name="8782NISTXML-SV-II-atomic-negativeInteger-maxExclusive-4-1 tokoe:invalid" result="pass"/><test-case name="8783NISTXML-SV-II-atomic-negativeInteger-maxExclusive-4-2 tokoe:invalid" result="pass"/><test-case name="8784NISTXML-SV-II-atomic-negativeInteger-maxExclusive-4-3 tokoe:invalid" result="pass"/><test-case name="8785NISTXML-SV-II-atomic-negativeInteger-maxExclusive-4-4 tokoe:invalid" result="pass"/><test-case name="8786NISTXML-SV-II-atomic-negativeInteger-maxExclusive-4-5 tokoe:invalid" result="pass"/><test-case name="8787NISTSchema-SV-II-atomic-negativeInteger-maxExclusive-5 tokoe:valid" result="pass"/><test-case name="8788NISTXML-SV-II-atomic-negativeInteger-maxExclusive-5-1 tokoe:invalid" result="pass"/><test-case name="8789NISTSchema-SV-II-atomic-negativeInteger-pattern-1 tokoe:valid" result="pass"/><test-case name="8790NISTXML-SV-II-atomic-negativeInteger-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="8791NISTXML-SV-II-atomic-negativeInteger-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="8792NISTXML-SV-II-atomic-negativeInteger-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="8793NISTXML-SV-II-atomic-negativeInteger-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="8794NISTXML-SV-II-atomic-negativeInteger-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="8795NISTSchema-SV-II-atomic-negativeInteger-pattern-2 tokoe:valid" result="pass"/><test-case name="8796NISTXML-SV-II-atomic-negativeInteger-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="8797NISTXML-SV-II-atomic-negativeInteger-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="8798NISTXML-SV-II-atomic-negativeInteger-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="8799NISTXML-SV-II-atomic-negativeInteger-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="8800NISTXML-SV-II-atomic-negativeInteger-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="8801NISTSchema-SV-II-atomic-negativeInteger-pattern-3 tokoe:valid" result="pass"/><test-case name="8802NISTXML-SV-II-atomic-negativeInteger-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="8803NISTXML-SV-II-atomic-negativeInteger-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="8804NISTXML-SV-II-atomic-negativeInteger-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="8805NISTXML-SV-II-atomic-negativeInteger-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="8806NISTXML-SV-II-atomic-negativeInteger-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="8807NISTSchema-SV-II-atomic-negativeInteger-pattern-4 tokoe:valid" result="pass"/><test-case name="8808NISTXML-SV-II-atomic-negativeInteger-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="8809NISTXML-SV-II-atomic-negativeInteger-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="8810NISTXML-SV-II-atomic-negativeInteger-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="8811NISTXML-SV-II-atomic-negativeInteger-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="8812NISTXML-SV-II-atomic-negativeInteger-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="8813NISTSchema-SV-II-atomic-negativeInteger-pattern-5 tokoe:valid" result="pass"/><test-case name="8814NISTXML-SV-II-atomic-negativeInteger-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="8815NISTXML-SV-II-atomic-negativeInteger-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="8816NISTXML-SV-II-atomic-negativeInteger-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="8817NISTXML-SV-II-atomic-negativeInteger-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="8818NISTXML-SV-II-atomic-negativeInteger-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="8819NISTSchema-SV-II-atomic-negativeInteger-enumeration-1 tokoe:valid" result="pass"/><test-case name="8820NISTXML-SV-II-atomic-negativeInteger-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="8821NISTXML-SV-II-atomic-negativeInteger-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="8822NISTXML-SV-II-atomic-negativeInteger-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="8823NISTXML-SV-II-atomic-negativeInteger-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="8824NISTXML-SV-II-atomic-negativeInteger-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="8825NISTSchema-SV-II-atomic-negativeInteger-enumeration-2 tokoe:valid" result="pass"/><test-case name="8826NISTXML-SV-II-atomic-negativeInteger-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="8827NISTXML-SV-II-atomic-negativeInteger-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="8828NISTXML-SV-II-atomic-negativeInteger-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="8829NISTXML-SV-II-atomic-negativeInteger-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="8830NISTXML-SV-II-atomic-negativeInteger-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="8831NISTSchema-SV-II-atomic-negativeInteger-enumeration-3 tokoe:valid" result="pass"/><test-case name="8832NISTXML-SV-II-atomic-negativeInteger-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="8833NISTXML-SV-II-atomic-negativeInteger-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="8834NISTXML-SV-II-atomic-negativeInteger-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="8835NISTXML-SV-II-atomic-negativeInteger-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="8836NISTXML-SV-II-atomic-negativeInteger-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="8837NISTSchema-SV-II-atomic-negativeInteger-enumeration-4 tokoe:valid" result="pass"/><test-case name="8838NISTXML-SV-II-atomic-negativeInteger-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="8839NISTXML-SV-II-atomic-negativeInteger-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="8840NISTXML-SV-II-atomic-negativeInteger-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="8841NISTXML-SV-II-atomic-negativeInteger-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="8842NISTXML-SV-II-atomic-negativeInteger-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="8843NISTSchema-SV-II-atomic-negativeInteger-enumeration-5 tokoe:valid" result="pass"/><test-case name="8844NISTXML-SV-II-atomic-negativeInteger-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="8845NISTXML-SV-II-atomic-negativeInteger-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="8846NISTXML-SV-II-atomic-negativeInteger-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="8847NISTXML-SV-II-atomic-negativeInteger-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="8848NISTXML-SV-II-atomic-negativeInteger-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="8849NISTSchema-SV-II-atomic-long-minExclusive-1 tokoe:valid" result="pass"/><test-case name="8850NISTXML-SV-II-atomic-long-minExclusive-1-1 tokoe:invalid" result="pass"/><test-case name="8851NISTSchema-SV-II-atomic-long-minExclusive-2 tokoe:valid" result="pass"/><test-case name="8852NISTXML-SV-II-atomic-long-minExclusive-2-1 tokoe:invalid" result="pass"/><test-case name="8853NISTXML-SV-II-atomic-long-minExclusive-2-2 tokoe:invalid" result="pass"/><test-case name="8854NISTXML-SV-II-atomic-long-minExclusive-2-3 tokoe:invalid" result="pass"/><test-case name="8855NISTXML-SV-II-atomic-long-minExclusive-2-4 tokoe:invalid" result="pass"/><test-case name="8856NISTXML-SV-II-atomic-long-minExclusive-2-5 tokoe:invalid" result="pass"/><test-case name="8857NISTSchema-SV-II-atomic-long-minExclusive-3 tokoe:valid" result="pass"/><test-case name="8858NISTXML-SV-II-atomic-long-minExclusive-3-1 tokoe:invalid" result="pass"/><test-case name="8859NISTXML-SV-II-atomic-long-minExclusive-3-2 tokoe:invalid" result="pass"/><test-case name="8860NISTXML-SV-II-atomic-long-minExclusive-3-3 tokoe:invalid" result="pass"/><test-case name="8861NISTXML-SV-II-atomic-long-minExclusive-3-4 tokoe:invalid" result="pass"/><test-case name="8862NISTXML-SV-II-atomic-long-minExclusive-3-5 tokoe:invalid" result="pass"/><test-case name="8863NISTSchema-SV-II-atomic-long-minExclusive-4 tokoe:valid" result="pass"/><test-case name="8864NISTXML-SV-II-atomic-long-minExclusive-4-1 tokoe:invalid" result="pass"/><test-case name="8865NISTXML-SV-II-atomic-long-minExclusive-4-2 tokoe:invalid" result="pass"/><test-case name="8866NISTXML-SV-II-atomic-long-minExclusive-4-3 tokoe:invalid" result="pass"/><test-case name="8867NISTXML-SV-II-atomic-long-minExclusive-4-4 tokoe:invalid" result="pass"/><test-case name="8868NISTXML-SV-II-atomic-long-minExclusive-4-5 tokoe:invalid" result="pass"/><test-case name="8869NISTSchema-SV-II-atomic-long-minExclusive-5 tokoe:valid" result="pass"/><test-case name="8870NISTXML-SV-II-atomic-long-minExclusive-5-1 tokoe:invalid" result="pass"/><test-case name="8871NISTXML-SV-II-atomic-long-minExclusive-5-2 tokoe:invalid" result="pass"/><test-case name="8872NISTXML-SV-II-atomic-long-minExclusive-5-3 tokoe:invalid" result="pass"/><test-case name="8873NISTXML-SV-II-atomic-long-minExclusive-5-4 tokoe:invalid" result="pass"/><test-case name="8874NISTXML-SV-II-atomic-long-minExclusive-5-5 tokoe:invalid" result="pass"/><test-case name="8875NISTSchema-SV-II-atomic-long-maxExclusive-1 tokoe:valid" result="pass"/><test-case name="8876NISTXML-SV-II-atomic-long-maxExclusive-1-1 tokoe:invalid" result="pass"/><test-case name="8877NISTXML-SV-II-atomic-long-maxExclusive-1-2 tokoe:invalid" result="pass"/><test-case name="8878NISTXML-SV-II-atomic-long-maxExclusive-1-3 tokoe:invalid" result="pass"/><test-case name="8879NISTXML-SV-II-atomic-long-maxExclusive-1-4 tokoe:invalid" result="pass"/><test-case name="8880NISTXML-SV-II-atomic-long-maxExclusive-1-5 tokoe:invalid" result="pass"/><test-case name="8881NISTSchema-SV-II-atomic-long-maxExclusive-2 tokoe:valid" result="pass"/><test-case name="8882NISTXML-SV-II-atomic-long-maxExclusive-2-1 tokoe:invalid" result="pass"/><test-case name="8883NISTXML-SV-II-atomic-long-maxExclusive-2-2 tokoe:invalid" result="pass"/><test-case name="8884NISTXML-SV-II-atomic-long-maxExclusive-2-3 tokoe:invalid" result="pass"/><test-case name="8885NISTXML-SV-II-atomic-long-maxExclusive-2-4 tokoe:invalid" result="pass"/><test-case name="8886NISTXML-SV-II-atomic-long-maxExclusive-2-5 tokoe:invalid" result="pass"/><test-case name="8887NISTSchema-SV-II-atomic-long-maxExclusive-3 tokoe:valid" result="pass"/><test-case name="8888NISTXML-SV-II-atomic-long-maxExclusive-3-1 tokoe:invalid" result="pass"/><test-case name="8889NISTXML-SV-II-atomic-long-maxExclusive-3-2 tokoe:invalid" result="pass"/><test-case name="8890NISTXML-SV-II-atomic-long-maxExclusive-3-3 tokoe:invalid" result="pass"/><test-case name="8891NISTXML-SV-II-atomic-long-maxExclusive-3-4 tokoe:invalid" result="pass"/><test-case name="8892NISTXML-SV-II-atomic-long-maxExclusive-3-5 tokoe:invalid" result="pass"/><test-case name="8893NISTSchema-SV-II-atomic-long-maxExclusive-4 tokoe:valid" result="pass"/><test-case name="8894NISTXML-SV-II-atomic-long-maxExclusive-4-1 tokoe:invalid" result="pass"/><test-case name="8895NISTXML-SV-II-atomic-long-maxExclusive-4-2 tokoe:invalid" result="pass"/><test-case name="8896NISTXML-SV-II-atomic-long-maxExclusive-4-3 tokoe:invalid" result="pass"/><test-case name="8897NISTXML-SV-II-atomic-long-maxExclusive-4-4 tokoe:invalid" result="pass"/><test-case name="8898NISTXML-SV-II-atomic-long-maxExclusive-4-5 tokoe:invalid" result="pass"/><test-case name="8899NISTSchema-SV-II-atomic-long-maxExclusive-5 tokoe:valid" result="pass"/><test-case name="8900NISTXML-SV-II-atomic-long-maxExclusive-5-1 tokoe:invalid" result="pass"/><test-case name="8901NISTSchema-SV-II-atomic-long-pattern-1 tokoe:valid" result="pass"/><test-case name="8902NISTXML-SV-II-atomic-long-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="8903NISTXML-SV-II-atomic-long-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="8904NISTXML-SV-II-atomic-long-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="8905NISTXML-SV-II-atomic-long-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="8906NISTXML-SV-II-atomic-long-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="8907NISTSchema-SV-II-atomic-long-pattern-2 tokoe:valid" result="pass"/><test-case name="8908NISTXML-SV-II-atomic-long-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="8909NISTXML-SV-II-atomic-long-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="8910NISTXML-SV-II-atomic-long-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="8911NISTXML-SV-II-atomic-long-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="8912NISTXML-SV-II-atomic-long-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="8913NISTSchema-SV-II-atomic-long-pattern-3 tokoe:valid" result="pass"/><test-case name="8914NISTXML-SV-II-atomic-long-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="8915NISTXML-SV-II-atomic-long-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="8916NISTXML-SV-II-atomic-long-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="8917NISTXML-SV-II-atomic-long-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="8918NISTXML-SV-II-atomic-long-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="8919NISTSchema-SV-II-atomic-long-pattern-4 tokoe:valid" result="pass"/><test-case name="8920NISTXML-SV-II-atomic-long-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="8921NISTXML-SV-II-atomic-long-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="8922NISTXML-SV-II-atomic-long-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="8923NISTXML-SV-II-atomic-long-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="8924NISTXML-SV-II-atomic-long-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="8925NISTSchema-SV-II-atomic-long-pattern-5 tokoe:valid" result="pass"/><test-case name="8926NISTXML-SV-II-atomic-long-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="8927NISTXML-SV-II-atomic-long-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="8928NISTXML-SV-II-atomic-long-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="8929NISTXML-SV-II-atomic-long-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="8930NISTXML-SV-II-atomic-long-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="8931NISTSchema-SV-II-atomic-long-enumeration-1 tokoe:valid" result="pass"/><test-case name="8932NISTXML-SV-II-atomic-long-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="8933NISTXML-SV-II-atomic-long-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="8934NISTXML-SV-II-atomic-long-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="8935NISTXML-SV-II-atomic-long-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="8936NISTXML-SV-II-atomic-long-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="8937NISTSchema-SV-II-atomic-long-enumeration-2 tokoe:valid" result="pass"/><test-case name="8938NISTXML-SV-II-atomic-long-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="8939NISTXML-SV-II-atomic-long-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="8940NISTXML-SV-II-atomic-long-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="8941NISTXML-SV-II-atomic-long-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="8942NISTXML-SV-II-atomic-long-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="8943NISTSchema-SV-II-atomic-long-enumeration-3 tokoe:valid" result="pass"/><test-case name="8944NISTXML-SV-II-atomic-long-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="8945NISTXML-SV-II-atomic-long-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="8946NISTXML-SV-II-atomic-long-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="8947NISTXML-SV-II-atomic-long-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="8948NISTXML-SV-II-atomic-long-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="8949NISTSchema-SV-II-atomic-long-enumeration-4 tokoe:valid" result="pass"/><test-case name="8950NISTXML-SV-II-atomic-long-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="8951NISTXML-SV-II-atomic-long-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="8952NISTXML-SV-II-atomic-long-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="8953NISTXML-SV-II-atomic-long-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="8954NISTXML-SV-II-atomic-long-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="8955NISTSchema-SV-II-atomic-long-enumeration-5 tokoe:valid" result="pass"/><test-case name="8956NISTXML-SV-II-atomic-long-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="8957NISTXML-SV-II-atomic-long-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="8958NISTXML-SV-II-atomic-long-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="8959NISTXML-SV-II-atomic-long-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="8960NISTXML-SV-II-atomic-long-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="8961NISTSchema-SV-II-atomic-int-minExclusive-1 tokoe:valid" result="pass"/><test-case name="8962NISTXML-SV-II-atomic-int-minExclusive-1-1 tokoe:invalid" result="pass"/><test-case name="8963NISTSchema-SV-II-atomic-int-minExclusive-2 tokoe:valid" result="pass"/><test-case name="8964NISTXML-SV-II-atomic-int-minExclusive-2-1 tokoe:invalid" result="pass"/><test-case name="8965NISTXML-SV-II-atomic-int-minExclusive-2-2 tokoe:invalid" result="pass"/><test-case name="8966NISTXML-SV-II-atomic-int-minExclusive-2-3 tokoe:invalid" result="pass"/><test-case name="8967NISTXML-SV-II-atomic-int-minExclusive-2-4 tokoe:invalid" result="pass"/><test-case name="8968NISTXML-SV-II-atomic-int-minExclusive-2-5 tokoe:invalid" result="pass"/><test-case name="8969NISTSchema-SV-II-atomic-int-minExclusive-3 tokoe:valid" result="pass"/><test-case name="8970NISTXML-SV-II-atomic-int-minExclusive-3-1 tokoe:invalid" result="pass"/><test-case name="8971NISTXML-SV-II-atomic-int-minExclusive-3-2 tokoe:invalid" result="pass"/><test-case name="8972NISTXML-SV-II-atomic-int-minExclusive-3-3 tokoe:invalid" result="pass"/><test-case name="8973NISTXML-SV-II-atomic-int-minExclusive-3-4 tokoe:invalid" result="pass"/><test-case name="8974NISTXML-SV-II-atomic-int-minExclusive-3-5 tokoe:invalid" result="pass"/><test-case name="8975NISTSchema-SV-II-atomic-int-minExclusive-4 tokoe:valid" result="pass"/><test-case name="8976NISTXML-SV-II-atomic-int-minExclusive-4-1 tokoe:invalid" result="pass"/><test-case name="8977NISTXML-SV-II-atomic-int-minExclusive-4-2 tokoe:invalid" result="pass"/><test-case name="8978NISTXML-SV-II-atomic-int-minExclusive-4-3 tokoe:invalid" result="pass"/><test-case name="8979NISTXML-SV-II-atomic-int-minExclusive-4-4 tokoe:invalid" result="pass"/><test-case name="8980NISTXML-SV-II-atomic-int-minExclusive-4-5 tokoe:invalid" result="pass"/><test-case name="8981NISTSchema-SV-II-atomic-int-minExclusive-5 tokoe:valid" result="pass"/><test-case name="8982NISTXML-SV-II-atomic-int-minExclusive-5-1 tokoe:invalid" result="pass"/><test-case name="8983NISTXML-SV-II-atomic-int-minExclusive-5-2 tokoe:invalid" result="pass"/><test-case name="8984NISTXML-SV-II-atomic-int-minExclusive-5-3 tokoe:invalid" result="pass"/><test-case name="8985NISTXML-SV-II-atomic-int-minExclusive-5-4 tokoe:invalid" result="pass"/><test-case name="8986NISTXML-SV-II-atomic-int-minExclusive-5-5 tokoe:invalid" result="pass"/><test-case name="8987NISTSchema-SV-II-atomic-int-maxExclusive-1 tokoe:valid" result="pass"/><test-case name="8988NISTXML-SV-II-atomic-int-maxExclusive-1-1 tokoe:invalid" result="pass"/><test-case name="8989NISTXML-SV-II-atomic-int-maxExclusive-1-2 tokoe:invalid" result="pass"/><test-case name="8990NISTXML-SV-II-atomic-int-maxExclusive-1-3 tokoe:invalid" result="pass"/><test-case name="8991NISTXML-SV-II-atomic-int-maxExclusive-1-4 tokoe:invalid" result="pass"/><test-case name="8992NISTXML-SV-II-atomic-int-maxExclusive-1-5 tokoe:invalid" result="pass"/><test-case name="8993NISTSchema-SV-II-atomic-int-maxExclusive-2 tokoe:valid" result="pass"/><test-case name="8994NISTXML-SV-II-atomic-int-maxExclusive-2-1 tokoe:invalid" result="pass"/><test-case name="8995NISTXML-SV-II-atomic-int-maxExclusive-2-2 tokoe:invalid" result="pass"/><test-case name="8996NISTXML-SV-II-atomic-int-maxExclusive-2-3 tokoe:invalid" result="pass"/><test-case name="8997NISTXML-SV-II-atomic-int-maxExclusive-2-4 tokoe:invalid" result="pass"/><test-case name="8998NISTXML-SV-II-atomic-int-maxExclusive-2-5 tokoe:invalid" result="pass"/><test-case name="8999NISTSchema-SV-II-atomic-int-maxExclusive-3 tokoe:valid" result="pass"/><test-case name="9000NISTXML-SV-II-atomic-int-maxExclusive-3-1 tokoe:invalid" result="pass"/><test-case name="9001NISTXML-SV-II-atomic-int-maxExclusive-3-2 tokoe:invalid" result="pass"/><test-case name="9002NISTXML-SV-II-atomic-int-maxExclusive-3-3 tokoe:invalid" result="pass"/><test-case name="9003NISTXML-SV-II-atomic-int-maxExclusive-3-4 tokoe:invalid" result="pass"/><test-case name="9004NISTXML-SV-II-atomic-int-maxExclusive-3-5 tokoe:invalid" result="pass"/><test-case name="9005NISTSchema-SV-II-atomic-int-maxExclusive-4 tokoe:valid" result="pass"/><test-case name="9006NISTXML-SV-II-atomic-int-maxExclusive-4-1 tokoe:invalid" result="pass"/><test-case name="9007NISTXML-SV-II-atomic-int-maxExclusive-4-2 tokoe:invalid" result="pass"/><test-case name="9008NISTXML-SV-II-atomic-int-maxExclusive-4-3 tokoe:invalid" result="pass"/><test-case name="9009NISTXML-SV-II-atomic-int-maxExclusive-4-4 tokoe:invalid" result="pass"/><test-case name="9010NISTXML-SV-II-atomic-int-maxExclusive-4-5 tokoe:invalid" result="pass"/><test-case name="9011NISTSchema-SV-II-atomic-int-maxExclusive-5 tokoe:valid" result="pass"/><test-case name="9012NISTXML-SV-II-atomic-int-maxExclusive-5-1 tokoe:invalid" result="pass"/><test-case name="9013NISTSchema-SV-II-atomic-int-pattern-1 tokoe:valid" result="pass"/><test-case name="9014NISTXML-SV-II-atomic-int-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="9015NISTXML-SV-II-atomic-int-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="9016NISTXML-SV-II-atomic-int-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="9017NISTXML-SV-II-atomic-int-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="9018NISTXML-SV-II-atomic-int-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="9019NISTSchema-SV-II-atomic-int-pattern-2 tokoe:valid" result="pass"/><test-case name="9020NISTXML-SV-II-atomic-int-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="9021NISTXML-SV-II-atomic-int-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="9022NISTXML-SV-II-atomic-int-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="9023NISTXML-SV-II-atomic-int-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="9024NISTXML-SV-II-atomic-int-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="9025NISTSchema-SV-II-atomic-int-pattern-3 tokoe:valid" result="pass"/><test-case name="9026NISTXML-SV-II-atomic-int-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="9027NISTXML-SV-II-atomic-int-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="9028NISTXML-SV-II-atomic-int-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="9029NISTXML-SV-II-atomic-int-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="9030NISTXML-SV-II-atomic-int-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="9031NISTSchema-SV-II-atomic-int-pattern-4 tokoe:valid" result="pass"/><test-case name="9032NISTXML-SV-II-atomic-int-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="9033NISTXML-SV-II-atomic-int-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="9034NISTXML-SV-II-atomic-int-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="9035NISTXML-SV-II-atomic-int-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="9036NISTXML-SV-II-atomic-int-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="9037NISTSchema-SV-II-atomic-int-pattern-5 tokoe:valid" result="pass"/><test-case name="9038NISTXML-SV-II-atomic-int-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="9039NISTXML-SV-II-atomic-int-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="9040NISTXML-SV-II-atomic-int-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="9041NISTXML-SV-II-atomic-int-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="9042NISTXML-SV-II-atomic-int-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="9043NISTSchema-SV-II-atomic-int-enumeration-1 tokoe:valid" result="pass"/><test-case name="9044NISTXML-SV-II-atomic-int-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="9045NISTXML-SV-II-atomic-int-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="9046NISTXML-SV-II-atomic-int-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="9047NISTXML-SV-II-atomic-int-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="9048NISTXML-SV-II-atomic-int-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="9049NISTSchema-SV-II-atomic-int-enumeration-2 tokoe:valid" result="pass"/><test-case name="9050NISTXML-SV-II-atomic-int-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="9051NISTXML-SV-II-atomic-int-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="9052NISTXML-SV-II-atomic-int-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="9053NISTXML-SV-II-atomic-int-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="9054NISTXML-SV-II-atomic-int-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="9055NISTSchema-SV-II-atomic-int-enumeration-3 tokoe:valid" result="pass"/><test-case name="9056NISTXML-SV-II-atomic-int-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="9057NISTXML-SV-II-atomic-int-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="9058NISTXML-SV-II-atomic-int-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="9059NISTXML-SV-II-atomic-int-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="9060NISTXML-SV-II-atomic-int-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="9061NISTSchema-SV-II-atomic-int-enumeration-4 tokoe:valid" result="pass"/><test-case name="9062NISTXML-SV-II-atomic-int-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="9063NISTXML-SV-II-atomic-int-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="9064NISTXML-SV-II-atomic-int-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="9065NISTXML-SV-II-atomic-int-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="9066NISTXML-SV-II-atomic-int-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="9067NISTSchema-SV-II-atomic-int-enumeration-5 tokoe:valid" result="pass"/><test-case name="9068NISTXML-SV-II-atomic-int-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="9069NISTXML-SV-II-atomic-int-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="9070NISTXML-SV-II-atomic-int-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="9071NISTXML-SV-II-atomic-int-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="9072NISTXML-SV-II-atomic-int-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="9073NISTSchema-SV-II-atomic-short-minExclusive-1 tokoe:valid" result="pass"/><test-case name="9074NISTXML-SV-II-atomic-short-minExclusive-1-1 tokoe:invalid" result="pass"/><test-case name="9075NISTSchema-SV-II-atomic-short-minExclusive-2 tokoe:valid" result="pass"/><test-case name="9076NISTXML-SV-II-atomic-short-minExclusive-2-1 tokoe:invalid" result="pass"/><test-case name="9077NISTXML-SV-II-atomic-short-minExclusive-2-2 tokoe:invalid" result="pass"/><test-case name="9078NISTXML-SV-II-atomic-short-minExclusive-2-3 tokoe:invalid" result="pass"/><test-case name="9079NISTXML-SV-II-atomic-short-minExclusive-2-4 tokoe:invalid" result="pass"/><test-case name="9080NISTXML-SV-II-atomic-short-minExclusive-2-5 tokoe:invalid" result="pass"/><test-case name="9081NISTSchema-SV-II-atomic-short-minExclusive-3 tokoe:valid" result="pass"/><test-case name="9082NISTXML-SV-II-atomic-short-minExclusive-3-1 tokoe:invalid" result="pass"/><test-case name="9083NISTXML-SV-II-atomic-short-minExclusive-3-2 tokoe:invalid" result="pass"/><test-case name="9084NISTXML-SV-II-atomic-short-minExclusive-3-3 tokoe:invalid" result="pass"/><test-case name="9085NISTXML-SV-II-atomic-short-minExclusive-3-4 tokoe:invalid" result="pass"/><test-case name="9086NISTXML-SV-II-atomic-short-minExclusive-3-5 tokoe:invalid" result="pass"/><test-case name="9087NISTSchema-SV-II-atomic-short-minExclusive-4 tokoe:valid" result="pass"/><test-case name="9088NISTXML-SV-II-atomic-short-minExclusive-4-1 tokoe:invalid" result="pass"/><test-case name="9089NISTXML-SV-II-atomic-short-minExclusive-4-2 tokoe:invalid" result="pass"/><test-case name="9090NISTXML-SV-II-atomic-short-minExclusive-4-3 tokoe:invalid" result="pass"/><test-case name="9091NISTXML-SV-II-atomic-short-minExclusive-4-4 tokoe:invalid" result="pass"/><test-case name="9092NISTXML-SV-II-atomic-short-minExclusive-4-5 tokoe:invalid" result="pass"/><test-case name="9093NISTSchema-SV-II-atomic-short-minExclusive-5 tokoe:valid" result="pass"/><test-case name="9094NISTXML-SV-II-atomic-short-minExclusive-5-1 tokoe:invalid" result="pass"/><test-case name="9095NISTXML-SV-II-atomic-short-minExclusive-5-2 tokoe:invalid" result="pass"/><test-case name="9096NISTXML-SV-II-atomic-short-minExclusive-5-3 tokoe:invalid" result="pass"/><test-case name="9097NISTXML-SV-II-atomic-short-minExclusive-5-4 tokoe:invalid" result="pass"/><test-case name="9098NISTXML-SV-II-atomic-short-minExclusive-5-5 tokoe:invalid" result="pass"/><test-case name="9099NISTSchema-SV-II-atomic-short-maxExclusive-1 tokoe:valid" result="pass"/><test-case name="9100NISTXML-SV-II-atomic-short-maxExclusive-1-1 tokoe:invalid" result="pass"/><test-case name="9101NISTXML-SV-II-atomic-short-maxExclusive-1-2 tokoe:invalid" result="pass"/><test-case name="9102NISTXML-SV-II-atomic-short-maxExclusive-1-3 tokoe:invalid" result="pass"/><test-case name="9103NISTXML-SV-II-atomic-short-maxExclusive-1-4 tokoe:invalid" result="pass"/><test-case name="9104NISTXML-SV-II-atomic-short-maxExclusive-1-5 tokoe:invalid" result="pass"/><test-case name="9105NISTSchema-SV-II-atomic-short-maxExclusive-2 tokoe:valid" result="pass"/><test-case name="9106NISTXML-SV-II-atomic-short-maxExclusive-2-1 tokoe:invalid" result="pass"/><test-case name="9107NISTXML-SV-II-atomic-short-maxExclusive-2-2 tokoe:invalid" result="pass"/><test-case name="9108NISTXML-SV-II-atomic-short-maxExclusive-2-3 tokoe:invalid" result="pass"/><test-case name="9109NISTXML-SV-II-atomic-short-maxExclusive-2-4 tokoe:invalid" result="pass"/><test-case name="9110NISTXML-SV-II-atomic-short-maxExclusive-2-5 tokoe:invalid" result="pass"/><test-case name="9111NISTSchema-SV-II-atomic-short-maxExclusive-3 tokoe:valid" result="pass"/><test-case name="9112NISTXML-SV-II-atomic-short-maxExclusive-3-1 tokoe:invalid" result="pass"/><test-case name="9113NISTXML-SV-II-atomic-short-maxExclusive-3-2 tokoe:invalid" result="pass"/><test-case name="9114NISTXML-SV-II-atomic-short-maxExclusive-3-3 tokoe:invalid" result="pass"/><test-case name="9115NISTXML-SV-II-atomic-short-maxExclusive-3-4 tokoe:invalid" result="pass"/><test-case name="9116NISTXML-SV-II-atomic-short-maxExclusive-3-5 tokoe:invalid" result="pass"/><test-case name="9117NISTSchema-SV-II-atomic-short-maxExclusive-4 tokoe:valid" result="pass"/><test-case name="9118NISTXML-SV-II-atomic-short-maxExclusive-4-1 tokoe:invalid" result="pass"/><test-case name="9119NISTXML-SV-II-atomic-short-maxExclusive-4-2 tokoe:invalid" result="pass"/><test-case name="9120NISTXML-SV-II-atomic-short-maxExclusive-4-3 tokoe:invalid" result="pass"/><test-case name="9121NISTXML-SV-II-atomic-short-maxExclusive-4-4 tokoe:invalid" result="pass"/><test-case name="9122NISTXML-SV-II-atomic-short-maxExclusive-4-5 tokoe:invalid" result="pass"/><test-case name="9123NISTSchema-SV-II-atomic-short-maxExclusive-5 tokoe:valid" result="pass"/><test-case name="9124NISTXML-SV-II-atomic-short-maxExclusive-5-1 tokoe:invalid" result="pass"/><test-case name="9125NISTSchema-SV-II-atomic-short-pattern-1 tokoe:valid" result="pass"/><test-case name="9126NISTXML-SV-II-atomic-short-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="9127NISTXML-SV-II-atomic-short-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="9128NISTXML-SV-II-atomic-short-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="9129NISTXML-SV-II-atomic-short-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="9130NISTXML-SV-II-atomic-short-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="9131NISTSchema-SV-II-atomic-short-pattern-2 tokoe:valid" result="pass"/><test-case name="9132NISTXML-SV-II-atomic-short-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="9133NISTXML-SV-II-atomic-short-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="9134NISTXML-SV-II-atomic-short-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="9135NISTXML-SV-II-atomic-short-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="9136NISTXML-SV-II-atomic-short-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="9137NISTSchema-SV-II-atomic-short-pattern-3 tokoe:valid" result="pass"/><test-case name="9138NISTXML-SV-II-atomic-short-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="9139NISTXML-SV-II-atomic-short-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="9140NISTXML-SV-II-atomic-short-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="9141NISTXML-SV-II-atomic-short-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="9142NISTXML-SV-II-atomic-short-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="9143NISTSchema-SV-II-atomic-short-pattern-4 tokoe:valid" result="pass"/><test-case name="9144NISTXML-SV-II-atomic-short-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="9145NISTXML-SV-II-atomic-short-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="9146NISTXML-SV-II-atomic-short-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="9147NISTXML-SV-II-atomic-short-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="9148NISTXML-SV-II-atomic-short-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="9149NISTSchema-SV-II-atomic-short-pattern-5 tokoe:valid" result="pass"/><test-case name="9150NISTXML-SV-II-atomic-short-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="9151NISTXML-SV-II-atomic-short-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="9152NISTXML-SV-II-atomic-short-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="9153NISTXML-SV-II-atomic-short-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="9154NISTXML-SV-II-atomic-short-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="9155NISTSchema-SV-II-atomic-short-enumeration-1 tokoe:valid" result="pass"/><test-case name="9156NISTXML-SV-II-atomic-short-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="9157NISTXML-SV-II-atomic-short-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="9158NISTXML-SV-II-atomic-short-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="9159NISTXML-SV-II-atomic-short-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="9160NISTXML-SV-II-atomic-short-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="9161NISTSchema-SV-II-atomic-short-enumeration-2 tokoe:valid" result="pass"/><test-case name="9162NISTXML-SV-II-atomic-short-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="9163NISTXML-SV-II-atomic-short-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="9164NISTXML-SV-II-atomic-short-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="9165NISTXML-SV-II-atomic-short-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="9166NISTXML-SV-II-atomic-short-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="9167NISTSchema-SV-II-atomic-short-enumeration-3 tokoe:valid" result="pass"/><test-case name="9168NISTXML-SV-II-atomic-short-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="9169NISTXML-SV-II-atomic-short-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="9170NISTXML-SV-II-atomic-short-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="9171NISTXML-SV-II-atomic-short-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="9172NISTXML-SV-II-atomic-short-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="9173NISTSchema-SV-II-atomic-short-enumeration-4 tokoe:valid" result="pass"/><test-case name="9174NISTXML-SV-II-atomic-short-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="9175NISTXML-SV-II-atomic-short-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="9176NISTXML-SV-II-atomic-short-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="9177NISTXML-SV-II-atomic-short-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="9178NISTXML-SV-II-atomic-short-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="9179NISTSchema-SV-II-atomic-short-enumeration-5 tokoe:valid" result="pass"/><test-case name="9180NISTXML-SV-II-atomic-short-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="9181NISTXML-SV-II-atomic-short-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="9182NISTXML-SV-II-atomic-short-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="9183NISTXML-SV-II-atomic-short-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="9184NISTXML-SV-II-atomic-short-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="9185NISTSchema-SV-II-atomic-byte-minExclusive-1 tokoe:valid" result="pass"/><test-case name="9186NISTXML-SV-II-atomic-byte-minExclusive-1-1 tokoe:invalid" result="pass"/><test-case name="9187NISTSchema-SV-II-atomic-byte-minExclusive-2 tokoe:valid" result="pass"/><test-case name="9188NISTXML-SV-II-atomic-byte-minExclusive-2-1 tokoe:invalid" result="pass"/><test-case name="9189NISTXML-SV-II-atomic-byte-minExclusive-2-2 tokoe:invalid" result="pass"/><test-case name="9190NISTXML-SV-II-atomic-byte-minExclusive-2-3 tokoe:invalid" result="pass"/><test-case name="9191NISTXML-SV-II-atomic-byte-minExclusive-2-4 tokoe:invalid" result="pass"/><test-case name="9192NISTXML-SV-II-atomic-byte-minExclusive-2-5 tokoe:invalid" result="pass"/><test-case name="9193NISTSchema-SV-II-atomic-byte-minExclusive-3 tokoe:valid" result="pass"/><test-case name="9194NISTXML-SV-II-atomic-byte-minExclusive-3-1 tokoe:invalid" result="pass"/><test-case name="9195NISTXML-SV-II-atomic-byte-minExclusive-3-2 tokoe:invalid" result="pass"/><test-case name="9196NISTXML-SV-II-atomic-byte-minExclusive-3-3 tokoe:invalid" result="pass"/><test-case name="9197NISTXML-SV-II-atomic-byte-minExclusive-3-4 tokoe:invalid" result="pass"/><test-case name="9198NISTXML-SV-II-atomic-byte-minExclusive-3-5 tokoe:invalid" result="pass"/><test-case name="9199NISTSchema-SV-II-atomic-byte-minExclusive-4 tokoe:valid" result="pass"/><test-case name="9200NISTXML-SV-II-atomic-byte-minExclusive-4-1 tokoe:invalid" result="pass"/><test-case name="9201NISTXML-SV-II-atomic-byte-minExclusive-4-2 tokoe:invalid" result="pass"/><test-case name="9202NISTXML-SV-II-atomic-byte-minExclusive-4-3 tokoe:invalid" result="pass"/><test-case name="9203NISTXML-SV-II-atomic-byte-minExclusive-4-4 tokoe:invalid" result="pass"/><test-case name="9204NISTXML-SV-II-atomic-byte-minExclusive-4-5 tokoe:invalid" result="pass"/><test-case name="9205NISTSchema-SV-II-atomic-byte-minExclusive-5 tokoe:valid" result="pass"/><test-case name="9206NISTXML-SV-II-atomic-byte-minExclusive-5-1 tokoe:invalid" result="pass"/><test-case name="9207NISTXML-SV-II-atomic-byte-minExclusive-5-2 tokoe:invalid" result="pass"/><test-case name="9208NISTXML-SV-II-atomic-byte-minExclusive-5-3 tokoe:invalid" result="pass"/><test-case name="9209NISTXML-SV-II-atomic-byte-minExclusive-5-4 tokoe:invalid" result="pass"/><test-case name="9210NISTXML-SV-II-atomic-byte-minExclusive-5-5 tokoe:invalid" result="pass"/><test-case name="9211NISTSchema-SV-II-atomic-byte-maxExclusive-1 tokoe:valid" result="pass"/><test-case name="9212NISTXML-SV-II-atomic-byte-maxExclusive-1-1 tokoe:invalid" result="pass"/><test-case name="9213NISTXML-SV-II-atomic-byte-maxExclusive-1-2 tokoe:invalid" result="pass"/><test-case name="9214NISTXML-SV-II-atomic-byte-maxExclusive-1-3 tokoe:invalid" result="pass"/><test-case name="9215NISTXML-SV-II-atomic-byte-maxExclusive-1-4 tokoe:invalid" result="pass"/><test-case name="9216NISTXML-SV-II-atomic-byte-maxExclusive-1-5 tokoe:invalid" result="pass"/><test-case name="9217NISTSchema-SV-II-atomic-byte-maxExclusive-2 tokoe:valid" result="pass"/><test-case name="9218NISTXML-SV-II-atomic-byte-maxExclusive-2-1 tokoe:invalid" result="pass"/><test-case name="9219NISTXML-SV-II-atomic-byte-maxExclusive-2-2 tokoe:invalid" result="pass"/><test-case name="9220NISTXML-SV-II-atomic-byte-maxExclusive-2-3 tokoe:invalid" result="pass"/><test-case name="9221NISTXML-SV-II-atomic-byte-maxExclusive-2-4 tokoe:invalid" result="pass"/><test-case name="9222NISTXML-SV-II-atomic-byte-maxExclusive-2-5 tokoe:invalid" result="pass"/><test-case name="9223NISTSchema-SV-II-atomic-byte-maxExclusive-3 tokoe:valid" result="pass"/><test-case name="9224NISTXML-SV-II-atomic-byte-maxExclusive-3-1 tokoe:invalid" result="pass"/><test-case name="9225NISTXML-SV-II-atomic-byte-maxExclusive-3-2 tokoe:invalid" result="pass"/><test-case name="9226NISTXML-SV-II-atomic-byte-maxExclusive-3-3 tokoe:invalid" result="pass"/><test-case name="9227NISTXML-SV-II-atomic-byte-maxExclusive-3-4 tokoe:invalid" result="pass"/><test-case name="9228NISTXML-SV-II-atomic-byte-maxExclusive-3-5 tokoe:invalid" result="pass"/><test-case name="9229NISTSchema-SV-II-atomic-byte-maxExclusive-4 tokoe:valid" result="pass"/><test-case name="9230NISTXML-SV-II-atomic-byte-maxExclusive-4-1 tokoe:invalid" result="pass"/><test-case name="9231NISTXML-SV-II-atomic-byte-maxExclusive-4-2 tokoe:invalid" result="pass"/><test-case name="9232NISTXML-SV-II-atomic-byte-maxExclusive-4-3 tokoe:invalid" result="pass"/><test-case name="9233NISTXML-SV-II-atomic-byte-maxExclusive-4-4 tokoe:invalid" result="pass"/><test-case name="9234NISTXML-SV-II-atomic-byte-maxExclusive-4-5 tokoe:invalid" result="pass"/><test-case name="9235NISTSchema-SV-II-atomic-byte-maxExclusive-5 tokoe:valid" result="pass"/><test-case name="9236NISTXML-SV-II-atomic-byte-maxExclusive-5-1 tokoe:invalid" result="pass"/><test-case name="9237NISTSchema-SV-II-atomic-byte-pattern-1 tokoe:valid" result="pass"/><test-case name="9238NISTXML-SV-II-atomic-byte-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="9239NISTXML-SV-II-atomic-byte-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="9240NISTXML-SV-II-atomic-byte-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="9241NISTXML-SV-II-atomic-byte-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="9242NISTXML-SV-II-atomic-byte-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="9243NISTSchema-SV-II-atomic-byte-pattern-2 tokoe:valid" result="pass"/><test-case name="9244NISTXML-SV-II-atomic-byte-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="9245NISTXML-SV-II-atomic-byte-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="9246NISTXML-SV-II-atomic-byte-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="9247NISTXML-SV-II-atomic-byte-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="9248NISTXML-SV-II-atomic-byte-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="9249NISTSchema-SV-II-atomic-byte-pattern-3 tokoe:valid" result="pass"/><test-case name="9250NISTXML-SV-II-atomic-byte-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="9251NISTXML-SV-II-atomic-byte-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="9252NISTXML-SV-II-atomic-byte-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="9253NISTXML-SV-II-atomic-byte-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="9254NISTXML-SV-II-atomic-byte-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="9255NISTSchema-SV-II-atomic-byte-pattern-4 tokoe:valid" result="pass"/><test-case name="9256NISTXML-SV-II-atomic-byte-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="9257NISTXML-SV-II-atomic-byte-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="9258NISTXML-SV-II-atomic-byte-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="9259NISTXML-SV-II-atomic-byte-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="9260NISTXML-SV-II-atomic-byte-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="9261NISTSchema-SV-II-atomic-byte-pattern-5 tokoe:valid" result="pass"/><test-case name="9262NISTXML-SV-II-atomic-byte-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="9263NISTXML-SV-II-atomic-byte-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="9264NISTXML-SV-II-atomic-byte-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="9265NISTXML-SV-II-atomic-byte-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="9266NISTXML-SV-II-atomic-byte-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="9267NISTSchema-SV-II-atomic-byte-enumeration-1 tokoe:valid" result="pass"/><test-case name="9268NISTXML-SV-II-atomic-byte-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="9269NISTXML-SV-II-atomic-byte-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="9270NISTXML-SV-II-atomic-byte-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="9271NISTXML-SV-II-atomic-byte-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="9272NISTXML-SV-II-atomic-byte-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="9273NISTSchema-SV-II-atomic-byte-enumeration-2 tokoe:valid" result="pass"/><test-case name="9274NISTXML-SV-II-atomic-byte-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="9275NISTXML-SV-II-atomic-byte-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="9276NISTXML-SV-II-atomic-byte-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="9277NISTXML-SV-II-atomic-byte-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="9278NISTXML-SV-II-atomic-byte-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="9279NISTSchema-SV-II-atomic-byte-enumeration-3 tokoe:valid" result="pass"/><test-case name="9280NISTXML-SV-II-atomic-byte-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="9281NISTXML-SV-II-atomic-byte-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="9282NISTXML-SV-II-atomic-byte-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="9283NISTXML-SV-II-atomic-byte-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="9284NISTXML-SV-II-atomic-byte-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="9285NISTSchema-SV-II-atomic-byte-enumeration-4 tokoe:valid" result="pass"/><test-case name="9286NISTXML-SV-II-atomic-byte-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="9287NISTXML-SV-II-atomic-byte-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="9288NISTXML-SV-II-atomic-byte-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="9289NISTXML-SV-II-atomic-byte-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="9290NISTXML-SV-II-atomic-byte-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="9291NISTSchema-SV-II-atomic-byte-enumeration-5 tokoe:valid" result="pass"/><test-case name="9292NISTXML-SV-II-atomic-byte-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="9293NISTXML-SV-II-atomic-byte-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="9294NISTXML-SV-II-atomic-byte-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="9295NISTXML-SV-II-atomic-byte-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="9296NISTXML-SV-II-atomic-byte-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="9297NISTSchema-SV-II-atomic-nonNegativeInteger-minExclusive-1 tokoe:valid" result="pass"/><test-case name="9298NISTXML-SV-II-atomic-nonNegativeInteger-minExclusive-1-1 tokoe:invalid" result="pass"/><test-case name="9299NISTSchema-SV-II-atomic-nonNegativeInteger-minExclusive-2 tokoe:valid" result="pass"/><test-case name="9300NISTXML-SV-II-atomic-nonNegativeInteger-minExclusive-2-1 tokoe:invalid" result="pass"/><test-case name="9301NISTXML-SV-II-atomic-nonNegativeInteger-minExclusive-2-2 tokoe:invalid" result="pass"/><test-case name="9302NISTXML-SV-II-atomic-nonNegativeInteger-minExclusive-2-3 tokoe:invalid" result="pass"/><test-case name="9303NISTXML-SV-II-atomic-nonNegativeInteger-minExclusive-2-4 tokoe:invalid" result="pass"/><test-case name="9304NISTXML-SV-II-atomic-nonNegativeInteger-minExclusive-2-5 tokoe:invalid" result="pass"/><test-case name="9305NISTSchema-SV-II-atomic-nonNegativeInteger-minExclusive-3 tokoe:valid" result="pass"/><test-case name="9306NISTXML-SV-II-atomic-nonNegativeInteger-minExclusive-3-1 tokoe:invalid" result="pass"/><test-case name="9307NISTXML-SV-II-atomic-nonNegativeInteger-minExclusive-3-2 tokoe:invalid" result="pass"/><test-case name="9308NISTXML-SV-II-atomic-nonNegativeInteger-minExclusive-3-3 tokoe:invalid" result="pass"/><test-case name="9309NISTXML-SV-II-atomic-nonNegativeInteger-minExclusive-3-4 tokoe:invalid" result="pass"/><test-case name="9310NISTXML-SV-II-atomic-nonNegativeInteger-minExclusive-3-5 tokoe:invalid" result="pass"/><test-case name="9311NISTSchema-SV-II-atomic-nonNegativeInteger-minExclusive-4 tokoe:valid" result="pass"/><test-case name="9312NISTXML-SV-II-atomic-nonNegativeInteger-minExclusive-4-1 tokoe:invalid" result="pass"/><test-case name="9313NISTXML-SV-II-atomic-nonNegativeInteger-minExclusive-4-2 tokoe:invalid" result="pass"/><test-case name="9314NISTXML-SV-II-atomic-nonNegativeInteger-minExclusive-4-3 tokoe:invalid" result="pass"/><test-case name="9315NISTXML-SV-II-atomic-nonNegativeInteger-minExclusive-4-4 tokoe:invalid" result="pass"/><test-case name="9316NISTXML-SV-II-atomic-nonNegativeInteger-minExclusive-4-5 tokoe:invalid" result="pass"/><test-case name="9317NISTSchema-SV-II-atomic-nonNegativeInteger-minExclusive-5 tokoe:valid" result="pass"/><test-case name="9318NISTXML-SV-II-atomic-nonNegativeInteger-minExclusive-5-1 tokoe:invalid" result="pass"/><test-case name="9319NISTXML-SV-II-atomic-nonNegativeInteger-minExclusive-5-2 tokoe:invalid" result="pass"/><test-case name="9320NISTXML-SV-II-atomic-nonNegativeInteger-minExclusive-5-3 tokoe:invalid" result="pass"/><test-case name="9321NISTXML-SV-II-atomic-nonNegativeInteger-minExclusive-5-4 tokoe:invalid" result="pass"/><test-case name="9322NISTXML-SV-II-atomic-nonNegativeInteger-minExclusive-5-5 tokoe:invalid" result="pass"/><test-case name="9323NISTSchema-SV-II-atomic-nonNegativeInteger-maxExclusive-1 tokoe:valid" result="pass"/><test-case name="9324NISTXML-SV-II-atomic-nonNegativeInteger-maxExclusive-1-1 tokoe:invalid" result="pass"/><test-case name="9325NISTXML-SV-II-atomic-nonNegativeInteger-maxExclusive-1-2 tokoe:invalid" result="pass"/><test-case name="9326NISTXML-SV-II-atomic-nonNegativeInteger-maxExclusive-1-3 tokoe:invalid" result="pass"/><test-case name="9327NISTXML-SV-II-atomic-nonNegativeInteger-maxExclusive-1-4 tokoe:invalid" result="pass"/><test-case name="9328NISTXML-SV-II-atomic-nonNegativeInteger-maxExclusive-1-5 tokoe:invalid" result="pass"/><test-case name="9329NISTSchema-SV-II-atomic-nonNegativeInteger-maxExclusive-2 tokoe:valid" result="pass"/><test-case name="9330NISTXML-SV-II-atomic-nonNegativeInteger-maxExclusive-2-1 tokoe:invalid" result="pass"/><test-case name="9331NISTXML-SV-II-atomic-nonNegativeInteger-maxExclusive-2-2 tokoe:invalid" result="pass"/><test-case name="9332NISTXML-SV-II-atomic-nonNegativeInteger-maxExclusive-2-3 tokoe:invalid" result="pass"/><test-case name="9333NISTXML-SV-II-atomic-nonNegativeInteger-maxExclusive-2-4 tokoe:invalid" result="pass"/><test-case name="9334NISTXML-SV-II-atomic-nonNegativeInteger-maxExclusive-2-5 tokoe:invalid" result="pass"/><test-case name="9335NISTSchema-SV-II-atomic-nonNegativeInteger-maxExclusive-3 tokoe:valid" result="pass"/><test-case name="9336NISTXML-SV-II-atomic-nonNegativeInteger-maxExclusive-3-1 tokoe:invalid" result="pass"/><test-case name="9337NISTXML-SV-II-atomic-nonNegativeInteger-maxExclusive-3-2 tokoe:invalid" result="pass"/><test-case name="9338NISTXML-SV-II-atomic-nonNegativeInteger-maxExclusive-3-3 tokoe:invalid" result="pass"/><test-case name="9339NISTXML-SV-II-atomic-nonNegativeInteger-maxExclusive-3-4 tokoe:invalid" result="pass"/><test-case name="9340NISTXML-SV-II-atomic-nonNegativeInteger-maxExclusive-3-5 tokoe:invalid" result="pass"/><test-case name="9341NISTSchema-SV-II-atomic-nonNegativeInteger-maxExclusive-4 tokoe:valid" result="pass"/><test-case name="9342NISTXML-SV-II-atomic-nonNegativeInteger-maxExclusive-4-1 tokoe:invalid" result="pass"/><test-case name="9343NISTXML-SV-II-atomic-nonNegativeInteger-maxExclusive-4-2 tokoe:invalid" result="pass"/><test-case name="9344NISTXML-SV-II-atomic-nonNegativeInteger-maxExclusive-4-3 tokoe:invalid" result="pass"/><test-case name="9345NISTXML-SV-II-atomic-nonNegativeInteger-maxExclusive-4-4 tokoe:invalid" result="pass"/><test-case name="9346NISTXML-SV-II-atomic-nonNegativeInteger-maxExclusive-4-5 tokoe:invalid" result="pass"/><test-case name="9347NISTSchema-SV-II-atomic-nonNegativeInteger-maxExclusive-5 tokoe:valid" result="pass"/><test-case name="9348NISTXML-SV-II-atomic-nonNegativeInteger-maxExclusive-5-1 tokoe:invalid" result="pass"/><test-case name="9349NISTSchema-SV-II-atomic-nonNegativeInteger-pattern-1 tokoe:valid" result="pass"/><test-case name="9350NISTXML-SV-II-atomic-nonNegativeInteger-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="9351NISTXML-SV-II-atomic-nonNegativeInteger-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="9352NISTXML-SV-II-atomic-nonNegativeInteger-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="9353NISTXML-SV-II-atomic-nonNegativeInteger-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="9354NISTXML-SV-II-atomic-nonNegativeInteger-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="9355NISTSchema-SV-II-atomic-nonNegativeInteger-pattern-2 tokoe:valid" result="pass"/><test-case name="9356NISTXML-SV-II-atomic-nonNegativeInteger-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="9357NISTXML-SV-II-atomic-nonNegativeInteger-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="9358NISTXML-SV-II-atomic-nonNegativeInteger-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="9359NISTXML-SV-II-atomic-nonNegativeInteger-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="9360NISTXML-SV-II-atomic-nonNegativeInteger-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="9361NISTSchema-SV-II-atomic-nonNegativeInteger-pattern-3 tokoe:valid" result="pass"/><test-case name="9362NISTXML-SV-II-atomic-nonNegativeInteger-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="9363NISTXML-SV-II-atomic-nonNegativeInteger-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="9364NISTXML-SV-II-atomic-nonNegativeInteger-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="9365NISTXML-SV-II-atomic-nonNegativeInteger-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="9366NISTXML-SV-II-atomic-nonNegativeInteger-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="9367NISTSchema-SV-II-atomic-nonNegativeInteger-pattern-4 tokoe:valid" result="pass"/><test-case name="9368NISTXML-SV-II-atomic-nonNegativeInteger-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="9369NISTXML-SV-II-atomic-nonNegativeInteger-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="9370NISTXML-SV-II-atomic-nonNegativeInteger-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="9371NISTXML-SV-II-atomic-nonNegativeInteger-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="9372NISTXML-SV-II-atomic-nonNegativeInteger-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="9373NISTSchema-SV-II-atomic-nonNegativeInteger-pattern-5 tokoe:valid" result="pass"/><test-case name="9374NISTXML-SV-II-atomic-nonNegativeInteger-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="9375NISTXML-SV-II-atomic-nonNegativeInteger-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="9376NISTXML-SV-II-atomic-nonNegativeInteger-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="9377NISTXML-SV-II-atomic-nonNegativeInteger-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="9378NISTXML-SV-II-atomic-nonNegativeInteger-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="9379NISTSchema-SV-II-atomic-nonNegativeInteger-enumeration-1 tokoe:valid" result="pass"/><test-case name="9380NISTXML-SV-II-atomic-nonNegativeInteger-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="9381NISTXML-SV-II-atomic-nonNegativeInteger-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="9382NISTXML-SV-II-atomic-nonNegativeInteger-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="9383NISTXML-SV-II-atomic-nonNegativeInteger-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="9384NISTXML-SV-II-atomic-nonNegativeInteger-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="9385NISTSchema-SV-II-atomic-nonNegativeInteger-enumeration-2 tokoe:valid" result="pass"/><test-case name="9386NISTXML-SV-II-atomic-nonNegativeInteger-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="9387NISTXML-SV-II-atomic-nonNegativeInteger-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="9388NISTXML-SV-II-atomic-nonNegativeInteger-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="9389NISTXML-SV-II-atomic-nonNegativeInteger-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="9390NISTXML-SV-II-atomic-nonNegativeInteger-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="9391NISTSchema-SV-II-atomic-nonNegativeInteger-enumeration-3 tokoe:valid" result="pass"/><test-case name="9392NISTXML-SV-II-atomic-nonNegativeInteger-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="9393NISTXML-SV-II-atomic-nonNegativeInteger-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="9394NISTXML-SV-II-atomic-nonNegativeInteger-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="9395NISTXML-SV-II-atomic-nonNegativeInteger-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="9396NISTXML-SV-II-atomic-nonNegativeInteger-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="9397NISTSchema-SV-II-atomic-nonNegativeInteger-enumeration-4 tokoe:valid" result="pass"/><test-case name="9398NISTXML-SV-II-atomic-nonNegativeInteger-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="9399NISTXML-SV-II-atomic-nonNegativeInteger-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="9400NISTXML-SV-II-atomic-nonNegativeInteger-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="9401NISTXML-SV-II-atomic-nonNegativeInteger-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="9402NISTXML-SV-II-atomic-nonNegativeInteger-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="9403NISTSchema-SV-II-atomic-nonNegativeInteger-enumeration-5 tokoe:valid" result="pass"/><test-case name="9404NISTXML-SV-II-atomic-nonNegativeInteger-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="9405NISTXML-SV-II-atomic-nonNegativeInteger-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="9406NISTXML-SV-II-atomic-nonNegativeInteger-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="9407NISTXML-SV-II-atomic-nonNegativeInteger-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="9408NISTXML-SV-II-atomic-nonNegativeInteger-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="9409NISTSchema-SV-II-atomic-unsignedLong-minExclusive-1 tokoe:valid" result="pass"/><test-case name="9410NISTXML-SV-II-atomic-unsignedLong-minExclusive-1-1 tokoe:invalid" result="pass"/><test-case name="9411NISTSchema-SV-II-atomic-unsignedLong-minExclusive-2 tokoe:valid" result="pass"/><test-case name="9412NISTXML-SV-II-atomic-unsignedLong-minExclusive-2-1 tokoe:invalid" result="pass"/><test-case name="9413NISTXML-SV-II-atomic-unsignedLong-minExclusive-2-2 tokoe:invalid" result="pass"/><test-case name="9414NISTXML-SV-II-atomic-unsignedLong-minExclusive-2-3 tokoe:invalid" result="pass"/><test-case name="9415NISTXML-SV-II-atomic-unsignedLong-minExclusive-2-4 tokoe:invalid" result="pass"/><test-case name="9416NISTXML-SV-II-atomic-unsignedLong-minExclusive-2-5 tokoe:invalid" result="pass"/><test-case name="9417NISTSchema-SV-II-atomic-unsignedLong-minExclusive-3 tokoe:valid" result="pass"/><test-case name="9418NISTXML-SV-II-atomic-unsignedLong-minExclusive-3-1 tokoe:invalid" result="pass"/><test-case name="9419NISTXML-SV-II-atomic-unsignedLong-minExclusive-3-2 tokoe:invalid" result="pass"/><test-case name="9420NISTXML-SV-II-atomic-unsignedLong-minExclusive-3-3 tokoe:invalid" result="pass"/><test-case name="9421NISTXML-SV-II-atomic-unsignedLong-minExclusive-3-4 tokoe:invalid" result="pass"/><test-case name="9422NISTXML-SV-II-atomic-unsignedLong-minExclusive-3-5 tokoe:invalid" result="pass"/><test-case name="9423NISTSchema-SV-II-atomic-unsignedLong-minExclusive-4 tokoe:valid" result="pass"/><test-case name="9424NISTXML-SV-II-atomic-unsignedLong-minExclusive-4-1 tokoe:invalid" result="pass"/><test-case name="9425NISTXML-SV-II-atomic-unsignedLong-minExclusive-4-2 tokoe:invalid" result="pass"/><test-case name="9426NISTXML-SV-II-atomic-unsignedLong-minExclusive-4-3 tokoe:invalid" result="pass"/><test-case name="9427NISTXML-SV-II-atomic-unsignedLong-minExclusive-4-4 tokoe:invalid" result="pass"/><test-case name="9428NISTXML-SV-II-atomic-unsignedLong-minExclusive-4-5 tokoe:invalid" result="pass"/><test-case name="9429NISTSchema-SV-II-atomic-unsignedLong-minExclusive-5 tokoe:valid" result="pass"/><test-case name="9430NISTXML-SV-II-atomic-unsignedLong-minExclusive-5-1 tokoe:invalid" result="pass"/><test-case name="9431NISTXML-SV-II-atomic-unsignedLong-minExclusive-5-2 tokoe:invalid" result="pass"/><test-case name="9432NISTXML-SV-II-atomic-unsignedLong-minExclusive-5-3 tokoe:invalid" result="pass"/><test-case name="9433NISTXML-SV-II-atomic-unsignedLong-minExclusive-5-4 tokoe:invalid" result="pass"/><test-case name="9434NISTXML-SV-II-atomic-unsignedLong-minExclusive-5-5 tokoe:invalid" result="pass"/><test-case name="9435NISTSchema-SV-II-atomic-unsignedLong-maxExclusive-1 tokoe:valid" result="pass"/><test-case name="9436NISTXML-SV-II-atomic-unsignedLong-maxExclusive-1-1 tokoe:invalid" result="pass"/><test-case name="9437NISTXML-SV-II-atomic-unsignedLong-maxExclusive-1-2 tokoe:invalid" result="pass"/><test-case name="9438NISTXML-SV-II-atomic-unsignedLong-maxExclusive-1-3 tokoe:invalid" result="pass"/><test-case name="9439NISTXML-SV-II-atomic-unsignedLong-maxExclusive-1-4 tokoe:invalid" result="pass"/><test-case name="9440NISTXML-SV-II-atomic-unsignedLong-maxExclusive-1-5 tokoe:invalid" result="pass"/><test-case name="9441NISTSchema-SV-II-atomic-unsignedLong-maxExclusive-2 tokoe:valid" result="pass"/><test-case name="9442NISTXML-SV-II-atomic-unsignedLong-maxExclusive-2-1 tokoe:invalid" result="pass"/><test-case name="9443NISTXML-SV-II-atomic-unsignedLong-maxExclusive-2-2 tokoe:invalid" result="pass"/><test-case name="9444NISTXML-SV-II-atomic-unsignedLong-maxExclusive-2-3 tokoe:invalid" result="pass"/><test-case name="9445NISTXML-SV-II-atomic-unsignedLong-maxExclusive-2-4 tokoe:invalid" result="pass"/><test-case name="9446NISTXML-SV-II-atomic-unsignedLong-maxExclusive-2-5 tokoe:invalid" result="pass"/><test-case name="9447NISTSchema-SV-II-atomic-unsignedLong-maxExclusive-3 tokoe:valid" result="pass"/><test-case name="9448NISTXML-SV-II-atomic-unsignedLong-maxExclusive-3-1 tokoe:invalid" result="pass"/><test-case name="9449NISTXML-SV-II-atomic-unsignedLong-maxExclusive-3-2 tokoe:invalid" result="pass"/><test-case name="9450NISTXML-SV-II-atomic-unsignedLong-maxExclusive-3-3 tokoe:invalid" result="pass"/><test-case name="9451NISTXML-SV-II-atomic-unsignedLong-maxExclusive-3-4 tokoe:invalid" result="pass"/><test-case name="9452NISTXML-SV-II-atomic-unsignedLong-maxExclusive-3-5 tokoe:invalid" result="pass"/><test-case name="9453NISTSchema-SV-II-atomic-unsignedLong-maxExclusive-4 tokoe:valid" result="pass"/><test-case name="9454NISTXML-SV-II-atomic-unsignedLong-maxExclusive-4-1 tokoe:invalid" result="pass"/><test-case name="9455NISTXML-SV-II-atomic-unsignedLong-maxExclusive-4-2 tokoe:invalid" result="pass"/><test-case name="9456NISTXML-SV-II-atomic-unsignedLong-maxExclusive-4-3 tokoe:invalid" result="pass"/><test-case name="9457NISTXML-SV-II-atomic-unsignedLong-maxExclusive-4-4 tokoe:invalid" result="pass"/><test-case name="9458NISTXML-SV-II-atomic-unsignedLong-maxExclusive-4-5 tokoe:invalid" result="pass"/><test-case name="9459NISTSchema-SV-II-atomic-unsignedLong-maxExclusive-5 tokoe:valid" result="pass"/><test-case name="9460NISTXML-SV-II-atomic-unsignedLong-maxExclusive-5-1 tokoe:invalid" result="pass"/><test-case name="9461NISTSchema-SV-II-atomic-unsignedLong-pattern-1 tokoe:valid" result="pass"/><test-case name="9462NISTXML-SV-II-atomic-unsignedLong-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="9463NISTXML-SV-II-atomic-unsignedLong-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="9464NISTXML-SV-II-atomic-unsignedLong-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="9465NISTXML-SV-II-atomic-unsignedLong-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="9466NISTXML-SV-II-atomic-unsignedLong-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="9467NISTSchema-SV-II-atomic-unsignedLong-pattern-2 tokoe:valid" result="pass"/><test-case name="9468NISTXML-SV-II-atomic-unsignedLong-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="9469NISTXML-SV-II-atomic-unsignedLong-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="9470NISTXML-SV-II-atomic-unsignedLong-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="9471NISTXML-SV-II-atomic-unsignedLong-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="9472NISTXML-SV-II-atomic-unsignedLong-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="9473NISTSchema-SV-II-atomic-unsignedLong-pattern-3 tokoe:valid" result="pass"/><test-case name="9474NISTXML-SV-II-atomic-unsignedLong-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="9475NISTXML-SV-II-atomic-unsignedLong-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="9476NISTXML-SV-II-atomic-unsignedLong-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="9477NISTXML-SV-II-atomic-unsignedLong-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="9478NISTXML-SV-II-atomic-unsignedLong-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="9479NISTSchema-SV-II-atomic-unsignedLong-pattern-4 tokoe:valid" result="pass"/><test-case name="9480NISTXML-SV-II-atomic-unsignedLong-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="9481NISTXML-SV-II-atomic-unsignedLong-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="9482NISTXML-SV-II-atomic-unsignedLong-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="9483NISTXML-SV-II-atomic-unsignedLong-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="9484NISTXML-SV-II-atomic-unsignedLong-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="9485NISTSchema-SV-II-atomic-unsignedLong-pattern-5 tokoe:valid" result="pass"/><test-case name="9486NISTXML-SV-II-atomic-unsignedLong-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="9487NISTXML-SV-II-atomic-unsignedLong-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="9488NISTXML-SV-II-atomic-unsignedLong-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="9489NISTXML-SV-II-atomic-unsignedLong-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="9490NISTXML-SV-II-atomic-unsignedLong-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="9491NISTSchema-SV-II-atomic-unsignedLong-enumeration-1 tokoe:valid" result="pass"/><test-case name="9492NISTXML-SV-II-atomic-unsignedLong-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="9493NISTXML-SV-II-atomic-unsignedLong-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="9494NISTXML-SV-II-atomic-unsignedLong-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="9495NISTXML-SV-II-atomic-unsignedLong-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="9496NISTXML-SV-II-atomic-unsignedLong-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="9497NISTSchema-SV-II-atomic-unsignedLong-enumeration-2 tokoe:valid" result="pass"/><test-case name="9498NISTXML-SV-II-atomic-unsignedLong-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="9499NISTXML-SV-II-atomic-unsignedLong-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="9500NISTXML-SV-II-atomic-unsignedLong-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="9501NISTXML-SV-II-atomic-unsignedLong-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="9502NISTXML-SV-II-atomic-unsignedLong-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="9503NISTSchema-SV-II-atomic-unsignedLong-enumeration-3 tokoe:valid" result="pass"/><test-case name="9504NISTXML-SV-II-atomic-unsignedLong-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="9505NISTXML-SV-II-atomic-unsignedLong-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="9506NISTXML-SV-II-atomic-unsignedLong-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="9507NISTXML-SV-II-atomic-unsignedLong-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="9508NISTXML-SV-II-atomic-unsignedLong-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="9509NISTSchema-SV-II-atomic-unsignedLong-enumeration-4 tokoe:valid" result="pass"/><test-case name="9510NISTXML-SV-II-atomic-unsignedLong-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="9511NISTXML-SV-II-atomic-unsignedLong-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="9512NISTXML-SV-II-atomic-unsignedLong-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="9513NISTXML-SV-II-atomic-unsignedLong-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="9514NISTXML-SV-II-atomic-unsignedLong-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="9515NISTSchema-SV-II-atomic-unsignedLong-enumeration-5 tokoe:valid" result="pass"/><test-case name="9516NISTXML-SV-II-atomic-unsignedLong-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="9517NISTXML-SV-II-atomic-unsignedLong-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="9518NISTXML-SV-II-atomic-unsignedLong-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="9519NISTXML-SV-II-atomic-unsignedLong-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="9520NISTXML-SV-II-atomic-unsignedLong-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="9521NISTSchema-SV-II-atomic-unsignedInt-minExclusive-1 tokoe:valid" result="pass"/><test-case name="9522NISTXML-SV-II-atomic-unsignedInt-minExclusive-1-1 tokoe:invalid" result="pass"/><test-case name="9523NISTSchema-SV-II-atomic-unsignedInt-minExclusive-2 tokoe:valid" result="pass"/><test-case name="9524NISTXML-SV-II-atomic-unsignedInt-minExclusive-2-1 tokoe:invalid" result="pass"/><test-case name="9525NISTXML-SV-II-atomic-unsignedInt-minExclusive-2-2 tokoe:invalid" result="pass"/><test-case name="9526NISTXML-SV-II-atomic-unsignedInt-minExclusive-2-3 tokoe:invalid" result="pass"/><test-case name="9527NISTXML-SV-II-atomic-unsignedInt-minExclusive-2-4 tokoe:invalid" result="pass"/><test-case name="9528NISTXML-SV-II-atomic-unsignedInt-minExclusive-2-5 tokoe:invalid" result="pass"/><test-case name="9529NISTSchema-SV-II-atomic-unsignedInt-minExclusive-3 tokoe:valid" result="pass"/><test-case name="9530NISTXML-SV-II-atomic-unsignedInt-minExclusive-3-1 tokoe:invalid" result="pass"/><test-case name="9531NISTXML-SV-II-atomic-unsignedInt-minExclusive-3-2 tokoe:invalid" result="pass"/><test-case name="9532NISTXML-SV-II-atomic-unsignedInt-minExclusive-3-3 tokoe:invalid" result="pass"/><test-case name="9533NISTXML-SV-II-atomic-unsignedInt-minExclusive-3-4 tokoe:invalid" result="pass"/><test-case name="9534NISTXML-SV-II-atomic-unsignedInt-minExclusive-3-5 tokoe:invalid" result="pass"/><test-case name="9535NISTSchema-SV-II-atomic-unsignedInt-minExclusive-4 tokoe:valid" result="pass"/><test-case name="9536NISTXML-SV-II-atomic-unsignedInt-minExclusive-4-1 tokoe:invalid" result="pass"/><test-case name="9537NISTXML-SV-II-atomic-unsignedInt-minExclusive-4-2 tokoe:invalid" result="pass"/><test-case name="9538NISTXML-SV-II-atomic-unsignedInt-minExclusive-4-3 tokoe:invalid" result="pass"/><test-case name="9539NISTXML-SV-II-atomic-unsignedInt-minExclusive-4-4 tokoe:invalid" result="pass"/><test-case name="9540NISTXML-SV-II-atomic-unsignedInt-minExclusive-4-5 tokoe:invalid" result="pass"/><test-case name="9541NISTSchema-SV-II-atomic-unsignedInt-minExclusive-5 tokoe:valid" result="pass"/><test-case name="9542NISTXML-SV-II-atomic-unsignedInt-minExclusive-5-1 tokoe:invalid" result="pass"/><test-case name="9543NISTXML-SV-II-atomic-unsignedInt-minExclusive-5-2 tokoe:invalid" result="pass"/><test-case name="9544NISTXML-SV-II-atomic-unsignedInt-minExclusive-5-3 tokoe:invalid" result="pass"/><test-case name="9545NISTXML-SV-II-atomic-unsignedInt-minExclusive-5-4 tokoe:invalid" result="pass"/><test-case name="9546NISTXML-SV-II-atomic-unsignedInt-minExclusive-5-5 tokoe:invalid" result="pass"/><test-case name="9547NISTSchema-SV-II-atomic-unsignedInt-maxExclusive-1 tokoe:valid" result="pass"/><test-case name="9548NISTXML-SV-II-atomic-unsignedInt-maxExclusive-1-1 tokoe:invalid" result="pass"/><test-case name="9549NISTXML-SV-II-atomic-unsignedInt-maxExclusive-1-2 tokoe:invalid" result="pass"/><test-case name="9550NISTXML-SV-II-atomic-unsignedInt-maxExclusive-1-3 tokoe:invalid" result="pass"/><test-case name="9551NISTXML-SV-II-atomic-unsignedInt-maxExclusive-1-4 tokoe:invalid" result="pass"/><test-case name="9552NISTXML-SV-II-atomic-unsignedInt-maxExclusive-1-5 tokoe:invalid" result="pass"/><test-case name="9553NISTSchema-SV-II-atomic-unsignedInt-maxExclusive-2 tokoe:valid" result="pass"/><test-case name="9554NISTXML-SV-II-atomic-unsignedInt-maxExclusive-2-1 tokoe:invalid" result="pass"/><test-case name="9555NISTXML-SV-II-atomic-unsignedInt-maxExclusive-2-2 tokoe:invalid" result="pass"/><test-case name="9556NISTXML-SV-II-atomic-unsignedInt-maxExclusive-2-3 tokoe:invalid" result="pass"/><test-case name="9557NISTXML-SV-II-atomic-unsignedInt-maxExclusive-2-4 tokoe:invalid" result="pass"/><test-case name="9558NISTXML-SV-II-atomic-unsignedInt-maxExclusive-2-5 tokoe:invalid" result="pass"/><test-case name="9559NISTSchema-SV-II-atomic-unsignedInt-maxExclusive-3 tokoe:valid" result="pass"/><test-case name="9560NISTXML-SV-II-atomic-unsignedInt-maxExclusive-3-1 tokoe:invalid" result="pass"/><test-case name="9561NISTXML-SV-II-atomic-unsignedInt-maxExclusive-3-2 tokoe:invalid" result="pass"/><test-case name="9562NISTXML-SV-II-atomic-unsignedInt-maxExclusive-3-3 tokoe:invalid" result="pass"/><test-case name="9563NISTXML-SV-II-atomic-unsignedInt-maxExclusive-3-4 tokoe:invalid" result="pass"/><test-case name="9564NISTXML-SV-II-atomic-unsignedInt-maxExclusive-3-5 tokoe:invalid" result="pass"/><test-case name="9565NISTSchema-SV-II-atomic-unsignedInt-maxExclusive-4 tokoe:valid" result="pass"/><test-case name="9566NISTXML-SV-II-atomic-unsignedInt-maxExclusive-4-1 tokoe:invalid" result="pass"/><test-case name="9567NISTXML-SV-II-atomic-unsignedInt-maxExclusive-4-2 tokoe:invalid" result="pass"/><test-case name="9568NISTXML-SV-II-atomic-unsignedInt-maxExclusive-4-3 tokoe:invalid" result="pass"/><test-case name="9569NISTXML-SV-II-atomic-unsignedInt-maxExclusive-4-4 tokoe:invalid" result="pass"/><test-case name="9570NISTXML-SV-II-atomic-unsignedInt-maxExclusive-4-5 tokoe:invalid" result="pass"/><test-case name="9571NISTSchema-SV-II-atomic-unsignedInt-maxExclusive-5 tokoe:valid" result="pass"/><test-case name="9572NISTXML-SV-II-atomic-unsignedInt-maxExclusive-5-1 tokoe:invalid" result="pass"/><test-case name="9573NISTSchema-SV-II-atomic-unsignedInt-pattern-1 tokoe:valid" result="pass"/><test-case name="9574NISTXML-SV-II-atomic-unsignedInt-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="9575NISTXML-SV-II-atomic-unsignedInt-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="9576NISTXML-SV-II-atomic-unsignedInt-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="9577NISTXML-SV-II-atomic-unsignedInt-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="9578NISTXML-SV-II-atomic-unsignedInt-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="9579NISTSchema-SV-II-atomic-unsignedInt-pattern-2 tokoe:valid" result="pass"/><test-case name="9580NISTXML-SV-II-atomic-unsignedInt-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="9581NISTXML-SV-II-atomic-unsignedInt-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="9582NISTXML-SV-II-atomic-unsignedInt-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="9583NISTXML-SV-II-atomic-unsignedInt-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="9584NISTXML-SV-II-atomic-unsignedInt-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="9585NISTSchema-SV-II-atomic-unsignedInt-pattern-3 tokoe:valid" result="pass"/><test-case name="9586NISTXML-SV-II-atomic-unsignedInt-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="9587NISTXML-SV-II-atomic-unsignedInt-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="9588NISTXML-SV-II-atomic-unsignedInt-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="9589NISTXML-SV-II-atomic-unsignedInt-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="9590NISTXML-SV-II-atomic-unsignedInt-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="9591NISTSchema-SV-II-atomic-unsignedInt-pattern-4 tokoe:valid" result="pass"/><test-case name="9592NISTXML-SV-II-atomic-unsignedInt-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="9593NISTXML-SV-II-atomic-unsignedInt-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="9594NISTXML-SV-II-atomic-unsignedInt-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="9595NISTXML-SV-II-atomic-unsignedInt-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="9596NISTXML-SV-II-atomic-unsignedInt-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="9597NISTSchema-SV-II-atomic-unsignedInt-pattern-5 tokoe:valid" result="pass"/><test-case name="9598NISTXML-SV-II-atomic-unsignedInt-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="9599NISTXML-SV-II-atomic-unsignedInt-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="9600NISTXML-SV-II-atomic-unsignedInt-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="9601NISTXML-SV-II-atomic-unsignedInt-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="9602NISTXML-SV-II-atomic-unsignedInt-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="9603NISTSchema-SV-II-atomic-unsignedInt-enumeration-1 tokoe:valid" result="pass"/><test-case name="9604NISTXML-SV-II-atomic-unsignedInt-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="9605NISTXML-SV-II-atomic-unsignedInt-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="9606NISTXML-SV-II-atomic-unsignedInt-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="9607NISTXML-SV-II-atomic-unsignedInt-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="9608NISTXML-SV-II-atomic-unsignedInt-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="9609NISTSchema-SV-II-atomic-unsignedInt-enumeration-2 tokoe:valid" result="pass"/><test-case name="9610NISTXML-SV-II-atomic-unsignedInt-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="9611NISTXML-SV-II-atomic-unsignedInt-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="9612NISTXML-SV-II-atomic-unsignedInt-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="9613NISTXML-SV-II-atomic-unsignedInt-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="9614NISTXML-SV-II-atomic-unsignedInt-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="9615NISTSchema-SV-II-atomic-unsignedInt-enumeration-3 tokoe:valid" result="pass"/><test-case name="9616NISTXML-SV-II-atomic-unsignedInt-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="9617NISTXML-SV-II-atomic-unsignedInt-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="9618NISTXML-SV-II-atomic-unsignedInt-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="9619NISTXML-SV-II-atomic-unsignedInt-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="9620NISTXML-SV-II-atomic-unsignedInt-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="9621NISTSchema-SV-II-atomic-unsignedInt-enumeration-4 tokoe:valid" result="pass"/><test-case name="9622NISTXML-SV-II-atomic-unsignedInt-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="9623NISTXML-SV-II-atomic-unsignedInt-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="9624NISTXML-SV-II-atomic-unsignedInt-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="9625NISTXML-SV-II-atomic-unsignedInt-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="9626NISTXML-SV-II-atomic-unsignedInt-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="9627NISTSchema-SV-II-atomic-unsignedInt-enumeration-5 tokoe:valid" result="pass"/><test-case name="9628NISTXML-SV-II-atomic-unsignedInt-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="9629NISTXML-SV-II-atomic-unsignedInt-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="9630NISTXML-SV-II-atomic-unsignedInt-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="9631NISTXML-SV-II-atomic-unsignedInt-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="9632NISTXML-SV-II-atomic-unsignedInt-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="9633NISTSchema-SV-II-atomic-unsignedShort-minExclusive-1 tokoe:valid" result="pass"/><test-case name="9634NISTXML-SV-II-atomic-unsignedShort-minExclusive-1-1 tokoe:invalid" result="pass"/><test-case name="9635NISTSchema-SV-II-atomic-unsignedShort-minExclusive-2 tokoe:valid" result="pass"/><test-case name="9636NISTXML-SV-II-atomic-unsignedShort-minExclusive-2-1 tokoe:invalid" result="pass"/><test-case name="9637NISTXML-SV-II-atomic-unsignedShort-minExclusive-2-2 tokoe:invalid" result="pass"/><test-case name="9638NISTXML-SV-II-atomic-unsignedShort-minExclusive-2-3 tokoe:invalid" result="pass"/><test-case name="9639NISTXML-SV-II-atomic-unsignedShort-minExclusive-2-4 tokoe:invalid" result="pass"/><test-case name="9640NISTXML-SV-II-atomic-unsignedShort-minExclusive-2-5 tokoe:invalid" result="pass"/><test-case name="9641NISTSchema-SV-II-atomic-unsignedShort-minExclusive-3 tokoe:valid" result="pass"/><test-case name="9642NISTXML-SV-II-atomic-unsignedShort-minExclusive-3-1 tokoe:invalid" result="pass"/><test-case name="9643NISTXML-SV-II-atomic-unsignedShort-minExclusive-3-2 tokoe:invalid" result="pass"/><test-case name="9644NISTXML-SV-II-atomic-unsignedShort-minExclusive-3-3 tokoe:invalid" result="pass"/><test-case name="9645NISTXML-SV-II-atomic-unsignedShort-minExclusive-3-4 tokoe:invalid" result="pass"/><test-case name="9646NISTXML-SV-II-atomic-unsignedShort-minExclusive-3-5 tokoe:invalid" result="pass"/><test-case name="9647NISTSchema-SV-II-atomic-unsignedShort-minExclusive-4 tokoe:valid" result="pass"/><test-case name="9648NISTXML-SV-II-atomic-unsignedShort-minExclusive-4-1 tokoe:invalid" result="pass"/><test-case name="9649NISTXML-SV-II-atomic-unsignedShort-minExclusive-4-2 tokoe:invalid" result="pass"/><test-case name="9650NISTXML-SV-II-atomic-unsignedShort-minExclusive-4-3 tokoe:invalid" result="pass"/><test-case name="9651NISTXML-SV-II-atomic-unsignedShort-minExclusive-4-4 tokoe:invalid" result="pass"/><test-case name="9652NISTXML-SV-II-atomic-unsignedShort-minExclusive-4-5 tokoe:invalid" result="pass"/><test-case name="9653NISTSchema-SV-II-atomic-unsignedShort-minExclusive-5 tokoe:valid" result="pass"/><test-case name="9654NISTXML-SV-II-atomic-unsignedShort-minExclusive-5-1 tokoe:invalid" result="pass"/><test-case name="9655NISTXML-SV-II-atomic-unsignedShort-minExclusive-5-2 tokoe:invalid" result="pass"/><test-case name="9656NISTXML-SV-II-atomic-unsignedShort-minExclusive-5-3 tokoe:invalid" result="pass"/><test-case name="9657NISTXML-SV-II-atomic-unsignedShort-minExclusive-5-4 tokoe:invalid" result="pass"/><test-case name="9658NISTXML-SV-II-atomic-unsignedShort-minExclusive-5-5 tokoe:invalid" result="pass"/><test-case name="9659NISTSchema-SV-II-atomic-unsignedShort-maxExclusive-1 tokoe:valid" result="pass"/><test-case name="9660NISTXML-SV-II-atomic-unsignedShort-maxExclusive-1-1 tokoe:invalid" result="pass"/><test-case name="9661NISTXML-SV-II-atomic-unsignedShort-maxExclusive-1-2 tokoe:invalid" result="pass"/><test-case name="9662NISTXML-SV-II-atomic-unsignedShort-maxExclusive-1-3 tokoe:invalid" result="pass"/><test-case name="9663NISTXML-SV-II-atomic-unsignedShort-maxExclusive-1-4 tokoe:invalid" result="pass"/><test-case name="9664NISTXML-SV-II-atomic-unsignedShort-maxExclusive-1-5 tokoe:invalid" result="pass"/><test-case name="9665NISTSchema-SV-II-atomic-unsignedShort-maxExclusive-2 tokoe:valid" result="pass"/><test-case name="9666NISTXML-SV-II-atomic-unsignedShort-maxExclusive-2-1 tokoe:invalid" result="pass"/><test-case name="9667NISTXML-SV-II-atomic-unsignedShort-maxExclusive-2-2 tokoe:invalid" result="pass"/><test-case name="9668NISTXML-SV-II-atomic-unsignedShort-maxExclusive-2-3 tokoe:invalid" result="pass"/><test-case name="9669NISTXML-SV-II-atomic-unsignedShort-maxExclusive-2-4 tokoe:invalid" result="pass"/><test-case name="9670NISTXML-SV-II-atomic-unsignedShort-maxExclusive-2-5 tokoe:invalid" result="pass"/><test-case name="9671NISTSchema-SV-II-atomic-unsignedShort-maxExclusive-3 tokoe:valid" result="pass"/><test-case name="9672NISTXML-SV-II-atomic-unsignedShort-maxExclusive-3-1 tokoe:invalid" result="pass"/><test-case name="9673NISTXML-SV-II-atomic-unsignedShort-maxExclusive-3-2 tokoe:invalid" result="pass"/><test-case name="9674NISTXML-SV-II-atomic-unsignedShort-maxExclusive-3-3 tokoe:invalid" result="pass"/><test-case name="9675NISTXML-SV-II-atomic-unsignedShort-maxExclusive-3-4 tokoe:invalid" result="pass"/><test-case name="9676NISTXML-SV-II-atomic-unsignedShort-maxExclusive-3-5 tokoe:invalid" result="pass"/><test-case name="9677NISTSchema-SV-II-atomic-unsignedShort-maxExclusive-4 tokoe:valid" result="pass"/><test-case name="9678NISTXML-SV-II-atomic-unsignedShort-maxExclusive-4-1 tokoe:invalid" result="pass"/><test-case name="9679NISTXML-SV-II-atomic-unsignedShort-maxExclusive-4-2 tokoe:invalid" result="pass"/><test-case name="9680NISTXML-SV-II-atomic-unsignedShort-maxExclusive-4-3 tokoe:invalid" result="pass"/><test-case name="9681NISTXML-SV-II-atomic-unsignedShort-maxExclusive-4-4 tokoe:invalid" result="pass"/><test-case name="9682NISTXML-SV-II-atomic-unsignedShort-maxExclusive-4-5 tokoe:invalid" result="pass"/><test-case name="9683NISTSchema-SV-II-atomic-unsignedShort-maxExclusive-5 tokoe:valid" result="pass"/><test-case name="9684NISTXML-SV-II-atomic-unsignedShort-maxExclusive-5-1 tokoe:invalid" result="pass"/><test-case name="9685NISTSchema-SV-II-atomic-unsignedShort-pattern-1 tokoe:valid" result="pass"/><test-case name="9686NISTXML-SV-II-atomic-unsignedShort-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="9687NISTXML-SV-II-atomic-unsignedShort-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="9688NISTXML-SV-II-atomic-unsignedShort-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="9689NISTXML-SV-II-atomic-unsignedShort-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="9690NISTXML-SV-II-atomic-unsignedShort-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="9691NISTSchema-SV-II-atomic-unsignedShort-pattern-2 tokoe:valid" result="pass"/><test-case name="9692NISTXML-SV-II-atomic-unsignedShort-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="9693NISTXML-SV-II-atomic-unsignedShort-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="9694NISTXML-SV-II-atomic-unsignedShort-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="9695NISTXML-SV-II-atomic-unsignedShort-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="9696NISTXML-SV-II-atomic-unsignedShort-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="9697NISTSchema-SV-II-atomic-unsignedShort-pattern-3 tokoe:valid" result="pass"/><test-case name="9698NISTXML-SV-II-atomic-unsignedShort-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="9699NISTXML-SV-II-atomic-unsignedShort-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="9700NISTXML-SV-II-atomic-unsignedShort-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="9701NISTXML-SV-II-atomic-unsignedShort-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="9702NISTXML-SV-II-atomic-unsignedShort-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="9703NISTSchema-SV-II-atomic-unsignedShort-pattern-4 tokoe:valid" result="pass"/><test-case name="9704NISTXML-SV-II-atomic-unsignedShort-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="9705NISTXML-SV-II-atomic-unsignedShort-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="9706NISTXML-SV-II-atomic-unsignedShort-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="9707NISTXML-SV-II-atomic-unsignedShort-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="9708NISTXML-SV-II-atomic-unsignedShort-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="9709NISTSchema-SV-II-atomic-unsignedShort-pattern-5 tokoe:valid" result="pass"/><test-case name="9710NISTXML-SV-II-atomic-unsignedShort-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="9711NISTXML-SV-II-atomic-unsignedShort-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="9712NISTXML-SV-II-atomic-unsignedShort-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="9713NISTXML-SV-II-atomic-unsignedShort-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="9714NISTXML-SV-II-atomic-unsignedShort-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="9715NISTSchema-SV-II-atomic-unsignedShort-enumeration-1 tokoe:valid" result="pass"/><test-case name="9716NISTXML-SV-II-atomic-unsignedShort-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="9717NISTXML-SV-II-atomic-unsignedShort-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="9718NISTXML-SV-II-atomic-unsignedShort-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="9719NISTXML-SV-II-atomic-unsignedShort-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="9720NISTXML-SV-II-atomic-unsignedShort-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="9721NISTSchema-SV-II-atomic-unsignedShort-enumeration-2 tokoe:valid" result="pass"/><test-case name="9722NISTXML-SV-II-atomic-unsignedShort-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="9723NISTXML-SV-II-atomic-unsignedShort-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="9724NISTXML-SV-II-atomic-unsignedShort-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="9725NISTXML-SV-II-atomic-unsignedShort-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="9726NISTXML-SV-II-atomic-unsignedShort-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="9727NISTSchema-SV-II-atomic-unsignedShort-enumeration-3 tokoe:valid" result="pass"/><test-case name="9728NISTXML-SV-II-atomic-unsignedShort-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="9729NISTXML-SV-II-atomic-unsignedShort-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="9730NISTXML-SV-II-atomic-unsignedShort-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="9731NISTXML-SV-II-atomic-unsignedShort-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="9732NISTXML-SV-II-atomic-unsignedShort-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="9733NISTSchema-SV-II-atomic-unsignedShort-enumeration-4 tokoe:valid" result="pass"/><test-case name="9734NISTXML-SV-II-atomic-unsignedShort-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="9735NISTXML-SV-II-atomic-unsignedShort-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="9736NISTXML-SV-II-atomic-unsignedShort-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="9737NISTXML-SV-II-atomic-unsignedShort-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="9738NISTXML-SV-II-atomic-unsignedShort-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="9739NISTSchema-SV-II-atomic-unsignedShort-enumeration-5 tokoe:valid" result="pass"/><test-case name="9740NISTXML-SV-II-atomic-unsignedShort-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="9741NISTXML-SV-II-atomic-unsignedShort-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="9742NISTXML-SV-II-atomic-unsignedShort-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="9743NISTXML-SV-II-atomic-unsignedShort-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="9744NISTXML-SV-II-atomic-unsignedShort-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="9745NISTSchema-SV-II-atomic-unsignedByte-minExclusive-1 tokoe:valid" result="pass"/><test-case name="9746NISTXML-SV-II-atomic-unsignedByte-minExclusive-1-1 tokoe:invalid" result="pass"/><test-case name="9747NISTSchema-SV-II-atomic-unsignedByte-minExclusive-2 tokoe:valid" result="pass"/><test-case name="9748NISTXML-SV-II-atomic-unsignedByte-minExclusive-2-1 tokoe:invalid" result="pass"/><test-case name="9749NISTXML-SV-II-atomic-unsignedByte-minExclusive-2-2 tokoe:invalid" result="pass"/><test-case name="9750NISTXML-SV-II-atomic-unsignedByte-minExclusive-2-3 tokoe:invalid" result="pass"/><test-case name="9751NISTXML-SV-II-atomic-unsignedByte-minExclusive-2-4 tokoe:invalid" result="pass"/><test-case name="9752NISTXML-SV-II-atomic-unsignedByte-minExclusive-2-5 tokoe:invalid" result="pass"/><test-case name="9753NISTSchema-SV-II-atomic-unsignedByte-minExclusive-3 tokoe:valid" result="pass"/><test-case name="9754NISTXML-SV-II-atomic-unsignedByte-minExclusive-3-1 tokoe:invalid" result="pass"/><test-case name="9755NISTXML-SV-II-atomic-unsignedByte-minExclusive-3-2 tokoe:invalid" result="pass"/><test-case name="9756NISTXML-SV-II-atomic-unsignedByte-minExclusive-3-3 tokoe:invalid" result="pass"/><test-case name="9757NISTXML-SV-II-atomic-unsignedByte-minExclusive-3-4 tokoe:invalid" result="pass"/><test-case name="9758NISTXML-SV-II-atomic-unsignedByte-minExclusive-3-5 tokoe:invalid" result="pass"/><test-case name="9759NISTSchema-SV-II-atomic-unsignedByte-minExclusive-4 tokoe:valid" result="pass"/><test-case name="9760NISTXML-SV-II-atomic-unsignedByte-minExclusive-4-1 tokoe:invalid" result="pass"/><test-case name="9761NISTXML-SV-II-atomic-unsignedByte-minExclusive-4-2 tokoe:invalid" result="pass"/><test-case name="9762NISTXML-SV-II-atomic-unsignedByte-minExclusive-4-3 tokoe:invalid" result="pass"/><test-case name="9763NISTXML-SV-II-atomic-unsignedByte-minExclusive-4-4 tokoe:invalid" result="pass"/><test-case name="9764NISTXML-SV-II-atomic-unsignedByte-minExclusive-4-5 tokoe:invalid" result="pass"/><test-case name="9765NISTSchema-SV-II-atomic-unsignedByte-minExclusive-5 tokoe:valid" result="pass"/><test-case name="9766NISTXML-SV-II-atomic-unsignedByte-minExclusive-5-1 tokoe:invalid" result="pass"/><test-case name="9767NISTXML-SV-II-atomic-unsignedByte-minExclusive-5-2 tokoe:invalid" result="pass"/><test-case name="9768NISTXML-SV-II-atomic-unsignedByte-minExclusive-5-3 tokoe:invalid" result="pass"/><test-case name="9769NISTXML-SV-II-atomic-unsignedByte-minExclusive-5-4 tokoe:invalid" result="pass"/><test-case name="9770NISTXML-SV-II-atomic-unsignedByte-minExclusive-5-5 tokoe:invalid" result="pass"/><test-case name="9771NISTSchema-SV-II-atomic-unsignedByte-maxExclusive-1 tokoe:valid" result="pass"/><test-case name="9772NISTXML-SV-II-atomic-unsignedByte-maxExclusive-1-1 tokoe:invalid" result="pass"/><test-case name="9773NISTXML-SV-II-atomic-unsignedByte-maxExclusive-1-2 tokoe:invalid" result="pass"/><test-case name="9774NISTXML-SV-II-atomic-unsignedByte-maxExclusive-1-3 tokoe:invalid" result="pass"/><test-case name="9775NISTXML-SV-II-atomic-unsignedByte-maxExclusive-1-4 tokoe:invalid" result="pass"/><test-case name="9776NISTXML-SV-II-atomic-unsignedByte-maxExclusive-1-5 tokoe:invalid" result="pass"/><test-case name="9777NISTSchema-SV-II-atomic-unsignedByte-maxExclusive-2 tokoe:valid" result="pass"/><test-case name="9778NISTXML-SV-II-atomic-unsignedByte-maxExclusive-2-1 tokoe:invalid" result="pass"/><test-case name="9779NISTXML-SV-II-atomic-unsignedByte-maxExclusive-2-2 tokoe:invalid" result="pass"/><test-case name="9780NISTXML-SV-II-atomic-unsignedByte-maxExclusive-2-3 tokoe:invalid" result="pass"/><test-case name="9781NISTXML-SV-II-atomic-unsignedByte-maxExclusive-2-4 tokoe:invalid" result="pass"/><test-case name="9782NISTXML-SV-II-atomic-unsignedByte-maxExclusive-2-5 tokoe:invalid" result="pass"/><test-case name="9783NISTSchema-SV-II-atomic-unsignedByte-maxExclusive-3 tokoe:valid" result="pass"/><test-case name="9784NISTXML-SV-II-atomic-unsignedByte-maxExclusive-3-1 tokoe:invalid" result="pass"/><test-case name="9785NISTXML-SV-II-atomic-unsignedByte-maxExclusive-3-2 tokoe:invalid" result="pass"/><test-case name="9786NISTXML-SV-II-atomic-unsignedByte-maxExclusive-3-3 tokoe:invalid" result="pass"/><test-case name="9787NISTXML-SV-II-atomic-unsignedByte-maxExclusive-3-4 tokoe:invalid" result="pass"/><test-case name="9788NISTXML-SV-II-atomic-unsignedByte-maxExclusive-3-5 tokoe:invalid" result="pass"/><test-case name="9789NISTSchema-SV-II-atomic-unsignedByte-maxExclusive-4 tokoe:valid" result="pass"/><test-case name="9790NISTXML-SV-II-atomic-unsignedByte-maxExclusive-4-1 tokoe:invalid" result="pass"/><test-case name="9791NISTXML-SV-II-atomic-unsignedByte-maxExclusive-4-2 tokoe:invalid" result="pass"/><test-case name="9792NISTXML-SV-II-atomic-unsignedByte-maxExclusive-4-3 tokoe:invalid" result="pass"/><test-case name="9793NISTXML-SV-II-atomic-unsignedByte-maxExclusive-4-4 tokoe:invalid" result="pass"/><test-case name="9794NISTXML-SV-II-atomic-unsignedByte-maxExclusive-4-5 tokoe:invalid" result="pass"/><test-case name="9795NISTSchema-SV-II-atomic-unsignedByte-maxExclusive-5 tokoe:valid" result="pass"/><test-case name="9796NISTXML-SV-II-atomic-unsignedByte-maxExclusive-5-1 tokoe:invalid" result="pass"/><test-case name="9797NISTSchema-SV-II-atomic-unsignedByte-pattern-1 tokoe:valid" result="pass"/><test-case name="9798NISTXML-SV-II-atomic-unsignedByte-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="9799NISTXML-SV-II-atomic-unsignedByte-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="9800NISTXML-SV-II-atomic-unsignedByte-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="9801NISTXML-SV-II-atomic-unsignedByte-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="9802NISTXML-SV-II-atomic-unsignedByte-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="9803NISTSchema-SV-II-atomic-unsignedByte-pattern-2 tokoe:valid" result="pass"/><test-case name="9804NISTXML-SV-II-atomic-unsignedByte-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="9805NISTXML-SV-II-atomic-unsignedByte-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="9806NISTXML-SV-II-atomic-unsignedByte-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="9807NISTXML-SV-II-atomic-unsignedByte-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="9808NISTXML-SV-II-atomic-unsignedByte-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="9809NISTSchema-SV-II-atomic-unsignedByte-pattern-3 tokoe:valid" result="pass"/><test-case name="9810NISTXML-SV-II-atomic-unsignedByte-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="9811NISTXML-SV-II-atomic-unsignedByte-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="9812NISTXML-SV-II-atomic-unsignedByte-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="9813NISTXML-SV-II-atomic-unsignedByte-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="9814NISTXML-SV-II-atomic-unsignedByte-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="9815NISTSchema-SV-II-atomic-unsignedByte-pattern-4 tokoe:valid" result="pass"/><test-case name="9816NISTXML-SV-II-atomic-unsignedByte-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="9817NISTXML-SV-II-atomic-unsignedByte-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="9818NISTXML-SV-II-atomic-unsignedByte-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="9819NISTXML-SV-II-atomic-unsignedByte-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="9820NISTXML-SV-II-atomic-unsignedByte-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="9821NISTSchema-SV-II-atomic-unsignedByte-pattern-5 tokoe:valid" result="pass"/><test-case name="9822NISTXML-SV-II-atomic-unsignedByte-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="9823NISTXML-SV-II-atomic-unsignedByte-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="9824NISTXML-SV-II-atomic-unsignedByte-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="9825NISTXML-SV-II-atomic-unsignedByte-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="9826NISTXML-SV-II-atomic-unsignedByte-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="9827NISTSchema-SV-II-atomic-unsignedByte-enumeration-1 tokoe:valid" result="pass"/><test-case name="9828NISTXML-SV-II-atomic-unsignedByte-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="9829NISTXML-SV-II-atomic-unsignedByte-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="9830NISTXML-SV-II-atomic-unsignedByte-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="9831NISTXML-SV-II-atomic-unsignedByte-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="9832NISTXML-SV-II-atomic-unsignedByte-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="9833NISTSchema-SV-II-atomic-unsignedByte-enumeration-2 tokoe:valid" result="pass"/><test-case name="9834NISTXML-SV-II-atomic-unsignedByte-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="9835NISTXML-SV-II-atomic-unsignedByte-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="9836NISTXML-SV-II-atomic-unsignedByte-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="9837NISTXML-SV-II-atomic-unsignedByte-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="9838NISTXML-SV-II-atomic-unsignedByte-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="9839NISTSchema-SV-II-atomic-unsignedByte-enumeration-3 tokoe:valid" result="pass"/><test-case name="9840NISTXML-SV-II-atomic-unsignedByte-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="9841NISTXML-SV-II-atomic-unsignedByte-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="9842NISTXML-SV-II-atomic-unsignedByte-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="9843NISTXML-SV-II-atomic-unsignedByte-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="9844NISTXML-SV-II-atomic-unsignedByte-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="9845NISTSchema-SV-II-atomic-unsignedByte-enumeration-4 tokoe:valid" result="pass"/><test-case name="9846NISTXML-SV-II-atomic-unsignedByte-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="9847NISTXML-SV-II-atomic-unsignedByte-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="9848NISTXML-SV-II-atomic-unsignedByte-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="9849NISTXML-SV-II-atomic-unsignedByte-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="9850NISTXML-SV-II-atomic-unsignedByte-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="9851NISTSchema-SV-II-atomic-unsignedByte-enumeration-5 tokoe:valid" result="pass"/><test-case name="9852NISTXML-SV-II-atomic-unsignedByte-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="9853NISTXML-SV-II-atomic-unsignedByte-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="9854NISTXML-SV-II-atomic-unsignedByte-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="9855NISTXML-SV-II-atomic-unsignedByte-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="9856NISTXML-SV-II-atomic-unsignedByte-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="9857NISTSchema-SV-II-atomic-positiveInteger-minExclusive-1 tokoe:valid" result="pass"/><test-case name="9858NISTXML-SV-II-atomic-positiveInteger-minExclusive-1-1 tokoe:invalid" result="pass"/><test-case name="9859NISTSchema-SV-II-atomic-positiveInteger-minExclusive-2 tokoe:valid" result="pass"/><test-case name="9860NISTXML-SV-II-atomic-positiveInteger-minExclusive-2-1 tokoe:invalid" result="pass"/><test-case name="9861NISTXML-SV-II-atomic-positiveInteger-minExclusive-2-2 tokoe:invalid" result="pass"/><test-case name="9862NISTXML-SV-II-atomic-positiveInteger-minExclusive-2-3 tokoe:invalid" result="pass"/><test-case name="9863NISTXML-SV-II-atomic-positiveInteger-minExclusive-2-4 tokoe:invalid" result="pass"/><test-case name="9864NISTXML-SV-II-atomic-positiveInteger-minExclusive-2-5 tokoe:invalid" result="pass"/><test-case name="9865NISTSchema-SV-II-atomic-positiveInteger-minExclusive-3 tokoe:valid" result="pass"/><test-case name="9866NISTXML-SV-II-atomic-positiveInteger-minExclusive-3-1 tokoe:invalid" result="pass"/><test-case name="9867NISTXML-SV-II-atomic-positiveInteger-minExclusive-3-2 tokoe:invalid" result="pass"/><test-case name="9868NISTXML-SV-II-atomic-positiveInteger-minExclusive-3-3 tokoe:invalid" result="pass"/><test-case name="9869NISTXML-SV-II-atomic-positiveInteger-minExclusive-3-4 tokoe:invalid" result="pass"/><test-case name="9870NISTXML-SV-II-atomic-positiveInteger-minExclusive-3-5 tokoe:invalid" result="pass"/><test-case name="9871NISTSchema-SV-II-atomic-positiveInteger-minExclusive-4 tokoe:valid" result="pass"/><test-case name="9872NISTXML-SV-II-atomic-positiveInteger-minExclusive-4-1 tokoe:invalid" result="pass"/><test-case name="9873NISTXML-SV-II-atomic-positiveInteger-minExclusive-4-2 tokoe:invalid" result="pass"/><test-case name="9874NISTXML-SV-II-atomic-positiveInteger-minExclusive-4-3 tokoe:invalid" result="pass"/><test-case name="9875NISTXML-SV-II-atomic-positiveInteger-minExclusive-4-4 tokoe:invalid" result="pass"/><test-case name="9876NISTXML-SV-II-atomic-positiveInteger-minExclusive-4-5 tokoe:invalid" result="pass"/><test-case name="9877NISTSchema-SV-II-atomic-positiveInteger-minExclusive-5 tokoe:valid" result="pass"/><test-case name="9878NISTXML-SV-II-atomic-positiveInteger-minExclusive-5-1 tokoe:invalid" result="pass"/><test-case name="9879NISTXML-SV-II-atomic-positiveInteger-minExclusive-5-2 tokoe:invalid" result="pass"/><test-case name="9880NISTXML-SV-II-atomic-positiveInteger-minExclusive-5-3 tokoe:invalid" result="pass"/><test-case name="9881NISTXML-SV-II-atomic-positiveInteger-minExclusive-5-4 tokoe:invalid" result="pass"/><test-case name="9882NISTXML-SV-II-atomic-positiveInteger-minExclusive-5-5 tokoe:invalid" result="pass"/><test-case name="9883NISTSchema-SV-II-atomic-positiveInteger-maxExclusive-1 tokoe:valid" result="pass"/><test-case name="9884NISTXML-SV-II-atomic-positiveInteger-maxExclusive-1-1 tokoe:invalid" result="pass"/><test-case name="9885NISTXML-SV-II-atomic-positiveInteger-maxExclusive-1-2 tokoe:invalid" result="pass"/><test-case name="9886NISTXML-SV-II-atomic-positiveInteger-maxExclusive-1-3 tokoe:invalid" result="pass"/><test-case name="9887NISTXML-SV-II-atomic-positiveInteger-maxExclusive-1-4 tokoe:invalid" result="pass"/><test-case name="9888NISTXML-SV-II-atomic-positiveInteger-maxExclusive-1-5 tokoe:invalid" result="pass"/><test-case name="9889NISTSchema-SV-II-atomic-positiveInteger-maxExclusive-2 tokoe:valid" result="pass"/><test-case name="9890NISTXML-SV-II-atomic-positiveInteger-maxExclusive-2-1 tokoe:invalid" result="pass"/><test-case name="9891NISTXML-SV-II-atomic-positiveInteger-maxExclusive-2-2 tokoe:invalid" result="pass"/><test-case name="9892NISTXML-SV-II-atomic-positiveInteger-maxExclusive-2-3 tokoe:invalid" result="pass"/><test-case name="9893NISTXML-SV-II-atomic-positiveInteger-maxExclusive-2-4 tokoe:invalid" result="pass"/><test-case name="9894NISTXML-SV-II-atomic-positiveInteger-maxExclusive-2-5 tokoe:invalid" result="pass"/><test-case name="9895NISTSchema-SV-II-atomic-positiveInteger-maxExclusive-3 tokoe:valid" result="pass"/><test-case name="9896NISTXML-SV-II-atomic-positiveInteger-maxExclusive-3-1 tokoe:invalid" result="pass"/><test-case name="9897NISTXML-SV-II-atomic-positiveInteger-maxExclusive-3-2 tokoe:invalid" result="pass"/><test-case name="9898NISTXML-SV-II-atomic-positiveInteger-maxExclusive-3-3 tokoe:invalid" result="pass"/><test-case name="9899NISTXML-SV-II-atomic-positiveInteger-maxExclusive-3-4 tokoe:invalid" result="pass"/><test-case name="9900NISTXML-SV-II-atomic-positiveInteger-maxExclusive-3-5 tokoe:invalid" result="pass"/><test-case name="9901NISTSchema-SV-II-atomic-positiveInteger-maxExclusive-4 tokoe:valid" result="pass"/><test-case name="9902NISTXML-SV-II-atomic-positiveInteger-maxExclusive-4-1 tokoe:invalid" result="pass"/><test-case name="9903NISTXML-SV-II-atomic-positiveInteger-maxExclusive-4-2 tokoe:invalid" result="pass"/><test-case name="9904NISTXML-SV-II-atomic-positiveInteger-maxExclusive-4-3 tokoe:invalid" result="pass"/><test-case name="9905NISTXML-SV-II-atomic-positiveInteger-maxExclusive-4-4 tokoe:invalid" result="pass"/><test-case name="9906NISTXML-SV-II-atomic-positiveInteger-maxExclusive-4-5 tokoe:invalid" result="pass"/><test-case name="9907NISTSchema-SV-II-atomic-positiveInteger-maxExclusive-5 tokoe:valid" result="pass"/><test-case name="9908NISTXML-SV-II-atomic-positiveInteger-maxExclusive-5-1 tokoe:invalid" result="pass"/><test-case name="9909NISTSchema-SV-II-atomic-positiveInteger-pattern-1 tokoe:valid" result="pass"/><test-case name="9910NISTXML-SV-II-atomic-positiveInteger-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="9911NISTXML-SV-II-atomic-positiveInteger-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="9912NISTXML-SV-II-atomic-positiveInteger-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="9913NISTXML-SV-II-atomic-positiveInteger-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="9914NISTXML-SV-II-atomic-positiveInteger-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="9915NISTSchema-SV-II-atomic-positiveInteger-pattern-2 tokoe:valid" result="pass"/><test-case name="9916NISTXML-SV-II-atomic-positiveInteger-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="9917NISTXML-SV-II-atomic-positiveInteger-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="9918NISTXML-SV-II-atomic-positiveInteger-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="9919NISTXML-SV-II-atomic-positiveInteger-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="9920NISTXML-SV-II-atomic-positiveInteger-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="9921NISTSchema-SV-II-atomic-positiveInteger-pattern-3 tokoe:valid" result="pass"/><test-case name="9922NISTXML-SV-II-atomic-positiveInteger-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="9923NISTXML-SV-II-atomic-positiveInteger-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="9924NISTXML-SV-II-atomic-positiveInteger-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="9925NISTXML-SV-II-atomic-positiveInteger-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="9926NISTXML-SV-II-atomic-positiveInteger-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="9927NISTSchema-SV-II-atomic-positiveInteger-pattern-4 tokoe:valid" result="pass"/><test-case name="9928NISTXML-SV-II-atomic-positiveInteger-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="9929NISTXML-SV-II-atomic-positiveInteger-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="9930NISTXML-SV-II-atomic-positiveInteger-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="9931NISTXML-SV-II-atomic-positiveInteger-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="9932NISTXML-SV-II-atomic-positiveInteger-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="9933NISTSchema-SV-II-atomic-positiveInteger-pattern-5 tokoe:valid" result="pass"/><test-case name="9934NISTXML-SV-II-atomic-positiveInteger-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="9935NISTXML-SV-II-atomic-positiveInteger-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="9936NISTXML-SV-II-atomic-positiveInteger-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="9937NISTXML-SV-II-atomic-positiveInteger-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="9938NISTXML-SV-II-atomic-positiveInteger-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="9939NISTSchema-SV-II-atomic-positiveInteger-enumeration-1 tokoe:valid" result="pass"/><test-case name="9940NISTXML-SV-II-atomic-positiveInteger-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="9941NISTXML-SV-II-atomic-positiveInteger-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="9942NISTXML-SV-II-atomic-positiveInteger-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="9943NISTXML-SV-II-atomic-positiveInteger-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="9944NISTXML-SV-II-atomic-positiveInteger-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="9945NISTSchema-SV-II-atomic-positiveInteger-enumeration-2 tokoe:valid" result="pass"/><test-case name="9946NISTXML-SV-II-atomic-positiveInteger-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="9947NISTXML-SV-II-atomic-positiveInteger-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="9948NISTXML-SV-II-atomic-positiveInteger-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="9949NISTXML-SV-II-atomic-positiveInteger-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="9950NISTXML-SV-II-atomic-positiveInteger-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="9951NISTSchema-SV-II-atomic-positiveInteger-enumeration-3 tokoe:valid" result="pass"/><test-case name="9952NISTXML-SV-II-atomic-positiveInteger-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="9953NISTXML-SV-II-atomic-positiveInteger-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="9954NISTXML-SV-II-atomic-positiveInteger-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="9955NISTXML-SV-II-atomic-positiveInteger-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="9956NISTXML-SV-II-atomic-positiveInteger-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="9957NISTSchema-SV-II-atomic-positiveInteger-enumeration-4 tokoe:valid" result="pass"/><test-case name="9958NISTXML-SV-II-atomic-positiveInteger-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="9959NISTXML-SV-II-atomic-positiveInteger-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="9960NISTXML-SV-II-atomic-positiveInteger-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="9961NISTXML-SV-II-atomic-positiveInteger-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="9962NISTXML-SV-II-atomic-positiveInteger-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="9963NISTSchema-SV-II-atomic-positiveInteger-enumeration-5 tokoe:valid" result="pass"/><test-case name="9964NISTXML-SV-II-atomic-positiveInteger-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="9965NISTXML-SV-II-atomic-positiveInteger-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="9966NISTXML-SV-II-atomic-positiveInteger-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="9967NISTXML-SV-II-atomic-positiveInteger-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="9968NISTXML-SV-II-atomic-positiveInteger-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="9969NISTSchema-SV-II-atomic-duration-minExclusive-1 tokoe:valid" result="pass"/><test-case name="9970NISTXML-SV-II-atomic-duration-minExclusive-1-1 tokoe:invalid" result="pass"/><test-case name="9971NISTSchema-SV-II-atomic-duration-minExclusive-2 tokoe:valid" result="pass"/><test-case name="9972NISTXML-SV-II-atomic-duration-minExclusive-2-1 tokoe:invalid" result="pass"/><test-case name="9973NISTXML-SV-II-atomic-duration-minExclusive-2-2 tokoe:invalid" result="pass"/><test-case name="9974NISTXML-SV-II-atomic-duration-minExclusive-2-3 tokoe:invalid" result="pass"/><test-case name="9975NISTXML-SV-II-atomic-duration-minExclusive-2-4 tokoe:invalid" result="pass"/><test-case name="9976NISTXML-SV-II-atomic-duration-minExclusive-2-5 tokoe:invalid" result="pass"/><test-case name="9977NISTSchema-SV-II-atomic-duration-minExclusive-3 tokoe:valid" result="pass"/><test-case name="9978NISTXML-SV-II-atomic-duration-minExclusive-3-1 tokoe:invalid" result="pass"/><test-case name="9979NISTXML-SV-II-atomic-duration-minExclusive-3-2 tokoe:invalid" result="pass"/><test-case name="9980NISTXML-SV-II-atomic-duration-minExclusive-3-3 tokoe:invalid" result="pass"/><test-case name="9981NISTXML-SV-II-atomic-duration-minExclusive-3-4 tokoe:invalid" result="pass"/><test-case name="9982NISTXML-SV-II-atomic-duration-minExclusive-3-5 tokoe:invalid" result="pass"/><test-case name="9983NISTSchema-SV-II-atomic-duration-minExclusive-4 tokoe:valid" result="pass"/><test-case name="9984NISTXML-SV-II-atomic-duration-minExclusive-4-1 tokoe:invalid" result="pass"/><test-case name="9985NISTXML-SV-II-atomic-duration-minExclusive-4-2 tokoe:invalid" result="pass"/><test-case name="9986NISTXML-SV-II-atomic-duration-minExclusive-4-3 tokoe:invalid" result="pass"/><test-case name="9987NISTXML-SV-II-atomic-duration-minExclusive-4-4 tokoe:invalid" result="pass"/><test-case name="9988NISTXML-SV-II-atomic-duration-minExclusive-4-5 tokoe:invalid" result="pass"/><test-case name="9989NISTSchema-SV-II-atomic-duration-minExclusive-5 tokoe:valid" result="pass"/><test-case name="9990NISTXML-SV-II-atomic-duration-minExclusive-5-1 tokoe:invalid" result="pass"/><test-case name="9991NISTXML-SV-II-atomic-duration-minExclusive-5-2 tokoe:invalid" result="pass"/><test-case name="9992NISTXML-SV-II-atomic-duration-minExclusive-5-3 tokoe:invalid" result="pass"/><test-case name="9993NISTXML-SV-II-atomic-duration-minExclusive-5-4 tokoe:invalid" result="pass"/><test-case name="9994NISTXML-SV-II-atomic-duration-minExclusive-5-5 tokoe:invalid" result="pass"/><test-case name="9995NISTSchema-SV-II-atomic-duration-maxExclusive-1 tokoe:valid" result="pass"/><test-case name="9996NISTXML-SV-II-atomic-duration-maxExclusive-1-1 tokoe:invalid" result="pass"/><test-case name="9997NISTXML-SV-II-atomic-duration-maxExclusive-1-2 tokoe:invalid" result="pass"/><test-case name="9998NISTXML-SV-II-atomic-duration-maxExclusive-1-3 tokoe:invalid" result="pass"/><test-case name="9999NISTXML-SV-II-atomic-duration-maxExclusive-1-4 tokoe:invalid" result="pass"/><test-case name="10000NISTXML-SV-II-atomic-duration-maxExclusive-1-5 tokoe:invalid" result="pass"/><test-case name="10001NISTSchema-SV-II-atomic-duration-maxExclusive-2 tokoe:valid" result="pass"/><test-case name="10002NISTXML-SV-II-atomic-duration-maxExclusive-2-1 tokoe:invalid" result="pass"/><test-case name="10003NISTXML-SV-II-atomic-duration-maxExclusive-2-2 tokoe:invalid" result="pass"/><test-case name="10004NISTXML-SV-II-atomic-duration-maxExclusive-2-3 tokoe:invalid" result="pass"/><test-case name="10005NISTXML-SV-II-atomic-duration-maxExclusive-2-4 tokoe:invalid" result="pass"/><test-case name="10006NISTXML-SV-II-atomic-duration-maxExclusive-2-5 tokoe:invalid" result="pass"/><test-case name="10007NISTSchema-SV-II-atomic-duration-maxExclusive-3 tokoe:valid" result="pass"/><test-case name="10008NISTXML-SV-II-atomic-duration-maxExclusive-3-1 tokoe:invalid" result="pass"/><test-case name="10009NISTXML-SV-II-atomic-duration-maxExclusive-3-2 tokoe:invalid" result="pass"/><test-case name="10010NISTXML-SV-II-atomic-duration-maxExclusive-3-3 tokoe:invalid" result="pass"/><test-case name="10011NISTXML-SV-II-atomic-duration-maxExclusive-3-4 tokoe:invalid" result="pass"/><test-case name="10012NISTXML-SV-II-atomic-duration-maxExclusive-3-5 tokoe:invalid" result="pass"/><test-case name="10013NISTSchema-SV-II-atomic-duration-maxExclusive-4 tokoe:valid" result="pass"/><test-case name="10014NISTXML-SV-II-atomic-duration-maxExclusive-4-1 tokoe:invalid" result="pass"/><test-case name="10015NISTXML-SV-II-atomic-duration-maxExclusive-4-2 tokoe:invalid" result="pass"/><test-case name="10016NISTXML-SV-II-atomic-duration-maxExclusive-4-3 tokoe:invalid" result="pass"/><test-case name="10017NISTXML-SV-II-atomic-duration-maxExclusive-4-4 tokoe:invalid" result="pass"/><test-case name="10018NISTXML-SV-II-atomic-duration-maxExclusive-4-5 tokoe:invalid" result="pass"/><test-case name="10019NISTSchema-SV-II-atomic-duration-maxExclusive-5 tokoe:valid" result="pass"/><test-case name="10020NISTXML-SV-II-atomic-duration-maxExclusive-5-1 tokoe:invalid" result="pass"/><test-case name="10021NISTSchema-SV-II-atomic-duration-pattern-1 tokoe:valid" result="pass"/><test-case name="10022NISTXML-SV-II-atomic-duration-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="10023NISTXML-SV-II-atomic-duration-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="10024NISTXML-SV-II-atomic-duration-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="10025NISTXML-SV-II-atomic-duration-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="10026NISTXML-SV-II-atomic-duration-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="10027NISTSchema-SV-II-atomic-duration-pattern-2 tokoe:valid" result="pass"/><test-case name="10028NISTXML-SV-II-atomic-duration-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="10029NISTXML-SV-II-atomic-duration-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="10030NISTXML-SV-II-atomic-duration-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="10031NISTXML-SV-II-atomic-duration-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="10032NISTXML-SV-II-atomic-duration-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="10033NISTSchema-SV-II-atomic-duration-pattern-3 tokoe:valid" result="pass"/><test-case name="10034NISTXML-SV-II-atomic-duration-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="10035NISTXML-SV-II-atomic-duration-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="10036NISTXML-SV-II-atomic-duration-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="10037NISTXML-SV-II-atomic-duration-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="10038NISTXML-SV-II-atomic-duration-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="10039NISTSchema-SV-II-atomic-duration-pattern-4 tokoe:valid" result="pass"/><test-case name="10040NISTXML-SV-II-atomic-duration-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="10041NISTXML-SV-II-atomic-duration-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="10042NISTXML-SV-II-atomic-duration-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="10043NISTXML-SV-II-atomic-duration-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="10044NISTXML-SV-II-atomic-duration-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="10045NISTSchema-SV-II-atomic-duration-pattern-5 tokoe:valid" result="pass"/><test-case name="10046NISTXML-SV-II-atomic-duration-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="10047NISTXML-SV-II-atomic-duration-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="10048NISTXML-SV-II-atomic-duration-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="10049NISTXML-SV-II-atomic-duration-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="10050NISTXML-SV-II-atomic-duration-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="10051NISTSchema-SV-II-atomic-duration-enumeration-1 tokoe:valid" result="pass"/><test-case name="10052NISTXML-SV-II-atomic-duration-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="10053NISTXML-SV-II-atomic-duration-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="10054NISTXML-SV-II-atomic-duration-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="10055NISTXML-SV-II-atomic-duration-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="10056NISTXML-SV-II-atomic-duration-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="10057NISTSchema-SV-II-atomic-duration-enumeration-2 tokoe:valid" result="pass"/><test-case name="10058NISTXML-SV-II-atomic-duration-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="10059NISTXML-SV-II-atomic-duration-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="10060NISTXML-SV-II-atomic-duration-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="10061NISTXML-SV-II-atomic-duration-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="10062NISTXML-SV-II-atomic-duration-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="10063NISTSchema-SV-II-atomic-duration-enumeration-3 tokoe:valid" result="pass"/><test-case name="10064NISTXML-SV-II-atomic-duration-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="10065NISTXML-SV-II-atomic-duration-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="10066NISTXML-SV-II-atomic-duration-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="10067NISTXML-SV-II-atomic-duration-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="10068NISTXML-SV-II-atomic-duration-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="10069NISTSchema-SV-II-atomic-duration-enumeration-4 tokoe:valid" result="pass"/><test-case name="10070NISTXML-SV-II-atomic-duration-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="10071NISTXML-SV-II-atomic-duration-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="10072NISTXML-SV-II-atomic-duration-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="10073NISTXML-SV-II-atomic-duration-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="10074NISTXML-SV-II-atomic-duration-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="10075NISTSchema-SV-II-atomic-duration-enumeration-5 tokoe:valid" result="pass"/><test-case name="10076NISTXML-SV-II-atomic-duration-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="10077NISTXML-SV-II-atomic-duration-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="10078NISTXML-SV-II-atomic-duration-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="10079NISTXML-SV-II-atomic-duration-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="10080NISTXML-SV-II-atomic-duration-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="10081NISTSchema-SV-II-atomic-dateTime-minExclusive-1 tokoe:valid" result="pass"/><test-case name="10082NISTXML-SV-II-atomic-dateTime-minExclusive-1-1 tokoe:invalid" result="pass"/><test-case name="10083NISTSchema-SV-II-atomic-dateTime-minExclusive-2 tokoe:valid" result="pass"/><test-case name="10084NISTXML-SV-II-atomic-dateTime-minExclusive-2-1 tokoe:invalid" result="pass"/><test-case name="10085NISTXML-SV-II-atomic-dateTime-minExclusive-2-2 tokoe:invalid" result="pass"/><test-case name="10086NISTXML-SV-II-atomic-dateTime-minExclusive-2-3 tokoe:invalid" result="pass"/><test-case name="10087NISTXML-SV-II-atomic-dateTime-minExclusive-2-4 tokoe:invalid" result="pass"/><test-case name="10088NISTXML-SV-II-atomic-dateTime-minExclusive-2-5 tokoe:invalid" result="pass"/><test-case name="10089NISTSchema-SV-II-atomic-dateTime-minExclusive-3 tokoe:valid" result="pass"/><test-case name="10090NISTXML-SV-II-atomic-dateTime-minExclusive-3-1 tokoe:invalid" result="pass"/><test-case name="10091NISTXML-SV-II-atomic-dateTime-minExclusive-3-2 tokoe:invalid" result="pass"/><test-case name="10092NISTXML-SV-II-atomic-dateTime-minExclusive-3-3 tokoe:invalid" result="pass"/><test-case name="10093NISTXML-SV-II-atomic-dateTime-minExclusive-3-4 tokoe:invalid" result="pass"/><test-case name="10094NISTXML-SV-II-atomic-dateTime-minExclusive-3-5 tokoe:invalid" result="pass"/><test-case name="10095NISTSchema-SV-II-atomic-dateTime-minExclusive-4 tokoe:valid" result="pass"/><test-case name="10096NISTXML-SV-II-atomic-dateTime-minExclusive-4-1 tokoe:invalid" result="pass"/><test-case name="10097NISTXML-SV-II-atomic-dateTime-minExclusive-4-2 tokoe:invalid" result="pass"/><test-case name="10098NISTXML-SV-II-atomic-dateTime-minExclusive-4-3 tokoe:invalid" result="pass"/><test-case name="10099NISTXML-SV-II-atomic-dateTime-minExclusive-4-4 tokoe:invalid" result="pass"/><test-case name="10100NISTXML-SV-II-atomic-dateTime-minExclusive-4-5 tokoe:invalid" result="pass"/><test-case name="10101NISTSchema-SV-II-atomic-dateTime-minExclusive-5 tokoe:valid" result="pass"/><test-case name="10102NISTXML-SV-II-atomic-dateTime-minExclusive-5-1 tokoe:invalid" result="pass"/><test-case name="10103NISTXML-SV-II-atomic-dateTime-minExclusive-5-2 tokoe:invalid" result="pass"/><test-case name="10104NISTXML-SV-II-atomic-dateTime-minExclusive-5-3 tokoe:invalid" result="pass"/><test-case name="10105NISTXML-SV-II-atomic-dateTime-minExclusive-5-4 tokoe:invalid" result="pass"/><test-case name="10106NISTXML-SV-II-atomic-dateTime-minExclusive-5-5 tokoe:invalid" result="pass"/><test-case name="10107NISTSchema-SV-II-atomic-dateTime-maxExclusive-1 tokoe:valid" result="pass"/><test-case name="10108NISTXML-SV-II-atomic-dateTime-maxExclusive-1-1 tokoe:invalid" result="pass"/><test-case name="10109NISTXML-SV-II-atomic-dateTime-maxExclusive-1-2 tokoe:invalid" result="pass"/><test-case name="10110NISTXML-SV-II-atomic-dateTime-maxExclusive-1-3 tokoe:invalid" result="pass"/><test-case name="10111NISTXML-SV-II-atomic-dateTime-maxExclusive-1-4 tokoe:invalid" result="pass"/><test-case name="10112NISTXML-SV-II-atomic-dateTime-maxExclusive-1-5 tokoe:invalid" result="pass"/><test-case name="10113NISTSchema-SV-II-atomic-dateTime-maxExclusive-2 tokoe:valid" result="pass"/><test-case name="10114NISTXML-SV-II-atomic-dateTime-maxExclusive-2-1 tokoe:invalid" result="pass"/><test-case name="10115NISTXML-SV-II-atomic-dateTime-maxExclusive-2-2 tokoe:invalid" result="pass"/><test-case name="10116NISTXML-SV-II-atomic-dateTime-maxExclusive-2-3 tokoe:invalid" result="pass"/><test-case name="10117NISTXML-SV-II-atomic-dateTime-maxExclusive-2-4 tokoe:invalid" result="pass"/><test-case name="10118NISTXML-SV-II-atomic-dateTime-maxExclusive-2-5 tokoe:invalid" result="pass"/><test-case name="10119NISTSchema-SV-II-atomic-dateTime-maxExclusive-3 tokoe:valid" result="pass"/><test-case name="10120NISTXML-SV-II-atomic-dateTime-maxExclusive-3-1 tokoe:invalid" result="pass"/><test-case name="10121NISTXML-SV-II-atomic-dateTime-maxExclusive-3-2 tokoe:invalid" result="pass"/><test-case name="10122NISTXML-SV-II-atomic-dateTime-maxExclusive-3-3 tokoe:invalid" result="pass"/><test-case name="10123NISTXML-SV-II-atomic-dateTime-maxExclusive-3-4 tokoe:invalid" result="pass"/><test-case name="10124NISTXML-SV-II-atomic-dateTime-maxExclusive-3-5 tokoe:invalid" result="pass"/><test-case name="10125NISTSchema-SV-II-atomic-dateTime-maxExclusive-4 tokoe:valid" result="pass"/><test-case name="10126NISTXML-SV-II-atomic-dateTime-maxExclusive-4-1 tokoe:invalid" result="pass"/><test-case name="10127NISTXML-SV-II-atomic-dateTime-maxExclusive-4-2 tokoe:invalid" result="pass"/><test-case name="10128NISTXML-SV-II-atomic-dateTime-maxExclusive-4-3 tokoe:invalid" result="pass"/><test-case name="10129NISTXML-SV-II-atomic-dateTime-maxExclusive-4-4 tokoe:invalid" result="pass"/><test-case name="10130NISTXML-SV-II-atomic-dateTime-maxExclusive-4-5 tokoe:invalid" result="pass"/><test-case name="10131NISTSchema-SV-II-atomic-dateTime-maxExclusive-5 tokoe:valid" result="pass"/><test-case name="10132NISTXML-SV-II-atomic-dateTime-maxExclusive-5-1 tokoe:invalid" result="pass"/><test-case name="10133NISTSchema-SV-II-atomic-dateTime-pattern-1 tokoe:valid" result="pass"/><test-case name="10134NISTXML-SV-II-atomic-dateTime-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="10135NISTXML-SV-II-atomic-dateTime-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="10136NISTXML-SV-II-atomic-dateTime-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="10137NISTXML-SV-II-atomic-dateTime-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="10138NISTXML-SV-II-atomic-dateTime-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="10139NISTSchema-SV-II-atomic-dateTime-pattern-2 tokoe:valid" result="pass"/><test-case name="10140NISTXML-SV-II-atomic-dateTime-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="10141NISTXML-SV-II-atomic-dateTime-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="10142NISTXML-SV-II-atomic-dateTime-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="10143NISTXML-SV-II-atomic-dateTime-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="10144NISTXML-SV-II-atomic-dateTime-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="10145NISTSchema-SV-II-atomic-dateTime-pattern-3 tokoe:valid" result="pass"/><test-case name="10146NISTXML-SV-II-atomic-dateTime-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="10147NISTXML-SV-II-atomic-dateTime-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="10148NISTXML-SV-II-atomic-dateTime-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="10149NISTXML-SV-II-atomic-dateTime-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="10150NISTXML-SV-II-atomic-dateTime-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="10151NISTSchema-SV-II-atomic-dateTime-pattern-4 tokoe:valid" result="pass"/><test-case name="10152NISTXML-SV-II-atomic-dateTime-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="10153NISTXML-SV-II-atomic-dateTime-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="10154NISTXML-SV-II-atomic-dateTime-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="10155NISTXML-SV-II-atomic-dateTime-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="10156NISTXML-SV-II-atomic-dateTime-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="10157NISTSchema-SV-II-atomic-dateTime-pattern-5 tokoe:valid" result="pass"/><test-case name="10158NISTXML-SV-II-atomic-dateTime-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="10159NISTXML-SV-II-atomic-dateTime-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="10160NISTXML-SV-II-atomic-dateTime-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="10161NISTXML-SV-II-atomic-dateTime-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="10162NISTXML-SV-II-atomic-dateTime-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="10163NISTSchema-SV-II-atomic-dateTime-enumeration-1 tokoe:valid" result="pass"/><test-case name="10164NISTXML-SV-II-atomic-dateTime-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="10165NISTXML-SV-II-atomic-dateTime-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="10166NISTXML-SV-II-atomic-dateTime-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="10167NISTXML-SV-II-atomic-dateTime-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="10168NISTXML-SV-II-atomic-dateTime-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="10169NISTSchema-SV-II-atomic-dateTime-enumeration-2 tokoe:valid" result="pass"/><test-case name="10170NISTXML-SV-II-atomic-dateTime-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="10171NISTXML-SV-II-atomic-dateTime-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="10172NISTXML-SV-II-atomic-dateTime-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="10173NISTXML-SV-II-atomic-dateTime-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="10174NISTXML-SV-II-atomic-dateTime-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="10175NISTSchema-SV-II-atomic-dateTime-enumeration-3 tokoe:valid" result="pass"/><test-case name="10176NISTXML-SV-II-atomic-dateTime-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="10177NISTXML-SV-II-atomic-dateTime-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="10178NISTXML-SV-II-atomic-dateTime-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="10179NISTXML-SV-II-atomic-dateTime-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="10180NISTXML-SV-II-atomic-dateTime-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="10181NISTSchema-SV-II-atomic-dateTime-enumeration-4 tokoe:valid" result="pass"/><test-case name="10182NISTXML-SV-II-atomic-dateTime-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="10183NISTXML-SV-II-atomic-dateTime-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="10184NISTXML-SV-II-atomic-dateTime-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="10185NISTXML-SV-II-atomic-dateTime-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="10186NISTXML-SV-II-atomic-dateTime-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="10187NISTSchema-SV-II-atomic-dateTime-enumeration-5 tokoe:valid" result="pass"/><test-case name="10188NISTXML-SV-II-atomic-dateTime-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="10189NISTXML-SV-II-atomic-dateTime-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="10190NISTXML-SV-II-atomic-dateTime-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="10191NISTXML-SV-II-atomic-dateTime-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="10192NISTXML-SV-II-atomic-dateTime-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="10193NISTSchema-SV-II-atomic-time-minExclusive-1 tokoe:valid" result="pass"/><test-case name="10194NISTXML-SV-II-atomic-time-minExclusive-1-1 tokoe:invalid" result="pass"/><test-case name="10195NISTSchema-SV-II-atomic-time-minExclusive-2 tokoe:valid" result="pass"/><test-case name="10196NISTXML-SV-II-atomic-time-minExclusive-2-1 tokoe:invalid" result="pass"/><test-case name="10197NISTXML-SV-II-atomic-time-minExclusive-2-2 tokoe:invalid" result="pass"/><test-case name="10198NISTXML-SV-II-atomic-time-minExclusive-2-3 tokoe:invalid" result="pass"/><test-case name="10199NISTXML-SV-II-atomic-time-minExclusive-2-4 tokoe:invalid" result="pass"/><test-case name="10200NISTXML-SV-II-atomic-time-minExclusive-2-5 tokoe:invalid" result="pass"/><test-case name="10201NISTSchema-SV-II-atomic-time-minExclusive-3 tokoe:valid" result="pass"/><test-case name="10202NISTXML-SV-II-atomic-time-minExclusive-3-1 tokoe:invalid" result="pass"/><test-case name="10203NISTXML-SV-II-atomic-time-minExclusive-3-2 tokoe:invalid" result="pass"/><test-case name="10204NISTXML-SV-II-atomic-time-minExclusive-3-3 tokoe:invalid" result="pass"/><test-case name="10205NISTXML-SV-II-atomic-time-minExclusive-3-4 tokoe:invalid" result="pass"/><test-case name="10206NISTXML-SV-II-atomic-time-minExclusive-3-5 tokoe:invalid" result="pass"/><test-case name="10207NISTSchema-SV-II-atomic-time-minExclusive-4 tokoe:valid" result="pass"/><test-case name="10208NISTXML-SV-II-atomic-time-minExclusive-4-1 tokoe:invalid" result="pass"/><test-case name="10209NISTXML-SV-II-atomic-time-minExclusive-4-2 tokoe:invalid" result="pass"/><test-case name="10210NISTXML-SV-II-atomic-time-minExclusive-4-3 tokoe:invalid" result="pass"/><test-case name="10211NISTXML-SV-II-atomic-time-minExclusive-4-4 tokoe:invalid" result="pass"/><test-case name="10212NISTXML-SV-II-atomic-time-minExclusive-4-5 tokoe:invalid" result="pass"/><test-case name="10213NISTSchema-SV-II-atomic-time-minExclusive-5 tokoe:valid" result="pass"/><test-case name="10214NISTXML-SV-II-atomic-time-minExclusive-5-1 tokoe:invalid" result="pass"/><test-case name="10215NISTXML-SV-II-atomic-time-minExclusive-5-2 tokoe:invalid" result="pass"/><test-case name="10216NISTXML-SV-II-atomic-time-minExclusive-5-3 tokoe:invalid" result="pass"/><test-case name="10217NISTXML-SV-II-atomic-time-minExclusive-5-4 tokoe:invalid" result="pass"/><test-case name="10218NISTXML-SV-II-atomic-time-minExclusive-5-5 tokoe:invalid" result="pass"/><test-case name="10219NISTSchema-SV-II-atomic-time-maxExclusive-1 tokoe:valid" result="pass"/><test-case name="10220NISTXML-SV-II-atomic-time-maxExclusive-1-1 tokoe:invalid" result="pass"/><test-case name="10221NISTXML-SV-II-atomic-time-maxExclusive-1-2 tokoe:invalid" result="pass"/><test-case name="10222NISTXML-SV-II-atomic-time-maxExclusive-1-3 tokoe:invalid" result="pass"/><test-case name="10223NISTXML-SV-II-atomic-time-maxExclusive-1-4 tokoe:invalid" result="pass"/><test-case name="10224NISTXML-SV-II-atomic-time-maxExclusive-1-5 tokoe:invalid" result="pass"/><test-case name="10225NISTSchema-SV-II-atomic-time-maxExclusive-2 tokoe:valid" result="pass"/><test-case name="10226NISTXML-SV-II-atomic-time-maxExclusive-2-1 tokoe:invalid" result="pass"/><test-case name="10227NISTXML-SV-II-atomic-time-maxExclusive-2-2 tokoe:invalid" result="pass"/><test-case name="10228NISTXML-SV-II-atomic-time-maxExclusive-2-3 tokoe:invalid" result="pass"/><test-case name="10229NISTXML-SV-II-atomic-time-maxExclusive-2-4 tokoe:invalid" result="pass"/><test-case name="10230NISTXML-SV-II-atomic-time-maxExclusive-2-5 tokoe:invalid" result="pass"/><test-case name="10231NISTSchema-SV-II-atomic-time-maxExclusive-3 tokoe:valid" result="pass"/><test-case name="10232NISTXML-SV-II-atomic-time-maxExclusive-3-1 tokoe:invalid" result="pass"/><test-case name="10233NISTXML-SV-II-atomic-time-maxExclusive-3-2 tokoe:invalid" result="pass"/><test-case name="10234NISTXML-SV-II-atomic-time-maxExclusive-3-3 tokoe:invalid" result="pass"/><test-case name="10235NISTXML-SV-II-atomic-time-maxExclusive-3-4 tokoe:invalid" result="pass"/><test-case name="10236NISTXML-SV-II-atomic-time-maxExclusive-3-5 tokoe:invalid" result="pass"/><test-case name="10237NISTSchema-SV-II-atomic-time-maxExclusive-4 tokoe:valid" result="pass"/><test-case name="10238NISTXML-SV-II-atomic-time-maxExclusive-4-1 tokoe:invalid" result="pass"/><test-case name="10239NISTXML-SV-II-atomic-time-maxExclusive-4-2 tokoe:invalid" result="pass"/><test-case name="10240NISTXML-SV-II-atomic-time-maxExclusive-4-3 tokoe:invalid" result="pass"/><test-case name="10241NISTXML-SV-II-atomic-time-maxExclusive-4-4 tokoe:invalid" result="pass"/><test-case name="10242NISTXML-SV-II-atomic-time-maxExclusive-4-5 tokoe:invalid" result="pass"/><test-case name="10243NISTSchema-SV-II-atomic-time-maxExclusive-5 tokoe:valid" result="pass"/><test-case name="10244NISTXML-SV-II-atomic-time-maxExclusive-5-1 tokoe:invalid" result="pass"/><test-case name="10245NISTSchema-SV-II-atomic-time-pattern-1 tokoe:valid" result="pass"/><test-case name="10246NISTXML-SV-II-atomic-time-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="10247NISTXML-SV-II-atomic-time-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="10248NISTXML-SV-II-atomic-time-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="10249NISTXML-SV-II-atomic-time-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="10250NISTXML-SV-II-atomic-time-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="10251NISTSchema-SV-II-atomic-time-pattern-2 tokoe:valid" result="pass"/><test-case name="10252NISTXML-SV-II-atomic-time-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="10253NISTXML-SV-II-atomic-time-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="10254NISTXML-SV-II-atomic-time-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="10255NISTXML-SV-II-atomic-time-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="10256NISTXML-SV-II-atomic-time-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="10257NISTSchema-SV-II-atomic-time-pattern-3 tokoe:valid" result="pass"/><test-case name="10258NISTXML-SV-II-atomic-time-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="10259NISTXML-SV-II-atomic-time-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="10260NISTXML-SV-II-atomic-time-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="10261NISTXML-SV-II-atomic-time-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="10262NISTXML-SV-II-atomic-time-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="10263NISTSchema-SV-II-atomic-time-pattern-4 tokoe:valid" result="pass"/><test-case name="10264NISTXML-SV-II-atomic-time-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="10265NISTXML-SV-II-atomic-time-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="10266NISTXML-SV-II-atomic-time-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="10267NISTXML-SV-II-atomic-time-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="10268NISTXML-SV-II-atomic-time-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="10269NISTSchema-SV-II-atomic-time-pattern-5 tokoe:valid" result="pass"/><test-case name="10270NISTXML-SV-II-atomic-time-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="10271NISTXML-SV-II-atomic-time-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="10272NISTXML-SV-II-atomic-time-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="10273NISTXML-SV-II-atomic-time-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="10274NISTXML-SV-II-atomic-time-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="10275NISTSchema-SV-II-atomic-time-enumeration-1 tokoe:valid" result="pass"/><test-case name="10276NISTXML-SV-II-atomic-time-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="10277NISTXML-SV-II-atomic-time-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="10278NISTXML-SV-II-atomic-time-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="10279NISTXML-SV-II-atomic-time-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="10280NISTXML-SV-II-atomic-time-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="10281NISTSchema-SV-II-atomic-time-enumeration-2 tokoe:valid" result="pass"/><test-case name="10282NISTXML-SV-II-atomic-time-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="10283NISTXML-SV-II-atomic-time-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="10284NISTXML-SV-II-atomic-time-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="10285NISTXML-SV-II-atomic-time-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="10286NISTXML-SV-II-atomic-time-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="10287NISTSchema-SV-II-atomic-time-enumeration-3 tokoe:valid" result="pass"/><test-case name="10288NISTXML-SV-II-atomic-time-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="10289NISTXML-SV-II-atomic-time-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="10290NISTXML-SV-II-atomic-time-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="10291NISTXML-SV-II-atomic-time-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="10292NISTXML-SV-II-atomic-time-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="10293NISTSchema-SV-II-atomic-time-enumeration-4 tokoe:valid" result="pass"/><test-case name="10294NISTXML-SV-II-atomic-time-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="10295NISTXML-SV-II-atomic-time-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="10296NISTXML-SV-II-atomic-time-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="10297NISTXML-SV-II-atomic-time-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="10298NISTXML-SV-II-atomic-time-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="10299NISTSchema-SV-II-atomic-time-enumeration-5 tokoe:valid" result="pass"/><test-case name="10300NISTXML-SV-II-atomic-time-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="10301NISTXML-SV-II-atomic-time-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="10302NISTXML-SV-II-atomic-time-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="10303NISTXML-SV-II-atomic-time-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="10304NISTXML-SV-II-atomic-time-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="10305NISTSchema-SV-II-atomic-date-minExclusive-1 tokoe:valid" result="pass"/><test-case name="10306NISTXML-SV-II-atomic-date-minExclusive-1-1 tokoe:invalid" result="pass"/><test-case name="10307NISTSchema-SV-II-atomic-date-minExclusive-2 tokoe:valid" result="pass"/><test-case name="10308NISTXML-SV-II-atomic-date-minExclusive-2-1 tokoe:invalid" result="pass"/><test-case name="10309NISTXML-SV-II-atomic-date-minExclusive-2-2 tokoe:invalid" result="pass"/><test-case name="10310NISTXML-SV-II-atomic-date-minExclusive-2-3 tokoe:invalid" result="pass"/><test-case name="10311NISTXML-SV-II-atomic-date-minExclusive-2-4 tokoe:invalid" result="pass"/><test-case name="10312NISTXML-SV-II-atomic-date-minExclusive-2-5 tokoe:invalid" result="pass"/><test-case name="10313NISTSchema-SV-II-atomic-date-minExclusive-3 tokoe:valid" result="pass"/><test-case name="10314NISTXML-SV-II-atomic-date-minExclusive-3-1 tokoe:invalid" result="pass"/><test-case name="10315NISTXML-SV-II-atomic-date-minExclusive-3-2 tokoe:invalid" result="pass"/><test-case name="10316NISTXML-SV-II-atomic-date-minExclusive-3-3 tokoe:invalid" result="pass"/><test-case name="10317NISTXML-SV-II-atomic-date-minExclusive-3-4 tokoe:invalid" result="pass"/><test-case name="10318NISTXML-SV-II-atomic-date-minExclusive-3-5 tokoe:invalid" result="pass"/><test-case name="10319NISTSchema-SV-II-atomic-date-minExclusive-4 tokoe:valid" result="pass"/><test-case name="10320NISTXML-SV-II-atomic-date-minExclusive-4-1 tokoe:invalid" result="pass"/><test-case name="10321NISTXML-SV-II-atomic-date-minExclusive-4-2 tokoe:invalid" result="pass"/><test-case name="10322NISTXML-SV-II-atomic-date-minExclusive-4-3 tokoe:invalid" result="pass"/><test-case name="10323NISTXML-SV-II-atomic-date-minExclusive-4-4 tokoe:invalid" result="pass"/><test-case name="10324NISTXML-SV-II-atomic-date-minExclusive-4-5 tokoe:invalid" result="pass"/><test-case name="10325NISTSchema-SV-II-atomic-date-minExclusive-5 tokoe:valid" result="pass"/><test-case name="10326NISTXML-SV-II-atomic-date-minExclusive-5-1 tokoe:invalid" result="pass"/><test-case name="10327NISTXML-SV-II-atomic-date-minExclusive-5-2 tokoe:invalid" result="pass"/><test-case name="10328NISTXML-SV-II-atomic-date-minExclusive-5-3 tokoe:invalid" result="pass"/><test-case name="10329NISTXML-SV-II-atomic-date-minExclusive-5-4 tokoe:invalid" result="pass"/><test-case name="10330NISTXML-SV-II-atomic-date-minExclusive-5-5 tokoe:invalid" result="pass"/><test-case name="10331NISTSchema-SV-II-atomic-date-maxExclusive-1 tokoe:valid" result="pass"/><test-case name="10332NISTXML-SV-II-atomic-date-maxExclusive-1-1 tokoe:invalid" result="pass"/><test-case name="10333NISTXML-SV-II-atomic-date-maxExclusive-1-2 tokoe:invalid" result="pass"/><test-case name="10334NISTXML-SV-II-atomic-date-maxExclusive-1-3 tokoe:invalid" result="pass"/><test-case name="10335NISTXML-SV-II-atomic-date-maxExclusive-1-4 tokoe:invalid" result="pass"/><test-case name="10336NISTXML-SV-II-atomic-date-maxExclusive-1-5 tokoe:invalid" result="pass"/><test-case name="10337NISTSchema-SV-II-atomic-date-maxExclusive-2 tokoe:valid" result="pass"/><test-case name="10338NISTXML-SV-II-atomic-date-maxExclusive-2-1 tokoe:invalid" result="pass"/><test-case name="10339NISTXML-SV-II-atomic-date-maxExclusive-2-2 tokoe:invalid" result="pass"/><test-case name="10340NISTXML-SV-II-atomic-date-maxExclusive-2-3 tokoe:invalid" result="pass"/><test-case name="10341NISTXML-SV-II-atomic-date-maxExclusive-2-4 tokoe:invalid" result="pass"/><test-case name="10342NISTXML-SV-II-atomic-date-maxExclusive-2-5 tokoe:invalid" result="pass"/><test-case name="10343NISTSchema-SV-II-atomic-date-maxExclusive-3 tokoe:valid" result="pass"/><test-case name="10344NISTXML-SV-II-atomic-date-maxExclusive-3-1 tokoe:invalid" result="pass"/><test-case name="10345NISTXML-SV-II-atomic-date-maxExclusive-3-2 tokoe:invalid" result="pass"/><test-case name="10346NISTXML-SV-II-atomic-date-maxExclusive-3-3 tokoe:invalid" result="pass"/><test-case name="10347NISTXML-SV-II-atomic-date-maxExclusive-3-4 tokoe:invalid" result="pass"/><test-case name="10348NISTXML-SV-II-atomic-date-maxExclusive-3-5 tokoe:invalid" result="pass"/><test-case name="10349NISTSchema-SV-II-atomic-date-maxExclusive-4 tokoe:valid" result="pass"/><test-case name="10350NISTXML-SV-II-atomic-date-maxExclusive-4-1 tokoe:invalid" result="pass"/><test-case name="10351NISTXML-SV-II-atomic-date-maxExclusive-4-2 tokoe:invalid" result="pass"/><test-case name="10352NISTXML-SV-II-atomic-date-maxExclusive-4-3 tokoe:invalid" result="pass"/><test-case name="10353NISTXML-SV-II-atomic-date-maxExclusive-4-4 tokoe:invalid" result="pass"/><test-case name="10354NISTXML-SV-II-atomic-date-maxExclusive-4-5 tokoe:invalid" result="pass"/><test-case name="10355NISTSchema-SV-II-atomic-date-maxExclusive-5 tokoe:valid" result="pass"/><test-case name="10356NISTXML-SV-II-atomic-date-maxExclusive-5-1 tokoe:invalid" result="pass"/><test-case name="10357NISTSchema-SV-II-atomic-date-pattern-1 tokoe:valid" result="pass"/><test-case name="10358NISTXML-SV-II-atomic-date-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="10359NISTXML-SV-II-atomic-date-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="10360NISTXML-SV-II-atomic-date-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="10361NISTXML-SV-II-atomic-date-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="10362NISTXML-SV-II-atomic-date-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="10363NISTSchema-SV-II-atomic-date-pattern-2 tokoe:valid" result="pass"/><test-case name="10364NISTXML-SV-II-atomic-date-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="10365NISTXML-SV-II-atomic-date-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="10366NISTXML-SV-II-atomic-date-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="10367NISTXML-SV-II-atomic-date-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="10368NISTXML-SV-II-atomic-date-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="10369NISTSchema-SV-II-atomic-date-pattern-3 tokoe:valid" result="pass"/><test-case name="10370NISTXML-SV-II-atomic-date-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="10371NISTXML-SV-II-atomic-date-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="10372NISTXML-SV-II-atomic-date-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="10373NISTXML-SV-II-atomic-date-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="10374NISTXML-SV-II-atomic-date-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="10375NISTSchema-SV-II-atomic-date-pattern-4 tokoe:valid" result="pass"/><test-case name="10376NISTXML-SV-II-atomic-date-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="10377NISTXML-SV-II-atomic-date-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="10378NISTXML-SV-II-atomic-date-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="10379NISTXML-SV-II-atomic-date-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="10380NISTXML-SV-II-atomic-date-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="10381NISTSchema-SV-II-atomic-date-pattern-5 tokoe:valid" result="pass"/><test-case name="10382NISTXML-SV-II-atomic-date-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="10383NISTXML-SV-II-atomic-date-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="10384NISTXML-SV-II-atomic-date-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="10385NISTXML-SV-II-atomic-date-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="10386NISTXML-SV-II-atomic-date-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="10387NISTSchema-SV-II-atomic-date-enumeration-1 tokoe:valid" result="pass"/><test-case name="10388NISTXML-SV-II-atomic-date-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="10389NISTXML-SV-II-atomic-date-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="10390NISTXML-SV-II-atomic-date-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="10391NISTXML-SV-II-atomic-date-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="10392NISTXML-SV-II-atomic-date-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="10393NISTSchema-SV-II-atomic-date-enumeration-2 tokoe:valid" result="pass"/><test-case name="10394NISTXML-SV-II-atomic-date-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="10395NISTXML-SV-II-atomic-date-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="10396NISTXML-SV-II-atomic-date-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="10397NISTXML-SV-II-atomic-date-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="10398NISTXML-SV-II-atomic-date-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="10399NISTSchema-SV-II-atomic-date-enumeration-3 tokoe:valid" result="pass"/><test-case name="10400NISTXML-SV-II-atomic-date-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="10401NISTXML-SV-II-atomic-date-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="10402NISTXML-SV-II-atomic-date-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="10403NISTXML-SV-II-atomic-date-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="10404NISTXML-SV-II-atomic-date-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="10405NISTSchema-SV-II-atomic-date-enumeration-4 tokoe:valid" result="pass"/><test-case name="10406NISTXML-SV-II-atomic-date-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="10407NISTXML-SV-II-atomic-date-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="10408NISTXML-SV-II-atomic-date-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="10409NISTXML-SV-II-atomic-date-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="10410NISTXML-SV-II-atomic-date-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="10411NISTSchema-SV-II-atomic-date-enumeration-5 tokoe:valid" result="pass"/><test-case name="10412NISTXML-SV-II-atomic-date-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="10413NISTXML-SV-II-atomic-date-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="10414NISTXML-SV-II-atomic-date-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="10415NISTXML-SV-II-atomic-date-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="10416NISTXML-SV-II-atomic-date-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="10417NISTSchema-SV-II-atomic-gYearMonth-minExclusive-1 tokoe:valid" result="pass"/><test-case name="10418NISTXML-SV-II-atomic-gYearMonth-minExclusive-1-1 tokoe:invalid" result="pass"/><test-case name="10419NISTSchema-SV-II-atomic-gYearMonth-minExclusive-2 tokoe:valid" result="pass"/><test-case name="10420NISTXML-SV-II-atomic-gYearMonth-minExclusive-2-1 tokoe:invalid" result="pass"/><test-case name="10421NISTXML-SV-II-atomic-gYearMonth-minExclusive-2-2 tokoe:invalid" result="pass"/><test-case name="10422NISTXML-SV-II-atomic-gYearMonth-minExclusive-2-3 tokoe:invalid" result="pass"/><test-case name="10423NISTXML-SV-II-atomic-gYearMonth-minExclusive-2-4 tokoe:invalid" result="pass"/><test-case name="10424NISTXML-SV-II-atomic-gYearMonth-minExclusive-2-5 tokoe:invalid" result="pass"/><test-case name="10425NISTSchema-SV-II-atomic-gYearMonth-minExclusive-3 tokoe:valid" result="pass"/><test-case name="10426NISTXML-SV-II-atomic-gYearMonth-minExclusive-3-1 tokoe:invalid" result="pass"/><test-case name="10427NISTXML-SV-II-atomic-gYearMonth-minExclusive-3-2 tokoe:invalid" result="pass"/><test-case name="10428NISTXML-SV-II-atomic-gYearMonth-minExclusive-3-3 tokoe:invalid" result="pass"/><test-case name="10429NISTXML-SV-II-atomic-gYearMonth-minExclusive-3-4 tokoe:invalid" result="pass"/><test-case name="10430NISTXML-SV-II-atomic-gYearMonth-minExclusive-3-5 tokoe:invalid" result="pass"/><test-case name="10431NISTSchema-SV-II-atomic-gYearMonth-minExclusive-4 tokoe:valid" result="pass"/><test-case name="10432NISTXML-SV-II-atomic-gYearMonth-minExclusive-4-1 tokoe:invalid" result="pass"/><test-case name="10433NISTXML-SV-II-atomic-gYearMonth-minExclusive-4-2 tokoe:invalid" result="pass"/><test-case name="10434NISTXML-SV-II-atomic-gYearMonth-minExclusive-4-3 tokoe:invalid" result="pass"/><test-case name="10435NISTXML-SV-II-atomic-gYearMonth-minExclusive-4-4 tokoe:invalid" result="pass"/><test-case name="10436NISTXML-SV-II-atomic-gYearMonth-minExclusive-4-5 tokoe:invalid" result="pass"/><test-case name="10437NISTSchema-SV-II-atomic-gYearMonth-minExclusive-5 tokoe:valid" result="pass"/><test-case name="10438NISTXML-SV-II-atomic-gYearMonth-minExclusive-5-1 tokoe:invalid" result="pass"/><test-case name="10439NISTXML-SV-II-atomic-gYearMonth-minExclusive-5-2 tokoe:invalid" result="pass"/><test-case name="10440NISTXML-SV-II-atomic-gYearMonth-minExclusive-5-3 tokoe:invalid" result="pass"/><test-case name="10441NISTXML-SV-II-atomic-gYearMonth-minExclusive-5-4 tokoe:invalid" result="pass"/><test-case name="10442NISTXML-SV-II-atomic-gYearMonth-minExclusive-5-5 tokoe:invalid" result="pass"/><test-case name="10443NISTSchema-SV-II-atomic-gYearMonth-maxExclusive-1 tokoe:valid" result="pass"/><test-case name="10444NISTXML-SV-II-atomic-gYearMonth-maxExclusive-1-1 tokoe:invalid" result="pass"/><test-case name="10445NISTXML-SV-II-atomic-gYearMonth-maxExclusive-1-2 tokoe:invalid" result="pass"/><test-case name="10446NISTXML-SV-II-atomic-gYearMonth-maxExclusive-1-3 tokoe:invalid" result="pass"/><test-case name="10447NISTXML-SV-II-atomic-gYearMonth-maxExclusive-1-4 tokoe:invalid" result="pass"/><test-case name="10448NISTXML-SV-II-atomic-gYearMonth-maxExclusive-1-5 tokoe:invalid" result="pass"/><test-case name="10449NISTSchema-SV-II-atomic-gYearMonth-maxExclusive-2 tokoe:valid" result="pass"/><test-case name="10450NISTXML-SV-II-atomic-gYearMonth-maxExclusive-2-1 tokoe:invalid" result="pass"/><test-case name="10451NISTXML-SV-II-atomic-gYearMonth-maxExclusive-2-2 tokoe:invalid" result="pass"/><test-case name="10452NISTXML-SV-II-atomic-gYearMonth-maxExclusive-2-3 tokoe:invalid" result="pass"/><test-case name="10453NISTXML-SV-II-atomic-gYearMonth-maxExclusive-2-4 tokoe:invalid" result="pass"/><test-case name="10454NISTXML-SV-II-atomic-gYearMonth-maxExclusive-2-5 tokoe:invalid" result="pass"/><test-case name="10455NISTSchema-SV-II-atomic-gYearMonth-maxExclusive-3 tokoe:valid" result="pass"/><test-case name="10456NISTXML-SV-II-atomic-gYearMonth-maxExclusive-3-1 tokoe:invalid" result="pass"/><test-case name="10457NISTXML-SV-II-atomic-gYearMonth-maxExclusive-3-2 tokoe:invalid" result="pass"/><test-case name="10458NISTXML-SV-II-atomic-gYearMonth-maxExclusive-3-3 tokoe:invalid" result="pass"/><test-case name="10459NISTXML-SV-II-atomic-gYearMonth-maxExclusive-3-4 tokoe:invalid" result="pass"/><test-case name="10460NISTXML-SV-II-atomic-gYearMonth-maxExclusive-3-5 tokoe:invalid" result="pass"/><test-case name="10461NISTSchema-SV-II-atomic-gYearMonth-maxExclusive-4 tokoe:valid" result="pass"/><test-case name="10462NISTXML-SV-II-atomic-gYearMonth-maxExclusive-4-1 tokoe:invalid" result="pass"/><test-case name="10463NISTXML-SV-II-atomic-gYearMonth-maxExclusive-4-2 tokoe:invalid" result="pass"/><test-case name="10464NISTXML-SV-II-atomic-gYearMonth-maxExclusive-4-3 tokoe:invalid" result="pass"/><test-case name="10465NISTXML-SV-II-atomic-gYearMonth-maxExclusive-4-4 tokoe:invalid" result="pass"/><test-case name="10466NISTXML-SV-II-atomic-gYearMonth-maxExclusive-4-5 tokoe:invalid" result="pass"/><test-case name="10467NISTSchema-SV-II-atomic-gYearMonth-maxExclusive-5 tokoe:valid" result="pass"/><test-case name="10468NISTXML-SV-II-atomic-gYearMonth-maxExclusive-5-1 tokoe:invalid" result="pass"/><test-case name="10469NISTSchema-SV-II-atomic-gYearMonth-pattern-1 tokoe:valid" result="pass"/><test-case name="10470NISTXML-SV-II-atomic-gYearMonth-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="10471NISTXML-SV-II-atomic-gYearMonth-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="10472NISTXML-SV-II-atomic-gYearMonth-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="10473NISTXML-SV-II-atomic-gYearMonth-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="10474NISTXML-SV-II-atomic-gYearMonth-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="10475NISTSchema-SV-II-atomic-gYearMonth-pattern-2 tokoe:valid" result="pass"/><test-case name="10476NISTXML-SV-II-atomic-gYearMonth-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="10477NISTXML-SV-II-atomic-gYearMonth-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="10478NISTXML-SV-II-atomic-gYearMonth-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="10479NISTXML-SV-II-atomic-gYearMonth-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="10480NISTXML-SV-II-atomic-gYearMonth-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="10481NISTSchema-SV-II-atomic-gYearMonth-pattern-3 tokoe:valid" result="pass"/><test-case name="10482NISTXML-SV-II-atomic-gYearMonth-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="10483NISTXML-SV-II-atomic-gYearMonth-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="10484NISTXML-SV-II-atomic-gYearMonth-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="10485NISTXML-SV-II-atomic-gYearMonth-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="10486NISTXML-SV-II-atomic-gYearMonth-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="10487NISTSchema-SV-II-atomic-gYearMonth-pattern-4 tokoe:valid" result="pass"/><test-case name="10488NISTXML-SV-II-atomic-gYearMonth-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="10489NISTXML-SV-II-atomic-gYearMonth-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="10490NISTXML-SV-II-atomic-gYearMonth-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="10491NISTXML-SV-II-atomic-gYearMonth-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="10492NISTXML-SV-II-atomic-gYearMonth-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="10493NISTSchema-SV-II-atomic-gYearMonth-pattern-5 tokoe:valid" result="pass"/><test-case name="10494NISTXML-SV-II-atomic-gYearMonth-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="10495NISTXML-SV-II-atomic-gYearMonth-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="10496NISTXML-SV-II-atomic-gYearMonth-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="10497NISTXML-SV-II-atomic-gYearMonth-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="10498NISTXML-SV-II-atomic-gYearMonth-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="10499NISTSchema-SV-II-atomic-gYearMonth-enumeration-1 tokoe:valid" result="pass"/><test-case name="10500NISTXML-SV-II-atomic-gYearMonth-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="10501NISTXML-SV-II-atomic-gYearMonth-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="10502NISTXML-SV-II-atomic-gYearMonth-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="10503NISTXML-SV-II-atomic-gYearMonth-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="10504NISTXML-SV-II-atomic-gYearMonth-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="10505NISTSchema-SV-II-atomic-gYearMonth-enumeration-2 tokoe:valid" result="pass"/><test-case name="10506NISTXML-SV-II-atomic-gYearMonth-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="10507NISTXML-SV-II-atomic-gYearMonth-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="10508NISTXML-SV-II-atomic-gYearMonth-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="10509NISTXML-SV-II-atomic-gYearMonth-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="10510NISTXML-SV-II-atomic-gYearMonth-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="10511NISTSchema-SV-II-atomic-gYearMonth-enumeration-3 tokoe:valid" result="pass"/><test-case name="10512NISTXML-SV-II-atomic-gYearMonth-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="10513NISTXML-SV-II-atomic-gYearMonth-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="10514NISTXML-SV-II-atomic-gYearMonth-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="10515NISTXML-SV-II-atomic-gYearMonth-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="10516NISTXML-SV-II-atomic-gYearMonth-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="10517NISTSchema-SV-II-atomic-gYearMonth-enumeration-4 tokoe:valid" result="pass"/><test-case name="10518NISTXML-SV-II-atomic-gYearMonth-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="10519NISTXML-SV-II-atomic-gYearMonth-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="10520NISTXML-SV-II-atomic-gYearMonth-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="10521NISTXML-SV-II-atomic-gYearMonth-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="10522NISTXML-SV-II-atomic-gYearMonth-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="10523NISTSchema-SV-II-atomic-gYearMonth-enumeration-5 tokoe:valid" result="pass"/><test-case name="10524NISTXML-SV-II-atomic-gYearMonth-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="10525NISTXML-SV-II-atomic-gYearMonth-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="10526NISTXML-SV-II-atomic-gYearMonth-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="10527NISTXML-SV-II-atomic-gYearMonth-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="10528NISTXML-SV-II-atomic-gYearMonth-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="10529NISTSchema-SV-II-atomic-gYear-minExclusive-1 tokoe:valid" result="pass"/><test-case name="10530NISTXML-SV-II-atomic-gYear-minExclusive-1-1 tokoe:invalid" result="pass"/><test-case name="10531NISTSchema-SV-II-atomic-gYear-minExclusive-2 tokoe:valid" result="pass"/><test-case name="10532NISTXML-SV-II-atomic-gYear-minExclusive-2-1 tokoe:invalid" result="pass"/><test-case name="10533NISTXML-SV-II-atomic-gYear-minExclusive-2-2 tokoe:invalid" result="pass"/><test-case name="10534NISTXML-SV-II-atomic-gYear-minExclusive-2-3 tokoe:invalid" result="pass"/><test-case name="10535NISTXML-SV-II-atomic-gYear-minExclusive-2-4 tokoe:invalid" result="pass"/><test-case name="10536NISTXML-SV-II-atomic-gYear-minExclusive-2-5 tokoe:invalid" result="pass"/><test-case name="10537NISTSchema-SV-II-atomic-gYear-minExclusive-3 tokoe:valid" result="pass"/><test-case name="10538NISTXML-SV-II-atomic-gYear-minExclusive-3-1 tokoe:invalid" result="pass"/><test-case name="10539NISTXML-SV-II-atomic-gYear-minExclusive-3-2 tokoe:invalid" result="pass"/><test-case name="10540NISTXML-SV-II-atomic-gYear-minExclusive-3-3 tokoe:invalid" result="pass"/><test-case name="10541NISTXML-SV-II-atomic-gYear-minExclusive-3-4 tokoe:invalid" result="pass"/><test-case name="10542NISTXML-SV-II-atomic-gYear-minExclusive-3-5 tokoe:invalid" result="pass"/><test-case name="10543NISTSchema-SV-II-atomic-gYear-minExclusive-4 tokoe:valid" result="pass"/><test-case name="10544NISTXML-SV-II-atomic-gYear-minExclusive-4-1 tokoe:invalid" result="pass"/><test-case name="10545NISTXML-SV-II-atomic-gYear-minExclusive-4-2 tokoe:invalid" result="pass"/><test-case name="10546NISTXML-SV-II-atomic-gYear-minExclusive-4-3 tokoe:invalid" result="pass"/><test-case name="10547NISTXML-SV-II-atomic-gYear-minExclusive-4-4 tokoe:invalid" result="pass"/><test-case name="10548NISTXML-SV-II-atomic-gYear-minExclusive-4-5 tokoe:invalid" result="pass"/><test-case name="10549NISTSchema-SV-II-atomic-gYear-minExclusive-5 tokoe:valid" result="pass"/><test-case name="10550NISTXML-SV-II-atomic-gYear-minExclusive-5-1 tokoe:invalid" result="pass"/><test-case name="10551NISTXML-SV-II-atomic-gYear-minExclusive-5-2 tokoe:invalid" result="pass"/><test-case name="10552NISTXML-SV-II-atomic-gYear-minExclusive-5-3 tokoe:invalid" result="pass"/><test-case name="10553NISTXML-SV-II-atomic-gYear-minExclusive-5-4 tokoe:invalid" result="pass"/><test-case name="10554NISTXML-SV-II-atomic-gYear-minExclusive-5-5 tokoe:invalid" result="pass"/><test-case name="10555NISTSchema-SV-II-atomic-gYear-maxExclusive-1 tokoe:valid" result="pass"/><test-case name="10556NISTXML-SV-II-atomic-gYear-maxExclusive-1-1 tokoe:invalid" result="pass"/><test-case name="10557NISTXML-SV-II-atomic-gYear-maxExclusive-1-2 tokoe:invalid" result="pass"/><test-case name="10558NISTXML-SV-II-atomic-gYear-maxExclusive-1-3 tokoe:invalid" result="pass"/><test-case name="10559NISTXML-SV-II-atomic-gYear-maxExclusive-1-4 tokoe:invalid" result="pass"/><test-case name="10560NISTXML-SV-II-atomic-gYear-maxExclusive-1-5 tokoe:invalid" result="pass"/><test-case name="10561NISTSchema-SV-II-atomic-gYear-maxExclusive-2 tokoe:valid" result="pass"/><test-case name="10562NISTXML-SV-II-atomic-gYear-maxExclusive-2-1 tokoe:invalid" result="pass"/><test-case name="10563NISTXML-SV-II-atomic-gYear-maxExclusive-2-2 tokoe:invalid" result="pass"/><test-case name="10564NISTXML-SV-II-atomic-gYear-maxExclusive-2-3 tokoe:invalid" result="pass"/><test-case name="10565NISTXML-SV-II-atomic-gYear-maxExclusive-2-4 tokoe:invalid" result="pass"/><test-case name="10566NISTXML-SV-II-atomic-gYear-maxExclusive-2-5 tokoe:invalid" result="pass"/><test-case name="10567NISTSchema-SV-II-atomic-gYear-maxExclusive-3 tokoe:valid" result="pass"/><test-case name="10568NISTXML-SV-II-atomic-gYear-maxExclusive-3-1 tokoe:invalid" result="pass"/><test-case name="10569NISTXML-SV-II-atomic-gYear-maxExclusive-3-2 tokoe:invalid" result="pass"/><test-case name="10570NISTXML-SV-II-atomic-gYear-maxExclusive-3-3 tokoe:invalid" result="pass"/><test-case name="10571NISTXML-SV-II-atomic-gYear-maxExclusive-3-4 tokoe:invalid" result="pass"/><test-case name="10572NISTXML-SV-II-atomic-gYear-maxExclusive-3-5 tokoe:invalid" result="pass"/><test-case name="10573NISTSchema-SV-II-atomic-gYear-maxExclusive-4 tokoe:valid" result="pass"/><test-case name="10574NISTXML-SV-II-atomic-gYear-maxExclusive-4-1 tokoe:invalid" result="pass"/><test-case name="10575NISTXML-SV-II-atomic-gYear-maxExclusive-4-2 tokoe:invalid" result="pass"/><test-case name="10576NISTXML-SV-II-atomic-gYear-maxExclusive-4-3 tokoe:invalid" result="pass"/><test-case name="10577NISTXML-SV-II-atomic-gYear-maxExclusive-4-4 tokoe:invalid" result="pass"/><test-case name="10578NISTXML-SV-II-atomic-gYear-maxExclusive-4-5 tokoe:invalid" result="pass"/><test-case name="10579NISTSchema-SV-II-atomic-gYear-maxExclusive-5 tokoe:valid" result="pass"/><test-case name="10580NISTXML-SV-II-atomic-gYear-maxExclusive-5-1 tokoe:invalid" result="pass"/><test-case name="10581NISTSchema-SV-II-atomic-gYear-pattern-1 tokoe:valid" result="pass"/><test-case name="10582NISTXML-SV-II-atomic-gYear-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="10583NISTXML-SV-II-atomic-gYear-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="10584NISTXML-SV-II-atomic-gYear-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="10585NISTXML-SV-II-atomic-gYear-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="10586NISTXML-SV-II-atomic-gYear-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="10587NISTSchema-SV-II-atomic-gYear-pattern-2 tokoe:valid" result="pass"/><test-case name="10588NISTXML-SV-II-atomic-gYear-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="10589NISTXML-SV-II-atomic-gYear-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="10590NISTXML-SV-II-atomic-gYear-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="10591NISTXML-SV-II-atomic-gYear-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="10592NISTXML-SV-II-atomic-gYear-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="10593NISTSchema-SV-II-atomic-gYear-pattern-3 tokoe:valid" result="pass"/><test-case name="10594NISTXML-SV-II-atomic-gYear-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="10595NISTXML-SV-II-atomic-gYear-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="10596NISTXML-SV-II-atomic-gYear-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="10597NISTXML-SV-II-atomic-gYear-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="10598NISTXML-SV-II-atomic-gYear-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="10599NISTSchema-SV-II-atomic-gYear-pattern-4 tokoe:valid" result="pass"/><test-case name="10600NISTXML-SV-II-atomic-gYear-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="10601NISTXML-SV-II-atomic-gYear-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="10602NISTXML-SV-II-atomic-gYear-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="10603NISTXML-SV-II-atomic-gYear-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="10604NISTXML-SV-II-atomic-gYear-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="10605NISTSchema-SV-II-atomic-gYear-pattern-5 tokoe:valid" result="pass"/><test-case name="10606NISTXML-SV-II-atomic-gYear-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="10607NISTXML-SV-II-atomic-gYear-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="10608NISTXML-SV-II-atomic-gYear-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="10609NISTXML-SV-II-atomic-gYear-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="10610NISTXML-SV-II-atomic-gYear-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="10611NISTSchema-SV-II-atomic-gYear-enumeration-1 tokoe:valid" result="pass"/><test-case name="10612NISTXML-SV-II-atomic-gYear-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="10613NISTXML-SV-II-atomic-gYear-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="10614NISTXML-SV-II-atomic-gYear-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="10615NISTXML-SV-II-atomic-gYear-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="10616NISTXML-SV-II-atomic-gYear-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="10617NISTSchema-SV-II-atomic-gYear-enumeration-2 tokoe:valid" result="pass"/><test-case name="10618NISTXML-SV-II-atomic-gYear-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="10619NISTXML-SV-II-atomic-gYear-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="10620NISTXML-SV-II-atomic-gYear-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="10621NISTXML-SV-II-atomic-gYear-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="10622NISTXML-SV-II-atomic-gYear-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="10623NISTSchema-SV-II-atomic-gYear-enumeration-3 tokoe:valid" result="pass"/><test-case name="10624NISTXML-SV-II-atomic-gYear-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="10625NISTXML-SV-II-atomic-gYear-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="10626NISTXML-SV-II-atomic-gYear-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="10627NISTXML-SV-II-atomic-gYear-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="10628NISTXML-SV-II-atomic-gYear-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="10629NISTSchema-SV-II-atomic-gYear-enumeration-4 tokoe:valid" result="pass"/><test-case name="10630NISTXML-SV-II-atomic-gYear-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="10631NISTXML-SV-II-atomic-gYear-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="10632NISTXML-SV-II-atomic-gYear-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="10633NISTXML-SV-II-atomic-gYear-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="10634NISTXML-SV-II-atomic-gYear-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="10635NISTSchema-SV-II-atomic-gYear-enumeration-5 tokoe:valid" result="pass"/><test-case name="10636NISTXML-SV-II-atomic-gYear-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="10637NISTXML-SV-II-atomic-gYear-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="10638NISTXML-SV-II-atomic-gYear-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="10639NISTXML-SV-II-atomic-gYear-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="10640NISTXML-SV-II-atomic-gYear-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="10641NISTSchema-SV-II-atomic-gMonthDay-minExclusive-1 tokoe:valid" result="pass"/><test-case name="10642NISTXML-SV-II-atomic-gMonthDay-minExclusive-1-1 tokoe:invalid" result="pass"/><test-case name="10643NISTSchema-SV-II-atomic-gMonthDay-minExclusive-2 tokoe:valid" result="pass"/><test-case name="10644NISTXML-SV-II-atomic-gMonthDay-minExclusive-2-1 tokoe:invalid" result="pass"/><test-case name="10645NISTXML-SV-II-atomic-gMonthDay-minExclusive-2-2 tokoe:invalid" result="pass"/><test-case name="10646NISTXML-SV-II-atomic-gMonthDay-minExclusive-2-3 tokoe:invalid" result="pass"/><test-case name="10647NISTXML-SV-II-atomic-gMonthDay-minExclusive-2-4 tokoe:invalid" result="pass"/><test-case name="10648NISTXML-SV-II-atomic-gMonthDay-minExclusive-2-5 tokoe:invalid" result="pass"/><test-case name="10649NISTSchema-SV-II-atomic-gMonthDay-minExclusive-3 tokoe:valid" result="pass"/><test-case name="10650NISTXML-SV-II-atomic-gMonthDay-minExclusive-3-1 tokoe:invalid" result="pass"/><test-case name="10651NISTXML-SV-II-atomic-gMonthDay-minExclusive-3-2 tokoe:invalid" result="pass"/><test-case name="10652NISTXML-SV-II-atomic-gMonthDay-minExclusive-3-3 tokoe:invalid" result="pass"/><test-case name="10653NISTXML-SV-II-atomic-gMonthDay-minExclusive-3-4 tokoe:invalid" result="pass"/><test-case name="10654NISTXML-SV-II-atomic-gMonthDay-minExclusive-3-5 tokoe:invalid" result="pass"/><test-case name="10655NISTSchema-SV-II-atomic-gMonthDay-minExclusive-4 tokoe:valid" result="pass"/><test-case name="10656NISTXML-SV-II-atomic-gMonthDay-minExclusive-4-1 tokoe:invalid" result="pass"/><test-case name="10657NISTXML-SV-II-atomic-gMonthDay-minExclusive-4-2 tokoe:invalid" result="pass"/><test-case name="10658NISTXML-SV-II-atomic-gMonthDay-minExclusive-4-3 tokoe:invalid" result="pass"/><test-case name="10659NISTXML-SV-II-atomic-gMonthDay-minExclusive-4-4 tokoe:invalid" result="pass"/><test-case name="10660NISTXML-SV-II-atomic-gMonthDay-minExclusive-4-5 tokoe:invalid" result="pass"/><test-case name="10661NISTSchema-SV-II-atomic-gMonthDay-minExclusive-5 tokoe:valid" result="pass"/><test-case name="10662NISTXML-SV-II-atomic-gMonthDay-minExclusive-5-1 tokoe:invalid" result="pass"/><test-case name="10663NISTXML-SV-II-atomic-gMonthDay-minExclusive-5-2 tokoe:invalid" result="pass"/><test-case name="10664NISTXML-SV-II-atomic-gMonthDay-minExclusive-5-3 tokoe:invalid" result="pass"/><test-case name="10665NISTXML-SV-II-atomic-gMonthDay-minExclusive-5-4 tokoe:invalid" result="pass"/><test-case name="10666NISTXML-SV-II-atomic-gMonthDay-minExclusive-5-5 tokoe:invalid" result="pass"/><test-case name="10667NISTSchema-SV-II-atomic-gMonthDay-maxExclusive-1 tokoe:valid" result="pass"/><test-case name="10668NISTXML-SV-II-atomic-gMonthDay-maxExclusive-1-1 tokoe:invalid" result="pass"/><test-case name="10669NISTXML-SV-II-atomic-gMonthDay-maxExclusive-1-2 tokoe:invalid" result="pass"/><test-case name="10670NISTXML-SV-II-atomic-gMonthDay-maxExclusive-1-3 tokoe:invalid" result="pass"/><test-case name="10671NISTXML-SV-II-atomic-gMonthDay-maxExclusive-1-4 tokoe:invalid" result="pass"/><test-case name="10672NISTXML-SV-II-atomic-gMonthDay-maxExclusive-1-5 tokoe:invalid" result="pass"/><test-case name="10673NISTSchema-SV-II-atomic-gMonthDay-maxExclusive-2 tokoe:valid" result="pass"/><test-case name="10674NISTXML-SV-II-atomic-gMonthDay-maxExclusive-2-1 tokoe:invalid" result="pass"/><test-case name="10675NISTXML-SV-II-atomic-gMonthDay-maxExclusive-2-2 tokoe:invalid" result="pass"/><test-case name="10676NISTXML-SV-II-atomic-gMonthDay-maxExclusive-2-3 tokoe:invalid" result="pass"/><test-case name="10677NISTXML-SV-II-atomic-gMonthDay-maxExclusive-2-4 tokoe:invalid" result="pass"/><test-case name="10678NISTXML-SV-II-atomic-gMonthDay-maxExclusive-2-5 tokoe:invalid" result="pass"/><test-case name="10679NISTSchema-SV-II-atomic-gMonthDay-maxExclusive-3 tokoe:valid" result="pass"/><test-case name="10680NISTXML-SV-II-atomic-gMonthDay-maxExclusive-3-1 tokoe:invalid" result="pass"/><test-case name="10681NISTXML-SV-II-atomic-gMonthDay-maxExclusive-3-2 tokoe:invalid" result="pass"/><test-case name="10682NISTXML-SV-II-atomic-gMonthDay-maxExclusive-3-3 tokoe:invalid" result="pass"/><test-case name="10683NISTXML-SV-II-atomic-gMonthDay-maxExclusive-3-4 tokoe:invalid" result="pass"/><test-case name="10684NISTXML-SV-II-atomic-gMonthDay-maxExclusive-3-5 tokoe:invalid" result="pass"/><test-case name="10685NISTSchema-SV-II-atomic-gMonthDay-maxExclusive-4 tokoe:valid" result="pass"/><test-case name="10686NISTXML-SV-II-atomic-gMonthDay-maxExclusive-4-1 tokoe:invalid" result="pass"/><test-case name="10687NISTXML-SV-II-atomic-gMonthDay-maxExclusive-4-2 tokoe:invalid" result="pass"/><test-case name="10688NISTXML-SV-II-atomic-gMonthDay-maxExclusive-4-3 tokoe:invalid" result="pass"/><test-case name="10689NISTXML-SV-II-atomic-gMonthDay-maxExclusive-4-4 tokoe:invalid" result="pass"/><test-case name="10690NISTXML-SV-II-atomic-gMonthDay-maxExclusive-4-5 tokoe:invalid" result="pass"/><test-case name="10691NISTSchema-SV-II-atomic-gMonthDay-maxExclusive-5 tokoe:valid" result="pass"/><test-case name="10692NISTXML-SV-II-atomic-gMonthDay-maxExclusive-5-1 tokoe:invalid" result="pass"/><test-case name="10693NISTSchema-SV-II-atomic-gMonthDay-pattern-1 tokoe:valid" result="pass"/><test-case name="10694NISTXML-SV-II-atomic-gMonthDay-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="10695NISTXML-SV-II-atomic-gMonthDay-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="10696NISTXML-SV-II-atomic-gMonthDay-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="10697NISTXML-SV-II-atomic-gMonthDay-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="10698NISTXML-SV-II-atomic-gMonthDay-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="10699NISTSchema-SV-II-atomic-gMonthDay-pattern-2 tokoe:valid" result="pass"/><test-case name="10700NISTXML-SV-II-atomic-gMonthDay-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="10701NISTXML-SV-II-atomic-gMonthDay-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="10702NISTXML-SV-II-atomic-gMonthDay-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="10703NISTXML-SV-II-atomic-gMonthDay-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="10704NISTXML-SV-II-atomic-gMonthDay-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="10705NISTSchema-SV-II-atomic-gMonthDay-pattern-3 tokoe:valid" result="pass"/><test-case name="10706NISTXML-SV-II-atomic-gMonthDay-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="10707NISTXML-SV-II-atomic-gMonthDay-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="10708NISTXML-SV-II-atomic-gMonthDay-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="10709NISTXML-SV-II-atomic-gMonthDay-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="10710NISTXML-SV-II-atomic-gMonthDay-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="10711NISTSchema-SV-II-atomic-gMonthDay-pattern-4 tokoe:valid" result="pass"/><test-case name="10712NISTXML-SV-II-atomic-gMonthDay-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="10713NISTXML-SV-II-atomic-gMonthDay-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="10714NISTXML-SV-II-atomic-gMonthDay-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="10715NISTXML-SV-II-atomic-gMonthDay-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="10716NISTXML-SV-II-atomic-gMonthDay-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="10717NISTSchema-SV-II-atomic-gMonthDay-pattern-5 tokoe:valid" result="pass"/><test-case name="10718NISTXML-SV-II-atomic-gMonthDay-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="10719NISTXML-SV-II-atomic-gMonthDay-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="10720NISTXML-SV-II-atomic-gMonthDay-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="10721NISTXML-SV-II-atomic-gMonthDay-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="10722NISTXML-SV-II-atomic-gMonthDay-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="10723NISTSchema-SV-II-atomic-gMonthDay-enumeration-1 tokoe:valid" result="pass"/><test-case name="10724NISTXML-SV-II-atomic-gMonthDay-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="10725NISTXML-SV-II-atomic-gMonthDay-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="10726NISTXML-SV-II-atomic-gMonthDay-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="10727NISTXML-SV-II-atomic-gMonthDay-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="10728NISTXML-SV-II-atomic-gMonthDay-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="10729NISTSchema-SV-II-atomic-gMonthDay-enumeration-2 tokoe:valid" result="pass"/><test-case name="10730NISTXML-SV-II-atomic-gMonthDay-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="10731NISTXML-SV-II-atomic-gMonthDay-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="10732NISTXML-SV-II-atomic-gMonthDay-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="10733NISTXML-SV-II-atomic-gMonthDay-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="10734NISTXML-SV-II-atomic-gMonthDay-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="10735NISTSchema-SV-II-atomic-gMonthDay-enumeration-3 tokoe:valid" result="pass"/><test-case name="10736NISTXML-SV-II-atomic-gMonthDay-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="10737NISTXML-SV-II-atomic-gMonthDay-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="10738NISTXML-SV-II-atomic-gMonthDay-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="10739NISTXML-SV-II-atomic-gMonthDay-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="10740NISTXML-SV-II-atomic-gMonthDay-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="10741NISTSchema-SV-II-atomic-gMonthDay-enumeration-4 tokoe:valid" result="pass"/><test-case name="10742NISTXML-SV-II-atomic-gMonthDay-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="10743NISTXML-SV-II-atomic-gMonthDay-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="10744NISTXML-SV-II-atomic-gMonthDay-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="10745NISTXML-SV-II-atomic-gMonthDay-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="10746NISTXML-SV-II-atomic-gMonthDay-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="10747NISTSchema-SV-II-atomic-gMonthDay-enumeration-5 tokoe:valid" result="pass"/><test-case name="10748NISTXML-SV-II-atomic-gMonthDay-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="10749NISTXML-SV-II-atomic-gMonthDay-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="10750NISTXML-SV-II-atomic-gMonthDay-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="10751NISTXML-SV-II-atomic-gMonthDay-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="10752NISTXML-SV-II-atomic-gMonthDay-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="10753NISTSchema-SV-II-atomic-gDay-minExclusive-1 tokoe:valid" result="pass"/><test-case name="10754NISTXML-SV-II-atomic-gDay-minExclusive-1-1 tokoe:invalid" result="pass"/><test-case name="10755NISTSchema-SV-II-atomic-gDay-minExclusive-2 tokoe:valid" result="pass"/><test-case name="10756NISTXML-SV-II-atomic-gDay-minExclusive-2-1 tokoe:invalid" result="pass"/><test-case name="10757NISTXML-SV-II-atomic-gDay-minExclusive-2-2 tokoe:invalid" result="pass"/><test-case name="10758NISTXML-SV-II-atomic-gDay-minExclusive-2-3 tokoe:invalid" result="pass"/><test-case name="10759NISTXML-SV-II-atomic-gDay-minExclusive-2-4 tokoe:invalid" result="pass"/><test-case name="10760NISTXML-SV-II-atomic-gDay-minExclusive-2-5 tokoe:invalid" result="pass"/><test-case name="10761NISTSchema-SV-II-atomic-gDay-minExclusive-3 tokoe:valid" result="pass"/><test-case name="10762NISTXML-SV-II-atomic-gDay-minExclusive-3-1 tokoe:invalid" result="pass"/><test-case name="10763NISTXML-SV-II-atomic-gDay-minExclusive-3-2 tokoe:invalid" result="pass"/><test-case name="10764NISTXML-SV-II-atomic-gDay-minExclusive-3-3 tokoe:invalid" result="pass"/><test-case name="10765NISTXML-SV-II-atomic-gDay-minExclusive-3-4 tokoe:invalid" result="pass"/><test-case name="10766NISTXML-SV-II-atomic-gDay-minExclusive-3-5 tokoe:invalid" result="pass"/><test-case name="10767NISTSchema-SV-II-atomic-gDay-minExclusive-4 tokoe:valid" result="pass"/><test-case name="10768NISTXML-SV-II-atomic-gDay-minExclusive-4-1 tokoe:invalid" result="pass"/><test-case name="10769NISTXML-SV-II-atomic-gDay-minExclusive-4-2 tokoe:invalid" result="pass"/><test-case name="10770NISTXML-SV-II-atomic-gDay-minExclusive-4-3 tokoe:invalid" result="pass"/><test-case name="10771NISTXML-SV-II-atomic-gDay-minExclusive-4-4 tokoe:invalid" result="pass"/><test-case name="10772NISTXML-SV-II-atomic-gDay-minExclusive-4-5 tokoe:invalid" result="pass"/><test-case name="10773NISTSchema-SV-II-atomic-gDay-minExclusive-5 tokoe:valid" result="pass"/><test-case name="10774NISTXML-SV-II-atomic-gDay-minExclusive-5-1 tokoe:invalid" result="pass"/><test-case name="10775NISTXML-SV-II-atomic-gDay-minExclusive-5-2 tokoe:invalid" result="pass"/><test-case name="10776NISTXML-SV-II-atomic-gDay-minExclusive-5-3 tokoe:invalid" result="pass"/><test-case name="10777NISTXML-SV-II-atomic-gDay-minExclusive-5-4 tokoe:invalid" result="pass"/><test-case name="10778NISTXML-SV-II-atomic-gDay-minExclusive-5-5 tokoe:invalid" result="pass"/><test-case name="10779NISTSchema-SV-II-atomic-gDay-maxExclusive-1 tokoe:valid" result="pass"/><test-case name="10780NISTXML-SV-II-atomic-gDay-maxExclusive-1-1 tokoe:invalid" result="pass"/><test-case name="10781NISTXML-SV-II-atomic-gDay-maxExclusive-1-2 tokoe:invalid" result="pass"/><test-case name="10782NISTXML-SV-II-atomic-gDay-maxExclusive-1-3 tokoe:invalid" result="pass"/><test-case name="10783NISTXML-SV-II-atomic-gDay-maxExclusive-1-4 tokoe:invalid" result="pass"/><test-case name="10784NISTXML-SV-II-atomic-gDay-maxExclusive-1-5 tokoe:invalid" result="pass"/><test-case name="10785NISTSchema-SV-II-atomic-gDay-maxExclusive-2 tokoe:valid" result="pass"/><test-case name="10786NISTXML-SV-II-atomic-gDay-maxExclusive-2-1 tokoe:invalid" result="pass"/><test-case name="10787NISTXML-SV-II-atomic-gDay-maxExclusive-2-2 tokoe:invalid" result="pass"/><test-case name="10788NISTXML-SV-II-atomic-gDay-maxExclusive-2-3 tokoe:invalid" result="pass"/><test-case name="10789NISTXML-SV-II-atomic-gDay-maxExclusive-2-4 tokoe:invalid" result="pass"/><test-case name="10790NISTXML-SV-II-atomic-gDay-maxExclusive-2-5 tokoe:invalid" result="pass"/><test-case name="10791NISTSchema-SV-II-atomic-gDay-maxExclusive-3 tokoe:valid" result="pass"/><test-case name="10792NISTXML-SV-II-atomic-gDay-maxExclusive-3-1 tokoe:invalid" result="pass"/><test-case name="10793NISTXML-SV-II-atomic-gDay-maxExclusive-3-2 tokoe:invalid" result="pass"/><test-case name="10794NISTXML-SV-II-atomic-gDay-maxExclusive-3-3 tokoe:invalid" result="pass"/><test-case name="10795NISTXML-SV-II-atomic-gDay-maxExclusive-3-4 tokoe:invalid" result="pass"/><test-case name="10796NISTXML-SV-II-atomic-gDay-maxExclusive-3-5 tokoe:invalid" result="pass"/><test-case name="10797NISTSchema-SV-II-atomic-gDay-maxExclusive-4 tokoe:valid" result="pass"/><test-case name="10798NISTXML-SV-II-atomic-gDay-maxExclusive-4-1 tokoe:invalid" result="pass"/><test-case name="10799NISTXML-SV-II-atomic-gDay-maxExclusive-4-2 tokoe:invalid" result="pass"/><test-case name="10800NISTXML-SV-II-atomic-gDay-maxExclusive-4-3 tokoe:invalid" result="pass"/><test-case name="10801NISTXML-SV-II-atomic-gDay-maxExclusive-4-4 tokoe:invalid" result="pass"/><test-case name="10802NISTXML-SV-II-atomic-gDay-maxExclusive-4-5 tokoe:invalid" result="pass"/><test-case name="10803NISTSchema-SV-II-atomic-gDay-maxExclusive-5 tokoe:valid" result="pass"/><test-case name="10804NISTXML-SV-II-atomic-gDay-maxExclusive-5-1 tokoe:invalid" result="pass"/><test-case name="10805NISTSchema-SV-II-atomic-gDay-pattern-1 tokoe:valid" result="pass"/><test-case name="10806NISTXML-SV-II-atomic-gDay-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="10807NISTXML-SV-II-atomic-gDay-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="10808NISTXML-SV-II-atomic-gDay-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="10809NISTXML-SV-II-atomic-gDay-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="10810NISTXML-SV-II-atomic-gDay-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="10811NISTSchema-SV-II-atomic-gDay-pattern-2 tokoe:valid" result="pass"/><test-case name="10812NISTXML-SV-II-atomic-gDay-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="10813NISTXML-SV-II-atomic-gDay-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="10814NISTXML-SV-II-atomic-gDay-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="10815NISTXML-SV-II-atomic-gDay-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="10816NISTXML-SV-II-atomic-gDay-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="10817NISTSchema-SV-II-atomic-gDay-pattern-3 tokoe:valid" result="pass"/><test-case name="10818NISTXML-SV-II-atomic-gDay-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="10819NISTXML-SV-II-atomic-gDay-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="10820NISTXML-SV-II-atomic-gDay-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="10821NISTXML-SV-II-atomic-gDay-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="10822NISTXML-SV-II-atomic-gDay-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="10823NISTSchema-SV-II-atomic-gDay-pattern-4 tokoe:valid" result="pass"/><test-case name="10824NISTXML-SV-II-atomic-gDay-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="10825NISTXML-SV-II-atomic-gDay-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="10826NISTXML-SV-II-atomic-gDay-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="10827NISTXML-SV-II-atomic-gDay-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="10828NISTXML-SV-II-atomic-gDay-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="10829NISTSchema-SV-II-atomic-gDay-pattern-5 tokoe:valid" result="pass"/><test-case name="10830NISTXML-SV-II-atomic-gDay-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="10831NISTXML-SV-II-atomic-gDay-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="10832NISTXML-SV-II-atomic-gDay-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="10833NISTXML-SV-II-atomic-gDay-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="10834NISTXML-SV-II-atomic-gDay-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="10835NISTSchema-SV-II-atomic-gDay-enumeration-1 tokoe:valid" result="pass"/><test-case name="10836NISTXML-SV-II-atomic-gDay-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="10837NISTXML-SV-II-atomic-gDay-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="10838NISTXML-SV-II-atomic-gDay-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="10839NISTXML-SV-II-atomic-gDay-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="10840NISTXML-SV-II-atomic-gDay-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="10841NISTSchema-SV-II-atomic-gDay-enumeration-2 tokoe:valid" result="pass"/><test-case name="10842NISTXML-SV-II-atomic-gDay-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="10843NISTXML-SV-II-atomic-gDay-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="10844NISTXML-SV-II-atomic-gDay-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="10845NISTXML-SV-II-atomic-gDay-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="10846NISTXML-SV-II-atomic-gDay-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="10847NISTSchema-SV-II-atomic-gDay-enumeration-3 tokoe:valid" result="pass"/><test-case name="10848NISTXML-SV-II-atomic-gDay-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="10849NISTXML-SV-II-atomic-gDay-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="10850NISTXML-SV-II-atomic-gDay-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="10851NISTXML-SV-II-atomic-gDay-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="10852NISTXML-SV-II-atomic-gDay-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="10853NISTSchema-SV-II-atomic-gDay-enumeration-4 tokoe:valid" result="pass"/><test-case name="10854NISTXML-SV-II-atomic-gDay-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="10855NISTXML-SV-II-atomic-gDay-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="10856NISTXML-SV-II-atomic-gDay-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="10857NISTXML-SV-II-atomic-gDay-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="10858NISTXML-SV-II-atomic-gDay-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="10859NISTSchema-SV-II-atomic-gDay-enumeration-5 tokoe:valid" result="pass"/><test-case name="10860NISTXML-SV-II-atomic-gDay-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="10861NISTXML-SV-II-atomic-gDay-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="10862NISTXML-SV-II-atomic-gDay-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="10863NISTXML-SV-II-atomic-gDay-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="10864NISTXML-SV-II-atomic-gDay-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="10865NISTSchema-SV-II-atomic-gMonth-minExclusive-1 tokoe:valid" result="pass"/><test-case name="10866NISTXML-SV-II-atomic-gMonth-minExclusive-1-1 tokoe:invalid" result="pass"/><test-case name="10867NISTSchema-SV-II-atomic-gMonth-minExclusive-2 tokoe:valid" result="pass"/><test-case name="10868NISTXML-SV-II-atomic-gMonth-minExclusive-2-1 tokoe:invalid" result="pass"/><test-case name="10869NISTXML-SV-II-atomic-gMonth-minExclusive-2-2 tokoe:invalid" result="pass"/><test-case name="10870NISTXML-SV-II-atomic-gMonth-minExclusive-2-3 tokoe:invalid" result="pass"/><test-case name="10871NISTXML-SV-II-atomic-gMonth-minExclusive-2-4 tokoe:invalid" result="pass"/><test-case name="10872NISTXML-SV-II-atomic-gMonth-minExclusive-2-5 tokoe:invalid" result="pass"/><test-case name="10873NISTSchema-SV-II-atomic-gMonth-minExclusive-3 tokoe:valid" result="pass"/><test-case name="10874NISTXML-SV-II-atomic-gMonth-minExclusive-3-1 tokoe:invalid" result="pass"/><test-case name="10875NISTSchema-SV-II-atomic-gMonth-minExclusive-4 tokoe:valid" result="pass"/><test-case name="10876NISTXML-SV-II-atomic-gMonth-minExclusive-4-1 tokoe:invalid" result="pass"/><test-case name="10877NISTXML-SV-II-atomic-gMonth-minExclusive-4-2 tokoe:invalid" result="pass"/><test-case name="10878NISTXML-SV-II-atomic-gMonth-minExclusive-4-3 tokoe:invalid" result="pass"/><test-case name="10879NISTXML-SV-II-atomic-gMonth-minExclusive-4-4 tokoe:invalid" result="pass"/><test-case name="10880NISTXML-SV-II-atomic-gMonth-minExclusive-4-5 tokoe:invalid" result="pass"/><test-case name="10881NISTSchema-SV-II-atomic-gMonth-minExclusive-5 tokoe:valid" result="pass"/><test-case name="10882NISTXML-SV-II-atomic-gMonth-minExclusive-5-1 tokoe:invalid" result="pass"/><test-case name="10883NISTXML-SV-II-atomic-gMonth-minExclusive-5-2 tokoe:invalid" result="pass"/><test-case name="10884NISTXML-SV-II-atomic-gMonth-minExclusive-5-3 tokoe:invalid" result="pass"/><test-case name="10885NISTXML-SV-II-atomic-gMonth-minExclusive-5-4 tokoe:invalid" result="pass"/><test-case name="10886NISTXML-SV-II-atomic-gMonth-minExclusive-5-5 tokoe:invalid" result="pass"/><test-case name="10887NISTSchema-SV-II-atomic-gMonth-maxExclusive-1 tokoe:valid" result="pass"/><test-case name="10888NISTXML-SV-II-atomic-gMonth-maxExclusive-1-1 tokoe:invalid" result="pass"/><test-case name="10889NISTXML-SV-II-atomic-gMonth-maxExclusive-1-2 tokoe:invalid" result="pass"/><test-case name="10890NISTXML-SV-II-atomic-gMonth-maxExclusive-1-3 tokoe:invalid" result="pass"/><test-case name="10891NISTXML-SV-II-atomic-gMonth-maxExclusive-1-4 tokoe:invalid" result="pass"/><test-case name="10892NISTXML-SV-II-atomic-gMonth-maxExclusive-1-5 tokoe:invalid" result="pass"/><test-case name="10893NISTSchema-SV-II-atomic-gMonth-maxExclusive-2 tokoe:valid" result="pass"/><test-case name="10894NISTXML-SV-II-atomic-gMonth-maxExclusive-2-1 tokoe:invalid" result="pass"/><test-case name="10895NISTXML-SV-II-atomic-gMonth-maxExclusive-2-2 tokoe:invalid" result="pass"/><test-case name="10896NISTXML-SV-II-atomic-gMonth-maxExclusive-2-3 tokoe:invalid" result="pass"/><test-case name="10897NISTXML-SV-II-atomic-gMonth-maxExclusive-2-4 tokoe:invalid" result="pass"/><test-case name="10898NISTXML-SV-II-atomic-gMonth-maxExclusive-2-5 tokoe:invalid" result="pass"/><test-case name="10899NISTSchema-SV-II-atomic-gMonth-maxExclusive-3 tokoe:valid" result="pass"/><test-case name="10900NISTXML-SV-II-atomic-gMonth-maxExclusive-3-1 tokoe:invalid" result="pass"/><test-case name="10901NISTXML-SV-II-atomic-gMonth-maxExclusive-3-2 tokoe:invalid" result="pass"/><test-case name="10902NISTXML-SV-II-atomic-gMonth-maxExclusive-3-3 tokoe:invalid" result="pass"/><test-case name="10903NISTXML-SV-II-atomic-gMonth-maxExclusive-3-4 tokoe:invalid" result="pass"/><test-case name="10904NISTXML-SV-II-atomic-gMonth-maxExclusive-3-5 tokoe:invalid" result="pass"/><test-case name="10905NISTSchema-SV-II-atomic-gMonth-maxExclusive-4 tokoe:valid" result="pass"/><test-case name="10906NISTXML-SV-II-atomic-gMonth-maxExclusive-4-1 tokoe:invalid" result="pass"/><test-case name="10907NISTXML-SV-II-atomic-gMonth-maxExclusive-4-2 tokoe:invalid" result="pass"/><test-case name="10908NISTXML-SV-II-atomic-gMonth-maxExclusive-4-3 tokoe:invalid" result="pass"/><test-case name="10909NISTXML-SV-II-atomic-gMonth-maxExclusive-4-4 tokoe:invalid" result="pass"/><test-case name="10910NISTXML-SV-II-atomic-gMonth-maxExclusive-4-5 tokoe:invalid" result="pass"/><test-case name="10911NISTSchema-SV-II-atomic-gMonth-maxExclusive-5 tokoe:valid" result="pass"/><test-case name="10912NISTXML-SV-II-atomic-gMonth-maxExclusive-5-1 tokoe:invalid" result="pass"/><test-case name="10913NISTSchema-SV-II-atomic-gMonth-pattern-1 tokoe:valid" result="pass"/><test-case name="10914NISTXML-SV-II-atomic-gMonth-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="10915NISTXML-SV-II-atomic-gMonth-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="10916NISTXML-SV-II-atomic-gMonth-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="10917NISTXML-SV-II-atomic-gMonth-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="10918NISTXML-SV-II-atomic-gMonth-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="10919NISTSchema-SV-II-atomic-gMonth-pattern-2 tokoe:valid" result="pass"/><test-case name="10920NISTXML-SV-II-atomic-gMonth-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="10921NISTXML-SV-II-atomic-gMonth-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="10922NISTXML-SV-II-atomic-gMonth-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="10923NISTXML-SV-II-atomic-gMonth-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="10924NISTXML-SV-II-atomic-gMonth-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="10925NISTSchema-SV-II-atomic-gMonth-pattern-3 tokoe:valid" result="pass"/><test-case name="10926NISTXML-SV-II-atomic-gMonth-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="10927NISTXML-SV-II-atomic-gMonth-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="10928NISTXML-SV-II-atomic-gMonth-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="10929NISTXML-SV-II-atomic-gMonth-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="10930NISTXML-SV-II-atomic-gMonth-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="10931NISTSchema-SV-II-atomic-gMonth-pattern-4 tokoe:valid" result="pass"/><test-case name="10932NISTXML-SV-II-atomic-gMonth-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="10933NISTXML-SV-II-atomic-gMonth-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="10934NISTXML-SV-II-atomic-gMonth-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="10935NISTXML-SV-II-atomic-gMonth-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="10936NISTXML-SV-II-atomic-gMonth-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="10937NISTSchema-SV-II-atomic-gMonth-pattern-5 tokoe:valid" result="pass"/><test-case name="10938NISTXML-SV-II-atomic-gMonth-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="10939NISTXML-SV-II-atomic-gMonth-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="10940NISTXML-SV-II-atomic-gMonth-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="10941NISTXML-SV-II-atomic-gMonth-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="10942NISTXML-SV-II-atomic-gMonth-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="10943NISTSchema-SV-II-atomic-gMonth-enumeration-1 tokoe:valid" result="pass"/><test-case name="10944NISTXML-SV-II-atomic-gMonth-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="10945NISTXML-SV-II-atomic-gMonth-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="10946NISTXML-SV-II-atomic-gMonth-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="10947NISTXML-SV-II-atomic-gMonth-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="10948NISTXML-SV-II-atomic-gMonth-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="10949NISTSchema-SV-II-atomic-gMonth-enumeration-2 tokoe:valid" result="pass"/><test-case name="10950NISTXML-SV-II-atomic-gMonth-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="10951NISTXML-SV-II-atomic-gMonth-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="10952NISTXML-SV-II-atomic-gMonth-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="10953NISTXML-SV-II-atomic-gMonth-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="10954NISTXML-SV-II-atomic-gMonth-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="10955NISTSchema-SV-II-atomic-gMonth-enumeration-3 tokoe:valid" result="pass"/><test-case name="10956NISTXML-SV-II-atomic-gMonth-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="10957NISTXML-SV-II-atomic-gMonth-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="10958NISTXML-SV-II-atomic-gMonth-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="10959NISTXML-SV-II-atomic-gMonth-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="10960NISTXML-SV-II-atomic-gMonth-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="10961NISTSchema-SV-II-atomic-gMonth-enumeration-4 tokoe:valid" result="pass"/><test-case name="10962NISTXML-SV-II-atomic-gMonth-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="10963NISTXML-SV-II-atomic-gMonth-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="10964NISTXML-SV-II-atomic-gMonth-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="10965NISTXML-SV-II-atomic-gMonth-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="10966NISTXML-SV-II-atomic-gMonth-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="10967NISTSchema-SV-II-atomic-gMonth-enumeration-5 tokoe:valid" result="pass"/><test-case name="10968NISTXML-SV-II-atomic-gMonth-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="10969NISTXML-SV-II-atomic-gMonth-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="10970NISTXML-SV-II-atomic-gMonth-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="10971NISTXML-SV-II-atomic-gMonth-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="10972NISTXML-SV-II-atomic-gMonth-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="10973NISTSchema-SV-II-atomic-string-minLength-2 tokoe:valid" result="pass"/><test-case name="10974NISTXML-SV-II-atomic-string-minLength-2-1 tokoe:invalid" result="pass"/><test-case name="10975NISTXML-SV-II-atomic-string-minLength-2-2 tokoe:invalid" result="pass"/><test-case name="10976NISTXML-SV-II-atomic-string-minLength-2-3 tokoe:invalid" result="pass"/><test-case name="10977NISTXML-SV-II-atomic-string-minLength-2-4 tokoe:invalid" result="pass"/><test-case name="10978NISTXML-SV-II-atomic-string-minLength-2-5 tokoe:invalid" result="pass"/><test-case name="10979NISTSchema-SV-II-atomic-string-minLength-3 tokoe:valid" result="pass"/><test-case name="10980NISTXML-SV-II-atomic-string-minLength-3-1 tokoe:invalid" result="pass"/><test-case name="10981NISTXML-SV-II-atomic-string-minLength-3-2 tokoe:invalid" result="pass"/><test-case name="10982NISTXML-SV-II-atomic-string-minLength-3-3 tokoe:invalid" result="pass"/><test-case name="10983NISTXML-SV-II-atomic-string-minLength-3-4 tokoe:invalid" result="pass"/><test-case name="10984NISTXML-SV-II-atomic-string-minLength-3-5 tokoe:invalid" result="pass"/><test-case name="10985NISTSchema-SV-II-atomic-string-minLength-4 tokoe:valid" result="pass"/><test-case name="10986NISTXML-SV-II-atomic-string-minLength-4-1 tokoe:invalid" result="pass"/><test-case name="10987NISTXML-SV-II-atomic-string-minLength-4-2 tokoe:invalid" result="pass"/><test-case name="10988NISTXML-SV-II-atomic-string-minLength-4-3 tokoe:invalid" result="pass"/><test-case name="10989NISTXML-SV-II-atomic-string-minLength-4-4 tokoe:invalid" result="pass"/><test-case name="10990NISTXML-SV-II-atomic-string-minLength-4-5 tokoe:invalid" result="pass"/><test-case name="10991NISTSchema-SV-II-atomic-string-minLength-5 tokoe:valid" result="pass"/><test-case name="10992NISTXML-SV-II-atomic-string-minLength-5-1 tokoe:invalid" result="pass"/><test-case name="10993NISTXML-SV-II-atomic-string-minLength-5-2 tokoe:invalid" result="pass"/><test-case name="10994NISTXML-SV-II-atomic-string-minLength-5-3 tokoe:invalid" result="pass"/><test-case name="10995NISTXML-SV-II-atomic-string-minLength-5-4 tokoe:invalid" result="pass"/><test-case name="10996NISTXML-SV-II-atomic-string-minLength-5-5 tokoe:invalid" result="pass"/><test-case name="10997NISTSchema-SV-II-atomic-string-minLength-6 tokoe:valid" result="pass"/><test-case name="10998NISTXML-SV-II-atomic-string-minLength-6-1 tokoe:invalid" result="pass"/><test-case name="10999NISTXML-SV-II-atomic-string-minLength-6-2 tokoe:invalid" result="pass"/><test-case name="11000NISTXML-SV-II-atomic-string-minLength-6-3 tokoe:invalid" result="pass"/><test-case name="11001NISTXML-SV-II-atomic-string-minLength-6-4 tokoe:invalid" result="pass"/><test-case name="11002NISTXML-SV-II-atomic-string-minLength-6-5 tokoe:invalid" result="pass"/><test-case name="11003NISTSchema-SV-II-atomic-normalizedString-minLength-2 tokoe:valid" result="pass"/><test-case name="11004NISTXML-SV-II-atomic-normalizedString-minLength-2-1 tokoe:invalid" result="pass"/><test-case name="11005NISTXML-SV-II-atomic-normalizedString-minLength-2-2 tokoe:invalid" result="pass"/><test-case name="11006NISTXML-SV-II-atomic-normalizedString-minLength-2-3 tokoe:invalid" result="pass"/><test-case name="11007NISTXML-SV-II-atomic-normalizedString-minLength-2-4 tokoe:invalid" result="pass"/><test-case name="11008NISTXML-SV-II-atomic-normalizedString-minLength-2-5 tokoe:invalid" result="pass"/><test-case name="11009NISTSchema-SV-II-atomic-normalizedString-minLength-3 tokoe:valid" result="pass"/><test-case name="11010NISTXML-SV-II-atomic-normalizedString-minLength-3-1 tokoe:invalid" result="pass"/><test-case name="11011NISTXML-SV-II-atomic-normalizedString-minLength-3-2 tokoe:invalid" result="pass"/><test-case name="11012NISTXML-SV-II-atomic-normalizedString-minLength-3-3 tokoe:invalid" result="pass"/><test-case name="11013NISTXML-SV-II-atomic-normalizedString-minLength-3-4 tokoe:invalid" result="pass"/><test-case name="11014NISTXML-SV-II-atomic-normalizedString-minLength-3-5 tokoe:invalid" result="pass"/><test-case name="11015NISTSchema-SV-II-atomic-normalizedString-minLength-4 tokoe:valid" result="pass"/><test-case name="11016NISTXML-SV-II-atomic-normalizedString-minLength-4-1 tokoe:invalid" result="pass"/><test-case name="11017NISTXML-SV-II-atomic-normalizedString-minLength-4-2 tokoe:invalid" result="pass"/><test-case name="11018NISTXML-SV-II-atomic-normalizedString-minLength-4-3 tokoe:invalid" result="pass"/><test-case name="11019NISTXML-SV-II-atomic-normalizedString-minLength-4-4 tokoe:invalid" result="pass"/><test-case name="11020NISTXML-SV-II-atomic-normalizedString-minLength-4-5 tokoe:invalid" result="pass"/><test-case name="11021NISTSchema-SV-II-atomic-normalizedString-minLength-5 tokoe:valid" result="pass"/><test-case name="11022NISTXML-SV-II-atomic-normalizedString-minLength-5-1 tokoe:invalid" result="pass"/><test-case name="11023NISTXML-SV-II-atomic-normalizedString-minLength-5-2 tokoe:invalid" result="pass"/><test-case name="11024NISTXML-SV-II-atomic-normalizedString-minLength-5-3 tokoe:invalid" result="pass"/><test-case name="11025NISTXML-SV-II-atomic-normalizedString-minLength-5-4 tokoe:invalid" result="pass"/><test-case name="11026NISTXML-SV-II-atomic-normalizedString-minLength-5-5 tokoe:invalid" result="pass"/><test-case name="11027NISTSchema-SV-II-atomic-normalizedString-minLength-6 tokoe:valid" result="pass"/><test-case name="11028NISTXML-SV-II-atomic-normalizedString-minLength-6-1 tokoe:invalid" result="pass"/><test-case name="11029NISTXML-SV-II-atomic-normalizedString-minLength-6-2 tokoe:invalid" result="pass"/><test-case name="11030NISTXML-SV-II-atomic-normalizedString-minLength-6-3 tokoe:invalid" result="pass"/><test-case name="11031NISTXML-SV-II-atomic-normalizedString-minLength-6-4 tokoe:invalid" result="pass"/><test-case name="11032NISTXML-SV-II-atomic-normalizedString-minLength-6-5 tokoe:invalid" result="pass"/><test-case name="11033NISTSchema-SV-II-atomic-token-minLength-2 tokoe:valid" result="pass"/><test-case name="11034NISTXML-SV-II-atomic-token-minLength-2-1 tokoe:invalid" result="pass"/><test-case name="11035NISTXML-SV-II-atomic-token-minLength-2-2 tokoe:invalid" result="pass"/><test-case name="11036NISTXML-SV-II-atomic-token-minLength-2-3 tokoe:invalid" result="pass"/><test-case name="11037NISTXML-SV-II-atomic-token-minLength-2-4 tokoe:invalid" result="pass"/><test-case name="11038NISTXML-SV-II-atomic-token-minLength-2-5 tokoe:invalid" result="pass"/><test-case name="11039NISTSchema-SV-II-atomic-token-minLength-3 tokoe:valid" result="pass"/><test-case name="11040NISTXML-SV-II-atomic-token-minLength-3-1 tokoe:invalid" result="pass"/><test-case name="11041NISTXML-SV-II-atomic-token-minLength-3-2 tokoe:invalid" result="pass"/><test-case name="11042NISTXML-SV-II-atomic-token-minLength-3-3 tokoe:invalid" result="pass"/><test-case name="11043NISTXML-SV-II-atomic-token-minLength-3-4 tokoe:invalid" result="pass"/><test-case name="11044NISTXML-SV-II-atomic-token-minLength-3-5 tokoe:invalid" result="pass"/><test-case name="11045NISTSchema-SV-II-atomic-token-minLength-4 tokoe:valid" result="pass"/><test-case name="11046NISTXML-SV-II-atomic-token-minLength-4-1 tokoe:invalid" result="pass"/><test-case name="11047NISTXML-SV-II-atomic-token-minLength-4-2 tokoe:invalid" result="pass"/><test-case name="11048NISTXML-SV-II-atomic-token-minLength-4-3 tokoe:invalid" result="pass"/><test-case name="11049NISTXML-SV-II-atomic-token-minLength-4-4 tokoe:invalid" result="pass"/><test-case name="11050NISTXML-SV-II-atomic-token-minLength-4-5 tokoe:invalid" result="pass"/><test-case name="11051NISTSchema-SV-II-atomic-token-minLength-5 tokoe:valid" result="pass"/><test-case name="11052NISTXML-SV-II-atomic-token-minLength-5-1 tokoe:invalid" result="pass"/><test-case name="11053NISTXML-SV-II-atomic-token-minLength-5-2 tokoe:invalid" result="pass"/><test-case name="11054NISTXML-SV-II-atomic-token-minLength-5-3 tokoe:invalid" result="pass"/><test-case name="11055NISTXML-SV-II-atomic-token-minLength-5-4 tokoe:invalid" result="pass"/><test-case name="11056NISTXML-SV-II-atomic-token-minLength-5-5 tokoe:invalid" result="pass"/><test-case name="11057NISTSchema-SV-II-atomic-token-minLength-6 tokoe:valid" result="pass"/><test-case name="11058NISTXML-SV-II-atomic-token-minLength-6-1 tokoe:invalid" result="pass"/><test-case name="11059NISTXML-SV-II-atomic-token-minLength-6-2 tokoe:invalid" result="pass"/><test-case name="11060NISTXML-SV-II-atomic-token-minLength-6-3 tokoe:invalid" result="pass"/><test-case name="11061NISTXML-SV-II-atomic-token-minLength-6-4 tokoe:invalid" result="pass"/><test-case name="11062NISTXML-SV-II-atomic-token-minLength-6-5 tokoe:invalid" result="pass"/><test-case name="11063NISTSchema-SV-II-atomic-Name-minLength-2 tokoe:valid" result="pass"/><test-case name="11064NISTXML-SV-II-atomic-Name-minLength-2-1 tokoe:invalid" result="pass"/><test-case name="11065NISTXML-SV-II-atomic-Name-minLength-2-2 tokoe:invalid" result="pass"/><test-case name="11066NISTXML-SV-II-atomic-Name-minLength-2-3 tokoe:invalid" result="pass"/><test-case name="11067NISTXML-SV-II-atomic-Name-minLength-2-4 tokoe:invalid" result="pass"/><test-case name="11068NISTXML-SV-II-atomic-Name-minLength-2-5 tokoe:invalid" result="pass"/><test-case name="11069NISTSchema-SV-II-atomic-Name-minLength-3 tokoe:valid" result="pass"/><test-case name="11070NISTXML-SV-II-atomic-Name-minLength-3-1 tokoe:invalid" result="pass"/><test-case name="11071NISTXML-SV-II-atomic-Name-minLength-3-2 tokoe:invalid" result="pass"/><test-case name="11072NISTXML-SV-II-atomic-Name-minLength-3-3 tokoe:invalid" result="pass"/><test-case name="11073NISTXML-SV-II-atomic-Name-minLength-3-4 tokoe:invalid" result="pass"/><test-case name="11074NISTXML-SV-II-atomic-Name-minLength-3-5 tokoe:invalid" result="pass"/><test-case name="11075NISTSchema-SV-II-atomic-Name-minLength-4 tokoe:valid" result="pass"/><test-case name="11076NISTXML-SV-II-atomic-Name-minLength-4-1 tokoe:invalid" result="pass"/><test-case name="11077NISTXML-SV-II-atomic-Name-minLength-4-2 tokoe:invalid" result="pass"/><test-case name="11078NISTXML-SV-II-atomic-Name-minLength-4-3 tokoe:invalid" result="pass"/><test-case name="11079NISTXML-SV-II-atomic-Name-minLength-4-4 tokoe:invalid" result="pass"/><test-case name="11080NISTXML-SV-II-atomic-Name-minLength-4-5 tokoe:invalid" result="pass"/><test-case name="11081NISTSchema-SV-II-atomic-Name-minLength-5 tokoe:valid" result="pass"/><test-case name="11082NISTXML-SV-II-atomic-Name-minLength-5-1 tokoe:invalid" result="pass"/><test-case name="11083NISTXML-SV-II-atomic-Name-minLength-5-2 tokoe:invalid" result="pass"/><test-case name="11084NISTXML-SV-II-atomic-Name-minLength-5-3 tokoe:invalid" result="pass"/><test-case name="11085NISTXML-SV-II-atomic-Name-minLength-5-4 tokoe:invalid" result="pass"/><test-case name="11086NISTXML-SV-II-atomic-Name-minLength-5-5 tokoe:invalid" result="pass"/><test-case name="11087NISTSchema-SV-II-atomic-Name-minLength-6 tokoe:valid" result="pass"/><test-case name="11088NISTXML-SV-II-atomic-Name-minLength-6-1 tokoe:invalid" result="pass"/><test-case name="11089NISTXML-SV-II-atomic-Name-minLength-6-2 tokoe:invalid" result="pass"/><test-case name="11090NISTXML-SV-II-atomic-Name-minLength-6-3 tokoe:invalid" result="pass"/><test-case name="11091NISTXML-SV-II-atomic-Name-minLength-6-4 tokoe:invalid" result="pass"/><test-case name="11092NISTXML-SV-II-atomic-Name-minLength-6-5 tokoe:invalid" result="pass"/><test-case name="11093NISTSchema-SV-II-atomic-NMTOKEN-minLength-2 tokoe:valid" result="pass"/><test-case name="11094NISTXML-SV-II-atomic-NMTOKEN-minLength-2-1 tokoe:invalid" result="pass"/><test-case name="11095NISTXML-SV-II-atomic-NMTOKEN-minLength-2-2 tokoe:invalid" result="pass"/><test-case name="11096NISTXML-SV-II-atomic-NMTOKEN-minLength-2-3 tokoe:invalid" result="pass"/><test-case name="11097NISTXML-SV-II-atomic-NMTOKEN-minLength-2-4 tokoe:invalid" result="pass"/><test-case name="11098NISTXML-SV-II-atomic-NMTOKEN-minLength-2-5 tokoe:invalid" result="pass"/><test-case name="11099NISTSchema-SV-II-atomic-NMTOKEN-minLength-3 tokoe:valid" result="pass"/><test-case name="11100NISTXML-SV-II-atomic-NMTOKEN-minLength-3-1 tokoe:invalid" result="pass"/><test-case name="11101NISTXML-SV-II-atomic-NMTOKEN-minLength-3-2 tokoe:invalid" result="pass"/><test-case name="11102NISTXML-SV-II-atomic-NMTOKEN-minLength-3-3 tokoe:invalid" result="pass"/><test-case name="11103NISTXML-SV-II-atomic-NMTOKEN-minLength-3-4 tokoe:invalid" result="pass"/><test-case name="11104NISTXML-SV-II-atomic-NMTOKEN-minLength-3-5 tokoe:invalid" result="pass"/><test-case name="11105NISTSchema-SV-II-atomic-NMTOKEN-minLength-4 tokoe:valid" result="pass"/><test-case name="11106NISTXML-SV-II-atomic-NMTOKEN-minLength-4-1 tokoe:invalid" result="pass"/><test-case name="11107NISTXML-SV-II-atomic-NMTOKEN-minLength-4-2 tokoe:invalid" result="pass"/><test-case name="11108NISTXML-SV-II-atomic-NMTOKEN-minLength-4-3 tokoe:invalid" result="pass"/><test-case name="11109NISTXML-SV-II-atomic-NMTOKEN-minLength-4-4 tokoe:invalid" result="pass"/><test-case name="11110NISTXML-SV-II-atomic-NMTOKEN-minLength-4-5 tokoe:invalid" result="pass"/><test-case name="11111NISTSchema-SV-II-atomic-NMTOKEN-minLength-5 tokoe:valid" result="pass"/><test-case name="11112NISTXML-SV-II-atomic-NMTOKEN-minLength-5-1 tokoe:invalid" result="pass"/><test-case name="11113NISTXML-SV-II-atomic-NMTOKEN-minLength-5-2 tokoe:invalid" result="pass"/><test-case name="11114NISTXML-SV-II-atomic-NMTOKEN-minLength-5-3 tokoe:invalid" result="pass"/><test-case name="11115NISTXML-SV-II-atomic-NMTOKEN-minLength-5-4 tokoe:invalid" result="pass"/><test-case name="11116NISTXML-SV-II-atomic-NMTOKEN-minLength-5-5 tokoe:invalid" result="pass"/><test-case name="11117NISTSchema-SV-II-atomic-NMTOKEN-minLength-6 tokoe:valid" result="pass"/><test-case name="11118NISTXML-SV-II-atomic-NMTOKEN-minLength-6-1 tokoe:invalid" result="pass"/><test-case name="11119NISTXML-SV-II-atomic-NMTOKEN-minLength-6-2 tokoe:invalid" result="pass"/><test-case name="11120NISTXML-SV-II-atomic-NMTOKEN-minLength-6-3 tokoe:invalid" result="pass"/><test-case name="11121NISTXML-SV-II-atomic-NMTOKEN-minLength-6-4 tokoe:invalid" result="pass"/><test-case name="11122NISTXML-SV-II-atomic-NMTOKEN-minLength-6-5 tokoe:invalid" result="pass"/><test-case name="11123NISTSchema-SV-II-atomic-NCName-minLength-2 tokoe:valid" result="pass"/><test-case name="11124NISTXML-SV-II-atomic-NCName-minLength-2-1 tokoe:invalid" result="pass"/><test-case name="11125NISTXML-SV-II-atomic-NCName-minLength-2-2 tokoe:invalid" result="pass"/><test-case name="11126NISTXML-SV-II-atomic-NCName-minLength-2-3 tokoe:invalid" result="pass"/><test-case name="11127NISTXML-SV-II-atomic-NCName-minLength-2-4 tokoe:invalid" result="pass"/><test-case name="11128NISTXML-SV-II-atomic-NCName-minLength-2-5 tokoe:invalid" result="pass"/><test-case name="11129NISTSchema-SV-II-atomic-NCName-minLength-3 tokoe:valid" result="pass"/><test-case name="11130NISTXML-SV-II-atomic-NCName-minLength-3-1 tokoe:invalid" result="pass"/><test-case name="11131NISTXML-SV-II-atomic-NCName-minLength-3-2 tokoe:invalid" result="pass"/><test-case name="11132NISTXML-SV-II-atomic-NCName-minLength-3-3 tokoe:invalid" result="pass"/><test-case name="11133NISTXML-SV-II-atomic-NCName-minLength-3-4 tokoe:invalid" result="pass"/><test-case name="11134NISTXML-SV-II-atomic-NCName-minLength-3-5 tokoe:invalid" result="pass"/><test-case name="11135NISTSchema-SV-II-atomic-NCName-minLength-4 tokoe:valid" result="pass"/><test-case name="11136NISTXML-SV-II-atomic-NCName-minLength-4-1 tokoe:invalid" result="pass"/><test-case name="11137NISTXML-SV-II-atomic-NCName-minLength-4-2 tokoe:invalid" result="pass"/><test-case name="11138NISTXML-SV-II-atomic-NCName-minLength-4-3 tokoe:invalid" result="pass"/><test-case name="11139NISTXML-SV-II-atomic-NCName-minLength-4-4 tokoe:invalid" result="pass"/><test-case name="11140NISTXML-SV-II-atomic-NCName-minLength-4-5 tokoe:invalid" result="pass"/><test-case name="11141NISTSchema-SV-II-atomic-NCName-minLength-5 tokoe:valid" result="pass"/><test-case name="11142NISTXML-SV-II-atomic-NCName-minLength-5-1 tokoe:invalid" result="pass"/><test-case name="11143NISTXML-SV-II-atomic-NCName-minLength-5-2 tokoe:invalid" result="pass"/><test-case name="11144NISTXML-SV-II-atomic-NCName-minLength-5-3 tokoe:invalid" result="pass"/><test-case name="11145NISTXML-SV-II-atomic-NCName-minLength-5-4 tokoe:invalid" result="pass"/><test-case name="11146NISTXML-SV-II-atomic-NCName-minLength-5-5 tokoe:invalid" result="pass"/><test-case name="11147NISTSchema-SV-II-atomic-NCName-minLength-6 tokoe:valid" result="pass"/><test-case name="11148NISTXML-SV-II-atomic-NCName-minLength-6-1 tokoe:invalid" result="pass"/><test-case name="11149NISTXML-SV-II-atomic-NCName-minLength-6-2 tokoe:invalid" result="pass"/><test-case name="11150NISTXML-SV-II-atomic-NCName-minLength-6-3 tokoe:invalid" result="pass"/><test-case name="11151NISTXML-SV-II-atomic-NCName-minLength-6-4 tokoe:invalid" result="pass"/><test-case name="11152NISTXML-SV-II-atomic-NCName-minLength-6-5 tokoe:invalid" result="pass"/><test-case name="11153NISTSchema-SV-II-atomic-ID-minLength-2 tokoe:valid" result="pass"/><test-case name="11154NISTXML-SV-II-atomic-ID-minLength-2-1 tokoe:invalid" result="pass"/><test-case name="11155NISTXML-SV-II-atomic-ID-minLength-2-2 tokoe:invalid" result="pass"/><test-case name="11156NISTXML-SV-II-atomic-ID-minLength-2-3 tokoe:invalid" result="pass"/><test-case name="11157NISTXML-SV-II-atomic-ID-minLength-2-4 tokoe:invalid" result="pass"/><test-case name="11158NISTXML-SV-II-atomic-ID-minLength-2-5 tokoe:invalid" result="pass"/><test-case name="11159NISTSchema-SV-II-atomic-ID-minLength-3 tokoe:valid" result="pass"/><test-case name="11160NISTXML-SV-II-atomic-ID-minLength-3-1 tokoe:invalid" result="pass"/><test-case name="11161NISTXML-SV-II-atomic-ID-minLength-3-2 tokoe:invalid" result="pass"/><test-case name="11162NISTXML-SV-II-atomic-ID-minLength-3-3 tokoe:invalid" result="pass"/><test-case name="11163NISTXML-SV-II-atomic-ID-minLength-3-4 tokoe:invalid" result="pass"/><test-case name="11164NISTXML-SV-II-atomic-ID-minLength-3-5 tokoe:invalid" result="pass"/><test-case name="11165NISTSchema-SV-II-atomic-ID-minLength-4 tokoe:valid" result="pass"/><test-case name="11166NISTXML-SV-II-atomic-ID-minLength-4-1 tokoe:invalid" result="pass"/><test-case name="11167NISTXML-SV-II-atomic-ID-minLength-4-2 tokoe:invalid" result="pass"/><test-case name="11168NISTXML-SV-II-atomic-ID-minLength-4-3 tokoe:invalid" result="pass"/><test-case name="11169NISTXML-SV-II-atomic-ID-minLength-4-4 tokoe:invalid" result="pass"/><test-case name="11170NISTXML-SV-II-atomic-ID-minLength-4-5 tokoe:invalid" result="pass"/><test-case name="11171NISTSchema-SV-II-atomic-ID-minLength-5 tokoe:valid" result="pass"/><test-case name="11172NISTXML-SV-II-atomic-ID-minLength-5-1 tokoe:invalid" result="pass"/><test-case name="11173NISTXML-SV-II-atomic-ID-minLength-5-2 tokoe:invalid" result="pass"/><test-case name="11174NISTXML-SV-II-atomic-ID-minLength-5-3 tokoe:invalid" result="pass"/><test-case name="11175NISTXML-SV-II-atomic-ID-minLength-5-4 tokoe:invalid" result="pass"/><test-case name="11176NISTXML-SV-II-atomic-ID-minLength-5-5 tokoe:invalid" result="pass"/><test-case name="11177NISTSchema-SV-II-atomic-ID-minLength-6 tokoe:valid" result="pass"/><test-case name="11178NISTXML-SV-II-atomic-ID-minLength-6-1 tokoe:invalid" result="pass"/><test-case name="11179NISTXML-SV-II-atomic-ID-minLength-6-2 tokoe:invalid" result="pass"/><test-case name="11180NISTXML-SV-II-atomic-ID-minLength-6-3 tokoe:invalid" result="pass"/><test-case name="11181NISTXML-SV-II-atomic-ID-minLength-6-4 tokoe:invalid" result="pass"/><test-case name="11182NISTXML-SV-II-atomic-ID-minLength-6-5 tokoe:invalid" result="pass"/><test-case name="11183NISTSchema-SV-II-atomic-string-maxLength-1 tokoe:valid" result="pass"/><test-case name="11184NISTXML-SV-II-atomic-string-maxLength-1-1 tokoe:invalid" result="pass"/><test-case name="11185NISTXML-SV-II-atomic-string-maxLength-1-2 tokoe:invalid" result="pass"/><test-case name="11186NISTXML-SV-II-atomic-string-maxLength-1-3 tokoe:invalid" result="pass"/><test-case name="11187NISTXML-SV-II-atomic-string-maxLength-1-4 tokoe:invalid" result="pass"/><test-case name="11188NISTXML-SV-II-atomic-string-maxLength-1-5 tokoe:invalid" result="pass"/><test-case name="11189NISTSchema-SV-II-atomic-string-maxLength-2 tokoe:valid" result="pass"/><test-case name="11190NISTXML-SV-II-atomic-string-maxLength-2-1 tokoe:invalid" result="pass"/><test-case name="11191NISTXML-SV-II-atomic-string-maxLength-2-2 tokoe:invalid" result="pass"/><test-case name="11192NISTXML-SV-II-atomic-string-maxLength-2-3 tokoe:invalid" result="pass"/><test-case name="11193NISTXML-SV-II-atomic-string-maxLength-2-4 tokoe:invalid" result="pass"/><test-case name="11194NISTXML-SV-II-atomic-string-maxLength-2-5 tokoe:invalid" result="pass"/><test-case name="11195NISTSchema-SV-II-atomic-string-maxLength-3 tokoe:valid" result="pass"/><test-case name="11196NISTXML-SV-II-atomic-string-maxLength-3-1 tokoe:invalid" result="pass"/><test-case name="11197NISTXML-SV-II-atomic-string-maxLength-3-2 tokoe:invalid" result="pass"/><test-case name="11198NISTXML-SV-II-atomic-string-maxLength-3-3 tokoe:invalid" result="pass"/><test-case name="11199NISTXML-SV-II-atomic-string-maxLength-3-4 tokoe:invalid" result="pass"/><test-case name="11200NISTXML-SV-II-atomic-string-maxLength-3-5 tokoe:invalid" result="pass"/><test-case name="11201NISTSchema-SV-II-atomic-string-maxLength-4 tokoe:valid" result="pass"/><test-case name="11202NISTXML-SV-II-atomic-string-maxLength-4-1 tokoe:invalid" result="pass"/><test-case name="11203NISTXML-SV-II-atomic-string-maxLength-4-2 tokoe:invalid" result="pass"/><test-case name="11204NISTXML-SV-II-atomic-string-maxLength-4-3 tokoe:invalid" result="pass"/><test-case name="11205NISTXML-SV-II-atomic-string-maxLength-4-4 tokoe:invalid" result="pass"/><test-case name="11206NISTXML-SV-II-atomic-string-maxLength-4-5 tokoe:invalid" result="pass"/><test-case name="11207NISTSchema-SV-II-atomic-string-maxLength-5 tokoe:valid" result="pass"/><test-case name="11208NISTXML-SV-II-atomic-string-maxLength-5-1 tokoe:invalid" result="pass"/><test-case name="11209NISTXML-SV-II-atomic-string-maxLength-5-2 tokoe:invalid" result="pass"/><test-case name="11210NISTXML-SV-II-atomic-string-maxLength-5-3 tokoe:invalid" result="pass"/><test-case name="11211NISTXML-SV-II-atomic-string-maxLength-5-4 tokoe:invalid" result="pass"/><test-case name="11212NISTXML-SV-II-atomic-string-maxLength-5-5 tokoe:invalid" result="pass"/><test-case name="11213NISTSchema-SV-II-atomic-string-length-1 tokoe:valid" result="pass"/><test-case name="11214NISTXML-SV-II-atomic-string-length-1-1 tokoe:invalid" result="pass"/><test-case name="11215NISTXML-SV-II-atomic-string-length-1-2 tokoe:invalid" result="pass"/><test-case name="11216NISTXML-SV-II-atomic-string-length-1-3 tokoe:invalid" result="pass"/><test-case name="11217NISTXML-SV-II-atomic-string-length-1-4 tokoe:invalid" result="pass"/><test-case name="11218NISTXML-SV-II-atomic-string-length-1-5 tokoe:invalid" result="pass"/><test-case name="11219NISTSchema-SV-II-atomic-string-length-2 tokoe:valid" result="pass"/><test-case name="11220NISTXML-SV-II-atomic-string-length-2-1 tokoe:invalid" result="pass"/><test-case name="11221NISTXML-SV-II-atomic-string-length-2-2 tokoe:invalid" result="pass"/><test-case name="11222NISTXML-SV-II-atomic-string-length-2-3 tokoe:invalid" result="pass"/><test-case name="11223NISTXML-SV-II-atomic-string-length-2-4 tokoe:invalid" result="pass"/><test-case name="11224NISTXML-SV-II-atomic-string-length-2-5 tokoe:invalid" result="pass"/><test-case name="11225NISTSchema-SV-II-atomic-string-length-3 tokoe:valid" result="pass"/><test-case name="11226NISTXML-SV-II-atomic-string-length-3-1 tokoe:invalid" result="pass"/><test-case name="11227NISTXML-SV-II-atomic-string-length-3-2 tokoe:invalid" result="pass"/><test-case name="11228NISTXML-SV-II-atomic-string-length-3-3 tokoe:invalid" result="pass"/><test-case name="11229NISTXML-SV-II-atomic-string-length-3-4 tokoe:invalid" result="pass"/><test-case name="11230NISTXML-SV-II-atomic-string-length-3-5 tokoe:invalid" result="pass"/><test-case name="11231NISTSchema-SV-II-atomic-string-length-4 tokoe:valid" result="pass"/><test-case name="11232NISTXML-SV-II-atomic-string-length-4-1 tokoe:invalid" result="pass"/><test-case name="11233NISTXML-SV-II-atomic-string-length-4-2 tokoe:invalid" result="pass"/><test-case name="11234NISTXML-SV-II-atomic-string-length-4-3 tokoe:invalid" result="pass"/><test-case name="11235NISTXML-SV-II-atomic-string-length-4-4 tokoe:invalid" result="pass"/><test-case name="11236NISTXML-SV-II-atomic-string-length-4-5 tokoe:invalid" result="pass"/><test-case name="11237NISTSchema-SV-II-atomic-string-length-5 tokoe:valid" result="pass"/><test-case name="11238NISTXML-SV-II-atomic-string-length-5-1 tokoe:invalid" result="pass"/><test-case name="11239NISTXML-SV-II-atomic-string-length-5-2 tokoe:invalid" result="pass"/><test-case name="11240NISTXML-SV-II-atomic-string-length-5-3 tokoe:invalid" result="pass"/><test-case name="11241NISTXML-SV-II-atomic-string-length-5-4 tokoe:invalid" result="pass"/><test-case name="11242NISTXML-SV-II-atomic-string-length-5-5 tokoe:invalid" result="pass"/><test-case name="11243NISTSchema-SV-II-atomic-normalizedString-maxLength-1 tokoe:valid" result="pass"/><test-case name="11244NISTXML-SV-II-atomic-normalizedString-maxLength-1-1 tokoe:invalid" result="pass"/><test-case name="11245NISTXML-SV-II-atomic-normalizedString-maxLength-1-2 tokoe:invalid" result="pass"/><test-case name="11246NISTXML-SV-II-atomic-normalizedString-maxLength-1-3 tokoe:invalid" result="pass"/><test-case name="11247NISTXML-SV-II-atomic-normalizedString-maxLength-1-4 tokoe:invalid" result="pass"/><test-case name="11248NISTXML-SV-II-atomic-normalizedString-maxLength-1-5 tokoe:invalid" result="pass"/><test-case name="11249NISTSchema-SV-II-atomic-normalizedString-maxLength-2 tokoe:valid" result="pass"/><test-case name="11250NISTXML-SV-II-atomic-normalizedString-maxLength-2-1 tokoe:invalid" result="pass"/><test-case name="11251NISTXML-SV-II-atomic-normalizedString-maxLength-2-2 tokoe:invalid" result="pass"/><test-case name="11252NISTXML-SV-II-atomic-normalizedString-maxLength-2-3 tokoe:invalid" result="pass"/><test-case name="11253NISTXML-SV-II-atomic-normalizedString-maxLength-2-4 tokoe:invalid" result="pass"/><test-case name="11254NISTXML-SV-II-atomic-normalizedString-maxLength-2-5 tokoe:invalid" result="pass"/><test-case name="11255NISTSchema-SV-II-atomic-normalizedString-maxLength-3 tokoe:valid" result="pass"/><test-case name="11256NISTXML-SV-II-atomic-normalizedString-maxLength-3-1 tokoe:invalid" result="pass"/><test-case name="11257NISTXML-SV-II-atomic-normalizedString-maxLength-3-2 tokoe:invalid" result="pass"/><test-case name="11258NISTXML-SV-II-atomic-normalizedString-maxLength-3-3 tokoe:invalid" result="pass"/><test-case name="11259NISTXML-SV-II-atomic-normalizedString-maxLength-3-4 tokoe:invalid" result="pass"/><test-case name="11260NISTXML-SV-II-atomic-normalizedString-maxLength-3-5 tokoe:invalid" result="pass"/><test-case name="11261NISTSchema-SV-II-atomic-normalizedString-maxLength-4 tokoe:valid" result="pass"/><test-case name="11262NISTXML-SV-II-atomic-normalizedString-maxLength-4-1 tokoe:invalid" result="pass"/><test-case name="11263NISTXML-SV-II-atomic-normalizedString-maxLength-4-2 tokoe:invalid" result="pass"/><test-case name="11264NISTXML-SV-II-atomic-normalizedString-maxLength-4-3 tokoe:invalid" result="pass"/><test-case name="11265NISTXML-SV-II-atomic-normalizedString-maxLength-4-4 tokoe:invalid" result="pass"/><test-case name="11266NISTXML-SV-II-atomic-normalizedString-maxLength-4-5 tokoe:invalid" result="pass"/><test-case name="11267NISTSchema-SV-II-atomic-normalizedString-maxLength-5 tokoe:valid" result="pass"/><test-case name="11268NISTXML-SV-II-atomic-normalizedString-maxLength-5-1 tokoe:invalid" result="pass"/><test-case name="11269NISTXML-SV-II-atomic-normalizedString-maxLength-5-2 tokoe:invalid" result="pass"/><test-case name="11270NISTXML-SV-II-atomic-normalizedString-maxLength-5-3 tokoe:invalid" result="pass"/><test-case name="11271NISTXML-SV-II-atomic-normalizedString-maxLength-5-4 tokoe:invalid" result="pass"/><test-case name="11272NISTXML-SV-II-atomic-normalizedString-maxLength-5-5 tokoe:invalid" result="pass"/><test-case name="11273NISTSchema-SV-II-atomic-normalizedString-length-1 tokoe:valid" result="pass"/><test-case name="11274NISTXML-SV-II-atomic-normalizedString-length-1-1 tokoe:invalid" result="pass"/><test-case name="11275NISTXML-SV-II-atomic-normalizedString-length-1-2 tokoe:invalid" result="pass"/><test-case name="11276NISTXML-SV-II-atomic-normalizedString-length-1-3 tokoe:invalid" result="pass"/><test-case name="11277NISTXML-SV-II-atomic-normalizedString-length-1-4 tokoe:invalid" result="pass"/><test-case name="11278NISTXML-SV-II-atomic-normalizedString-length-1-5 tokoe:invalid" result="pass"/><test-case name="11279NISTSchema-SV-II-atomic-normalizedString-length-2 tokoe:valid" result="pass"/><test-case name="11280NISTXML-SV-II-atomic-normalizedString-length-2-1 tokoe:invalid" result="pass"/><test-case name="11281NISTXML-SV-II-atomic-normalizedString-length-2-2 tokoe:invalid" result="pass"/><test-case name="11282NISTXML-SV-II-atomic-normalizedString-length-2-3 tokoe:invalid" result="pass"/><test-case name="11283NISTXML-SV-II-atomic-normalizedString-length-2-4 tokoe:invalid" result="pass"/><test-case name="11284NISTXML-SV-II-atomic-normalizedString-length-2-5 tokoe:invalid" result="pass"/><test-case name="11285NISTSchema-SV-II-atomic-normalizedString-length-3 tokoe:valid" result="pass"/><test-case name="11286NISTXML-SV-II-atomic-normalizedString-length-3-1 tokoe:invalid" result="pass"/><test-case name="11287NISTXML-SV-II-atomic-normalizedString-length-3-2 tokoe:invalid" result="pass"/><test-case name="11288NISTXML-SV-II-atomic-normalizedString-length-3-3 tokoe:invalid" result="pass"/><test-case name="11289NISTXML-SV-II-atomic-normalizedString-length-3-4 tokoe:invalid" result="pass"/><test-case name="11290NISTXML-SV-II-atomic-normalizedString-length-3-5 tokoe:invalid" result="pass"/><test-case name="11291NISTSchema-SV-II-atomic-normalizedString-length-4 tokoe:valid" result="pass"/><test-case name="11292NISTXML-SV-II-atomic-normalizedString-length-4-1 tokoe:invalid" result="pass"/><test-case name="11293NISTXML-SV-II-atomic-normalizedString-length-4-2 tokoe:invalid" result="pass"/><test-case name="11294NISTXML-SV-II-atomic-normalizedString-length-4-3 tokoe:invalid" result="pass"/><test-case name="11295NISTXML-SV-II-atomic-normalizedString-length-4-4 tokoe:invalid" result="pass"/><test-case name="11296NISTXML-SV-II-atomic-normalizedString-length-4-5 tokoe:invalid" result="pass"/><test-case name="11297NISTSchema-SV-II-atomic-normalizedString-length-5 tokoe:valid" result="pass"/><test-case name="11298NISTXML-SV-II-atomic-normalizedString-length-5-1 tokoe:invalid" result="pass"/><test-case name="11299NISTXML-SV-II-atomic-normalizedString-length-5-2 tokoe:invalid" result="pass"/><test-case name="11300NISTXML-SV-II-atomic-normalizedString-length-5-3 tokoe:invalid" result="pass"/><test-case name="11301NISTXML-SV-II-atomic-normalizedString-length-5-4 tokoe:invalid" result="pass"/><test-case name="11302NISTXML-SV-II-atomic-normalizedString-length-5-5 tokoe:invalid" result="pass"/><test-case name="11303NISTSchema-SV-II-atomic-token-maxLength-1 tokoe:valid" result="pass"/><test-case name="11304NISTXML-SV-II-atomic-token-maxLength-1-1 tokoe:invalid" result="pass"/><test-case name="11305NISTXML-SV-II-atomic-token-maxLength-1-2 tokoe:invalid" result="pass"/><test-case name="11306NISTXML-SV-II-atomic-token-maxLength-1-3 tokoe:invalid" result="pass"/><test-case name="11307NISTXML-SV-II-atomic-token-maxLength-1-4 tokoe:invalid" result="pass"/><test-case name="11308NISTXML-SV-II-atomic-token-maxLength-1-5 tokoe:invalid" result="pass"/><test-case name="11309NISTSchema-SV-II-atomic-token-maxLength-2 tokoe:valid" result="pass"/><test-case name="11310NISTXML-SV-II-atomic-token-maxLength-2-1 tokoe:invalid" result="pass"/><test-case name="11311NISTXML-SV-II-atomic-token-maxLength-2-2 tokoe:invalid" result="pass"/><test-case name="11312NISTXML-SV-II-atomic-token-maxLength-2-3 tokoe:invalid" result="pass"/><test-case name="11313NISTXML-SV-II-atomic-token-maxLength-2-4 tokoe:invalid" result="pass"/><test-case name="11314NISTXML-SV-II-atomic-token-maxLength-2-5 tokoe:invalid" result="pass"/><test-case name="11315NISTSchema-SV-II-atomic-token-maxLength-3 tokoe:valid" result="pass"/><test-case name="11316NISTXML-SV-II-atomic-token-maxLength-3-1 tokoe:invalid" result="pass"/><test-case name="11317NISTXML-SV-II-atomic-token-maxLength-3-2 tokoe:invalid" result="pass"/><test-case name="11318NISTXML-SV-II-atomic-token-maxLength-3-3 tokoe:invalid" result="pass"/><test-case name="11319NISTXML-SV-II-atomic-token-maxLength-3-4 tokoe:invalid" result="pass"/><test-case name="11320NISTXML-SV-II-atomic-token-maxLength-3-5 tokoe:invalid" result="pass"/><test-case name="11321NISTSchema-SV-II-atomic-token-maxLength-4 tokoe:valid" result="pass"/><test-case name="11322NISTXML-SV-II-atomic-token-maxLength-4-1 tokoe:invalid" result="pass"/><test-case name="11323NISTXML-SV-II-atomic-token-maxLength-4-2 tokoe:invalid" result="pass"/><test-case name="11324NISTXML-SV-II-atomic-token-maxLength-4-3 tokoe:invalid" result="pass"/><test-case name="11325NISTXML-SV-II-atomic-token-maxLength-4-4 tokoe:invalid" result="pass"/><test-case name="11326NISTXML-SV-II-atomic-token-maxLength-4-5 tokoe:invalid" result="pass"/><test-case name="11327NISTSchema-SV-II-atomic-token-maxLength-5 tokoe:valid" result="pass"/><test-case name="11328NISTXML-SV-II-atomic-token-maxLength-5-1 tokoe:invalid" result="pass"/><test-case name="11329NISTXML-SV-II-atomic-token-maxLength-5-2 tokoe:invalid" result="pass"/><test-case name="11330NISTXML-SV-II-atomic-token-maxLength-5-3 tokoe:invalid" result="pass"/><test-case name="11331NISTXML-SV-II-atomic-token-maxLength-5-4 tokoe:invalid" result="pass"/><test-case name="11332NISTXML-SV-II-atomic-token-maxLength-5-5 tokoe:invalid" result="pass"/><test-case name="11333NISTSchema-SV-II-atomic-token-length-1 tokoe:valid" result="pass"/><test-case name="11334NISTXML-SV-II-atomic-token-length-1-1 tokoe:invalid" result="pass"/><test-case name="11335NISTXML-SV-II-atomic-token-length-1-2 tokoe:invalid" result="pass"/><test-case name="11336NISTXML-SV-II-atomic-token-length-1-3 tokoe:invalid" result="pass"/><test-case name="11337NISTXML-SV-II-atomic-token-length-1-4 tokoe:invalid" result="pass"/><test-case name="11338NISTXML-SV-II-atomic-token-length-1-5 tokoe:invalid" result="pass"/><test-case name="11339NISTSchema-SV-II-atomic-token-length-2 tokoe:valid" result="pass"/><test-case name="11340NISTXML-SV-II-atomic-token-length-2-1 tokoe:invalid" result="pass"/><test-case name="11341NISTXML-SV-II-atomic-token-length-2-2 tokoe:invalid" result="pass"/><test-case name="11342NISTXML-SV-II-atomic-token-length-2-3 tokoe:invalid" result="pass"/><test-case name="11343NISTXML-SV-II-atomic-token-length-2-4 tokoe:invalid" result="pass"/><test-case name="11344NISTXML-SV-II-atomic-token-length-2-5 tokoe:invalid" result="pass"/><test-case name="11345NISTSchema-SV-II-atomic-token-length-3 tokoe:valid" result="pass"/><test-case name="11346NISTXML-SV-II-atomic-token-length-3-1 tokoe:invalid" result="pass"/><test-case name="11347NISTXML-SV-II-atomic-token-length-3-2 tokoe:invalid" result="pass"/><test-case name="11348NISTXML-SV-II-atomic-token-length-3-3 tokoe:invalid" result="pass"/><test-case name="11349NISTXML-SV-II-atomic-token-length-3-4 tokoe:invalid" result="pass"/><test-case name="11350NISTXML-SV-II-atomic-token-length-3-5 tokoe:invalid" result="pass"/><test-case name="11351NISTSchema-SV-II-atomic-token-length-4 tokoe:valid" result="pass"/><test-case name="11352NISTXML-SV-II-atomic-token-length-4-1 tokoe:invalid" result="pass"/><test-case name="11353NISTXML-SV-II-atomic-token-length-4-2 tokoe:invalid" result="pass"/><test-case name="11354NISTXML-SV-II-atomic-token-length-4-3 tokoe:invalid" result="pass"/><test-case name="11355NISTXML-SV-II-atomic-token-length-4-4 tokoe:invalid" result="pass"/><test-case name="11356NISTXML-SV-II-atomic-token-length-4-5 tokoe:invalid" result="pass"/><test-case name="11357NISTSchema-SV-II-atomic-token-length-5 tokoe:valid" result="pass"/><test-case name="11358NISTXML-SV-II-atomic-token-length-5-1 tokoe:invalid" result="pass"/><test-case name="11359NISTXML-SV-II-atomic-token-length-5-2 tokoe:invalid" result="pass"/><test-case name="11360NISTXML-SV-II-atomic-token-length-5-3 tokoe:invalid" result="pass"/><test-case name="11361NISTXML-SV-II-atomic-token-length-5-4 tokoe:invalid" result="pass"/><test-case name="11362NISTXML-SV-II-atomic-token-length-5-5 tokoe:invalid" result="pass"/><test-case name="11363NISTSchema-SV-II-atomic-Name-maxLength-1 tokoe:valid" result="pass"/><test-case name="11364NISTXML-SV-II-atomic-Name-maxLength-1-1 tokoe:invalid" result="pass"/><test-case name="11365NISTXML-SV-II-atomic-Name-maxLength-1-2 tokoe:invalid" result="pass"/><test-case name="11366NISTXML-SV-II-atomic-Name-maxLength-1-3 tokoe:invalid" result="pass"/><test-case name="11367NISTXML-SV-II-atomic-Name-maxLength-1-4 tokoe:invalid" result="pass"/><test-case name="11368NISTXML-SV-II-atomic-Name-maxLength-1-5 tokoe:invalid" result="pass"/><test-case name="11369NISTSchema-SV-II-atomic-Name-maxLength-2 tokoe:valid" result="pass"/><test-case name="11370NISTXML-SV-II-atomic-Name-maxLength-2-1 tokoe:invalid" result="pass"/><test-case name="11371NISTXML-SV-II-atomic-Name-maxLength-2-2 tokoe:invalid" result="pass"/><test-case name="11372NISTXML-SV-II-atomic-Name-maxLength-2-3 tokoe:invalid" result="pass"/><test-case name="11373NISTXML-SV-II-atomic-Name-maxLength-2-4 tokoe:invalid" result="pass"/><test-case name="11374NISTXML-SV-II-atomic-Name-maxLength-2-5 tokoe:invalid" result="pass"/><test-case name="11375NISTSchema-SV-II-atomic-Name-maxLength-3 tokoe:valid" result="pass"/><test-case name="11376NISTXML-SV-II-atomic-Name-maxLength-3-1 tokoe:invalid" result="pass"/><test-case name="11377NISTXML-SV-II-atomic-Name-maxLength-3-2 tokoe:invalid" result="pass"/><test-case name="11378NISTXML-SV-II-atomic-Name-maxLength-3-3 tokoe:invalid" result="pass"/><test-case name="11379NISTXML-SV-II-atomic-Name-maxLength-3-4 tokoe:invalid" result="pass"/><test-case name="11380NISTXML-SV-II-atomic-Name-maxLength-3-5 tokoe:invalid" result="pass"/><test-case name="11381NISTSchema-SV-II-atomic-Name-maxLength-4 tokoe:valid" result="pass"/><test-case name="11382NISTXML-SV-II-atomic-Name-maxLength-4-1 tokoe:invalid" result="pass"/><test-case name="11383NISTXML-SV-II-atomic-Name-maxLength-4-2 tokoe:invalid" result="pass"/><test-case name="11384NISTXML-SV-II-atomic-Name-maxLength-4-3 tokoe:invalid" result="pass"/><test-case name="11385NISTXML-SV-II-atomic-Name-maxLength-4-4 tokoe:invalid" result="pass"/><test-case name="11386NISTXML-SV-II-atomic-Name-maxLength-4-5 tokoe:invalid" result="pass"/><test-case name="11387NISTSchema-SV-II-atomic-Name-maxLength-5 tokoe:valid" result="pass"/><test-case name="11388NISTXML-SV-II-atomic-Name-maxLength-5-1 tokoe:invalid" result="pass"/><test-case name="11389NISTXML-SV-II-atomic-Name-maxLength-5-2 tokoe:invalid" result="pass"/><test-case name="11390NISTXML-SV-II-atomic-Name-maxLength-5-3 tokoe:invalid" result="pass"/><test-case name="11391NISTXML-SV-II-atomic-Name-maxLength-5-4 tokoe:invalid" result="pass"/><test-case name="11392NISTXML-SV-II-atomic-Name-maxLength-5-5 tokoe:invalid" result="pass"/><test-case name="11393NISTSchema-SV-II-atomic-Name-length-1 tokoe:valid" result="pass"/><test-case name="11394NISTXML-SV-II-atomic-Name-length-1-1 tokoe:invalid" result="pass"/><test-case name="11395NISTXML-SV-II-atomic-Name-length-1-2 tokoe:invalid" result="pass"/><test-case name="11396NISTXML-SV-II-atomic-Name-length-1-3 tokoe:invalid" result="pass"/><test-case name="11397NISTXML-SV-II-atomic-Name-length-1-4 tokoe:invalid" result="pass"/><test-case name="11398NISTXML-SV-II-atomic-Name-length-1-5 tokoe:invalid" result="pass"/><test-case name="11399NISTSchema-SV-II-atomic-Name-length-2 tokoe:valid" result="pass"/><test-case name="11400NISTXML-SV-II-atomic-Name-length-2-1 tokoe:invalid" result="pass"/><test-case name="11401NISTXML-SV-II-atomic-Name-length-2-2 tokoe:invalid" result="pass"/><test-case name="11402NISTXML-SV-II-atomic-Name-length-2-3 tokoe:invalid" result="pass"/><test-case name="11403NISTXML-SV-II-atomic-Name-length-2-4 tokoe:invalid" result="pass"/><test-case name="11404NISTXML-SV-II-atomic-Name-length-2-5 tokoe:invalid" result="pass"/><test-case name="11405NISTSchema-SV-II-atomic-Name-length-3 tokoe:valid" result="pass"/><test-case name="11406NISTXML-SV-II-atomic-Name-length-3-1 tokoe:invalid" result="pass"/><test-case name="11407NISTXML-SV-II-atomic-Name-length-3-2 tokoe:invalid" result="pass"/><test-case name="11408NISTXML-SV-II-atomic-Name-length-3-3 tokoe:invalid" result="pass"/><test-case name="11409NISTXML-SV-II-atomic-Name-length-3-4 tokoe:invalid" result="pass"/><test-case name="11410NISTXML-SV-II-atomic-Name-length-3-5 tokoe:invalid" result="pass"/><test-case name="11411NISTSchema-SV-II-atomic-Name-length-4 tokoe:valid" result="pass"/><test-case name="11412NISTXML-SV-II-atomic-Name-length-4-1 tokoe:invalid" result="pass"/><test-case name="11413NISTXML-SV-II-atomic-Name-length-4-2 tokoe:invalid" result="pass"/><test-case name="11414NISTXML-SV-II-atomic-Name-length-4-3 tokoe:invalid" result="pass"/><test-case name="11415NISTXML-SV-II-atomic-Name-length-4-4 tokoe:invalid" result="pass"/><test-case name="11416NISTXML-SV-II-atomic-Name-length-4-5 tokoe:invalid" result="pass"/><test-case name="11417NISTSchema-SV-II-atomic-Name-length-5 tokoe:valid" result="pass"/><test-case name="11418NISTXML-SV-II-atomic-Name-length-5-1 tokoe:invalid" result="pass"/><test-case name="11419NISTXML-SV-II-atomic-Name-length-5-2 tokoe:invalid" result="pass"/><test-case name="11420NISTXML-SV-II-atomic-Name-length-5-3 tokoe:invalid" result="pass"/><test-case name="11421NISTXML-SV-II-atomic-Name-length-5-4 tokoe:invalid" result="pass"/><test-case name="11422NISTXML-SV-II-atomic-Name-length-5-5 tokoe:invalid" result="pass"/><test-case name="11423NISTSchema-SV-II-atomic-NMTOKEN-maxLength-1 tokoe:valid" result="pass"/><test-case name="11424NISTXML-SV-II-atomic-NMTOKEN-maxLength-1-1 tokoe:invalid" result="pass"/><test-case name="11425NISTXML-SV-II-atomic-NMTOKEN-maxLength-1-2 tokoe:invalid" result="pass"/><test-case name="11426NISTXML-SV-II-atomic-NMTOKEN-maxLength-1-3 tokoe:invalid" result="pass"/><test-case name="11427NISTXML-SV-II-atomic-NMTOKEN-maxLength-1-4 tokoe:invalid" result="pass"/><test-case name="11428NISTXML-SV-II-atomic-NMTOKEN-maxLength-1-5 tokoe:invalid" result="pass"/><test-case name="11429NISTSchema-SV-II-atomic-NMTOKEN-maxLength-2 tokoe:valid" result="pass"/><test-case name="11430NISTXML-SV-II-atomic-NMTOKEN-maxLength-2-1 tokoe:invalid" result="pass"/><test-case name="11431NISTXML-SV-II-atomic-NMTOKEN-maxLength-2-2 tokoe:invalid" result="pass"/><test-case name="11432NISTXML-SV-II-atomic-NMTOKEN-maxLength-2-3 tokoe:invalid" result="pass"/><test-case name="11433NISTXML-SV-II-atomic-NMTOKEN-maxLength-2-4 tokoe:invalid" result="pass"/><test-case name="11434NISTXML-SV-II-atomic-NMTOKEN-maxLength-2-5 tokoe:invalid" result="pass"/><test-case name="11435NISTSchema-SV-II-atomic-NMTOKEN-maxLength-3 tokoe:valid" result="pass"/><test-case name="11436NISTXML-SV-II-atomic-NMTOKEN-maxLength-3-1 tokoe:invalid" result="pass"/><test-case name="11437NISTXML-SV-II-atomic-NMTOKEN-maxLength-3-2 tokoe:invalid" result="pass"/><test-case name="11438NISTXML-SV-II-atomic-NMTOKEN-maxLength-3-3 tokoe:invalid" result="pass"/><test-case name="11439NISTXML-SV-II-atomic-NMTOKEN-maxLength-3-4 tokoe:invalid" result="pass"/><test-case name="11440NISTXML-SV-II-atomic-NMTOKEN-maxLength-3-5 tokoe:invalid" result="pass"/><test-case name="11441NISTSchema-SV-II-atomic-NMTOKEN-maxLength-4 tokoe:valid" result="pass"/><test-case name="11442NISTXML-SV-II-atomic-NMTOKEN-maxLength-4-1 tokoe:invalid" result="pass"/><test-case name="11443NISTXML-SV-II-atomic-NMTOKEN-maxLength-4-2 tokoe:invalid" result="pass"/><test-case name="11444NISTXML-SV-II-atomic-NMTOKEN-maxLength-4-3 tokoe:invalid" result="pass"/><test-case name="11445NISTXML-SV-II-atomic-NMTOKEN-maxLength-4-4 tokoe:invalid" result="pass"/><test-case name="11446NISTXML-SV-II-atomic-NMTOKEN-maxLength-4-5 tokoe:invalid" result="pass"/><test-case name="11447NISTSchema-SV-II-atomic-NMTOKEN-maxLength-5 tokoe:valid" result="pass"/><test-case name="11448NISTXML-SV-II-atomic-NMTOKEN-maxLength-5-1 tokoe:invalid" result="pass"/><test-case name="11449NISTXML-SV-II-atomic-NMTOKEN-maxLength-5-2 tokoe:invalid" result="pass"/><test-case name="11450NISTXML-SV-II-atomic-NMTOKEN-maxLength-5-3 tokoe:invalid" result="pass"/><test-case name="11451NISTXML-SV-II-atomic-NMTOKEN-maxLength-5-4 tokoe:invalid" result="pass"/><test-case name="11452NISTXML-SV-II-atomic-NMTOKEN-maxLength-5-5 tokoe:invalid" result="pass"/><test-case name="11453NISTSchema-SV-II-atomic-NMTOKEN-length-1 tokoe:valid" result="pass"/><test-case name="11454NISTXML-SV-II-atomic-NMTOKEN-length-1-1 tokoe:invalid" result="pass"/><test-case name="11455NISTXML-SV-II-atomic-NMTOKEN-length-1-2 tokoe:invalid" result="pass"/><test-case name="11456NISTXML-SV-II-atomic-NMTOKEN-length-1-3 tokoe:invalid" result="pass"/><test-case name="11457NISTXML-SV-II-atomic-NMTOKEN-length-1-4 tokoe:invalid" result="pass"/><test-case name="11458NISTXML-SV-II-atomic-NMTOKEN-length-1-5 tokoe:invalid" result="pass"/><test-case name="11459NISTSchema-SV-II-atomic-NMTOKEN-length-2 tokoe:valid" result="pass"/><test-case name="11460NISTXML-SV-II-atomic-NMTOKEN-length-2-1 tokoe:invalid" result="pass"/><test-case name="11461NISTXML-SV-II-atomic-NMTOKEN-length-2-2 tokoe:invalid" result="pass"/><test-case name="11462NISTXML-SV-II-atomic-NMTOKEN-length-2-3 tokoe:invalid" result="pass"/><test-case name="11463NISTXML-SV-II-atomic-NMTOKEN-length-2-4 tokoe:invalid" result="pass"/><test-case name="11464NISTXML-SV-II-atomic-NMTOKEN-length-2-5 tokoe:invalid" result="pass"/><test-case name="11465NISTSchema-SV-II-atomic-NMTOKEN-length-3 tokoe:valid" result="pass"/><test-case name="11466NISTXML-SV-II-atomic-NMTOKEN-length-3-1 tokoe:invalid" result="pass"/><test-case name="11467NISTXML-SV-II-atomic-NMTOKEN-length-3-2 tokoe:invalid" result="pass"/><test-case name="11468NISTXML-SV-II-atomic-NMTOKEN-length-3-3 tokoe:invalid" result="pass"/><test-case name="11469NISTXML-SV-II-atomic-NMTOKEN-length-3-4 tokoe:invalid" result="pass"/><test-case name="11470NISTXML-SV-II-atomic-NMTOKEN-length-3-5 tokoe:invalid" result="pass"/><test-case name="11471NISTSchema-SV-II-atomic-NMTOKEN-length-4 tokoe:valid" result="pass"/><test-case name="11472NISTXML-SV-II-atomic-NMTOKEN-length-4-1 tokoe:invalid" result="pass"/><test-case name="11473NISTXML-SV-II-atomic-NMTOKEN-length-4-2 tokoe:invalid" result="pass"/><test-case name="11474NISTXML-SV-II-atomic-NMTOKEN-length-4-3 tokoe:invalid" result="pass"/><test-case name="11475NISTXML-SV-II-atomic-NMTOKEN-length-4-4 tokoe:invalid" result="pass"/><test-case name="11476NISTXML-SV-II-atomic-NMTOKEN-length-4-5 tokoe:invalid" result="pass"/><test-case name="11477NISTSchema-SV-II-atomic-NMTOKEN-length-5 tokoe:valid" result="pass"/><test-case name="11478NISTXML-SV-II-atomic-NMTOKEN-length-5-1 tokoe:invalid" result="pass"/><test-case name="11479NISTXML-SV-II-atomic-NMTOKEN-length-5-2 tokoe:invalid" result="pass"/><test-case name="11480NISTXML-SV-II-atomic-NMTOKEN-length-5-3 tokoe:invalid" result="pass"/><test-case name="11481NISTXML-SV-II-atomic-NMTOKEN-length-5-4 tokoe:invalid" result="pass"/><test-case name="11482NISTXML-SV-II-atomic-NMTOKEN-length-5-5 tokoe:invalid" result="pass"/><test-case name="11483NISTSchema-SV-II-atomic-NCName-maxLength-1 tokoe:valid" result="pass"/><test-case name="11484NISTXML-SV-II-atomic-NCName-maxLength-1-1 tokoe:invalid" result="pass"/><test-case name="11485NISTXML-SV-II-atomic-NCName-maxLength-1-2 tokoe:invalid" result="pass"/><test-case name="11486NISTXML-SV-II-atomic-NCName-maxLength-1-3 tokoe:invalid" result="pass"/><test-case name="11487NISTXML-SV-II-atomic-NCName-maxLength-1-4 tokoe:invalid" result="pass"/><test-case name="11488NISTXML-SV-II-atomic-NCName-maxLength-1-5 tokoe:invalid" result="pass"/><test-case name="11489NISTSchema-SV-II-atomic-NCName-maxLength-2 tokoe:valid" result="pass"/><test-case name="11490NISTXML-SV-II-atomic-NCName-maxLength-2-1 tokoe:invalid" result="pass"/><test-case name="11491NISTXML-SV-II-atomic-NCName-maxLength-2-2 tokoe:invalid" result="pass"/><test-case name="11492NISTXML-SV-II-atomic-NCName-maxLength-2-3 tokoe:invalid" result="pass"/><test-case name="11493NISTXML-SV-II-atomic-NCName-maxLength-2-4 tokoe:invalid" result="pass"/><test-case name="11494NISTXML-SV-II-atomic-NCName-maxLength-2-5 tokoe:invalid" result="pass"/><test-case name="11495NISTSchema-SV-II-atomic-NCName-maxLength-3 tokoe:valid" result="pass"/><test-case name="11496NISTXML-SV-II-atomic-NCName-maxLength-3-1 tokoe:invalid" result="pass"/><test-case name="11497NISTXML-SV-II-atomic-NCName-maxLength-3-2 tokoe:invalid" result="pass"/><test-case name="11498NISTXML-SV-II-atomic-NCName-maxLength-3-3 tokoe:invalid" result="pass"/><test-case name="11499NISTXML-SV-II-atomic-NCName-maxLength-3-4 tokoe:invalid" result="pass"/><test-case name="11500NISTXML-SV-II-atomic-NCName-maxLength-3-5 tokoe:invalid" result="pass"/><test-case name="11501NISTSchema-SV-II-atomic-NCName-maxLength-4 tokoe:valid" result="pass"/><test-case name="11502NISTXML-SV-II-atomic-NCName-maxLength-4-1 tokoe:invalid" result="pass"/><test-case name="11503NISTXML-SV-II-atomic-NCName-maxLength-4-2 tokoe:invalid" result="pass"/><test-case name="11504NISTXML-SV-II-atomic-NCName-maxLength-4-3 tokoe:invalid" result="pass"/><test-case name="11505NISTXML-SV-II-atomic-NCName-maxLength-4-4 tokoe:invalid" result="pass"/><test-case name="11506NISTXML-SV-II-atomic-NCName-maxLength-4-5 tokoe:invalid" result="pass"/><test-case name="11507NISTSchema-SV-II-atomic-NCName-maxLength-5 tokoe:valid" result="pass"/><test-case name="11508NISTXML-SV-II-atomic-NCName-maxLength-5-1 tokoe:invalid" result="pass"/><test-case name="11509NISTXML-SV-II-atomic-NCName-maxLength-5-2 tokoe:invalid" result="pass"/><test-case name="11510NISTXML-SV-II-atomic-NCName-maxLength-5-3 tokoe:invalid" result="pass"/><test-case name="11511NISTXML-SV-II-atomic-NCName-maxLength-5-4 tokoe:invalid" result="pass"/><test-case name="11512NISTXML-SV-II-atomic-NCName-maxLength-5-5 tokoe:invalid" result="pass"/><test-case name="11513NISTSchema-SV-II-atomic-NCName-length-1 tokoe:valid" result="pass"/><test-case name="11514NISTXML-SV-II-atomic-NCName-length-1-1 tokoe:invalid" result="pass"/><test-case name="11515NISTXML-SV-II-atomic-NCName-length-1-2 tokoe:invalid" result="pass"/><test-case name="11516NISTXML-SV-II-atomic-NCName-length-1-3 tokoe:invalid" result="pass"/><test-case name="11517NISTXML-SV-II-atomic-NCName-length-1-4 tokoe:invalid" result="pass"/><test-case name="11518NISTXML-SV-II-atomic-NCName-length-1-5 tokoe:invalid" result="pass"/><test-case name="11519NISTSchema-SV-II-atomic-NCName-length-2 tokoe:valid" result="pass"/><test-case name="11520NISTXML-SV-II-atomic-NCName-length-2-1 tokoe:invalid" result="pass"/><test-case name="11521NISTXML-SV-II-atomic-NCName-length-2-2 tokoe:invalid" result="pass"/><test-case name="11522NISTXML-SV-II-atomic-NCName-length-2-3 tokoe:invalid" result="pass"/><test-case name="11523NISTXML-SV-II-atomic-NCName-length-2-4 tokoe:invalid" result="pass"/><test-case name="11524NISTXML-SV-II-atomic-NCName-length-2-5 tokoe:invalid" result="pass"/><test-case name="11525NISTSchema-SV-II-atomic-NCName-length-3 tokoe:valid" result="pass"/><test-case name="11526NISTXML-SV-II-atomic-NCName-length-3-1 tokoe:invalid" result="pass"/><test-case name="11527NISTXML-SV-II-atomic-NCName-length-3-2 tokoe:invalid" result="pass"/><test-case name="11528NISTXML-SV-II-atomic-NCName-length-3-3 tokoe:invalid" result="pass"/><test-case name="11529NISTXML-SV-II-atomic-NCName-length-3-4 tokoe:invalid" result="pass"/><test-case name="11530NISTXML-SV-II-atomic-NCName-length-3-5 tokoe:invalid" result="pass"/><test-case name="11531NISTSchema-SV-II-atomic-NCName-length-4 tokoe:valid" result="pass"/><test-case name="11532NISTXML-SV-II-atomic-NCName-length-4-1 tokoe:invalid" result="pass"/><test-case name="11533NISTXML-SV-II-atomic-NCName-length-4-2 tokoe:invalid" result="pass"/><test-case name="11534NISTXML-SV-II-atomic-NCName-length-4-3 tokoe:invalid" result="pass"/><test-case name="11535NISTXML-SV-II-atomic-NCName-length-4-4 tokoe:invalid" result="pass"/><test-case name="11536NISTXML-SV-II-atomic-NCName-length-4-5 tokoe:invalid" result="pass"/><test-case name="11537NISTSchema-SV-II-atomic-NCName-length-5 tokoe:valid" result="pass"/><test-case name="11538NISTXML-SV-II-atomic-NCName-length-5-1 tokoe:invalid" result="pass"/><test-case name="11539NISTXML-SV-II-atomic-NCName-length-5-2 tokoe:invalid" result="pass"/><test-case name="11540NISTXML-SV-II-atomic-NCName-length-5-3 tokoe:invalid" result="pass"/><test-case name="11541NISTXML-SV-II-atomic-NCName-length-5-4 tokoe:invalid" result="pass"/><test-case name="11542NISTXML-SV-II-atomic-NCName-length-5-5 tokoe:invalid" result="pass"/><test-case name="11543NISTSchema-SV-II-atomic-ID-maxLength-1 tokoe:valid" result="pass"/><test-case name="11544NISTXML-SV-II-atomic-ID-maxLength-1-1 tokoe:invalid" result="pass"/><test-case name="11545NISTXML-SV-II-atomic-ID-maxLength-1-2 tokoe:invalid" result="pass"/><test-case name="11546NISTXML-SV-II-atomic-ID-maxLength-1-3 tokoe:invalid" result="pass"/><test-case name="11547NISTXML-SV-II-atomic-ID-maxLength-1-4 tokoe:invalid" result="pass"/><test-case name="11548NISTXML-SV-II-atomic-ID-maxLength-1-5 tokoe:invalid" result="pass"/><test-case name="11549NISTSchema-SV-II-atomic-ID-maxLength-2 tokoe:valid" result="pass"/><test-case name="11550NISTXML-SV-II-atomic-ID-maxLength-2-1 tokoe:invalid" result="pass"/><test-case name="11551NISTXML-SV-II-atomic-ID-maxLength-2-2 tokoe:invalid" result="pass"/><test-case name="11552NISTXML-SV-II-atomic-ID-maxLength-2-3 tokoe:invalid" result="pass"/><test-case name="11553NISTXML-SV-II-atomic-ID-maxLength-2-4 tokoe:invalid" result="pass"/><test-case name="11554NISTXML-SV-II-atomic-ID-maxLength-2-5 tokoe:invalid" result="pass"/><test-case name="11555NISTSchema-SV-II-atomic-ID-maxLength-3 tokoe:valid" result="pass"/><test-case name="11556NISTXML-SV-II-atomic-ID-maxLength-3-1 tokoe:invalid" result="pass"/><test-case name="11557NISTXML-SV-II-atomic-ID-maxLength-3-2 tokoe:invalid" result="pass"/><test-case name="11558NISTXML-SV-II-atomic-ID-maxLength-3-3 tokoe:invalid" result="pass"/><test-case name="11559NISTXML-SV-II-atomic-ID-maxLength-3-4 tokoe:invalid" result="pass"/><test-case name="11560NISTXML-SV-II-atomic-ID-maxLength-3-5 tokoe:invalid" result="pass"/><test-case name="11561NISTSchema-SV-II-atomic-ID-maxLength-4 tokoe:valid" result="pass"/><test-case name="11562NISTXML-SV-II-atomic-ID-maxLength-4-1 tokoe:invalid" result="pass"/><test-case name="11563NISTXML-SV-II-atomic-ID-maxLength-4-2 tokoe:invalid" result="pass"/><test-case name="11564NISTXML-SV-II-atomic-ID-maxLength-4-3 tokoe:invalid" result="pass"/><test-case name="11565NISTXML-SV-II-atomic-ID-maxLength-4-4 tokoe:invalid" result="pass"/><test-case name="11566NISTXML-SV-II-atomic-ID-maxLength-4-5 tokoe:invalid" result="pass"/><test-case name="11567NISTSchema-SV-II-atomic-ID-maxLength-5 tokoe:valid" result="pass"/><test-case name="11568NISTXML-SV-II-atomic-ID-maxLength-5-1 tokoe:invalid" result="pass"/><test-case name="11569NISTXML-SV-II-atomic-ID-maxLength-5-2 tokoe:invalid" result="pass"/><test-case name="11570NISTXML-SV-II-atomic-ID-maxLength-5-3 tokoe:invalid" result="pass"/><test-case name="11571NISTXML-SV-II-atomic-ID-maxLength-5-4 tokoe:invalid" result="pass"/><test-case name="11572NISTXML-SV-II-atomic-ID-maxLength-5-5 tokoe:invalid" result="pass"/><test-case name="11573NISTSchema-SV-II-atomic-ID-length-1 tokoe:valid" result="pass"/><test-case name="11574NISTXML-SV-II-atomic-ID-length-1-1 tokoe:invalid" result="pass"/><test-case name="11575NISTXML-SV-II-atomic-ID-length-1-2 tokoe:invalid" result="pass"/><test-case name="11576NISTXML-SV-II-atomic-ID-length-1-3 tokoe:invalid" result="pass"/><test-case name="11577NISTXML-SV-II-atomic-ID-length-1-4 tokoe:invalid" result="pass"/><test-case name="11578NISTXML-SV-II-atomic-ID-length-1-5 tokoe:invalid" result="pass"/><test-case name="11579NISTSchema-SV-II-atomic-ID-length-2 tokoe:valid" result="pass"/><test-case name="11580NISTXML-SV-II-atomic-ID-length-2-1 tokoe:invalid" result="pass"/><test-case name="11581NISTXML-SV-II-atomic-ID-length-2-2 tokoe:invalid" result="pass"/><test-case name="11582NISTXML-SV-II-atomic-ID-length-2-3 tokoe:invalid" result="pass"/><test-case name="11583NISTXML-SV-II-atomic-ID-length-2-4 tokoe:invalid" result="pass"/><test-case name="11584NISTXML-SV-II-atomic-ID-length-2-5 tokoe:invalid" result="pass"/><test-case name="11585NISTSchema-SV-II-atomic-ID-length-3 tokoe:valid" result="pass"/><test-case name="11586NISTXML-SV-II-atomic-ID-length-3-1 tokoe:invalid" result="pass"/><test-case name="11587NISTXML-SV-II-atomic-ID-length-3-2 tokoe:invalid" result="pass"/><test-case name="11588NISTXML-SV-II-atomic-ID-length-3-3 tokoe:invalid" result="pass"/><test-case name="11589NISTXML-SV-II-atomic-ID-length-3-4 tokoe:invalid" result="pass"/><test-case name="11590NISTXML-SV-II-atomic-ID-length-3-5 tokoe:invalid" result="pass"/><test-case name="11591NISTSchema-SV-II-atomic-ID-length-4 tokoe:valid" result="pass"/><test-case name="11592NISTXML-SV-II-atomic-ID-length-4-1 tokoe:invalid" result="pass"/><test-case name="11593NISTXML-SV-II-atomic-ID-length-4-2 tokoe:invalid" result="pass"/><test-case name="11594NISTXML-SV-II-atomic-ID-length-4-3 tokoe:invalid" result="pass"/><test-case name="11595NISTXML-SV-II-atomic-ID-length-4-4 tokoe:invalid" result="pass"/><test-case name="11596NISTXML-SV-II-atomic-ID-length-4-5 tokoe:invalid" result="pass"/><test-case name="11597NISTSchema-SV-II-atomic-ID-length-5 tokoe:valid" result="pass"/><test-case name="11598NISTXML-SV-II-atomic-ID-length-5-1 tokoe:invalid" result="pass"/><test-case name="11599NISTXML-SV-II-atomic-ID-length-5-2 tokoe:invalid" result="pass"/><test-case name="11600NISTXML-SV-II-atomic-ID-length-5-3 tokoe:invalid" result="pass"/><test-case name="11601NISTXML-SV-II-atomic-ID-length-5-4 tokoe:invalid" result="pass"/><test-case name="11602NISTXML-SV-II-atomic-ID-length-5-5 tokoe:invalid" result="pass"/><test-case name="11603NISTSchema-SV-II-atomic-anyURI-minLength-2 tokoe:valid" result="pass"/><test-case name="11604NISTXML-SV-II-atomic-anyURI-minLength-2-1 tokoe:invalid" result="pass"/><test-case name="11605NISTXML-SV-II-atomic-anyURI-minLength-2-2 tokoe:invalid" result="pass"/><test-case name="11606NISTXML-SV-II-atomic-anyURI-minLength-2-3 tokoe:invalid" result="pass"/><test-case name="11607NISTXML-SV-II-atomic-anyURI-minLength-2-4 tokoe:invalid" result="pass"/><test-case name="11608NISTXML-SV-II-atomic-anyURI-minLength-2-5 tokoe:invalid" result="pass"/><test-case name="11609NISTSchema-SV-II-atomic-anyURI-minLength-3 tokoe:valid" result="pass"/><test-case name="11610NISTXML-SV-II-atomic-anyURI-minLength-3-1 tokoe:invalid" result="pass"/><test-case name="11611NISTXML-SV-II-atomic-anyURI-minLength-3-2 tokoe:invalid" result="pass"/><test-case name="11612NISTXML-SV-II-atomic-anyURI-minLength-3-3 tokoe:invalid" result="pass"/><test-case name="11613NISTXML-SV-II-atomic-anyURI-minLength-3-4 tokoe:invalid" result="pass"/><test-case name="11614NISTXML-SV-II-atomic-anyURI-minLength-3-5 tokoe:invalid" result="pass"/><test-case name="11615NISTSchema-SV-II-atomic-anyURI-minLength-4 tokoe:valid" result="pass"/><test-case name="11616NISTXML-SV-II-atomic-anyURI-minLength-4-1 tokoe:invalid" result="pass"/><test-case name="11617NISTXML-SV-II-atomic-anyURI-minLength-4-2 tokoe:invalid" result="pass"/><test-case name="11618NISTXML-SV-II-atomic-anyURI-minLength-4-3 tokoe:invalid" result="pass"/><test-case name="11619NISTXML-SV-II-atomic-anyURI-minLength-4-4 tokoe:invalid" result="pass"/><test-case name="11620NISTXML-SV-II-atomic-anyURI-minLength-4-5 tokoe:invalid" result="pass"/><test-case name="11621NISTSchema-SV-II-atomic-anyURI-minLength-5 tokoe:valid" result="pass"/><test-case name="11622NISTXML-SV-II-atomic-anyURI-minLength-5-1 tokoe:invalid" result="pass"/><test-case name="11623NISTXML-SV-II-atomic-anyURI-minLength-5-2 tokoe:invalid" result="pass"/><test-case name="11624NISTXML-SV-II-atomic-anyURI-minLength-5-3 tokoe:invalid" result="pass"/><test-case name="11625NISTXML-SV-II-atomic-anyURI-minLength-5-4 tokoe:invalid" result="pass"/><test-case name="11626NISTXML-SV-II-atomic-anyURI-minLength-5-5 tokoe:invalid" result="pass"/><test-case name="11627NISTSchema-SV-II-atomic-anyURI-minLength-6 tokoe:valid" result="pass"/><test-case name="11628NISTXML-SV-II-atomic-anyURI-minLength-6-1 tokoe:invalid" result="pass"/><test-case name="11629NISTXML-SV-II-atomic-anyURI-minLength-6-2 tokoe:invalid" result="pass"/><test-case name="11630NISTXML-SV-II-atomic-anyURI-minLength-6-3 tokoe:invalid" result="pass"/><test-case name="11631NISTXML-SV-II-atomic-anyURI-minLength-6-4 tokoe:invalid" result="pass"/><test-case name="11632NISTXML-SV-II-atomic-anyURI-minLength-6-5 tokoe:invalid" result="pass"/><test-case name="11633NISTSchema-SV-II-atomic-anyURI-maxLength-1 tokoe:valid" result="pass"/><test-case name="11634NISTXML-SV-II-atomic-anyURI-maxLength-1-1 tokoe:invalid" result="pass"/><test-case name="11635NISTXML-SV-II-atomic-anyURI-maxLength-1-2 tokoe:invalid" result="pass"/><test-case name="11636NISTXML-SV-II-atomic-anyURI-maxLength-1-3 tokoe:invalid" result="pass"/><test-case name="11637NISTXML-SV-II-atomic-anyURI-maxLength-1-4 tokoe:invalid" result="pass"/><test-case name="11638NISTXML-SV-II-atomic-anyURI-maxLength-1-5 tokoe:invalid" result="pass"/><test-case name="11639NISTSchema-SV-II-atomic-anyURI-maxLength-2 tokoe:valid" result="pass"/><test-case name="11640NISTXML-SV-II-atomic-anyURI-maxLength-2-1 tokoe:invalid" result="pass"/><test-case name="11641NISTXML-SV-II-atomic-anyURI-maxLength-2-2 tokoe:invalid" result="pass"/><test-case name="11642NISTXML-SV-II-atomic-anyURI-maxLength-2-3 tokoe:invalid" result="pass"/><test-case name="11643NISTXML-SV-II-atomic-anyURI-maxLength-2-4 tokoe:invalid" result="pass"/><test-case name="11644NISTXML-SV-II-atomic-anyURI-maxLength-2-5 tokoe:invalid" result="pass"/><test-case name="11645NISTSchema-SV-II-atomic-anyURI-maxLength-3 tokoe:valid" result="pass"/><test-case name="11646NISTXML-SV-II-atomic-anyURI-maxLength-3-1 tokoe:invalid" result="pass"/><test-case name="11647NISTXML-SV-II-atomic-anyURI-maxLength-3-2 tokoe:invalid" result="pass"/><test-case name="11648NISTXML-SV-II-atomic-anyURI-maxLength-3-3 tokoe:invalid" result="pass"/><test-case name="11649NISTXML-SV-II-atomic-anyURI-maxLength-3-4 tokoe:invalid" result="pass"/><test-case name="11650NISTXML-SV-II-atomic-anyURI-maxLength-3-5 tokoe:invalid" result="pass"/><test-case name="11651NISTSchema-SV-II-atomic-anyURI-maxLength-4 tokoe:valid" result="pass"/><test-case name="11652NISTXML-SV-II-atomic-anyURI-maxLength-4-1 tokoe:invalid" result="pass"/><test-case name="11653NISTXML-SV-II-atomic-anyURI-maxLength-4-2 tokoe:invalid" result="pass"/><test-case name="11654NISTXML-SV-II-atomic-anyURI-maxLength-4-3 tokoe:invalid" result="pass"/><test-case name="11655NISTXML-SV-II-atomic-anyURI-maxLength-4-4 tokoe:invalid" result="pass"/><test-case name="11656NISTXML-SV-II-atomic-anyURI-maxLength-4-5 tokoe:invalid" result="pass"/><test-case name="11657NISTSchema-SV-II-atomic-anyURI-maxLength-5 tokoe:valid" result="pass"/><test-case name="11658NISTXML-SV-II-atomic-anyURI-maxLength-5-1 tokoe:invalid" result="pass"/><test-case name="11659NISTXML-SV-II-atomic-anyURI-maxLength-5-2 tokoe:invalid" result="pass"/><test-case name="11660NISTXML-SV-II-atomic-anyURI-maxLength-5-3 tokoe:invalid" result="pass"/><test-case name="11661NISTXML-SV-II-atomic-anyURI-maxLength-5-4 tokoe:invalid" result="pass"/><test-case name="11662NISTXML-SV-II-atomic-anyURI-maxLength-5-5 tokoe:invalid" result="pass"/><test-case name="11663NISTSchema-SV-II-atomic-language-minLength-2 tokoe:valid" result="pass"/><test-case name="11664NISTXML-SV-II-atomic-language-minLength-2-1 tokoe:invalid" result="pass"/><test-case name="11665NISTXML-SV-II-atomic-language-minLength-2-2 tokoe:invalid" result="pass"/><test-case name="11666NISTXML-SV-II-atomic-language-minLength-2-3 tokoe:invalid" result="pass"/><test-case name="11667NISTXML-SV-II-atomic-language-minLength-2-4 tokoe:invalid" result="pass"/><test-case name="11668NISTXML-SV-II-atomic-language-minLength-2-5 tokoe:invalid" result="pass"/><test-case name="11669NISTSchema-SV-II-atomic-language-minLength-3 tokoe:valid" result="pass"/><test-case name="11670NISTXML-SV-II-atomic-language-minLength-3-1 tokoe:invalid" result="pass"/><test-case name="11671NISTXML-SV-II-atomic-language-minLength-3-2 tokoe:invalid" result="pass"/><test-case name="11672NISTXML-SV-II-atomic-language-minLength-3-3 tokoe:invalid" result="pass"/><test-case name="11673NISTXML-SV-II-atomic-language-minLength-3-4 tokoe:invalid" result="pass"/><test-case name="11674NISTXML-SV-II-atomic-language-minLength-3-5 tokoe:invalid" result="pass"/><test-case name="11675NISTSchema-SV-II-atomic-language-minLength-4 tokoe:valid" result="pass"/><test-case name="11676NISTXML-SV-II-atomic-language-minLength-4-1 tokoe:invalid" result="pass"/><test-case name="11677NISTXML-SV-II-atomic-language-minLength-4-2 tokoe:invalid" result="pass"/><test-case name="11678NISTXML-SV-II-atomic-language-minLength-4-3 tokoe:invalid" result="pass"/><test-case name="11679NISTXML-SV-II-atomic-language-minLength-4-4 tokoe:invalid" result="pass"/><test-case name="11680NISTXML-SV-II-atomic-language-minLength-4-5 tokoe:invalid" result="pass"/><test-case name="11681NISTSchema-SV-II-atomic-language-minLength-6 tokoe:valid" result="pass"/><test-case name="11682NISTXML-SV-II-atomic-language-minLength-6-1 tokoe:invalid" result="pass"/><test-case name="11683NISTXML-SV-II-atomic-language-minLength-6-2 tokoe:invalid" result="pass"/><test-case name="11684NISTXML-SV-II-atomic-language-minLength-6-3 tokoe:invalid" result="pass"/><test-case name="11685NISTXML-SV-II-atomic-language-minLength-6-4 tokoe:invalid" result="pass"/><test-case name="11686NISTXML-SV-II-atomic-language-minLength-6-5 tokoe:invalid" result="pass"/><test-case name="11687NISTSchema-SV-II-atomic-language-maxLength-1 tokoe:valid" result="pass"/><test-case name="11688NISTXML-SV-II-atomic-language-maxLength-1-1 tokoe:invalid" result="pass"/><test-case name="11689NISTXML-SV-II-atomic-language-maxLength-1-2 tokoe:invalid" result="pass"/><test-case name="11690NISTXML-SV-II-atomic-language-maxLength-1-3 tokoe:invalid" result="pass"/><test-case name="11691NISTXML-SV-II-atomic-language-maxLength-1-4 tokoe:invalid" result="pass"/><test-case name="11692NISTXML-SV-II-atomic-language-maxLength-1-5 tokoe:invalid" result="pass"/><test-case name="11693NISTSchema-SV-II-atomic-language-maxLength-2 tokoe:valid" result="pass"/><test-case name="11694NISTXML-SV-II-atomic-language-maxLength-2-1 tokoe:invalid" result="pass"/><test-case name="11695NISTXML-SV-II-atomic-language-maxLength-2-2 tokoe:invalid" result="pass"/><test-case name="11696NISTXML-SV-II-atomic-language-maxLength-2-3 tokoe:invalid" result="pass"/><test-case name="11697NISTXML-SV-II-atomic-language-maxLength-2-4 tokoe:invalid" result="pass"/><test-case name="11698NISTXML-SV-II-atomic-language-maxLength-2-5 tokoe:invalid" result="pass"/><test-case name="11699NISTSchema-SV-II-atomic-language-maxLength-3 tokoe:valid" result="pass"/><test-case name="11700NISTXML-SV-II-atomic-language-maxLength-3-1 tokoe:invalid" result="pass"/><test-case name="11701NISTXML-SV-II-atomic-language-maxLength-3-2 tokoe:invalid" result="pass"/><test-case name="11702NISTXML-SV-II-atomic-language-maxLength-3-3 tokoe:invalid" result="pass"/><test-case name="11703NISTXML-SV-II-atomic-language-maxLength-3-4 tokoe:invalid" result="pass"/><test-case name="11704NISTXML-SV-II-atomic-language-maxLength-3-5 tokoe:invalid" result="pass"/><test-case name="11705NISTSchema-SV-II-atomic-language-maxLength-4 tokoe:valid" result="pass"/><test-case name="11706NISTXML-SV-II-atomic-language-maxLength-4-1 tokoe:invalid" result="pass"/><test-case name="11707NISTXML-SV-II-atomic-language-maxLength-4-2 tokoe:invalid" result="pass"/><test-case name="11708NISTXML-SV-II-atomic-language-maxLength-4-3 tokoe:invalid" result="pass"/><test-case name="11709NISTXML-SV-II-atomic-language-maxLength-4-4 tokoe:invalid" result="pass"/><test-case name="11710NISTXML-SV-II-atomic-language-maxLength-4-5 tokoe:invalid" result="pass"/><test-case name="11711NISTSchema-SV-II-atomic-language-maxLength-5 tokoe:valid" result="pass"/><test-case name="11712NISTXML-SV-II-atomic-language-maxLength-5-1 tokoe:invalid" result="pass"/><test-case name="11713NISTXML-SV-II-atomic-language-maxLength-5-2 tokoe:invalid" result="pass"/><test-case name="11714NISTXML-SV-II-atomic-language-maxLength-5-3 tokoe:invalid" result="pass"/><test-case name="11715NISTXML-SV-II-atomic-language-maxLength-5-4 tokoe:invalid" result="pass"/><test-case name="11716NISTXML-SV-II-atomic-language-maxLength-5-5 tokoe:invalid" result="pass"/><test-case name="11717NISTSchema-SV-II-atomic-anyURI-length-1 tokoe:valid" result="pass"/><test-case name="11718NISTXML-SV-II-atomic-anyURI-length-1-1 tokoe:invalid" result="pass"/><test-case name="11719NISTXML-SV-II-atomic-anyURI-length-1-2 tokoe:invalid" result="pass"/><test-case name="11720NISTXML-SV-II-atomic-anyURI-length-1-3 tokoe:invalid" result="pass"/><test-case name="11721NISTXML-SV-II-atomic-anyURI-length-1-4 tokoe:invalid" result="pass"/><test-case name="11722NISTXML-SV-II-atomic-anyURI-length-1-5 tokoe:invalid" result="pass"/><test-case name="11723NISTSchema-SV-II-atomic-anyURI-length-2 tokoe:valid" result="pass"/><test-case name="11724NISTXML-SV-II-atomic-anyURI-length-2-1 tokoe:invalid" result="pass"/><test-case name="11725NISTXML-SV-II-atomic-anyURI-length-2-2 tokoe:invalid" result="pass"/><test-case name="11726NISTXML-SV-II-atomic-anyURI-length-2-3 tokoe:invalid" result="pass"/><test-case name="11727NISTXML-SV-II-atomic-anyURI-length-2-4 tokoe:invalid" result="pass"/><test-case name="11728NISTXML-SV-II-atomic-anyURI-length-2-5 tokoe:invalid" result="pass"/><test-case name="11729NISTSchema-SV-II-atomic-anyURI-length-3 tokoe:valid" result="pass"/><test-case name="11730NISTXML-SV-II-atomic-anyURI-length-3-1 tokoe:invalid" result="pass"/><test-case name="11731NISTXML-SV-II-atomic-anyURI-length-3-2 tokoe:invalid" result="pass"/><test-case name="11732NISTXML-SV-II-atomic-anyURI-length-3-3 tokoe:invalid" result="pass"/><test-case name="11733NISTXML-SV-II-atomic-anyURI-length-3-4 tokoe:invalid" result="pass"/><test-case name="11734NISTXML-SV-II-atomic-anyURI-length-3-5 tokoe:invalid" result="pass"/><test-case name="11735NISTSchema-SV-II-atomic-anyURI-length-4 tokoe:valid" result="pass"/><test-case name="11736NISTXML-SV-II-atomic-anyURI-length-4-1 tokoe:invalid" result="pass"/><test-case name="11737NISTXML-SV-II-atomic-anyURI-length-4-2 tokoe:invalid" result="pass"/><test-case name="11738NISTXML-SV-II-atomic-anyURI-length-4-3 tokoe:invalid" result="pass"/><test-case name="11739NISTXML-SV-II-atomic-anyURI-length-4-4 tokoe:invalid" result="pass"/><test-case name="11740NISTXML-SV-II-atomic-anyURI-length-4-5 tokoe:invalid" result="pass"/><test-case name="11741NISTSchema-SV-II-atomic-anyURI-length-5 tokoe:valid" result="pass"/><test-case name="11742NISTXML-SV-II-atomic-anyURI-length-5-1 tokoe:invalid" result="pass"/><test-case name="11743NISTXML-SV-II-atomic-anyURI-length-5-2 tokoe:invalid" result="pass"/><test-case name="11744NISTXML-SV-II-atomic-anyURI-length-5-3 tokoe:invalid" result="pass"/><test-case name="11745NISTXML-SV-II-atomic-anyURI-length-5-4 tokoe:invalid" result="pass"/><test-case name="11746NISTXML-SV-II-atomic-anyURI-length-5-5 tokoe:invalid" result="pass"/><test-case name="11747NISTSchema-SV-II-atomic-language-length-1 tokoe:valid" result="pass"/><test-case name="11748NISTXML-SV-II-atomic-language-length-1-1 tokoe:invalid" result="pass"/><test-case name="11749NISTXML-SV-II-atomic-language-length-1-2 tokoe:invalid" result="pass"/><test-case name="11750NISTXML-SV-II-atomic-language-length-1-3 tokoe:invalid" result="pass"/><test-case name="11751NISTXML-SV-II-atomic-language-length-1-4 tokoe:invalid" result="pass"/><test-case name="11752NISTXML-SV-II-atomic-language-length-1-5 tokoe:invalid" result="pass"/><test-case name="11753NISTSchema-SV-II-atomic-language-length-2 tokoe:valid" result="pass"/><test-case name="11754NISTXML-SV-II-atomic-language-length-2-1 tokoe:invalid" result="pass"/><test-case name="11755NISTXML-SV-II-atomic-language-length-2-2 tokoe:invalid" result="pass"/><test-case name="11756NISTXML-SV-II-atomic-language-length-2-3 tokoe:invalid" result="pass"/><test-case name="11757NISTXML-SV-II-atomic-language-length-2-4 tokoe:invalid" result="pass"/><test-case name="11758NISTXML-SV-II-atomic-language-length-2-5 tokoe:invalid" result="pass"/><test-case name="11759NISTSchema-SV-II-atomic-language-length-3 tokoe:valid" result="pass"/><test-case name="11760NISTXML-SV-II-atomic-language-length-3-1 tokoe:invalid" result="pass"/><test-case name="11761NISTXML-SV-II-atomic-language-length-3-2 tokoe:invalid" result="pass"/><test-case name="11762NISTXML-SV-II-atomic-language-length-3-3 tokoe:invalid" result="pass"/><test-case name="11763NISTXML-SV-II-atomic-language-length-3-4 tokoe:invalid" result="pass"/><test-case name="11764NISTXML-SV-II-atomic-language-length-3-5 tokoe:invalid" result="pass"/><test-case name="11765NISTSchema-SV-II-atomic-language-length-4 tokoe:valid" result="pass"/><test-case name="11766NISTXML-SV-II-atomic-language-length-4-1 tokoe:invalid" result="pass"/><test-case name="11767NISTXML-SV-II-atomic-language-length-4-2 tokoe:invalid" result="pass"/><test-case name="11768NISTXML-SV-II-atomic-language-length-4-3 tokoe:invalid" result="pass"/><test-case name="11769NISTXML-SV-II-atomic-language-length-4-4 tokoe:invalid" result="pass"/><test-case name="11770NISTXML-SV-II-atomic-language-length-4-5 tokoe:invalid" result="pass"/><test-case name="11771NISTSchema-SV-II-atomic-language-length-5 tokoe:valid" result="pass"/><test-case name="11772NISTXML-SV-II-atomic-language-length-5-1 tokoe:invalid" result="pass"/><test-case name="11773NISTXML-SV-II-atomic-language-length-5-2 tokoe:invalid" result="pass"/><test-case name="11774NISTXML-SV-II-atomic-language-length-5-3 tokoe:invalid" result="pass"/><test-case name="11775NISTXML-SV-II-atomic-language-length-5-4 tokoe:invalid" result="pass"/><test-case name="11776NISTXML-SV-II-atomic-language-length-5-5 tokoe:invalid" result="pass"/><test-case name="11777NISTSchema-SV-II-atomic-anyURI-pattern-1 tokoe:valid" result="pass"/><test-case name="11778NISTXML-SV-II-atomic-anyURI-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="11779NISTXML-SV-II-atomic-anyURI-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="11780NISTXML-SV-II-atomic-anyURI-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="11781NISTXML-SV-II-atomic-anyURI-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="11782NISTXML-SV-II-atomic-anyURI-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="11783NISTSchema-SV-II-atomic-anyURI-pattern-2 tokoe:valid" result="pass"/><test-case name="11784NISTXML-SV-II-atomic-anyURI-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="11785NISTXML-SV-II-atomic-anyURI-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="11786NISTXML-SV-II-atomic-anyURI-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="11787NISTXML-SV-II-atomic-anyURI-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="11788NISTXML-SV-II-atomic-anyURI-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="11789NISTSchema-SV-II-atomic-anyURI-pattern-3 tokoe:valid" result="pass"/><test-case name="11790NISTXML-SV-II-atomic-anyURI-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="11791NISTXML-SV-II-atomic-anyURI-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="11792NISTXML-SV-II-atomic-anyURI-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="11793NISTXML-SV-II-atomic-anyURI-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="11794NISTXML-SV-II-atomic-anyURI-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="11795NISTSchema-SV-II-atomic-anyURI-pattern-4 tokoe:valid" result="pass"/><test-case name="11796NISTXML-SV-II-atomic-anyURI-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="11797NISTXML-SV-II-atomic-anyURI-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="11798NISTXML-SV-II-atomic-anyURI-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="11799NISTXML-SV-II-atomic-anyURI-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="11800NISTXML-SV-II-atomic-anyURI-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="11801NISTSchema-SV-II-atomic-anyURI-pattern-5 tokoe:valid" result="pass"/><test-case name="11802NISTXML-SV-II-atomic-anyURI-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="11803NISTXML-SV-II-atomic-anyURI-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="11804NISTXML-SV-II-atomic-anyURI-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="11805NISTXML-SV-II-atomic-anyURI-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="11806NISTXML-SV-II-atomic-anyURI-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="11807NISTSchema-SV-II-atomic-anyURI-enumeration-1 tokoe:valid" result="pass"/><test-case name="11808NISTXML-SV-II-atomic-anyURI-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="11809NISTXML-SV-II-atomic-anyURI-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="11810NISTXML-SV-II-atomic-anyURI-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="11811NISTXML-SV-II-atomic-anyURI-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="11812NISTXML-SV-II-atomic-anyURI-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="11813NISTSchema-SV-II-atomic-anyURI-enumeration-2 tokoe:valid" result="pass"/><test-case name="11814NISTXML-SV-II-atomic-anyURI-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="11815NISTXML-SV-II-atomic-anyURI-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="11816NISTXML-SV-II-atomic-anyURI-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="11817NISTXML-SV-II-atomic-anyURI-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="11818NISTXML-SV-II-atomic-anyURI-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="11819NISTSchema-SV-II-atomic-anyURI-enumeration-3 tokoe:valid" result="pass"/><test-case name="11820NISTXML-SV-II-atomic-anyURI-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="11821NISTXML-SV-II-atomic-anyURI-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="11822NISTXML-SV-II-atomic-anyURI-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="11823NISTXML-SV-II-atomic-anyURI-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="11824NISTXML-SV-II-atomic-anyURI-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="11825NISTSchema-SV-II-atomic-anyURI-enumeration-4 tokoe:valid" result="pass"/><test-case name="11826NISTXML-SV-II-atomic-anyURI-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="11827NISTXML-SV-II-atomic-anyURI-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="11828NISTXML-SV-II-atomic-anyURI-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="11829NISTXML-SV-II-atomic-anyURI-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="11830NISTXML-SV-II-atomic-anyURI-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="11831NISTSchema-SV-II-atomic-anyURI-enumeration-5 tokoe:valid" result="pass"/><test-case name="11832NISTXML-SV-II-atomic-anyURI-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="11833NISTXML-SV-II-atomic-anyURI-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="11834NISTXML-SV-II-atomic-anyURI-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="11835NISTXML-SV-II-atomic-anyURI-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="11836NISTXML-SV-II-atomic-anyURI-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="11837NISTSchema-SV-IV-list-decimal-maxLength-1 tokoe:valid" result="pass"/><test-case name="11838NISTXML-SV-IV-list-decimal-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="11839NISTXML-SV-IV-list-decimal-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="11840NISTXML-SV-IV-list-decimal-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="11841NISTXML-SV-IV-list-decimal-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="11842NISTXML-SV-IV-list-decimal-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="11843NISTSchema-SV-IV-list-decimal-maxLength-2 tokoe:valid" result="pass"/><test-case name="11844NISTXML-SV-IV-list-decimal-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="11845NISTXML-SV-IV-list-decimal-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="11846NISTXML-SV-IV-list-decimal-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="11847NISTXML-SV-IV-list-decimal-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="11848NISTXML-SV-IV-list-decimal-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="11849NISTSchema-SV-IV-list-decimal-maxLength-3 tokoe:valid" result="pass"/><test-case name="11850NISTXML-SV-IV-list-decimal-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="11851NISTXML-SV-IV-list-decimal-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="11852NISTXML-SV-IV-list-decimal-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="11853NISTXML-SV-IV-list-decimal-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="11854NISTXML-SV-IV-list-decimal-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="11855NISTSchema-SV-IV-list-decimal-maxLength-4 tokoe:valid" result="pass"/><test-case name="11856NISTXML-SV-IV-list-decimal-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="11857NISTXML-SV-IV-list-decimal-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="11858NISTXML-SV-IV-list-decimal-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="11859NISTXML-SV-IV-list-decimal-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="11860NISTXML-SV-IV-list-decimal-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="11861NISTSchema-SV-IV-list-decimal-maxLength-5 tokoe:valid" result="pass"/><test-case name="11862NISTXML-SV-IV-list-decimal-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="11863NISTXML-SV-IV-list-decimal-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="11864NISTXML-SV-IV-list-decimal-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="11865NISTXML-SV-IV-list-decimal-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="11866NISTXML-SV-IV-list-decimal-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="11867NISTSchema-SV-IV-list-decimal-minLength-1 tokoe:valid" result="pass"/><test-case name="11868NISTXML-SV-IV-list-decimal-minLength-1-1 tokoe:valid" result="pass"/><test-case name="11869NISTXML-SV-IV-list-decimal-minLength-1-2 tokoe:valid" result="pass"/><test-case name="11870NISTXML-SV-IV-list-decimal-minLength-1-3 tokoe:valid" result="pass"/><test-case name="11871NISTXML-SV-IV-list-decimal-minLength-1-4 tokoe:valid" result="pass"/><test-case name="11872NISTXML-SV-IV-list-decimal-minLength-1-5 tokoe:valid" result="pass"/><test-case name="11873NISTSchema-SV-IV-list-decimal-minLength-2 tokoe:valid" result="pass"/><test-case name="11874NISTXML-SV-IV-list-decimal-minLength-2-1 tokoe:valid" result="pass"/><test-case name="11875NISTXML-SV-IV-list-decimal-minLength-2-2 tokoe:valid" result="pass"/><test-case name="11876NISTXML-SV-IV-list-decimal-minLength-2-3 tokoe:valid" result="pass"/><test-case name="11877NISTXML-SV-IV-list-decimal-minLength-2-4 tokoe:valid" result="pass"/><test-case name="11878NISTXML-SV-IV-list-decimal-minLength-2-5 tokoe:valid" result="pass"/><test-case name="11879NISTSchema-SV-IV-list-decimal-minLength-3 tokoe:valid" result="pass"/><test-case name="11880NISTXML-SV-IV-list-decimal-minLength-3-1 tokoe:valid" result="pass"/><test-case name="11881NISTXML-SV-IV-list-decimal-minLength-3-2 tokoe:valid" result="pass"/><test-case name="11882NISTXML-SV-IV-list-decimal-minLength-3-3 tokoe:valid" result="pass"/><test-case name="11883NISTXML-SV-IV-list-decimal-minLength-3-4 tokoe:valid" result="pass"/><test-case name="11884NISTXML-SV-IV-list-decimal-minLength-3-5 tokoe:valid" result="pass"/><test-case name="11885NISTSchema-SV-IV-list-decimal-minLength-4 tokoe:valid" result="pass"/><test-case name="11886NISTXML-SV-IV-list-decimal-minLength-4-1 tokoe:valid" result="pass"/><test-case name="11887NISTXML-SV-IV-list-decimal-minLength-4-2 tokoe:valid" result="pass"/><test-case name="11888NISTXML-SV-IV-list-decimal-minLength-4-3 tokoe:valid" result="pass"/><test-case name="11889NISTXML-SV-IV-list-decimal-minLength-4-4 tokoe:valid" result="pass"/><test-case name="11890NISTXML-SV-IV-list-decimal-minLength-4-5 tokoe:valid" result="pass"/><test-case name="11891NISTSchema-SV-IV-list-decimal-minLength-5 tokoe:valid" result="pass"/><test-case name="11892NISTXML-SV-IV-list-decimal-minLength-5-1 tokoe:valid" result="pass"/><test-case name="11893NISTXML-SV-IV-list-decimal-minLength-5-2 tokoe:valid" result="pass"/><test-case name="11894NISTXML-SV-IV-list-decimal-minLength-5-3 tokoe:valid" result="pass"/><test-case name="11895NISTXML-SV-IV-list-decimal-minLength-5-4 tokoe:valid" result="pass"/><test-case name="11896NISTXML-SV-IV-list-decimal-minLength-5-5 tokoe:valid" result="pass"/><test-case name="11897NISTSchema-SV-IV-list-decimal-length-1 tokoe:valid" result="pass"/><test-case name="11898NISTXML-SV-IV-list-decimal-length-1-1 tokoe:valid" result="pass"/><test-case name="11899NISTXML-SV-IV-list-decimal-length-1-2 tokoe:valid" result="pass"/><test-case name="11900NISTXML-SV-IV-list-decimal-length-1-3 tokoe:valid" result="pass"/><test-case name="11901NISTXML-SV-IV-list-decimal-length-1-4 tokoe:valid" result="pass"/><test-case name="11902NISTXML-SV-IV-list-decimal-length-1-5 tokoe:valid" result="pass"/><test-case name="11903NISTSchema-SV-IV-list-decimal-length-2 tokoe:valid" result="pass"/><test-case name="11904NISTXML-SV-IV-list-decimal-length-2-1 tokoe:valid" result="pass"/><test-case name="11905NISTXML-SV-IV-list-decimal-length-2-2 tokoe:valid" result="pass"/><test-case name="11906NISTXML-SV-IV-list-decimal-length-2-3 tokoe:valid" result="pass"/><test-case name="11907NISTXML-SV-IV-list-decimal-length-2-4 tokoe:valid" result="pass"/><test-case name="11908NISTXML-SV-IV-list-decimal-length-2-5 tokoe:valid" result="pass"/><test-case name="11909NISTSchema-SV-IV-list-decimal-length-3 tokoe:valid" result="pass"/><test-case name="11910NISTXML-SV-IV-list-decimal-length-3-1 tokoe:valid" result="pass"/><test-case name="11911NISTXML-SV-IV-list-decimal-length-3-2 tokoe:valid" result="pass"/><test-case name="11912NISTXML-SV-IV-list-decimal-length-3-3 tokoe:valid" result="pass"/><test-case name="11913NISTXML-SV-IV-list-decimal-length-3-4 tokoe:valid" result="pass"/><test-case name="11914NISTXML-SV-IV-list-decimal-length-3-5 tokoe:valid" result="pass"/><test-case name="11915NISTSchema-SV-IV-list-decimal-length-4 tokoe:valid" result="pass"/><test-case name="11916NISTXML-SV-IV-list-decimal-length-4-1 tokoe:valid" result="pass"/><test-case name="11917NISTXML-SV-IV-list-decimal-length-4-2 tokoe:valid" result="pass"/><test-case name="11918NISTXML-SV-IV-list-decimal-length-4-3 tokoe:valid" result="pass"/><test-case name="11919NISTXML-SV-IV-list-decimal-length-4-4 tokoe:valid" result="pass"/><test-case name="11920NISTXML-SV-IV-list-decimal-length-4-5 tokoe:valid" result="pass"/><test-case name="11921NISTSchema-SV-IV-list-decimal-length-5 tokoe:valid" result="pass"/><test-case name="11922NISTXML-SV-IV-list-decimal-length-5-1 tokoe:valid" result="pass"/><test-case name="11923NISTXML-SV-IV-list-decimal-length-5-2 tokoe:valid" result="pass"/><test-case name="11924NISTXML-SV-IV-list-decimal-length-5-3 tokoe:valid" result="pass"/><test-case name="11925NISTXML-SV-IV-list-decimal-length-5-4 tokoe:valid" result="pass"/><test-case name="11926NISTXML-SV-IV-list-decimal-length-5-5 tokoe:valid" result="pass"/><test-case name="11927NISTSchema-SV-IV-list-decimal-pattern-1 tokoe:valid" result="pass"/><test-case name="11928NISTXML-SV-IV-list-decimal-pattern-1-1 tokoe:valid" result="pass"/><test-case name="11929NISTXML-SV-IV-list-decimal-pattern-1-2 tokoe:valid" result="pass"/><test-case name="11930NISTXML-SV-IV-list-decimal-pattern-1-3 tokoe:valid" result="pass"/><test-case name="11931NISTXML-SV-IV-list-decimal-pattern-1-4 tokoe:valid" result="pass"/><test-case name="11932NISTXML-SV-IV-list-decimal-pattern-1-5 tokoe:valid" result="pass"/><test-case name="11933NISTSchema-SV-IV-list-decimal-pattern-2 tokoe:valid" result="pass"/><test-case name="11934NISTXML-SV-IV-list-decimal-pattern-2-1 tokoe:valid" result="pass"/><test-case name="11935NISTXML-SV-IV-list-decimal-pattern-2-2 tokoe:valid" result="pass"/><test-case name="11936NISTXML-SV-IV-list-decimal-pattern-2-3 tokoe:valid" result="pass"/><test-case name="11937NISTXML-SV-IV-list-decimal-pattern-2-4 tokoe:valid" result="pass"/><test-case name="11938NISTXML-SV-IV-list-decimal-pattern-2-5 tokoe:valid" result="pass"/><test-case name="11939NISTSchema-SV-IV-list-decimal-pattern-3 tokoe:valid" result="pass"/><test-case name="11940NISTXML-SV-IV-list-decimal-pattern-3-1 tokoe:valid" result="pass"/><test-case name="11941NISTXML-SV-IV-list-decimal-pattern-3-2 tokoe:valid" result="pass"/><test-case name="11942NISTXML-SV-IV-list-decimal-pattern-3-3 tokoe:valid" result="pass"/><test-case name="11943NISTXML-SV-IV-list-decimal-pattern-3-4 tokoe:valid" result="pass"/><test-case name="11944NISTXML-SV-IV-list-decimal-pattern-3-5 tokoe:valid" result="pass"/><test-case name="11945NISTSchema-SV-IV-list-decimal-pattern-4 tokoe:valid" result="pass"/><test-case name="11946NISTXML-SV-IV-list-decimal-pattern-4-1 tokoe:valid" result="pass"/><test-case name="11947NISTXML-SV-IV-list-decimal-pattern-4-2 tokoe:valid" result="pass"/><test-case name="11948NISTXML-SV-IV-list-decimal-pattern-4-3 tokoe:valid" result="pass"/><test-case name="11949NISTXML-SV-IV-list-decimal-pattern-4-4 tokoe:valid" result="pass"/><test-case name="11950NISTXML-SV-IV-list-decimal-pattern-4-5 tokoe:valid" result="pass"/><test-case name="11951NISTSchema-SV-IV-list-decimal-pattern-5 tokoe:valid" result="pass"/><test-case name="11952NISTXML-SV-IV-list-decimal-pattern-5-1 tokoe:valid" result="pass"/><test-case name="11953NISTXML-SV-IV-list-decimal-pattern-5-2 tokoe:valid" result="pass"/><test-case name="11954NISTXML-SV-IV-list-decimal-pattern-5-3 tokoe:valid" result="pass"/><test-case name="11955NISTXML-SV-IV-list-decimal-pattern-5-4 tokoe:valid" result="pass"/><test-case name="11956NISTXML-SV-IV-list-decimal-pattern-5-5 tokoe:valid" result="pass"/><test-case name="11957NISTSchema-SV-IV-list-decimal-enumeration-1 tokoe:valid" result="pass"/><test-case name="11958NISTXML-SV-IV-list-decimal-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="11959NISTXML-SV-IV-list-decimal-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="11960NISTXML-SV-IV-list-decimal-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="11961NISTXML-SV-IV-list-decimal-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="11962NISTXML-SV-IV-list-decimal-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="11963NISTSchema-SV-IV-list-decimal-enumeration-2 tokoe:valid" result="pass"/><test-case name="11964NISTXML-SV-IV-list-decimal-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="11965NISTXML-SV-IV-list-decimal-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="11966NISTXML-SV-IV-list-decimal-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="11967NISTXML-SV-IV-list-decimal-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="11968NISTXML-SV-IV-list-decimal-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="11969NISTSchema-SV-IV-list-decimal-enumeration-3 tokoe:valid" result="pass"/><test-case name="11970NISTXML-SV-IV-list-decimal-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="11971NISTXML-SV-IV-list-decimal-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="11972NISTXML-SV-IV-list-decimal-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="11973NISTXML-SV-IV-list-decimal-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="11974NISTXML-SV-IV-list-decimal-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="11975NISTSchema-SV-IV-list-decimal-enumeration-4 tokoe:valid" result="pass"/><test-case name="11976NISTXML-SV-IV-list-decimal-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="11977NISTXML-SV-IV-list-decimal-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="11978NISTXML-SV-IV-list-decimal-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="11979NISTXML-SV-IV-list-decimal-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="11980NISTXML-SV-IV-list-decimal-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="11981NISTSchema-SV-IV-list-decimal-enumeration-5 tokoe:valid" result="pass"/><test-case name="11982NISTXML-SV-IV-list-decimal-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="11983NISTXML-SV-IV-list-decimal-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="11984NISTXML-SV-IV-list-decimal-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="11985NISTXML-SV-IV-list-decimal-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="11986NISTXML-SV-IV-list-decimal-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="11987NISTSchema-SV-IV-list-decimal-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="11988NISTXML-SV-IV-list-decimal-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="11989NISTXML-SV-IV-list-decimal-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="11990NISTXML-SV-IV-list-decimal-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="11991NISTXML-SV-IV-list-decimal-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="11992NISTXML-SV-IV-list-decimal-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="11993NISTSchema-SV-IV-list-integer-maxLength-1 tokoe:valid" result="pass"/><test-case name="11994NISTXML-SV-IV-list-integer-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="11995NISTXML-SV-IV-list-integer-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="11996NISTXML-SV-IV-list-integer-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="11997NISTXML-SV-IV-list-integer-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="11998NISTXML-SV-IV-list-integer-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="11999NISTSchema-SV-IV-list-integer-maxLength-2 tokoe:valid" result="pass"/><test-case name="12000NISTXML-SV-IV-list-integer-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="12001NISTXML-SV-IV-list-integer-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="12002NISTXML-SV-IV-list-integer-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="12003NISTXML-SV-IV-list-integer-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="12004NISTXML-SV-IV-list-integer-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="12005NISTSchema-SV-IV-list-integer-maxLength-3 tokoe:valid" result="pass"/><test-case name="12006NISTXML-SV-IV-list-integer-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="12007NISTXML-SV-IV-list-integer-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="12008NISTXML-SV-IV-list-integer-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="12009NISTXML-SV-IV-list-integer-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="12010NISTXML-SV-IV-list-integer-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="12011NISTSchema-SV-IV-list-integer-maxLength-4 tokoe:valid" result="pass"/><test-case name="12012NISTXML-SV-IV-list-integer-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="12013NISTXML-SV-IV-list-integer-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="12014NISTXML-SV-IV-list-integer-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="12015NISTXML-SV-IV-list-integer-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="12016NISTXML-SV-IV-list-integer-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="12017NISTSchema-SV-IV-list-integer-maxLength-5 tokoe:valid" result="pass"/><test-case name="12018NISTXML-SV-IV-list-integer-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="12019NISTXML-SV-IV-list-integer-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="12020NISTXML-SV-IV-list-integer-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="12021NISTXML-SV-IV-list-integer-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="12022NISTXML-SV-IV-list-integer-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="12023NISTSchema-SV-IV-list-integer-minLength-1 tokoe:valid" result="pass"/><test-case name="12024NISTXML-SV-IV-list-integer-minLength-1-1 tokoe:valid" result="pass"/><test-case name="12025NISTXML-SV-IV-list-integer-minLength-1-2 tokoe:valid" result="pass"/><test-case name="12026NISTXML-SV-IV-list-integer-minLength-1-3 tokoe:valid" result="pass"/><test-case name="12027NISTXML-SV-IV-list-integer-minLength-1-4 tokoe:valid" result="pass"/><test-case name="12028NISTXML-SV-IV-list-integer-minLength-1-5 tokoe:valid" result="pass"/><test-case name="12029NISTSchema-SV-IV-list-integer-minLength-2 tokoe:valid" result="pass"/><test-case name="12030NISTXML-SV-IV-list-integer-minLength-2-1 tokoe:valid" result="pass"/><test-case name="12031NISTXML-SV-IV-list-integer-minLength-2-2 tokoe:valid" result="pass"/><test-case name="12032NISTXML-SV-IV-list-integer-minLength-2-3 tokoe:valid" result="pass"/><test-case name="12033NISTXML-SV-IV-list-integer-minLength-2-4 tokoe:valid" result="pass"/><test-case name="12034NISTXML-SV-IV-list-integer-minLength-2-5 tokoe:valid" result="pass"/><test-case name="12035NISTSchema-SV-IV-list-integer-minLength-3 tokoe:valid" result="pass"/><test-case name="12036NISTXML-SV-IV-list-integer-minLength-3-1 tokoe:valid" result="pass"/><test-case name="12037NISTXML-SV-IV-list-integer-minLength-3-2 tokoe:valid" result="pass"/><test-case name="12038NISTXML-SV-IV-list-integer-minLength-3-3 tokoe:valid" result="pass"/><test-case name="12039NISTXML-SV-IV-list-integer-minLength-3-4 tokoe:valid" result="pass"/><test-case name="12040NISTXML-SV-IV-list-integer-minLength-3-5 tokoe:valid" result="pass"/><test-case name="12041NISTSchema-SV-IV-list-integer-minLength-4 tokoe:valid" result="pass"/><test-case name="12042NISTXML-SV-IV-list-integer-minLength-4-1 tokoe:valid" result="pass"/><test-case name="12043NISTXML-SV-IV-list-integer-minLength-4-2 tokoe:valid" result="pass"/><test-case name="12044NISTXML-SV-IV-list-integer-minLength-4-3 tokoe:valid" result="pass"/><test-case name="12045NISTXML-SV-IV-list-integer-minLength-4-4 tokoe:valid" result="pass"/><test-case name="12046NISTXML-SV-IV-list-integer-minLength-4-5 tokoe:valid" result="pass"/><test-case name="12047NISTSchema-SV-IV-list-integer-minLength-5 tokoe:valid" result="pass"/><test-case name="12048NISTXML-SV-IV-list-integer-minLength-5-1 tokoe:valid" result="pass"/><test-case name="12049NISTXML-SV-IV-list-integer-minLength-5-2 tokoe:valid" result="pass"/><test-case name="12050NISTXML-SV-IV-list-integer-minLength-5-3 tokoe:valid" result="pass"/><test-case name="12051NISTXML-SV-IV-list-integer-minLength-5-4 tokoe:valid" result="pass"/><test-case name="12052NISTXML-SV-IV-list-integer-minLength-5-5 tokoe:valid" result="pass"/><test-case name="12053NISTSchema-SV-IV-list-integer-length-1 tokoe:valid" result="pass"/><test-case name="12054NISTXML-SV-IV-list-integer-length-1-1 tokoe:valid" result="pass"/><test-case name="12055NISTXML-SV-IV-list-integer-length-1-2 tokoe:valid" result="pass"/><test-case name="12056NISTXML-SV-IV-list-integer-length-1-3 tokoe:valid" result="pass"/><test-case name="12057NISTXML-SV-IV-list-integer-length-1-4 tokoe:valid" result="pass"/><test-case name="12058NISTXML-SV-IV-list-integer-length-1-5 tokoe:valid" result="pass"/><test-case name="12059NISTSchema-SV-IV-list-integer-length-2 tokoe:valid" result="pass"/><test-case name="12060NISTXML-SV-IV-list-integer-length-2-1 tokoe:valid" result="pass"/><test-case name="12061NISTXML-SV-IV-list-integer-length-2-2 tokoe:valid" result="pass"/><test-case name="12062NISTXML-SV-IV-list-integer-length-2-3 tokoe:valid" result="pass"/><test-case name="12063NISTXML-SV-IV-list-integer-length-2-4 tokoe:valid" result="pass"/><test-case name="12064NISTXML-SV-IV-list-integer-length-2-5 tokoe:valid" result="pass"/><test-case name="12065NISTSchema-SV-IV-list-integer-length-3 tokoe:valid" result="pass"/><test-case name="12066NISTXML-SV-IV-list-integer-length-3-1 tokoe:valid" result="pass"/><test-case name="12067NISTXML-SV-IV-list-integer-length-3-2 tokoe:valid" result="pass"/><test-case name="12068NISTXML-SV-IV-list-integer-length-3-3 tokoe:valid" result="pass"/><test-case name="12069NISTXML-SV-IV-list-integer-length-3-4 tokoe:valid" result="pass"/><test-case name="12070NISTXML-SV-IV-list-integer-length-3-5 tokoe:valid" result="pass"/><test-case name="12071NISTSchema-SV-IV-list-integer-length-4 tokoe:valid" result="pass"/><test-case name="12072NISTXML-SV-IV-list-integer-length-4-1 tokoe:valid" result="pass"/><test-case name="12073NISTXML-SV-IV-list-integer-length-4-2 tokoe:valid" result="pass"/><test-case name="12074NISTXML-SV-IV-list-integer-length-4-3 tokoe:valid" result="pass"/><test-case name="12075NISTXML-SV-IV-list-integer-length-4-4 tokoe:valid" result="pass"/><test-case name="12076NISTXML-SV-IV-list-integer-length-4-5 tokoe:valid" result="pass"/><test-case name="12077NISTSchema-SV-IV-list-integer-length-5 tokoe:valid" result="pass"/><test-case name="12078NISTXML-SV-IV-list-integer-length-5-1 tokoe:valid" result="pass"/><test-case name="12079NISTXML-SV-IV-list-integer-length-5-2 tokoe:valid" result="pass"/><test-case name="12080NISTXML-SV-IV-list-integer-length-5-3 tokoe:valid" result="pass"/><test-case name="12081NISTXML-SV-IV-list-integer-length-5-4 tokoe:valid" result="pass"/><test-case name="12082NISTXML-SV-IV-list-integer-length-5-5 tokoe:valid" result="pass"/><test-case name="12083NISTSchema-SV-IV-list-integer-pattern-1 tokoe:valid" result="pass"/><test-case name="12084NISTXML-SV-IV-list-integer-pattern-1-1 tokoe:valid" result="pass"/><test-case name="12085NISTXML-SV-IV-list-integer-pattern-1-2 tokoe:valid" result="pass"/><test-case name="12086NISTXML-SV-IV-list-integer-pattern-1-3 tokoe:valid" result="pass"/><test-case name="12087NISTXML-SV-IV-list-integer-pattern-1-4 tokoe:valid" result="pass"/><test-case name="12088NISTXML-SV-IV-list-integer-pattern-1-5 tokoe:valid" result="pass"/><test-case name="12089NISTSchema-SV-IV-list-integer-pattern-2 tokoe:valid" result="pass"/><test-case name="12090NISTXML-SV-IV-list-integer-pattern-2-1 tokoe:valid" result="pass"/><test-case name="12091NISTXML-SV-IV-list-integer-pattern-2-2 tokoe:valid" result="pass"/><test-case name="12092NISTXML-SV-IV-list-integer-pattern-2-3 tokoe:valid" result="pass"/><test-case name="12093NISTXML-SV-IV-list-integer-pattern-2-4 tokoe:valid" result="pass"/><test-case name="12094NISTXML-SV-IV-list-integer-pattern-2-5 tokoe:valid" result="pass"/><test-case name="12095NISTSchema-SV-IV-list-integer-pattern-3 tokoe:valid" result="pass"/><test-case name="12096NISTXML-SV-IV-list-integer-pattern-3-1 tokoe:valid" result="pass"/><test-case name="12097NISTXML-SV-IV-list-integer-pattern-3-2 tokoe:valid" result="pass"/><test-case name="12098NISTXML-SV-IV-list-integer-pattern-3-3 tokoe:valid" result="pass"/><test-case name="12099NISTXML-SV-IV-list-integer-pattern-3-4 tokoe:valid" result="pass"/><test-case name="12100NISTXML-SV-IV-list-integer-pattern-3-5 tokoe:valid" result="pass"/><test-case name="12101NISTSchema-SV-IV-list-integer-pattern-4 tokoe:valid" result="pass"/><test-case name="12102NISTXML-SV-IV-list-integer-pattern-4-1 tokoe:valid" result="pass"/><test-case name="12103NISTXML-SV-IV-list-integer-pattern-4-2 tokoe:valid" result="pass"/><test-case name="12104NISTXML-SV-IV-list-integer-pattern-4-3 tokoe:valid" result="pass"/><test-case name="12105NISTXML-SV-IV-list-integer-pattern-4-4 tokoe:valid" result="pass"/><test-case name="12106NISTXML-SV-IV-list-integer-pattern-4-5 tokoe:valid" result="pass"/><test-case name="12107NISTSchema-SV-IV-list-integer-pattern-5 tokoe:valid" result="pass"/><test-case name="12108NISTXML-SV-IV-list-integer-pattern-5-1 tokoe:valid" result="pass"/><test-case name="12109NISTXML-SV-IV-list-integer-pattern-5-2 tokoe:valid" result="pass"/><test-case name="12110NISTXML-SV-IV-list-integer-pattern-5-3 tokoe:valid" result="pass"/><test-case name="12111NISTXML-SV-IV-list-integer-pattern-5-4 tokoe:valid" result="pass"/><test-case name="12112NISTXML-SV-IV-list-integer-pattern-5-5 tokoe:valid" result="pass"/><test-case name="12113NISTSchema-SV-IV-list-integer-enumeration-1 tokoe:valid" result="pass"/><test-case name="12114NISTXML-SV-IV-list-integer-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="12115NISTXML-SV-IV-list-integer-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="12116NISTXML-SV-IV-list-integer-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="12117NISTXML-SV-IV-list-integer-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="12118NISTXML-SV-IV-list-integer-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="12119NISTSchema-SV-IV-list-integer-enumeration-2 tokoe:valid" result="pass"/><test-case name="12120NISTXML-SV-IV-list-integer-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="12121NISTXML-SV-IV-list-integer-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="12122NISTXML-SV-IV-list-integer-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="12123NISTXML-SV-IV-list-integer-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="12124NISTXML-SV-IV-list-integer-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="12125NISTSchema-SV-IV-list-integer-enumeration-3 tokoe:valid" result="pass"/><test-case name="12126NISTXML-SV-IV-list-integer-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="12127NISTXML-SV-IV-list-integer-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="12128NISTXML-SV-IV-list-integer-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="12129NISTXML-SV-IV-list-integer-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="12130NISTXML-SV-IV-list-integer-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="12131NISTSchema-SV-IV-list-integer-enumeration-4 tokoe:valid" result="pass"/><test-case name="12132NISTXML-SV-IV-list-integer-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="12133NISTXML-SV-IV-list-integer-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="12134NISTXML-SV-IV-list-integer-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="12135NISTXML-SV-IV-list-integer-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="12136NISTXML-SV-IV-list-integer-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="12137NISTSchema-SV-IV-list-integer-enumeration-5 tokoe:valid" result="pass"/><test-case name="12138NISTXML-SV-IV-list-integer-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="12139NISTXML-SV-IV-list-integer-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="12140NISTXML-SV-IV-list-integer-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="12141NISTXML-SV-IV-list-integer-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="12142NISTXML-SV-IV-list-integer-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="12143NISTSchema-SV-IV-list-integer-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="12144NISTXML-SV-IV-list-integer-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="12145NISTXML-SV-IV-list-integer-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="12146NISTXML-SV-IV-list-integer-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="12147NISTXML-SV-IV-list-integer-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="12148NISTXML-SV-IV-list-integer-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="12149NISTSchema-SV-IV-list-nonPositiveInteger-maxLength-1 tokoe:valid" result="pass"/><test-case name="12150NISTXML-SV-IV-list-nonPositiveInteger-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="12151NISTXML-SV-IV-list-nonPositiveInteger-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="12152NISTXML-SV-IV-list-nonPositiveInteger-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="12153NISTXML-SV-IV-list-nonPositiveInteger-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="12154NISTXML-SV-IV-list-nonPositiveInteger-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="12155NISTSchema-SV-IV-list-nonPositiveInteger-maxLength-2 tokoe:valid" result="pass"/><test-case name="12156NISTXML-SV-IV-list-nonPositiveInteger-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="12157NISTXML-SV-IV-list-nonPositiveInteger-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="12158NISTXML-SV-IV-list-nonPositiveInteger-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="12159NISTXML-SV-IV-list-nonPositiveInteger-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="12160NISTXML-SV-IV-list-nonPositiveInteger-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="12161NISTSchema-SV-IV-list-nonPositiveInteger-maxLength-3 tokoe:valid" result="pass"/><test-case name="12162NISTXML-SV-IV-list-nonPositiveInteger-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="12163NISTXML-SV-IV-list-nonPositiveInteger-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="12164NISTXML-SV-IV-list-nonPositiveInteger-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="12165NISTXML-SV-IV-list-nonPositiveInteger-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="12166NISTXML-SV-IV-list-nonPositiveInteger-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="12167NISTSchema-SV-IV-list-nonPositiveInteger-maxLength-4 tokoe:valid" result="pass"/><test-case name="12168NISTXML-SV-IV-list-nonPositiveInteger-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="12169NISTXML-SV-IV-list-nonPositiveInteger-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="12170NISTXML-SV-IV-list-nonPositiveInteger-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="12171NISTXML-SV-IV-list-nonPositiveInteger-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="12172NISTXML-SV-IV-list-nonPositiveInteger-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="12173NISTSchema-SV-IV-list-nonPositiveInteger-maxLength-5 tokoe:valid" result="pass"/><test-case name="12174NISTXML-SV-IV-list-nonPositiveInteger-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="12175NISTXML-SV-IV-list-nonPositiveInteger-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="12176NISTXML-SV-IV-list-nonPositiveInteger-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="12177NISTXML-SV-IV-list-nonPositiveInteger-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="12178NISTXML-SV-IV-list-nonPositiveInteger-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="12179NISTSchema-SV-IV-list-nonPositiveInteger-minLength-1 tokoe:valid" result="pass"/><test-case name="12180NISTXML-SV-IV-list-nonPositiveInteger-minLength-1-1 tokoe:valid" result="pass"/><test-case name="12181NISTXML-SV-IV-list-nonPositiveInteger-minLength-1-2 tokoe:valid" result="pass"/><test-case name="12182NISTXML-SV-IV-list-nonPositiveInteger-minLength-1-3 tokoe:valid" result="pass"/><test-case name="12183NISTXML-SV-IV-list-nonPositiveInteger-minLength-1-4 tokoe:valid" result="pass"/><test-case name="12184NISTXML-SV-IV-list-nonPositiveInteger-minLength-1-5 tokoe:valid" result="pass"/><test-case name="12185NISTSchema-SV-IV-list-nonPositiveInteger-minLength-2 tokoe:valid" result="pass"/><test-case name="12186NISTXML-SV-IV-list-nonPositiveInteger-minLength-2-1 tokoe:valid" result="pass"/><test-case name="12187NISTXML-SV-IV-list-nonPositiveInteger-minLength-2-2 tokoe:valid" result="pass"/><test-case name="12188NISTXML-SV-IV-list-nonPositiveInteger-minLength-2-3 tokoe:valid" result="pass"/><test-case name="12189NISTXML-SV-IV-list-nonPositiveInteger-minLength-2-4 tokoe:valid" result="pass"/><test-case name="12190NISTXML-SV-IV-list-nonPositiveInteger-minLength-2-5 tokoe:valid" result="pass"/><test-case name="12191NISTSchema-SV-IV-list-nonPositiveInteger-minLength-3 tokoe:valid" result="pass"/><test-case name="12192NISTXML-SV-IV-list-nonPositiveInteger-minLength-3-1 tokoe:valid" result="pass"/><test-case name="12193NISTXML-SV-IV-list-nonPositiveInteger-minLength-3-2 tokoe:valid" result="pass"/><test-case name="12194NISTXML-SV-IV-list-nonPositiveInteger-minLength-3-3 tokoe:valid" result="pass"/><test-case name="12195NISTXML-SV-IV-list-nonPositiveInteger-minLength-3-4 tokoe:valid" result="pass"/><test-case name="12196NISTXML-SV-IV-list-nonPositiveInteger-minLength-3-5 tokoe:valid" result="pass"/><test-case name="12197NISTSchema-SV-IV-list-nonPositiveInteger-minLength-4 tokoe:valid" result="pass"/><test-case name="12198NISTXML-SV-IV-list-nonPositiveInteger-minLength-4-1 tokoe:valid" result="pass"/><test-case name="12199NISTXML-SV-IV-list-nonPositiveInteger-minLength-4-2 tokoe:valid" result="pass"/><test-case name="12200NISTXML-SV-IV-list-nonPositiveInteger-minLength-4-3 tokoe:valid" result="pass"/><test-case name="12201NISTXML-SV-IV-list-nonPositiveInteger-minLength-4-4 tokoe:valid" result="pass"/><test-case name="12202NISTXML-SV-IV-list-nonPositiveInteger-minLength-4-5 tokoe:valid" result="pass"/><test-case name="12203NISTSchema-SV-IV-list-nonPositiveInteger-minLength-5 tokoe:valid" result="pass"/><test-case name="12204NISTXML-SV-IV-list-nonPositiveInteger-minLength-5-1 tokoe:valid" result="pass"/><test-case name="12205NISTXML-SV-IV-list-nonPositiveInteger-minLength-5-2 tokoe:valid" result="pass"/><test-case name="12206NISTXML-SV-IV-list-nonPositiveInteger-minLength-5-3 tokoe:valid" result="pass"/><test-case name="12207NISTXML-SV-IV-list-nonPositiveInteger-minLength-5-4 tokoe:valid" result="pass"/><test-case name="12208NISTXML-SV-IV-list-nonPositiveInteger-minLength-5-5 tokoe:valid" result="pass"/><test-case name="12209NISTSchema-SV-IV-list-nonPositiveInteger-length-1 tokoe:valid" result="pass"/><test-case name="12210NISTXML-SV-IV-list-nonPositiveInteger-length-1-1 tokoe:valid" result="pass"/><test-case name="12211NISTXML-SV-IV-list-nonPositiveInteger-length-1-2 tokoe:valid" result="pass"/><test-case name="12212NISTXML-SV-IV-list-nonPositiveInteger-length-1-3 tokoe:valid" result="pass"/><test-case name="12213NISTXML-SV-IV-list-nonPositiveInteger-length-1-4 tokoe:valid" result="pass"/><test-case name="12214NISTXML-SV-IV-list-nonPositiveInteger-length-1-5 tokoe:valid" result="pass"/><test-case name="12215NISTSchema-SV-IV-list-nonPositiveInteger-length-2 tokoe:valid" result="pass"/><test-case name="12216NISTXML-SV-IV-list-nonPositiveInteger-length-2-1 tokoe:valid" result="pass"/><test-case name="12217NISTXML-SV-IV-list-nonPositiveInteger-length-2-2 tokoe:valid" result="pass"/><test-case name="12218NISTXML-SV-IV-list-nonPositiveInteger-length-2-3 tokoe:valid" result="pass"/><test-case name="12219NISTXML-SV-IV-list-nonPositiveInteger-length-2-4 tokoe:valid" result="pass"/><test-case name="12220NISTXML-SV-IV-list-nonPositiveInteger-length-2-5 tokoe:valid" result="pass"/><test-case name="12221NISTSchema-SV-IV-list-nonPositiveInteger-length-3 tokoe:valid" result="pass"/><test-case name="12222NISTXML-SV-IV-list-nonPositiveInteger-length-3-1 tokoe:valid" result="pass"/><test-case name="12223NISTXML-SV-IV-list-nonPositiveInteger-length-3-2 tokoe:valid" result="pass"/><test-case name="12224NISTXML-SV-IV-list-nonPositiveInteger-length-3-3 tokoe:valid" result="pass"/><test-case name="12225NISTXML-SV-IV-list-nonPositiveInteger-length-3-4 tokoe:valid" result="pass"/><test-case name="12226NISTXML-SV-IV-list-nonPositiveInteger-length-3-5 tokoe:valid" result="pass"/><test-case name="12227NISTSchema-SV-IV-list-nonPositiveInteger-length-4 tokoe:valid" result="pass"/><test-case name="12228NISTXML-SV-IV-list-nonPositiveInteger-length-4-1 tokoe:valid" result="pass"/><test-case name="12229NISTXML-SV-IV-list-nonPositiveInteger-length-4-2 tokoe:valid" result="pass"/><test-case name="12230NISTXML-SV-IV-list-nonPositiveInteger-length-4-3 tokoe:valid" result="pass"/><test-case name="12231NISTXML-SV-IV-list-nonPositiveInteger-length-4-4 tokoe:valid" result="pass"/><test-case name="12232NISTXML-SV-IV-list-nonPositiveInteger-length-4-5 tokoe:valid" result="pass"/><test-case name="12233NISTSchema-SV-IV-list-nonPositiveInteger-length-5 tokoe:valid" result="pass"/><test-case name="12234NISTXML-SV-IV-list-nonPositiveInteger-length-5-1 tokoe:valid" result="pass"/><test-case name="12235NISTXML-SV-IV-list-nonPositiveInteger-length-5-2 tokoe:valid" result="pass"/><test-case name="12236NISTXML-SV-IV-list-nonPositiveInteger-length-5-3 tokoe:valid" result="pass"/><test-case name="12237NISTXML-SV-IV-list-nonPositiveInteger-length-5-4 tokoe:valid" result="pass"/><test-case name="12238NISTXML-SV-IV-list-nonPositiveInteger-length-5-5 tokoe:valid" result="pass"/><test-case name="12239NISTSchema-SV-IV-list-nonPositiveInteger-pattern-1 tokoe:valid" result="pass"/><test-case name="12240NISTXML-SV-IV-list-nonPositiveInteger-pattern-1-1 tokoe:valid" result="pass"/><test-case name="12241NISTXML-SV-IV-list-nonPositiveInteger-pattern-1-2 tokoe:valid" result="pass"/><test-case name="12242NISTXML-SV-IV-list-nonPositiveInteger-pattern-1-3 tokoe:valid" result="pass"/><test-case name="12243NISTXML-SV-IV-list-nonPositiveInteger-pattern-1-4 tokoe:valid" result="pass"/><test-case name="12244NISTXML-SV-IV-list-nonPositiveInteger-pattern-1-5 tokoe:valid" result="pass"/><test-case name="12245NISTSchema-SV-IV-list-nonPositiveInteger-pattern-2 tokoe:valid" result="pass"/><test-case name="12246NISTXML-SV-IV-list-nonPositiveInteger-pattern-2-1 tokoe:valid" result="pass"/><test-case name="12247NISTXML-SV-IV-list-nonPositiveInteger-pattern-2-2 tokoe:valid" result="pass"/><test-case name="12248NISTXML-SV-IV-list-nonPositiveInteger-pattern-2-3 tokoe:valid" result="pass"/><test-case name="12249NISTXML-SV-IV-list-nonPositiveInteger-pattern-2-4 tokoe:valid" result="pass"/><test-case name="12250NISTXML-SV-IV-list-nonPositiveInteger-pattern-2-5 tokoe:valid" result="pass"/><test-case name="12251NISTSchema-SV-IV-list-nonPositiveInteger-pattern-3 tokoe:valid" result="pass"/><test-case name="12252NISTXML-SV-IV-list-nonPositiveInteger-pattern-3-1 tokoe:valid" result="pass"/><test-case name="12253NISTXML-SV-IV-list-nonPositiveInteger-pattern-3-2 tokoe:valid" result="pass"/><test-case name="12254NISTXML-SV-IV-list-nonPositiveInteger-pattern-3-3 tokoe:valid" result="pass"/><test-case name="12255NISTXML-SV-IV-list-nonPositiveInteger-pattern-3-4 tokoe:valid" result="pass"/><test-case name="12256NISTXML-SV-IV-list-nonPositiveInteger-pattern-3-5 tokoe:valid" result="pass"/><test-case name="12257NISTSchema-SV-IV-list-nonPositiveInteger-pattern-4 tokoe:valid" result="pass"/><test-case name="12258NISTXML-SV-IV-list-nonPositiveInteger-pattern-4-1 tokoe:valid" result="pass"/><test-case name="12259NISTXML-SV-IV-list-nonPositiveInteger-pattern-4-2 tokoe:valid" result="pass"/><test-case name="12260NISTXML-SV-IV-list-nonPositiveInteger-pattern-4-3 tokoe:valid" result="pass"/><test-case name="12261NISTXML-SV-IV-list-nonPositiveInteger-pattern-4-4 tokoe:valid" result="pass"/><test-case name="12262NISTXML-SV-IV-list-nonPositiveInteger-pattern-4-5 tokoe:valid" result="pass"/><test-case name="12263NISTSchema-SV-IV-list-nonPositiveInteger-pattern-5 tokoe:valid" result="pass"/><test-case name="12264NISTXML-SV-IV-list-nonPositiveInteger-pattern-5-1 tokoe:valid" result="pass"/><test-case name="12265NISTXML-SV-IV-list-nonPositiveInteger-pattern-5-2 tokoe:valid" result="pass"/><test-case name="12266NISTXML-SV-IV-list-nonPositiveInteger-pattern-5-3 tokoe:valid" result="pass"/><test-case name="12267NISTXML-SV-IV-list-nonPositiveInteger-pattern-5-4 tokoe:valid" result="pass"/><test-case name="12268NISTXML-SV-IV-list-nonPositiveInteger-pattern-5-5 tokoe:valid" result="pass"/><test-case name="12269NISTSchema-SV-IV-list-nonPositiveInteger-enumeration-1 tokoe:valid" result="pass"/><test-case name="12270NISTXML-SV-IV-list-nonPositiveInteger-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="12271NISTXML-SV-IV-list-nonPositiveInteger-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="12272NISTXML-SV-IV-list-nonPositiveInteger-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="12273NISTXML-SV-IV-list-nonPositiveInteger-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="12274NISTXML-SV-IV-list-nonPositiveInteger-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="12275NISTSchema-SV-IV-list-nonPositiveInteger-enumeration-2 tokoe:valid" result="pass"/><test-case name="12276NISTXML-SV-IV-list-nonPositiveInteger-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="12277NISTXML-SV-IV-list-nonPositiveInteger-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="12278NISTXML-SV-IV-list-nonPositiveInteger-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="12279NISTXML-SV-IV-list-nonPositiveInteger-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="12280NISTXML-SV-IV-list-nonPositiveInteger-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="12281NISTSchema-SV-IV-list-nonPositiveInteger-enumeration-3 tokoe:valid" result="pass"/><test-case name="12282NISTXML-SV-IV-list-nonPositiveInteger-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="12283NISTXML-SV-IV-list-nonPositiveInteger-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="12284NISTXML-SV-IV-list-nonPositiveInteger-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="12285NISTXML-SV-IV-list-nonPositiveInteger-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="12286NISTXML-SV-IV-list-nonPositiveInteger-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="12287NISTSchema-SV-IV-list-nonPositiveInteger-enumeration-4 tokoe:valid" result="pass"/><test-case name="12288NISTXML-SV-IV-list-nonPositiveInteger-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="12289NISTXML-SV-IV-list-nonPositiveInteger-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="12290NISTXML-SV-IV-list-nonPositiveInteger-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="12291NISTXML-SV-IV-list-nonPositiveInteger-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="12292NISTXML-SV-IV-list-nonPositiveInteger-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="12293NISTSchema-SV-IV-list-nonPositiveInteger-enumeration-5 tokoe:valid" result="pass"/><test-case name="12294NISTXML-SV-IV-list-nonPositiveInteger-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="12295NISTXML-SV-IV-list-nonPositiveInteger-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="12296NISTXML-SV-IV-list-nonPositiveInteger-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="12297NISTXML-SV-IV-list-nonPositiveInteger-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="12298NISTXML-SV-IV-list-nonPositiveInteger-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="12299NISTSchema-SV-IV-list-nonPositiveInteger-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="12300NISTXML-SV-IV-list-nonPositiveInteger-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="12301NISTXML-SV-IV-list-nonPositiveInteger-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="12302NISTXML-SV-IV-list-nonPositiveInteger-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="12303NISTXML-SV-IV-list-nonPositiveInteger-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="12304NISTXML-SV-IV-list-nonPositiveInteger-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="12305NISTSchema-SV-IV-list-negativeInteger-maxLength-1 tokoe:valid" result="pass"/><test-case name="12306NISTXML-SV-IV-list-negativeInteger-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="12307NISTXML-SV-IV-list-negativeInteger-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="12308NISTXML-SV-IV-list-negativeInteger-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="12309NISTXML-SV-IV-list-negativeInteger-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="12310NISTXML-SV-IV-list-negativeInteger-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="12311NISTSchema-SV-IV-list-negativeInteger-maxLength-2 tokoe:valid" result="pass"/><test-case name="12312NISTXML-SV-IV-list-negativeInteger-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="12313NISTXML-SV-IV-list-negativeInteger-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="12314NISTXML-SV-IV-list-negativeInteger-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="12315NISTXML-SV-IV-list-negativeInteger-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="12316NISTXML-SV-IV-list-negativeInteger-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="12317NISTSchema-SV-IV-list-negativeInteger-maxLength-3 tokoe:valid" result="pass"/><test-case name="12318NISTXML-SV-IV-list-negativeInteger-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="12319NISTXML-SV-IV-list-negativeInteger-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="12320NISTXML-SV-IV-list-negativeInteger-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="12321NISTXML-SV-IV-list-negativeInteger-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="12322NISTXML-SV-IV-list-negativeInteger-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="12323NISTSchema-SV-IV-list-negativeInteger-maxLength-4 tokoe:valid" result="pass"/><test-case name="12324NISTXML-SV-IV-list-negativeInteger-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="12325NISTXML-SV-IV-list-negativeInteger-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="12326NISTXML-SV-IV-list-negativeInteger-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="12327NISTXML-SV-IV-list-negativeInteger-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="12328NISTXML-SV-IV-list-negativeInteger-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="12329NISTSchema-SV-IV-list-negativeInteger-maxLength-5 tokoe:valid" result="pass"/><test-case name="12330NISTXML-SV-IV-list-negativeInteger-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="12331NISTXML-SV-IV-list-negativeInteger-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="12332NISTXML-SV-IV-list-negativeInteger-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="12333NISTXML-SV-IV-list-negativeInteger-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="12334NISTXML-SV-IV-list-negativeInteger-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="12335NISTSchema-SV-IV-list-negativeInteger-minLength-1 tokoe:valid" result="pass"/><test-case name="12336NISTXML-SV-IV-list-negativeInteger-minLength-1-1 tokoe:valid" result="pass"/><test-case name="12337NISTXML-SV-IV-list-negativeInteger-minLength-1-2 tokoe:valid" result="pass"/><test-case name="12338NISTXML-SV-IV-list-negativeInteger-minLength-1-3 tokoe:valid" result="pass"/><test-case name="12339NISTXML-SV-IV-list-negativeInteger-minLength-1-4 tokoe:valid" result="pass"/><test-case name="12340NISTXML-SV-IV-list-negativeInteger-minLength-1-5 tokoe:valid" result="pass"/><test-case name="12341NISTSchema-SV-IV-list-negativeInteger-minLength-2 tokoe:valid" result="pass"/><test-case name="12342NISTXML-SV-IV-list-negativeInteger-minLength-2-1 tokoe:valid" result="pass"/><test-case name="12343NISTXML-SV-IV-list-negativeInteger-minLength-2-2 tokoe:valid" result="pass"/><test-case name="12344NISTXML-SV-IV-list-negativeInteger-minLength-2-3 tokoe:valid" result="pass"/><test-case name="12345NISTXML-SV-IV-list-negativeInteger-minLength-2-4 tokoe:valid" result="pass"/><test-case name="12346NISTXML-SV-IV-list-negativeInteger-minLength-2-5 tokoe:valid" result="pass"/><test-case name="12347NISTSchema-SV-IV-list-negativeInteger-minLength-3 tokoe:valid" result="pass"/><test-case name="12348NISTXML-SV-IV-list-negativeInteger-minLength-3-1 tokoe:valid" result="pass"/><test-case name="12349NISTXML-SV-IV-list-negativeInteger-minLength-3-2 tokoe:valid" result="pass"/><test-case name="12350NISTXML-SV-IV-list-negativeInteger-minLength-3-3 tokoe:valid" result="pass"/><test-case name="12351NISTXML-SV-IV-list-negativeInteger-minLength-3-4 tokoe:valid" result="pass"/><test-case name="12352NISTXML-SV-IV-list-negativeInteger-minLength-3-5 tokoe:valid" result="pass"/><test-case name="12353NISTSchema-SV-IV-list-negativeInteger-minLength-4 tokoe:valid" result="pass"/><test-case name="12354NISTXML-SV-IV-list-negativeInteger-minLength-4-1 tokoe:valid" result="pass"/><test-case name="12355NISTXML-SV-IV-list-negativeInteger-minLength-4-2 tokoe:valid" result="pass"/><test-case name="12356NISTXML-SV-IV-list-negativeInteger-minLength-4-3 tokoe:valid" result="pass"/><test-case name="12357NISTXML-SV-IV-list-negativeInteger-minLength-4-4 tokoe:valid" result="pass"/><test-case name="12358NISTXML-SV-IV-list-negativeInteger-minLength-4-5 tokoe:valid" result="pass"/><test-case name="12359NISTSchema-SV-IV-list-negativeInteger-minLength-5 tokoe:valid" result="pass"/><test-case name="12360NISTXML-SV-IV-list-negativeInteger-minLength-5-1 tokoe:valid" result="pass"/><test-case name="12361NISTXML-SV-IV-list-negativeInteger-minLength-5-2 tokoe:valid" result="pass"/><test-case name="12362NISTXML-SV-IV-list-negativeInteger-minLength-5-3 tokoe:valid" result="pass"/><test-case name="12363NISTXML-SV-IV-list-negativeInteger-minLength-5-4 tokoe:valid" result="pass"/><test-case name="12364NISTXML-SV-IV-list-negativeInteger-minLength-5-5 tokoe:valid" result="pass"/><test-case name="12365NISTSchema-SV-IV-list-negativeInteger-length-1 tokoe:valid" result="pass"/><test-case name="12366NISTXML-SV-IV-list-negativeInteger-length-1-1 tokoe:valid" result="pass"/><test-case name="12367NISTXML-SV-IV-list-negativeInteger-length-1-2 tokoe:valid" result="pass"/><test-case name="12368NISTXML-SV-IV-list-negativeInteger-length-1-3 tokoe:valid" result="pass"/><test-case name="12369NISTXML-SV-IV-list-negativeInteger-length-1-4 tokoe:valid" result="pass"/><test-case name="12370NISTXML-SV-IV-list-negativeInteger-length-1-5 tokoe:valid" result="pass"/><test-case name="12371NISTSchema-SV-IV-list-negativeInteger-length-2 tokoe:valid" result="pass"/><test-case name="12372NISTXML-SV-IV-list-negativeInteger-length-2-1 tokoe:valid" result="pass"/><test-case name="12373NISTXML-SV-IV-list-negativeInteger-length-2-2 tokoe:valid" result="pass"/><test-case name="12374NISTXML-SV-IV-list-negativeInteger-length-2-3 tokoe:valid" result="pass"/><test-case name="12375NISTXML-SV-IV-list-negativeInteger-length-2-4 tokoe:valid" result="pass"/><test-case name="12376NISTXML-SV-IV-list-negativeInteger-length-2-5 tokoe:valid" result="pass"/><test-case name="12377NISTSchema-SV-IV-list-negativeInteger-length-3 tokoe:valid" result="pass"/><test-case name="12378NISTXML-SV-IV-list-negativeInteger-length-3-1 tokoe:valid" result="pass"/><test-case name="12379NISTXML-SV-IV-list-negativeInteger-length-3-2 tokoe:valid" result="pass"/><test-case name="12380NISTXML-SV-IV-list-negativeInteger-length-3-3 tokoe:valid" result="pass"/><test-case name="12381NISTXML-SV-IV-list-negativeInteger-length-3-4 tokoe:valid" result="pass"/><test-case name="12382NISTXML-SV-IV-list-negativeInteger-length-3-5 tokoe:valid" result="pass"/><test-case name="12383NISTSchema-SV-IV-list-negativeInteger-length-4 tokoe:valid" result="pass"/><test-case name="12384NISTXML-SV-IV-list-negativeInteger-length-4-1 tokoe:valid" result="pass"/><test-case name="12385NISTXML-SV-IV-list-negativeInteger-length-4-2 tokoe:valid" result="pass"/><test-case name="12386NISTXML-SV-IV-list-negativeInteger-length-4-3 tokoe:valid" result="pass"/><test-case name="12387NISTXML-SV-IV-list-negativeInteger-length-4-4 tokoe:valid" result="pass"/><test-case name="12388NISTXML-SV-IV-list-negativeInteger-length-4-5 tokoe:valid" result="pass"/><test-case name="12389NISTSchema-SV-IV-list-negativeInteger-length-5 tokoe:valid" result="pass"/><test-case name="12390NISTXML-SV-IV-list-negativeInteger-length-5-1 tokoe:valid" result="pass"/><test-case name="12391NISTXML-SV-IV-list-negativeInteger-length-5-2 tokoe:valid" result="pass"/><test-case name="12392NISTXML-SV-IV-list-negativeInteger-length-5-3 tokoe:valid" result="pass"/><test-case name="12393NISTXML-SV-IV-list-negativeInteger-length-5-4 tokoe:valid" result="pass"/><test-case name="12394NISTXML-SV-IV-list-negativeInteger-length-5-5 tokoe:valid" result="pass"/><test-case name="12395NISTSchema-SV-IV-list-negativeInteger-pattern-1 tokoe:valid" result="pass"/><test-case name="12396NISTXML-SV-IV-list-negativeInteger-pattern-1-1 tokoe:valid" result="pass"/><test-case name="12397NISTXML-SV-IV-list-negativeInteger-pattern-1-2 tokoe:valid" result="pass"/><test-case name="12398NISTXML-SV-IV-list-negativeInteger-pattern-1-3 tokoe:valid" result="pass"/><test-case name="12399NISTXML-SV-IV-list-negativeInteger-pattern-1-4 tokoe:valid" result="pass"/><test-case name="12400NISTXML-SV-IV-list-negativeInteger-pattern-1-5 tokoe:valid" result="pass"/><test-case name="12401NISTSchema-SV-IV-list-negativeInteger-pattern-2 tokoe:valid" result="pass"/><test-case name="12402NISTXML-SV-IV-list-negativeInteger-pattern-2-1 tokoe:valid" result="pass"/><test-case name="12403NISTXML-SV-IV-list-negativeInteger-pattern-2-2 tokoe:valid" result="pass"/><test-case name="12404NISTXML-SV-IV-list-negativeInteger-pattern-2-3 tokoe:valid" result="pass"/><test-case name="12405NISTXML-SV-IV-list-negativeInteger-pattern-2-4 tokoe:valid" result="pass"/><test-case name="12406NISTXML-SV-IV-list-negativeInteger-pattern-2-5 tokoe:valid" result="pass"/><test-case name="12407NISTSchema-SV-IV-list-negativeInteger-pattern-3 tokoe:valid" result="pass"/><test-case name="12408NISTXML-SV-IV-list-negativeInteger-pattern-3-1 tokoe:valid" result="pass"/><test-case name="12409NISTXML-SV-IV-list-negativeInteger-pattern-3-2 tokoe:valid" result="pass"/><test-case name="12410NISTXML-SV-IV-list-negativeInteger-pattern-3-3 tokoe:valid" result="pass"/><test-case name="12411NISTXML-SV-IV-list-negativeInteger-pattern-3-4 tokoe:valid" result="pass"/><test-case name="12412NISTXML-SV-IV-list-negativeInteger-pattern-3-5 tokoe:valid" result="pass"/><test-case name="12413NISTSchema-SV-IV-list-negativeInteger-pattern-4 tokoe:valid" result="pass"/><test-case name="12414NISTXML-SV-IV-list-negativeInteger-pattern-4-1 tokoe:valid" result="pass"/><test-case name="12415NISTXML-SV-IV-list-negativeInteger-pattern-4-2 tokoe:valid" result="pass"/><test-case name="12416NISTXML-SV-IV-list-negativeInteger-pattern-4-3 tokoe:valid" result="pass"/><test-case name="12417NISTXML-SV-IV-list-negativeInteger-pattern-4-4 tokoe:valid" result="pass"/><test-case name="12418NISTXML-SV-IV-list-negativeInteger-pattern-4-5 tokoe:valid" result="pass"/><test-case name="12419NISTSchema-SV-IV-list-negativeInteger-pattern-5 tokoe:valid" result="pass"/><test-case name="12420NISTXML-SV-IV-list-negativeInteger-pattern-5-1 tokoe:valid" result="pass"/><test-case name="12421NISTXML-SV-IV-list-negativeInteger-pattern-5-2 tokoe:valid" result="pass"/><test-case name="12422NISTXML-SV-IV-list-negativeInteger-pattern-5-3 tokoe:valid" result="pass"/><test-case name="12423NISTXML-SV-IV-list-negativeInteger-pattern-5-4 tokoe:valid" result="pass"/><test-case name="12424NISTXML-SV-IV-list-negativeInteger-pattern-5-5 tokoe:valid" result="pass"/><test-case name="12425NISTSchema-SV-IV-list-negativeInteger-enumeration-1 tokoe:valid" result="pass"/><test-case name="12426NISTXML-SV-IV-list-negativeInteger-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="12427NISTXML-SV-IV-list-negativeInteger-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="12428NISTXML-SV-IV-list-negativeInteger-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="12429NISTXML-SV-IV-list-negativeInteger-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="12430NISTXML-SV-IV-list-negativeInteger-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="12431NISTSchema-SV-IV-list-negativeInteger-enumeration-2 tokoe:valid" result="pass"/><test-case name="12432NISTXML-SV-IV-list-negativeInteger-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="12433NISTXML-SV-IV-list-negativeInteger-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="12434NISTXML-SV-IV-list-negativeInteger-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="12435NISTXML-SV-IV-list-negativeInteger-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="12436NISTXML-SV-IV-list-negativeInteger-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="12437NISTSchema-SV-IV-list-negativeInteger-enumeration-3 tokoe:valid" result="pass"/><test-case name="12438NISTXML-SV-IV-list-negativeInteger-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="12439NISTXML-SV-IV-list-negativeInteger-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="12440NISTXML-SV-IV-list-negativeInteger-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="12441NISTXML-SV-IV-list-negativeInteger-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="12442NISTXML-SV-IV-list-negativeInteger-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="12443NISTSchema-SV-IV-list-negativeInteger-enumeration-4 tokoe:valid" result="pass"/><test-case name="12444NISTXML-SV-IV-list-negativeInteger-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="12445NISTXML-SV-IV-list-negativeInteger-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="12446NISTXML-SV-IV-list-negativeInteger-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="12447NISTXML-SV-IV-list-negativeInteger-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="12448NISTXML-SV-IV-list-negativeInteger-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="12449NISTSchema-SV-IV-list-negativeInteger-enumeration-5 tokoe:valid" result="pass"/><test-case name="12450NISTXML-SV-IV-list-negativeInteger-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="12451NISTXML-SV-IV-list-negativeInteger-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="12452NISTXML-SV-IV-list-negativeInteger-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="12453NISTXML-SV-IV-list-negativeInteger-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="12454NISTXML-SV-IV-list-negativeInteger-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="12455NISTSchema-SV-IV-list-negativeInteger-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="12456NISTXML-SV-IV-list-negativeInteger-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="12457NISTXML-SV-IV-list-negativeInteger-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="12458NISTXML-SV-IV-list-negativeInteger-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="12459NISTXML-SV-IV-list-negativeInteger-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="12460NISTXML-SV-IV-list-negativeInteger-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="12461NISTSchema-SV-IV-list-long-maxLength-1 tokoe:valid" result="pass"/><test-case name="12462NISTXML-SV-IV-list-long-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="12463NISTXML-SV-IV-list-long-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="12464NISTXML-SV-IV-list-long-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="12465NISTXML-SV-IV-list-long-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="12466NISTXML-SV-IV-list-long-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="12467NISTSchema-SV-IV-list-long-maxLength-2 tokoe:valid" result="pass"/><test-case name="12468NISTXML-SV-IV-list-long-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="12469NISTXML-SV-IV-list-long-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="12470NISTXML-SV-IV-list-long-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="12471NISTXML-SV-IV-list-long-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="12472NISTXML-SV-IV-list-long-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="12473NISTSchema-SV-IV-list-long-maxLength-3 tokoe:valid" result="pass"/><test-case name="12474NISTXML-SV-IV-list-long-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="12475NISTXML-SV-IV-list-long-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="12476NISTXML-SV-IV-list-long-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="12477NISTXML-SV-IV-list-long-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="12478NISTXML-SV-IV-list-long-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="12479NISTSchema-SV-IV-list-long-maxLength-4 tokoe:valid" result="pass"/><test-case name="12480NISTXML-SV-IV-list-long-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="12481NISTXML-SV-IV-list-long-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="12482NISTXML-SV-IV-list-long-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="12483NISTXML-SV-IV-list-long-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="12484NISTXML-SV-IV-list-long-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="12485NISTSchema-SV-IV-list-long-maxLength-5 tokoe:valid" result="pass"/><test-case name="12486NISTXML-SV-IV-list-long-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="12487NISTXML-SV-IV-list-long-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="12488NISTXML-SV-IV-list-long-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="12489NISTXML-SV-IV-list-long-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="12490NISTXML-SV-IV-list-long-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="12491NISTSchema-SV-IV-list-long-minLength-1 tokoe:valid" result="pass"/><test-case name="12492NISTXML-SV-IV-list-long-minLength-1-1 tokoe:valid" result="pass"/><test-case name="12493NISTXML-SV-IV-list-long-minLength-1-2 tokoe:valid" result="pass"/><test-case name="12494NISTXML-SV-IV-list-long-minLength-1-3 tokoe:valid" result="pass"/><test-case name="12495NISTXML-SV-IV-list-long-minLength-1-4 tokoe:valid" result="pass"/><test-case name="12496NISTXML-SV-IV-list-long-minLength-1-5 tokoe:valid" result="pass"/><test-case name="12497NISTSchema-SV-IV-list-long-minLength-2 tokoe:valid" result="pass"/><test-case name="12498NISTXML-SV-IV-list-long-minLength-2-1 tokoe:valid" result="pass"/><test-case name="12499NISTXML-SV-IV-list-long-minLength-2-2 tokoe:valid" result="pass"/><test-case name="12500NISTXML-SV-IV-list-long-minLength-2-3 tokoe:valid" result="pass"/><test-case name="12501NISTXML-SV-IV-list-long-minLength-2-4 tokoe:valid" result="pass"/><test-case name="12502NISTXML-SV-IV-list-long-minLength-2-5 tokoe:valid" result="pass"/><test-case name="12503NISTSchema-SV-IV-list-long-minLength-3 tokoe:valid" result="pass"/><test-case name="12504NISTXML-SV-IV-list-long-minLength-3-1 tokoe:valid" result="pass"/><test-case name="12505NISTXML-SV-IV-list-long-minLength-3-2 tokoe:valid" result="pass"/><test-case name="12506NISTXML-SV-IV-list-long-minLength-3-3 tokoe:valid" result="pass"/><test-case name="12507NISTXML-SV-IV-list-long-minLength-3-4 tokoe:valid" result="pass"/><test-case name="12508NISTXML-SV-IV-list-long-minLength-3-5 tokoe:valid" result="pass"/><test-case name="12509NISTSchema-SV-IV-list-long-minLength-4 tokoe:valid" result="pass"/><test-case name="12510NISTXML-SV-IV-list-long-minLength-4-1 tokoe:valid" result="pass"/><test-case name="12511NISTXML-SV-IV-list-long-minLength-4-2 tokoe:valid" result="pass"/><test-case name="12512NISTXML-SV-IV-list-long-minLength-4-3 tokoe:valid" result="pass"/><test-case name="12513NISTXML-SV-IV-list-long-minLength-4-4 tokoe:valid" result="pass"/><test-case name="12514NISTXML-SV-IV-list-long-minLength-4-5 tokoe:valid" result="pass"/><test-case name="12515NISTSchema-SV-IV-list-long-minLength-5 tokoe:valid" result="pass"/><test-case name="12516NISTXML-SV-IV-list-long-minLength-5-1 tokoe:valid" result="pass"/><test-case name="12517NISTXML-SV-IV-list-long-minLength-5-2 tokoe:valid" result="pass"/><test-case name="12518NISTXML-SV-IV-list-long-minLength-5-3 tokoe:valid" result="pass"/><test-case name="12519NISTXML-SV-IV-list-long-minLength-5-4 tokoe:valid" result="pass"/><test-case name="12520NISTXML-SV-IV-list-long-minLength-5-5 tokoe:valid" result="pass"/><test-case name="12521NISTSchema-SV-IV-list-long-length-1 tokoe:valid" result="pass"/><test-case name="12522NISTXML-SV-IV-list-long-length-1-1 tokoe:valid" result="pass"/><test-case name="12523NISTXML-SV-IV-list-long-length-1-2 tokoe:valid" result="pass"/><test-case name="12524NISTXML-SV-IV-list-long-length-1-3 tokoe:valid" result="pass"/><test-case name="12525NISTXML-SV-IV-list-long-length-1-4 tokoe:valid" result="pass"/><test-case name="12526NISTXML-SV-IV-list-long-length-1-5 tokoe:valid" result="pass"/><test-case name="12527NISTSchema-SV-IV-list-long-length-2 tokoe:valid" result="pass"/><test-case name="12528NISTXML-SV-IV-list-long-length-2-1 tokoe:valid" result="pass"/><test-case name="12529NISTXML-SV-IV-list-long-length-2-2 tokoe:valid" result="pass"/><test-case name="12530NISTXML-SV-IV-list-long-length-2-3 tokoe:valid" result="pass"/><test-case name="12531NISTXML-SV-IV-list-long-length-2-4 tokoe:valid" result="pass"/><test-case name="12532NISTXML-SV-IV-list-long-length-2-5 tokoe:valid" result="pass"/><test-case name="12533NISTSchema-SV-IV-list-long-length-3 tokoe:valid" result="pass"/><test-case name="12534NISTXML-SV-IV-list-long-length-3-1 tokoe:valid" result="pass"/><test-case name="12535NISTXML-SV-IV-list-long-length-3-2 tokoe:valid" result="pass"/><test-case name="12536NISTXML-SV-IV-list-long-length-3-3 tokoe:valid" result="pass"/><test-case name="12537NISTXML-SV-IV-list-long-length-3-4 tokoe:valid" result="pass"/><test-case name="12538NISTXML-SV-IV-list-long-length-3-5 tokoe:valid" result="pass"/><test-case name="12539NISTSchema-SV-IV-list-long-length-4 tokoe:valid" result="pass"/><test-case name="12540NISTXML-SV-IV-list-long-length-4-1 tokoe:valid" result="pass"/><test-case name="12541NISTXML-SV-IV-list-long-length-4-2 tokoe:valid" result="pass"/><test-case name="12542NISTXML-SV-IV-list-long-length-4-3 tokoe:valid" result="pass"/><test-case name="12543NISTXML-SV-IV-list-long-length-4-4 tokoe:valid" result="pass"/><test-case name="12544NISTXML-SV-IV-list-long-length-4-5 tokoe:valid" result="pass"/><test-case name="12545NISTSchema-SV-IV-list-long-length-5 tokoe:valid" result="pass"/><test-case name="12546NISTXML-SV-IV-list-long-length-5-1 tokoe:valid" result="pass"/><test-case name="12547NISTXML-SV-IV-list-long-length-5-2 tokoe:valid" result="pass"/><test-case name="12548NISTXML-SV-IV-list-long-length-5-3 tokoe:valid" result="pass"/><test-case name="12549NISTXML-SV-IV-list-long-length-5-4 tokoe:valid" result="pass"/><test-case name="12550NISTXML-SV-IV-list-long-length-5-5 tokoe:valid" result="pass"/><test-case name="12551NISTSchema-SV-IV-list-long-pattern-1 tokoe:valid" result="pass"/><test-case name="12552NISTXML-SV-IV-list-long-pattern-1-1 tokoe:valid" result="pass"/><test-case name="12553NISTXML-SV-IV-list-long-pattern-1-2 tokoe:valid" result="pass"/><test-case name="12554NISTXML-SV-IV-list-long-pattern-1-3 tokoe:valid" result="pass"/><test-case name="12555NISTXML-SV-IV-list-long-pattern-1-4 tokoe:valid" result="pass"/><test-case name="12556NISTXML-SV-IV-list-long-pattern-1-5 tokoe:valid" result="pass"/><test-case name="12557NISTSchema-SV-IV-list-long-pattern-2 tokoe:valid" result="pass"/><test-case name="12558NISTXML-SV-IV-list-long-pattern-2-1 tokoe:valid" result="pass"/><test-case name="12559NISTXML-SV-IV-list-long-pattern-2-2 tokoe:valid" result="pass"/><test-case name="12560NISTXML-SV-IV-list-long-pattern-2-3 tokoe:valid" result="pass"/><test-case name="12561NISTXML-SV-IV-list-long-pattern-2-4 tokoe:valid" result="pass"/><test-case name="12562NISTXML-SV-IV-list-long-pattern-2-5 tokoe:valid" result="pass"/><test-case name="12563NISTSchema-SV-IV-list-long-pattern-3 tokoe:valid" result="pass"/><test-case name="12564NISTXML-SV-IV-list-long-pattern-3-1 tokoe:valid" result="pass"/><test-case name="12565NISTXML-SV-IV-list-long-pattern-3-2 tokoe:valid" result="pass"/><test-case name="12566NISTXML-SV-IV-list-long-pattern-3-3 tokoe:valid" result="pass"/><test-case name="12567NISTXML-SV-IV-list-long-pattern-3-4 tokoe:valid" result="pass"/><test-case name="12568NISTXML-SV-IV-list-long-pattern-3-5 tokoe:valid" result="pass"/><test-case name="12569NISTSchema-SV-IV-list-long-pattern-4 tokoe:valid" result="pass"/><test-case name="12570NISTXML-SV-IV-list-long-pattern-4-1 tokoe:valid" result="pass"/><test-case name="12571NISTXML-SV-IV-list-long-pattern-4-2 tokoe:valid" result="pass"/><test-case name="12572NISTXML-SV-IV-list-long-pattern-4-3 tokoe:valid" result="pass"/><test-case name="12573NISTXML-SV-IV-list-long-pattern-4-4 tokoe:valid" result="pass"/><test-case name="12574NISTXML-SV-IV-list-long-pattern-4-5 tokoe:valid" result="pass"/><test-case name="12575NISTSchema-SV-IV-list-long-pattern-5 tokoe:valid" result="pass"/><test-case name="12576NISTXML-SV-IV-list-long-pattern-5-1 tokoe:valid" result="pass"/><test-case name="12577NISTXML-SV-IV-list-long-pattern-5-2 tokoe:valid" result="pass"/><test-case name="12578NISTXML-SV-IV-list-long-pattern-5-3 tokoe:valid" result="pass"/><test-case name="12579NISTXML-SV-IV-list-long-pattern-5-4 tokoe:valid" result="pass"/><test-case name="12580NISTXML-SV-IV-list-long-pattern-5-5 tokoe:valid" result="pass"/><test-case name="12581NISTSchema-SV-IV-list-long-enumeration-1 tokoe:valid" result="pass"/><test-case name="12582NISTXML-SV-IV-list-long-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="12583NISTXML-SV-IV-list-long-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="12584NISTXML-SV-IV-list-long-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="12585NISTXML-SV-IV-list-long-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="12586NISTXML-SV-IV-list-long-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="12587NISTSchema-SV-IV-list-long-enumeration-2 tokoe:valid" result="pass"/><test-case name="12588NISTXML-SV-IV-list-long-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="12589NISTXML-SV-IV-list-long-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="12590NISTXML-SV-IV-list-long-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="12591NISTXML-SV-IV-list-long-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="12592NISTXML-SV-IV-list-long-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="12593NISTSchema-SV-IV-list-long-enumeration-3 tokoe:valid" result="pass"/><test-case name="12594NISTXML-SV-IV-list-long-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="12595NISTXML-SV-IV-list-long-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="12596NISTXML-SV-IV-list-long-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="12597NISTXML-SV-IV-list-long-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="12598NISTXML-SV-IV-list-long-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="12599NISTSchema-SV-IV-list-long-enumeration-4 tokoe:valid" result="pass"/><test-case name="12600NISTXML-SV-IV-list-long-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="12601NISTXML-SV-IV-list-long-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="12602NISTXML-SV-IV-list-long-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="12603NISTXML-SV-IV-list-long-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="12604NISTXML-SV-IV-list-long-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="12605NISTSchema-SV-IV-list-long-enumeration-5 tokoe:valid" result="pass"/><test-case name="12606NISTXML-SV-IV-list-long-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="12607NISTXML-SV-IV-list-long-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="12608NISTXML-SV-IV-list-long-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="12609NISTXML-SV-IV-list-long-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="12610NISTXML-SV-IV-list-long-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="12611NISTSchema-SV-IV-list-long-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="12612NISTXML-SV-IV-list-long-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="12613NISTXML-SV-IV-list-long-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="12614NISTXML-SV-IV-list-long-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="12615NISTXML-SV-IV-list-long-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="12616NISTXML-SV-IV-list-long-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="12617NISTSchema-SV-IV-list-int-maxLength-1 tokoe:valid" result="pass"/><test-case name="12618NISTXML-SV-IV-list-int-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="12619NISTXML-SV-IV-list-int-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="12620NISTXML-SV-IV-list-int-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="12621NISTXML-SV-IV-list-int-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="12622NISTXML-SV-IV-list-int-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="12623NISTSchema-SV-IV-list-int-maxLength-2 tokoe:valid" result="pass"/><test-case name="12624NISTXML-SV-IV-list-int-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="12625NISTXML-SV-IV-list-int-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="12626NISTXML-SV-IV-list-int-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="12627NISTXML-SV-IV-list-int-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="12628NISTXML-SV-IV-list-int-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="12629NISTSchema-SV-IV-list-int-maxLength-3 tokoe:valid" result="pass"/><test-case name="12630NISTXML-SV-IV-list-int-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="12631NISTXML-SV-IV-list-int-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="12632NISTXML-SV-IV-list-int-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="12633NISTXML-SV-IV-list-int-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="12634NISTXML-SV-IV-list-int-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="12635NISTSchema-SV-IV-list-int-maxLength-4 tokoe:valid" result="pass"/><test-case name="12636NISTXML-SV-IV-list-int-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="12637NISTXML-SV-IV-list-int-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="12638NISTXML-SV-IV-list-int-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="12639NISTXML-SV-IV-list-int-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="12640NISTXML-SV-IV-list-int-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="12641NISTSchema-SV-IV-list-int-maxLength-5 tokoe:valid" result="pass"/><test-case name="12642NISTXML-SV-IV-list-int-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="12643NISTXML-SV-IV-list-int-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="12644NISTXML-SV-IV-list-int-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="12645NISTXML-SV-IV-list-int-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="12646NISTXML-SV-IV-list-int-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="12647NISTSchema-SV-IV-list-int-minLength-1 tokoe:valid" result="pass"/><test-case name="12648NISTXML-SV-IV-list-int-minLength-1-1 tokoe:valid" result="pass"/><test-case name="12649NISTXML-SV-IV-list-int-minLength-1-2 tokoe:valid" result="pass"/><test-case name="12650NISTXML-SV-IV-list-int-minLength-1-3 tokoe:valid" result="pass"/><test-case name="12651NISTXML-SV-IV-list-int-minLength-1-4 tokoe:valid" result="pass"/><test-case name="12652NISTXML-SV-IV-list-int-minLength-1-5 tokoe:valid" result="pass"/><test-case name="12653NISTSchema-SV-IV-list-int-minLength-2 tokoe:valid" result="pass"/><test-case name="12654NISTXML-SV-IV-list-int-minLength-2-1 tokoe:valid" result="pass"/><test-case name="12655NISTXML-SV-IV-list-int-minLength-2-2 tokoe:valid" result="pass"/><test-case name="12656NISTXML-SV-IV-list-int-minLength-2-3 tokoe:valid" result="pass"/><test-case name="12657NISTXML-SV-IV-list-int-minLength-2-4 tokoe:valid" result="pass"/><test-case name="12658NISTXML-SV-IV-list-int-minLength-2-5 tokoe:valid" result="pass"/><test-case name="12659NISTSchema-SV-IV-list-int-minLength-3 tokoe:valid" result="pass"/><test-case name="12660NISTXML-SV-IV-list-int-minLength-3-1 tokoe:valid" result="pass"/><test-case name="12661NISTXML-SV-IV-list-int-minLength-3-2 tokoe:valid" result="pass"/><test-case name="12662NISTXML-SV-IV-list-int-minLength-3-3 tokoe:valid" result="pass"/><test-case name="12663NISTXML-SV-IV-list-int-minLength-3-4 tokoe:valid" result="pass"/><test-case name="12664NISTXML-SV-IV-list-int-minLength-3-5 tokoe:valid" result="pass"/><test-case name="12665NISTSchema-SV-IV-list-int-minLength-4 tokoe:valid" result="pass"/><test-case name="12666NISTXML-SV-IV-list-int-minLength-4-1 tokoe:valid" result="pass"/><test-case name="12667NISTXML-SV-IV-list-int-minLength-4-2 tokoe:valid" result="pass"/><test-case name="12668NISTXML-SV-IV-list-int-minLength-4-3 tokoe:valid" result="pass"/><test-case name="12669NISTXML-SV-IV-list-int-minLength-4-4 tokoe:valid" result="pass"/><test-case name="12670NISTXML-SV-IV-list-int-minLength-4-5 tokoe:valid" result="pass"/><test-case name="12671NISTSchema-SV-IV-list-int-minLength-5 tokoe:valid" result="pass"/><test-case name="12672NISTXML-SV-IV-list-int-minLength-5-1 tokoe:valid" result="pass"/><test-case name="12673NISTXML-SV-IV-list-int-minLength-5-2 tokoe:valid" result="pass"/><test-case name="12674NISTXML-SV-IV-list-int-minLength-5-3 tokoe:valid" result="pass"/><test-case name="12675NISTXML-SV-IV-list-int-minLength-5-4 tokoe:valid" result="pass"/><test-case name="12676NISTXML-SV-IV-list-int-minLength-5-5 tokoe:valid" result="pass"/><test-case name="12677NISTSchema-SV-IV-list-int-length-1 tokoe:valid" result="pass"/><test-case name="12678NISTXML-SV-IV-list-int-length-1-1 tokoe:valid" result="pass"/><test-case name="12679NISTXML-SV-IV-list-int-length-1-2 tokoe:valid" result="pass"/><test-case name="12680NISTXML-SV-IV-list-int-length-1-3 tokoe:valid" result="pass"/><test-case name="12681NISTXML-SV-IV-list-int-length-1-4 tokoe:valid" result="pass"/><test-case name="12682NISTXML-SV-IV-list-int-length-1-5 tokoe:valid" result="pass"/><test-case name="12683NISTSchema-SV-IV-list-int-length-2 tokoe:valid" result="pass"/><test-case name="12684NISTXML-SV-IV-list-int-length-2-1 tokoe:valid" result="pass"/><test-case name="12685NISTXML-SV-IV-list-int-length-2-2 tokoe:valid" result="pass"/><test-case name="12686NISTXML-SV-IV-list-int-length-2-3 tokoe:valid" result="pass"/><test-case name="12687NISTXML-SV-IV-list-int-length-2-4 tokoe:valid" result="pass"/><test-case name="12688NISTXML-SV-IV-list-int-length-2-5 tokoe:valid" result="pass"/><test-case name="12689NISTSchema-SV-IV-list-int-length-3 tokoe:valid" result="pass"/><test-case name="12690NISTXML-SV-IV-list-int-length-3-1 tokoe:valid" result="pass"/><test-case name="12691NISTXML-SV-IV-list-int-length-3-2 tokoe:valid" result="pass"/><test-case name="12692NISTXML-SV-IV-list-int-length-3-3 tokoe:valid" result="pass"/><test-case name="12693NISTXML-SV-IV-list-int-length-3-4 tokoe:valid" result="pass"/><test-case name="12694NISTXML-SV-IV-list-int-length-3-5 tokoe:valid" result="pass"/><test-case name="12695NISTSchema-SV-IV-list-int-length-4 tokoe:valid" result="pass"/><test-case name="12696NISTXML-SV-IV-list-int-length-4-1 tokoe:valid" result="pass"/><test-case name="12697NISTXML-SV-IV-list-int-length-4-2 tokoe:valid" result="pass"/><test-case name="12698NISTXML-SV-IV-list-int-length-4-3 tokoe:valid" result="pass"/><test-case name="12699NISTXML-SV-IV-list-int-length-4-4 tokoe:valid" result="pass"/><test-case name="12700NISTXML-SV-IV-list-int-length-4-5 tokoe:valid" result="pass"/><test-case name="12701NISTSchema-SV-IV-list-int-length-5 tokoe:valid" result="pass"/><test-case name="12702NISTXML-SV-IV-list-int-length-5-1 tokoe:valid" result="pass"/><test-case name="12703NISTXML-SV-IV-list-int-length-5-2 tokoe:valid" result="pass"/><test-case name="12704NISTXML-SV-IV-list-int-length-5-3 tokoe:valid" result="pass"/><test-case name="12705NISTXML-SV-IV-list-int-length-5-4 tokoe:valid" result="pass"/><test-case name="12706NISTXML-SV-IV-list-int-length-5-5 tokoe:valid" result="pass"/><test-case name="12707NISTSchema-SV-IV-list-int-pattern-1 tokoe:valid" result="pass"/><test-case name="12708NISTXML-SV-IV-list-int-pattern-1-1 tokoe:valid" result="pass"/><test-case name="12709NISTXML-SV-IV-list-int-pattern-1-2 tokoe:valid" result="pass"/><test-case name="12710NISTXML-SV-IV-list-int-pattern-1-3 tokoe:valid" result="pass"/><test-case name="12711NISTXML-SV-IV-list-int-pattern-1-4 tokoe:valid" result="pass"/><test-case name="12712NISTXML-SV-IV-list-int-pattern-1-5 tokoe:valid" result="pass"/><test-case name="12713NISTSchema-SV-IV-list-int-pattern-2 tokoe:valid" result="pass"/><test-case name="12714NISTXML-SV-IV-list-int-pattern-2-1 tokoe:valid" result="pass"/><test-case name="12715NISTXML-SV-IV-list-int-pattern-2-2 tokoe:valid" result="pass"/><test-case name="12716NISTXML-SV-IV-list-int-pattern-2-3 tokoe:valid" result="pass"/><test-case name="12717NISTXML-SV-IV-list-int-pattern-2-4 tokoe:valid" result="pass"/><test-case name="12718NISTXML-SV-IV-list-int-pattern-2-5 tokoe:valid" result="pass"/><test-case name="12719NISTSchema-SV-IV-list-int-pattern-3 tokoe:valid" result="pass"/><test-case name="12720NISTXML-SV-IV-list-int-pattern-3-1 tokoe:valid" result="pass"/><test-case name="12721NISTXML-SV-IV-list-int-pattern-3-2 tokoe:valid" result="pass"/><test-case name="12722NISTXML-SV-IV-list-int-pattern-3-3 tokoe:valid" result="pass"/><test-case name="12723NISTXML-SV-IV-list-int-pattern-3-4 tokoe:valid" result="pass"/><test-case name="12724NISTXML-SV-IV-list-int-pattern-3-5 tokoe:valid" result="pass"/><test-case name="12725NISTSchema-SV-IV-list-int-pattern-4 tokoe:valid" result="pass"/><test-case name="12726NISTXML-SV-IV-list-int-pattern-4-1 tokoe:valid" result="pass"/><test-case name="12727NISTXML-SV-IV-list-int-pattern-4-2 tokoe:valid" result="pass"/><test-case name="12728NISTXML-SV-IV-list-int-pattern-4-3 tokoe:valid" result="pass"/><test-case name="12729NISTXML-SV-IV-list-int-pattern-4-4 tokoe:valid" result="pass"/><test-case name="12730NISTXML-SV-IV-list-int-pattern-4-5 tokoe:valid" result="pass"/><test-case name="12731NISTSchema-SV-IV-list-int-pattern-5 tokoe:valid" result="pass"/><test-case name="12732NISTXML-SV-IV-list-int-pattern-5-1 tokoe:valid" result="pass"/><test-case name="12733NISTXML-SV-IV-list-int-pattern-5-2 tokoe:valid" result="pass"/><test-case name="12734NISTXML-SV-IV-list-int-pattern-5-3 tokoe:valid" result="pass"/><test-case name="12735NISTXML-SV-IV-list-int-pattern-5-4 tokoe:valid" result="pass"/><test-case name="12736NISTXML-SV-IV-list-int-pattern-5-5 tokoe:valid" result="pass"/><test-case name="12737NISTSchema-SV-IV-list-int-enumeration-1 tokoe:valid" result="pass"/><test-case name="12738NISTXML-SV-IV-list-int-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="12739NISTXML-SV-IV-list-int-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="12740NISTXML-SV-IV-list-int-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="12741NISTXML-SV-IV-list-int-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="12742NISTXML-SV-IV-list-int-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="12743NISTSchema-SV-IV-list-int-enumeration-2 tokoe:valid" result="pass"/><test-case name="12744NISTXML-SV-IV-list-int-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="12745NISTXML-SV-IV-list-int-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="12746NISTXML-SV-IV-list-int-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="12747NISTXML-SV-IV-list-int-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="12748NISTXML-SV-IV-list-int-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="12749NISTSchema-SV-IV-list-int-enumeration-3 tokoe:valid" result="pass"/><test-case name="12750NISTXML-SV-IV-list-int-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="12751NISTXML-SV-IV-list-int-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="12752NISTXML-SV-IV-list-int-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="12753NISTXML-SV-IV-list-int-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="12754NISTXML-SV-IV-list-int-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="12755NISTSchema-SV-IV-list-int-enumeration-4 tokoe:valid" result="pass"/><test-case name="12756NISTXML-SV-IV-list-int-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="12757NISTXML-SV-IV-list-int-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="12758NISTXML-SV-IV-list-int-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="12759NISTXML-SV-IV-list-int-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="12760NISTXML-SV-IV-list-int-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="12761NISTSchema-SV-IV-list-int-enumeration-5 tokoe:valid" result="pass"/><test-case name="12762NISTXML-SV-IV-list-int-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="12763NISTXML-SV-IV-list-int-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="12764NISTXML-SV-IV-list-int-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="12765NISTXML-SV-IV-list-int-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="12766NISTXML-SV-IV-list-int-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="12767NISTSchema-SV-IV-list-int-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="12768NISTXML-SV-IV-list-int-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="12769NISTXML-SV-IV-list-int-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="12770NISTXML-SV-IV-list-int-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="12771NISTXML-SV-IV-list-int-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="12772NISTXML-SV-IV-list-int-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="12773NISTSchema-SV-IV-list-short-maxLength-1 tokoe:valid" result="pass"/><test-case name="12774NISTXML-SV-IV-list-short-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="12775NISTXML-SV-IV-list-short-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="12776NISTXML-SV-IV-list-short-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="12777NISTXML-SV-IV-list-short-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="12778NISTXML-SV-IV-list-short-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="12779NISTSchema-SV-IV-list-short-maxLength-2 tokoe:valid" result="pass"/><test-case name="12780NISTXML-SV-IV-list-short-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="12781NISTXML-SV-IV-list-short-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="12782NISTXML-SV-IV-list-short-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="12783NISTXML-SV-IV-list-short-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="12784NISTXML-SV-IV-list-short-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="12785NISTSchema-SV-IV-list-short-maxLength-3 tokoe:valid" result="pass"/><test-case name="12786NISTXML-SV-IV-list-short-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="12787NISTXML-SV-IV-list-short-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="12788NISTXML-SV-IV-list-short-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="12789NISTXML-SV-IV-list-short-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="12790NISTXML-SV-IV-list-short-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="12791NISTSchema-SV-IV-list-short-maxLength-4 tokoe:valid" result="pass"/><test-case name="12792NISTXML-SV-IV-list-short-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="12793NISTXML-SV-IV-list-short-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="12794NISTXML-SV-IV-list-short-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="12795NISTXML-SV-IV-list-short-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="12796NISTXML-SV-IV-list-short-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="12797NISTSchema-SV-IV-list-short-maxLength-5 tokoe:valid" result="pass"/><test-case name="12798NISTXML-SV-IV-list-short-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="12799NISTXML-SV-IV-list-short-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="12800NISTXML-SV-IV-list-short-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="12801NISTXML-SV-IV-list-short-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="12802NISTXML-SV-IV-list-short-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="12803NISTSchema-SV-IV-list-short-minLength-1 tokoe:valid" result="pass"/><test-case name="12804NISTXML-SV-IV-list-short-minLength-1-1 tokoe:valid" result="pass"/><test-case name="12805NISTXML-SV-IV-list-short-minLength-1-2 tokoe:valid" result="pass"/><test-case name="12806NISTXML-SV-IV-list-short-minLength-1-3 tokoe:valid" result="pass"/><test-case name="12807NISTXML-SV-IV-list-short-minLength-1-4 tokoe:valid" result="pass"/><test-case name="12808NISTXML-SV-IV-list-short-minLength-1-5 tokoe:valid" result="pass"/><test-case name="12809NISTSchema-SV-IV-list-short-minLength-2 tokoe:valid" result="pass"/><test-case name="12810NISTXML-SV-IV-list-short-minLength-2-1 tokoe:valid" result="pass"/><test-case name="12811NISTXML-SV-IV-list-short-minLength-2-2 tokoe:valid" result="pass"/><test-case name="12812NISTXML-SV-IV-list-short-minLength-2-3 tokoe:valid" result="pass"/><test-case name="12813NISTXML-SV-IV-list-short-minLength-2-4 tokoe:valid" result="pass"/><test-case name="12814NISTXML-SV-IV-list-short-minLength-2-5 tokoe:valid" result="pass"/><test-case name="12815NISTSchema-SV-IV-list-short-minLength-3 tokoe:valid" result="pass"/><test-case name="12816NISTXML-SV-IV-list-short-minLength-3-1 tokoe:valid" result="pass"/><test-case name="12817NISTXML-SV-IV-list-short-minLength-3-2 tokoe:valid" result="pass"/><test-case name="12818NISTXML-SV-IV-list-short-minLength-3-3 tokoe:valid" result="pass"/><test-case name="12819NISTXML-SV-IV-list-short-minLength-3-4 tokoe:valid" result="pass"/><test-case name="12820NISTXML-SV-IV-list-short-minLength-3-5 tokoe:valid" result="pass"/><test-case name="12821NISTSchema-SV-IV-list-short-minLength-4 tokoe:valid" result="pass"/><test-case name="12822NISTXML-SV-IV-list-short-minLength-4-1 tokoe:valid" result="pass"/><test-case name="12823NISTXML-SV-IV-list-short-minLength-4-2 tokoe:valid" result="pass"/><test-case name="12824NISTXML-SV-IV-list-short-minLength-4-3 tokoe:valid" result="pass"/><test-case name="12825NISTXML-SV-IV-list-short-minLength-4-4 tokoe:valid" result="pass"/><test-case name="12826NISTXML-SV-IV-list-short-minLength-4-5 tokoe:valid" result="pass"/><test-case name="12827NISTSchema-SV-IV-list-short-minLength-5 tokoe:valid" result="pass"/><test-case name="12828NISTXML-SV-IV-list-short-minLength-5-1 tokoe:valid" result="pass"/><test-case name="12829NISTXML-SV-IV-list-short-minLength-5-2 tokoe:valid" result="pass"/><test-case name="12830NISTXML-SV-IV-list-short-minLength-5-3 tokoe:valid" result="pass"/><test-case name="12831NISTXML-SV-IV-list-short-minLength-5-4 tokoe:valid" result="pass"/><test-case name="12832NISTXML-SV-IV-list-short-minLength-5-5 tokoe:valid" result="pass"/><test-case name="12833NISTSchema-SV-IV-list-short-length-1 tokoe:valid" result="pass"/><test-case name="12834NISTXML-SV-IV-list-short-length-1-1 tokoe:valid" result="pass"/><test-case name="12835NISTXML-SV-IV-list-short-length-1-2 tokoe:valid" result="pass"/><test-case name="12836NISTXML-SV-IV-list-short-length-1-3 tokoe:valid" result="pass"/><test-case name="12837NISTXML-SV-IV-list-short-length-1-4 tokoe:valid" result="pass"/><test-case name="12838NISTXML-SV-IV-list-short-length-1-5 tokoe:valid" result="pass"/><test-case name="12839NISTSchema-SV-IV-list-short-length-2 tokoe:valid" result="pass"/><test-case name="12840NISTXML-SV-IV-list-short-length-2-1 tokoe:valid" result="pass"/><test-case name="12841NISTXML-SV-IV-list-short-length-2-2 tokoe:valid" result="pass"/><test-case name="12842NISTXML-SV-IV-list-short-length-2-3 tokoe:valid" result="pass"/><test-case name="12843NISTXML-SV-IV-list-short-length-2-4 tokoe:valid" result="pass"/><test-case name="12844NISTXML-SV-IV-list-short-length-2-5 tokoe:valid" result="pass"/><test-case name="12845NISTSchema-SV-IV-list-short-length-3 tokoe:valid" result="pass"/><test-case name="12846NISTXML-SV-IV-list-short-length-3-1 tokoe:valid" result="pass"/><test-case name="12847NISTXML-SV-IV-list-short-length-3-2 tokoe:valid" result="pass"/><test-case name="12848NISTXML-SV-IV-list-short-length-3-3 tokoe:valid" result="pass"/><test-case name="12849NISTXML-SV-IV-list-short-length-3-4 tokoe:valid" result="pass"/><test-case name="12850NISTXML-SV-IV-list-short-length-3-5 tokoe:valid" result="pass"/><test-case name="12851NISTSchema-SV-IV-list-short-length-4 tokoe:valid" result="pass"/><test-case name="12852NISTXML-SV-IV-list-short-length-4-1 tokoe:valid" result="pass"/><test-case name="12853NISTXML-SV-IV-list-short-length-4-2 tokoe:valid" result="pass"/><test-case name="12854NISTXML-SV-IV-list-short-length-4-3 tokoe:valid" result="pass"/><test-case name="12855NISTXML-SV-IV-list-short-length-4-4 tokoe:valid" result="pass"/><test-case name="12856NISTXML-SV-IV-list-short-length-4-5 tokoe:valid" result="pass"/><test-case name="12857NISTSchema-SV-IV-list-short-length-5 tokoe:valid" result="pass"/><test-case name="12858NISTXML-SV-IV-list-short-length-5-1 tokoe:valid" result="pass"/><test-case name="12859NISTXML-SV-IV-list-short-length-5-2 tokoe:valid" result="pass"/><test-case name="12860NISTXML-SV-IV-list-short-length-5-3 tokoe:valid" result="pass"/><test-case name="12861NISTXML-SV-IV-list-short-length-5-4 tokoe:valid" result="pass"/><test-case name="12862NISTXML-SV-IV-list-short-length-5-5 tokoe:valid" result="pass"/><test-case name="12863NISTSchema-SV-IV-list-short-pattern-1 tokoe:valid" result="pass"/><test-case name="12864NISTXML-SV-IV-list-short-pattern-1-1 tokoe:valid" result="pass"/><test-case name="12865NISTXML-SV-IV-list-short-pattern-1-2 tokoe:valid" result="pass"/><test-case name="12866NISTXML-SV-IV-list-short-pattern-1-3 tokoe:valid" result="pass"/><test-case name="12867NISTXML-SV-IV-list-short-pattern-1-4 tokoe:valid" result="pass"/><test-case name="12868NISTXML-SV-IV-list-short-pattern-1-5 tokoe:valid" result="pass"/><test-case name="12869NISTSchema-SV-IV-list-short-pattern-2 tokoe:valid" result="pass"/><test-case name="12870NISTXML-SV-IV-list-short-pattern-2-1 tokoe:valid" result="pass"/><test-case name="12871NISTXML-SV-IV-list-short-pattern-2-2 tokoe:valid" result="pass"/><test-case name="12872NISTXML-SV-IV-list-short-pattern-2-3 tokoe:valid" result="pass"/><test-case name="12873NISTXML-SV-IV-list-short-pattern-2-4 tokoe:valid" result="pass"/><test-case name="12874NISTXML-SV-IV-list-short-pattern-2-5 tokoe:valid" result="pass"/><test-case name="12875NISTSchema-SV-IV-list-short-pattern-3 tokoe:valid" result="pass"/><test-case name="12876NISTXML-SV-IV-list-short-pattern-3-1 tokoe:valid" result="pass"/><test-case name="12877NISTXML-SV-IV-list-short-pattern-3-2 tokoe:valid" result="pass"/><test-case name="12878NISTXML-SV-IV-list-short-pattern-3-3 tokoe:valid" result="pass"/><test-case name="12879NISTXML-SV-IV-list-short-pattern-3-4 tokoe:valid" result="pass"/><test-case name="12880NISTXML-SV-IV-list-short-pattern-3-5 tokoe:valid" result="pass"/><test-case name="12881NISTSchema-SV-IV-list-short-pattern-4 tokoe:valid" result="pass"/><test-case name="12882NISTXML-SV-IV-list-short-pattern-4-1 tokoe:valid" result="pass"/><test-case name="12883NISTXML-SV-IV-list-short-pattern-4-2 tokoe:valid" result="pass"/><test-case name="12884NISTXML-SV-IV-list-short-pattern-4-3 tokoe:valid" result="pass"/><test-case name="12885NISTXML-SV-IV-list-short-pattern-4-4 tokoe:valid" result="pass"/><test-case name="12886NISTXML-SV-IV-list-short-pattern-4-5 tokoe:valid" result="pass"/><test-case name="12887NISTSchema-SV-IV-list-short-pattern-5 tokoe:valid" result="pass"/><test-case name="12888NISTXML-SV-IV-list-short-pattern-5-1 tokoe:valid" result="pass"/><test-case name="12889NISTXML-SV-IV-list-short-pattern-5-2 tokoe:valid" result="pass"/><test-case name="12890NISTXML-SV-IV-list-short-pattern-5-3 tokoe:valid" result="pass"/><test-case name="12891NISTXML-SV-IV-list-short-pattern-5-4 tokoe:valid" result="pass"/><test-case name="12892NISTXML-SV-IV-list-short-pattern-5-5 tokoe:valid" result="pass"/><test-case name="12893NISTSchema-SV-IV-list-short-enumeration-1 tokoe:valid" result="pass"/><test-case name="12894NISTXML-SV-IV-list-short-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="12895NISTXML-SV-IV-list-short-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="12896NISTXML-SV-IV-list-short-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="12897NISTXML-SV-IV-list-short-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="12898NISTXML-SV-IV-list-short-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="12899NISTSchema-SV-IV-list-short-enumeration-2 tokoe:valid" result="pass"/><test-case name="12900NISTXML-SV-IV-list-short-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="12901NISTXML-SV-IV-list-short-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="12902NISTXML-SV-IV-list-short-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="12903NISTXML-SV-IV-list-short-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="12904NISTXML-SV-IV-list-short-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="12905NISTSchema-SV-IV-list-short-enumeration-3 tokoe:valid" result="pass"/><test-case name="12906NISTXML-SV-IV-list-short-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="12907NISTXML-SV-IV-list-short-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="12908NISTXML-SV-IV-list-short-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="12909NISTXML-SV-IV-list-short-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="12910NISTXML-SV-IV-list-short-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="12911NISTSchema-SV-IV-list-short-enumeration-4 tokoe:valid" result="pass"/><test-case name="12912NISTXML-SV-IV-list-short-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="12913NISTXML-SV-IV-list-short-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="12914NISTXML-SV-IV-list-short-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="12915NISTXML-SV-IV-list-short-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="12916NISTXML-SV-IV-list-short-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="12917NISTSchema-SV-IV-list-short-enumeration-5 tokoe:valid" result="pass"/><test-case name="12918NISTXML-SV-IV-list-short-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="12919NISTXML-SV-IV-list-short-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="12920NISTXML-SV-IV-list-short-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="12921NISTXML-SV-IV-list-short-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="12922NISTXML-SV-IV-list-short-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="12923NISTSchema-SV-IV-list-short-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="12924NISTXML-SV-IV-list-short-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="12925NISTXML-SV-IV-list-short-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="12926NISTXML-SV-IV-list-short-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="12927NISTXML-SV-IV-list-short-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="12928NISTXML-SV-IV-list-short-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="12929NISTSchema-SV-IV-list-byte-maxLength-1 tokoe:valid" result="pass"/><test-case name="12930NISTXML-SV-IV-list-byte-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="12931NISTXML-SV-IV-list-byte-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="12932NISTXML-SV-IV-list-byte-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="12933NISTXML-SV-IV-list-byte-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="12934NISTXML-SV-IV-list-byte-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="12935NISTSchema-SV-IV-list-byte-maxLength-2 tokoe:valid" result="pass"/><test-case name="12936NISTXML-SV-IV-list-byte-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="12937NISTXML-SV-IV-list-byte-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="12938NISTXML-SV-IV-list-byte-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="12939NISTXML-SV-IV-list-byte-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="12940NISTXML-SV-IV-list-byte-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="12941NISTSchema-SV-IV-list-byte-maxLength-3 tokoe:valid" result="pass"/><test-case name="12942NISTXML-SV-IV-list-byte-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="12943NISTXML-SV-IV-list-byte-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="12944NISTXML-SV-IV-list-byte-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="12945NISTXML-SV-IV-list-byte-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="12946NISTXML-SV-IV-list-byte-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="12947NISTSchema-SV-IV-list-byte-maxLength-4 tokoe:valid" result="pass"/><test-case name="12948NISTXML-SV-IV-list-byte-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="12949NISTXML-SV-IV-list-byte-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="12950NISTXML-SV-IV-list-byte-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="12951NISTXML-SV-IV-list-byte-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="12952NISTXML-SV-IV-list-byte-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="12953NISTSchema-SV-IV-list-byte-maxLength-5 tokoe:valid" result="pass"/><test-case name="12954NISTXML-SV-IV-list-byte-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="12955NISTXML-SV-IV-list-byte-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="12956NISTXML-SV-IV-list-byte-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="12957NISTXML-SV-IV-list-byte-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="12958NISTXML-SV-IV-list-byte-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="12959NISTSchema-SV-IV-list-byte-minLength-1 tokoe:valid" result="pass"/><test-case name="12960NISTXML-SV-IV-list-byte-minLength-1-1 tokoe:valid" result="pass"/><test-case name="12961NISTXML-SV-IV-list-byte-minLength-1-2 tokoe:valid" result="pass"/><test-case name="12962NISTXML-SV-IV-list-byte-minLength-1-3 tokoe:valid" result="pass"/><test-case name="12963NISTXML-SV-IV-list-byte-minLength-1-4 tokoe:valid" result="pass"/><test-case name="12964NISTXML-SV-IV-list-byte-minLength-1-5 tokoe:valid" result="pass"/><test-case name="12965NISTSchema-SV-IV-list-byte-minLength-2 tokoe:valid" result="pass"/><test-case name="12966NISTXML-SV-IV-list-byte-minLength-2-1 tokoe:valid" result="pass"/><test-case name="12967NISTXML-SV-IV-list-byte-minLength-2-2 tokoe:valid" result="pass"/><test-case name="12968NISTXML-SV-IV-list-byte-minLength-2-3 tokoe:valid" result="pass"/><test-case name="12969NISTXML-SV-IV-list-byte-minLength-2-4 tokoe:valid" result="pass"/><test-case name="12970NISTXML-SV-IV-list-byte-minLength-2-5 tokoe:valid" result="pass"/><test-case name="12971NISTSchema-SV-IV-list-byte-minLength-3 tokoe:valid" result="pass"/><test-case name="12972NISTXML-SV-IV-list-byte-minLength-3-1 tokoe:valid" result="pass"/><test-case name="12973NISTXML-SV-IV-list-byte-minLength-3-2 tokoe:valid" result="pass"/><test-case name="12974NISTXML-SV-IV-list-byte-minLength-3-3 tokoe:valid" result="pass"/><test-case name="12975NISTXML-SV-IV-list-byte-minLength-3-4 tokoe:valid" result="pass"/><test-case name="12976NISTXML-SV-IV-list-byte-minLength-3-5 tokoe:valid" result="pass"/><test-case name="12977NISTSchema-SV-IV-list-byte-minLength-4 tokoe:valid" result="pass"/><test-case name="12978NISTXML-SV-IV-list-byte-minLength-4-1 tokoe:valid" result="pass"/><test-case name="12979NISTXML-SV-IV-list-byte-minLength-4-2 tokoe:valid" result="pass"/><test-case name="12980NISTXML-SV-IV-list-byte-minLength-4-3 tokoe:valid" result="pass"/><test-case name="12981NISTXML-SV-IV-list-byte-minLength-4-4 tokoe:valid" result="pass"/><test-case name="12982NISTXML-SV-IV-list-byte-minLength-4-5 tokoe:valid" result="pass"/><test-case name="12983NISTSchema-SV-IV-list-byte-minLength-5 tokoe:valid" result="pass"/><test-case name="12984NISTXML-SV-IV-list-byte-minLength-5-1 tokoe:valid" result="pass"/><test-case name="12985NISTXML-SV-IV-list-byte-minLength-5-2 tokoe:valid" result="pass"/><test-case name="12986NISTXML-SV-IV-list-byte-minLength-5-3 tokoe:valid" result="pass"/><test-case name="12987NISTXML-SV-IV-list-byte-minLength-5-4 tokoe:valid" result="pass"/><test-case name="12988NISTXML-SV-IV-list-byte-minLength-5-5 tokoe:valid" result="pass"/><test-case name="12989NISTSchema-SV-IV-list-byte-length-1 tokoe:valid" result="pass"/><test-case name="12990NISTXML-SV-IV-list-byte-length-1-1 tokoe:valid" result="pass"/><test-case name="12991NISTXML-SV-IV-list-byte-length-1-2 tokoe:valid" result="pass"/><test-case name="12992NISTXML-SV-IV-list-byte-length-1-3 tokoe:valid" result="pass"/><test-case name="12993NISTXML-SV-IV-list-byte-length-1-4 tokoe:valid" result="pass"/><test-case name="12994NISTXML-SV-IV-list-byte-length-1-5 tokoe:valid" result="pass"/><test-case name="12995NISTSchema-SV-IV-list-byte-length-2 tokoe:valid" result="pass"/><test-case name="12996NISTXML-SV-IV-list-byte-length-2-1 tokoe:valid" result="pass"/><test-case name="12997NISTXML-SV-IV-list-byte-length-2-2 tokoe:valid" result="pass"/><test-case name="12998NISTXML-SV-IV-list-byte-length-2-3 tokoe:valid" result="pass"/><test-case name="12999NISTXML-SV-IV-list-byte-length-2-4 tokoe:valid" result="pass"/><test-case name="13000NISTXML-SV-IV-list-byte-length-2-5 tokoe:valid" result="pass"/><test-case name="13001NISTSchema-SV-IV-list-byte-length-3 tokoe:valid" result="pass"/><test-case name="13002NISTXML-SV-IV-list-byte-length-3-1 tokoe:valid" result="pass"/><test-case name="13003NISTXML-SV-IV-list-byte-length-3-2 tokoe:valid" result="pass"/><test-case name="13004NISTXML-SV-IV-list-byte-length-3-3 tokoe:valid" result="pass"/><test-case name="13005NISTXML-SV-IV-list-byte-length-3-4 tokoe:valid" result="pass"/><test-case name="13006NISTXML-SV-IV-list-byte-length-3-5 tokoe:valid" result="pass"/><test-case name="13007NISTSchema-SV-IV-list-byte-length-4 tokoe:valid" result="pass"/><test-case name="13008NISTXML-SV-IV-list-byte-length-4-1 tokoe:valid" result="pass"/><test-case name="13009NISTXML-SV-IV-list-byte-length-4-2 tokoe:valid" result="pass"/><test-case name="13010NISTXML-SV-IV-list-byte-length-4-3 tokoe:valid" result="pass"/><test-case name="13011NISTXML-SV-IV-list-byte-length-4-4 tokoe:valid" result="pass"/><test-case name="13012NISTXML-SV-IV-list-byte-length-4-5 tokoe:valid" result="pass"/><test-case name="13013NISTSchema-SV-IV-list-byte-length-5 tokoe:valid" result="pass"/><test-case name="13014NISTXML-SV-IV-list-byte-length-5-1 tokoe:valid" result="pass"/><test-case name="13015NISTXML-SV-IV-list-byte-length-5-2 tokoe:valid" result="pass"/><test-case name="13016NISTXML-SV-IV-list-byte-length-5-3 tokoe:valid" result="pass"/><test-case name="13017NISTXML-SV-IV-list-byte-length-5-4 tokoe:valid" result="pass"/><test-case name="13018NISTXML-SV-IV-list-byte-length-5-5 tokoe:valid" result="pass"/><test-case name="13019NISTSchema-SV-IV-list-byte-pattern-1 tokoe:valid" result="pass"/><test-case name="13020NISTXML-SV-IV-list-byte-pattern-1-1 tokoe:valid" result="pass"/><test-case name="13021NISTXML-SV-IV-list-byte-pattern-1-2 tokoe:valid" result="pass"/><test-case name="13022NISTXML-SV-IV-list-byte-pattern-1-3 tokoe:valid" result="pass"/><test-case name="13023NISTXML-SV-IV-list-byte-pattern-1-4 tokoe:valid" result="pass"/><test-case name="13024NISTXML-SV-IV-list-byte-pattern-1-5 tokoe:valid" result="pass"/><test-case name="13025NISTSchema-SV-IV-list-byte-pattern-2 tokoe:valid" result="pass"/><test-case name="13026NISTXML-SV-IV-list-byte-pattern-2-1 tokoe:valid" result="pass"/><test-case name="13027NISTXML-SV-IV-list-byte-pattern-2-2 tokoe:valid" result="pass"/><test-case name="13028NISTXML-SV-IV-list-byte-pattern-2-3 tokoe:valid" result="pass"/><test-case name="13029NISTXML-SV-IV-list-byte-pattern-2-4 tokoe:valid" result="pass"/><test-case name="13030NISTXML-SV-IV-list-byte-pattern-2-5 tokoe:valid" result="pass"/><test-case name="13031NISTSchema-SV-IV-list-byte-pattern-3 tokoe:valid" result="pass"/><test-case name="13032NISTXML-SV-IV-list-byte-pattern-3-1 tokoe:valid" result="pass"/><test-case name="13033NISTXML-SV-IV-list-byte-pattern-3-2 tokoe:valid" result="pass"/><test-case name="13034NISTXML-SV-IV-list-byte-pattern-3-3 tokoe:valid" result="pass"/><test-case name="13035NISTXML-SV-IV-list-byte-pattern-3-4 tokoe:valid" result="pass"/><test-case name="13036NISTXML-SV-IV-list-byte-pattern-3-5 tokoe:valid" result="pass"/><test-case name="13037NISTSchema-SV-IV-list-byte-pattern-4 tokoe:valid" result="pass"/><test-case name="13038NISTXML-SV-IV-list-byte-pattern-4-1 tokoe:valid" result="pass"/><test-case name="13039NISTXML-SV-IV-list-byte-pattern-4-2 tokoe:valid" result="pass"/><test-case name="13040NISTXML-SV-IV-list-byte-pattern-4-3 tokoe:valid" result="pass"/><test-case name="13041NISTXML-SV-IV-list-byte-pattern-4-4 tokoe:valid" result="pass"/><test-case name="13042NISTXML-SV-IV-list-byte-pattern-4-5 tokoe:valid" result="pass"/><test-case name="13043NISTSchema-SV-IV-list-byte-pattern-5 tokoe:valid" result="pass"/><test-case name="13044NISTXML-SV-IV-list-byte-pattern-5-1 tokoe:valid" result="pass"/><test-case name="13045NISTXML-SV-IV-list-byte-pattern-5-2 tokoe:valid" result="pass"/><test-case name="13046NISTXML-SV-IV-list-byte-pattern-5-3 tokoe:valid" result="pass"/><test-case name="13047NISTXML-SV-IV-list-byte-pattern-5-4 tokoe:valid" result="pass"/><test-case name="13048NISTXML-SV-IV-list-byte-pattern-5-5 tokoe:valid" result="pass"/><test-case name="13049NISTSchema-SV-IV-list-byte-enumeration-1 tokoe:valid" result="pass"/><test-case name="13050NISTXML-SV-IV-list-byte-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="13051NISTXML-SV-IV-list-byte-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="13052NISTXML-SV-IV-list-byte-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="13053NISTXML-SV-IV-list-byte-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="13054NISTXML-SV-IV-list-byte-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="13055NISTSchema-SV-IV-list-byte-enumeration-2 tokoe:valid" result="pass"/><test-case name="13056NISTXML-SV-IV-list-byte-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="13057NISTXML-SV-IV-list-byte-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="13058NISTXML-SV-IV-list-byte-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="13059NISTXML-SV-IV-list-byte-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="13060NISTXML-SV-IV-list-byte-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="13061NISTSchema-SV-IV-list-byte-enumeration-3 tokoe:valid" result="pass"/><test-case name="13062NISTXML-SV-IV-list-byte-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="13063NISTXML-SV-IV-list-byte-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="13064NISTXML-SV-IV-list-byte-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="13065NISTXML-SV-IV-list-byte-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="13066NISTXML-SV-IV-list-byte-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="13067NISTSchema-SV-IV-list-byte-enumeration-4 tokoe:valid" result="pass"/><test-case name="13068NISTXML-SV-IV-list-byte-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="13069NISTXML-SV-IV-list-byte-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="13070NISTXML-SV-IV-list-byte-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="13071NISTXML-SV-IV-list-byte-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="13072NISTXML-SV-IV-list-byte-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="13073NISTSchema-SV-IV-list-byte-enumeration-5 tokoe:valid" result="pass"/><test-case name="13074NISTXML-SV-IV-list-byte-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="13075NISTXML-SV-IV-list-byte-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="13076NISTXML-SV-IV-list-byte-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="13077NISTXML-SV-IV-list-byte-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="13078NISTXML-SV-IV-list-byte-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="13079NISTSchema-SV-IV-list-byte-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="13080NISTXML-SV-IV-list-byte-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="13081NISTXML-SV-IV-list-byte-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="13082NISTXML-SV-IV-list-byte-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="13083NISTXML-SV-IV-list-byte-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="13084NISTXML-SV-IV-list-byte-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="13085NISTSchema-SV-IV-list-nonNegativeInteger-maxLength-1 tokoe:valid" result="pass"/><test-case name="13086NISTXML-SV-IV-list-nonNegativeInteger-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="13087NISTXML-SV-IV-list-nonNegativeInteger-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="13088NISTXML-SV-IV-list-nonNegativeInteger-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="13089NISTXML-SV-IV-list-nonNegativeInteger-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="13090NISTXML-SV-IV-list-nonNegativeInteger-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="13091NISTSchema-SV-IV-list-nonNegativeInteger-maxLength-2 tokoe:valid" result="pass"/><test-case name="13092NISTXML-SV-IV-list-nonNegativeInteger-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="13093NISTXML-SV-IV-list-nonNegativeInteger-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="13094NISTXML-SV-IV-list-nonNegativeInteger-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="13095NISTXML-SV-IV-list-nonNegativeInteger-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="13096NISTXML-SV-IV-list-nonNegativeInteger-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="13097NISTSchema-SV-IV-list-nonNegativeInteger-maxLength-3 tokoe:valid" result="pass"/><test-case name="13098NISTXML-SV-IV-list-nonNegativeInteger-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="13099NISTXML-SV-IV-list-nonNegativeInteger-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="13100NISTXML-SV-IV-list-nonNegativeInteger-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="13101NISTXML-SV-IV-list-nonNegativeInteger-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="13102NISTXML-SV-IV-list-nonNegativeInteger-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="13103NISTSchema-SV-IV-list-nonNegativeInteger-maxLength-4 tokoe:valid" result="pass"/><test-case name="13104NISTXML-SV-IV-list-nonNegativeInteger-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="13105NISTXML-SV-IV-list-nonNegativeInteger-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="13106NISTXML-SV-IV-list-nonNegativeInteger-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="13107NISTXML-SV-IV-list-nonNegativeInteger-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="13108NISTXML-SV-IV-list-nonNegativeInteger-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="13109NISTSchema-SV-IV-list-nonNegativeInteger-maxLength-5 tokoe:valid" result="pass"/><test-case name="13110NISTXML-SV-IV-list-nonNegativeInteger-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="13111NISTXML-SV-IV-list-nonNegativeInteger-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="13112NISTXML-SV-IV-list-nonNegativeInteger-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="13113NISTXML-SV-IV-list-nonNegativeInteger-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="13114NISTXML-SV-IV-list-nonNegativeInteger-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="13115NISTSchema-SV-IV-list-nonNegativeInteger-minLength-1 tokoe:valid" result="pass"/><test-case name="13116NISTXML-SV-IV-list-nonNegativeInteger-minLength-1-1 tokoe:valid" result="pass"/><test-case name="13117NISTXML-SV-IV-list-nonNegativeInteger-minLength-1-2 tokoe:valid" result="pass"/><test-case name="13118NISTXML-SV-IV-list-nonNegativeInteger-minLength-1-3 tokoe:valid" result="pass"/><test-case name="13119NISTXML-SV-IV-list-nonNegativeInteger-minLength-1-4 tokoe:valid" result="pass"/><test-case name="13120NISTXML-SV-IV-list-nonNegativeInteger-minLength-1-5 tokoe:valid" result="pass"/><test-case name="13121NISTSchema-SV-IV-list-nonNegativeInteger-minLength-2 tokoe:valid" result="pass"/><test-case name="13122NISTXML-SV-IV-list-nonNegativeInteger-minLength-2-1 tokoe:valid" result="pass"/><test-case name="13123NISTXML-SV-IV-list-nonNegativeInteger-minLength-2-2 tokoe:valid" result="pass"/><test-case name="13124NISTXML-SV-IV-list-nonNegativeInteger-minLength-2-3 tokoe:valid" result="pass"/><test-case name="13125NISTXML-SV-IV-list-nonNegativeInteger-minLength-2-4 tokoe:valid" result="pass"/><test-case name="13126NISTXML-SV-IV-list-nonNegativeInteger-minLength-2-5 tokoe:valid" result="pass"/><test-case name="13127NISTSchema-SV-IV-list-nonNegativeInteger-minLength-3 tokoe:valid" result="pass"/><test-case name="13128NISTXML-SV-IV-list-nonNegativeInteger-minLength-3-1 tokoe:valid" result="pass"/><test-case name="13129NISTXML-SV-IV-list-nonNegativeInteger-minLength-3-2 tokoe:valid" result="pass"/><test-case name="13130NISTXML-SV-IV-list-nonNegativeInteger-minLength-3-3 tokoe:valid" result="pass"/><test-case name="13131NISTXML-SV-IV-list-nonNegativeInteger-minLength-3-4 tokoe:valid" result="pass"/><test-case name="13132NISTXML-SV-IV-list-nonNegativeInteger-minLength-3-5 tokoe:valid" result="pass"/><test-case name="13133NISTSchema-SV-IV-list-nonNegativeInteger-minLength-4 tokoe:valid" result="pass"/><test-case name="13134NISTXML-SV-IV-list-nonNegativeInteger-minLength-4-1 tokoe:valid" result="pass"/><test-case name="13135NISTXML-SV-IV-list-nonNegativeInteger-minLength-4-2 tokoe:valid" result="pass"/><test-case name="13136NISTXML-SV-IV-list-nonNegativeInteger-minLength-4-3 tokoe:valid" result="pass"/><test-case name="13137NISTXML-SV-IV-list-nonNegativeInteger-minLength-4-4 tokoe:valid" result="pass"/><test-case name="13138NISTXML-SV-IV-list-nonNegativeInteger-minLength-4-5 tokoe:valid" result="pass"/><test-case name="13139NISTSchema-SV-IV-list-nonNegativeInteger-minLength-5 tokoe:valid" result="pass"/><test-case name="13140NISTXML-SV-IV-list-nonNegativeInteger-minLength-5-1 tokoe:valid" result="pass"/><test-case name="13141NISTXML-SV-IV-list-nonNegativeInteger-minLength-5-2 tokoe:valid" result="pass"/><test-case name="13142NISTXML-SV-IV-list-nonNegativeInteger-minLength-5-3 tokoe:valid" result="pass"/><test-case name="13143NISTXML-SV-IV-list-nonNegativeInteger-minLength-5-4 tokoe:valid" result="pass"/><test-case name="13144NISTXML-SV-IV-list-nonNegativeInteger-minLength-5-5 tokoe:valid" result="pass"/><test-case name="13145NISTSchema-SV-IV-list-nonNegativeInteger-length-1 tokoe:valid" result="pass"/><test-case name="13146NISTXML-SV-IV-list-nonNegativeInteger-length-1-1 tokoe:valid" result="pass"/><test-case name="13147NISTXML-SV-IV-list-nonNegativeInteger-length-1-2 tokoe:valid" result="pass"/><test-case name="13148NISTXML-SV-IV-list-nonNegativeInteger-length-1-3 tokoe:valid" result="pass"/><test-case name="13149NISTXML-SV-IV-list-nonNegativeInteger-length-1-4 tokoe:valid" result="pass"/><test-case name="13150NISTXML-SV-IV-list-nonNegativeInteger-length-1-5 tokoe:valid" result="pass"/><test-case name="13151NISTSchema-SV-IV-list-nonNegativeInteger-length-2 tokoe:valid" result="pass"/><test-case name="13152NISTXML-SV-IV-list-nonNegativeInteger-length-2-1 tokoe:valid" result="pass"/><test-case name="13153NISTXML-SV-IV-list-nonNegativeInteger-length-2-2 tokoe:valid" result="pass"/><test-case name="13154NISTXML-SV-IV-list-nonNegativeInteger-length-2-3 tokoe:valid" result="pass"/><test-case name="13155NISTXML-SV-IV-list-nonNegativeInteger-length-2-4 tokoe:valid" result="pass"/><test-case name="13156NISTXML-SV-IV-list-nonNegativeInteger-length-2-5 tokoe:valid" result="pass"/><test-case name="13157NISTSchema-SV-IV-list-nonNegativeInteger-length-3 tokoe:valid" result="pass"/><test-case name="13158NISTXML-SV-IV-list-nonNegativeInteger-length-3-1 tokoe:valid" result="pass"/><test-case name="13159NISTXML-SV-IV-list-nonNegativeInteger-length-3-2 tokoe:valid" result="pass"/><test-case name="13160NISTXML-SV-IV-list-nonNegativeInteger-length-3-3 tokoe:valid" result="pass"/><test-case name="13161NISTXML-SV-IV-list-nonNegativeInteger-length-3-4 tokoe:valid" result="pass"/><test-case name="13162NISTXML-SV-IV-list-nonNegativeInteger-length-3-5 tokoe:valid" result="pass"/><test-case name="13163NISTSchema-SV-IV-list-nonNegativeInteger-length-4 tokoe:valid" result="pass"/><test-case name="13164NISTXML-SV-IV-list-nonNegativeInteger-length-4-1 tokoe:valid" result="pass"/><test-case name="13165NISTXML-SV-IV-list-nonNegativeInteger-length-4-2 tokoe:valid" result="pass"/><test-case name="13166NISTXML-SV-IV-list-nonNegativeInteger-length-4-3 tokoe:valid" result="pass"/><test-case name="13167NISTXML-SV-IV-list-nonNegativeInteger-length-4-4 tokoe:valid" result="pass"/><test-case name="13168NISTXML-SV-IV-list-nonNegativeInteger-length-4-5 tokoe:valid" result="pass"/><test-case name="13169NISTSchema-SV-IV-list-nonNegativeInteger-length-5 tokoe:valid" result="pass"/><test-case name="13170NISTXML-SV-IV-list-nonNegativeInteger-length-5-1 tokoe:valid" result="pass"/><test-case name="13171NISTXML-SV-IV-list-nonNegativeInteger-length-5-2 tokoe:valid" result="pass"/><test-case name="13172NISTXML-SV-IV-list-nonNegativeInteger-length-5-3 tokoe:valid" result="pass"/><test-case name="13173NISTXML-SV-IV-list-nonNegativeInteger-length-5-4 tokoe:valid" result="pass"/><test-case name="13174NISTXML-SV-IV-list-nonNegativeInteger-length-5-5 tokoe:valid" result="pass"/><test-case name="13175NISTSchema-SV-IV-list-nonNegativeInteger-pattern-1 tokoe:valid" result="pass"/><test-case name="13176NISTXML-SV-IV-list-nonNegativeInteger-pattern-1-1 tokoe:valid" result="pass"/><test-case name="13177NISTXML-SV-IV-list-nonNegativeInteger-pattern-1-2 tokoe:valid" result="pass"/><test-case name="13178NISTXML-SV-IV-list-nonNegativeInteger-pattern-1-3 tokoe:valid" result="pass"/><test-case name="13179NISTXML-SV-IV-list-nonNegativeInteger-pattern-1-4 tokoe:valid" result="pass"/><test-case name="13180NISTXML-SV-IV-list-nonNegativeInteger-pattern-1-5 tokoe:valid" result="pass"/><test-case name="13181NISTSchema-SV-IV-list-nonNegativeInteger-pattern-2 tokoe:valid" result="pass"/><test-case name="13182NISTXML-SV-IV-list-nonNegativeInteger-pattern-2-1 tokoe:valid" result="pass"/><test-case name="13183NISTXML-SV-IV-list-nonNegativeInteger-pattern-2-2 tokoe:valid" result="pass"/><test-case name="13184NISTXML-SV-IV-list-nonNegativeInteger-pattern-2-3 tokoe:valid" result="pass"/><test-case name="13185NISTXML-SV-IV-list-nonNegativeInteger-pattern-2-4 tokoe:valid" result="pass"/><test-case name="13186NISTXML-SV-IV-list-nonNegativeInteger-pattern-2-5 tokoe:valid" result="pass"/><test-case name="13187NISTSchema-SV-IV-list-nonNegativeInteger-pattern-3 tokoe:valid" result="pass"/><test-case name="13188NISTXML-SV-IV-list-nonNegativeInteger-pattern-3-1 tokoe:valid" result="pass"/><test-case name="13189NISTXML-SV-IV-list-nonNegativeInteger-pattern-3-2 tokoe:valid" result="pass"/><test-case name="13190NISTXML-SV-IV-list-nonNegativeInteger-pattern-3-3 tokoe:valid" result="pass"/><test-case name="13191NISTXML-SV-IV-list-nonNegativeInteger-pattern-3-4 tokoe:valid" result="pass"/><test-case name="13192NISTXML-SV-IV-list-nonNegativeInteger-pattern-3-5 tokoe:valid" result="pass"/><test-case name="13193NISTSchema-SV-IV-list-nonNegativeInteger-pattern-4 tokoe:valid" result="pass"/><test-case name="13194NISTXML-SV-IV-list-nonNegativeInteger-pattern-4-1 tokoe:valid" result="pass"/><test-case name="13195NISTXML-SV-IV-list-nonNegativeInteger-pattern-4-2 tokoe:valid" result="pass"/><test-case name="13196NISTXML-SV-IV-list-nonNegativeInteger-pattern-4-3 tokoe:valid" result="pass"/><test-case name="13197NISTXML-SV-IV-list-nonNegativeInteger-pattern-4-4 tokoe:valid" result="pass"/><test-case name="13198NISTXML-SV-IV-list-nonNegativeInteger-pattern-4-5 tokoe:valid" result="pass"/><test-case name="13199NISTSchema-SV-IV-list-nonNegativeInteger-pattern-5 tokoe:valid" result="pass"/><test-case name="13200NISTXML-SV-IV-list-nonNegativeInteger-pattern-5-1 tokoe:valid" result="pass"/><test-case name="13201NISTXML-SV-IV-list-nonNegativeInteger-pattern-5-2 tokoe:valid" result="pass"/><test-case name="13202NISTXML-SV-IV-list-nonNegativeInteger-pattern-5-3 tokoe:valid" result="pass"/><test-case name="13203NISTXML-SV-IV-list-nonNegativeInteger-pattern-5-4 tokoe:valid" result="pass"/><test-case name="13204NISTXML-SV-IV-list-nonNegativeInteger-pattern-5-5 tokoe:valid" result="pass"/><test-case name="13205NISTSchema-SV-IV-list-nonNegativeInteger-enumeration-1 tokoe:valid" result="pass"/><test-case name="13206NISTXML-SV-IV-list-nonNegativeInteger-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="13207NISTXML-SV-IV-list-nonNegativeInteger-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="13208NISTXML-SV-IV-list-nonNegativeInteger-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="13209NISTXML-SV-IV-list-nonNegativeInteger-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="13210NISTXML-SV-IV-list-nonNegativeInteger-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="13211NISTSchema-SV-IV-list-nonNegativeInteger-enumeration-2 tokoe:valid" result="pass"/><test-case name="13212NISTXML-SV-IV-list-nonNegativeInteger-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="13213NISTXML-SV-IV-list-nonNegativeInteger-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="13214NISTXML-SV-IV-list-nonNegativeInteger-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="13215NISTXML-SV-IV-list-nonNegativeInteger-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="13216NISTXML-SV-IV-list-nonNegativeInteger-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="13217NISTSchema-SV-IV-list-nonNegativeInteger-enumeration-3 tokoe:valid" result="pass"/><test-case name="13218NISTXML-SV-IV-list-nonNegativeInteger-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="13219NISTXML-SV-IV-list-nonNegativeInteger-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="13220NISTXML-SV-IV-list-nonNegativeInteger-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="13221NISTXML-SV-IV-list-nonNegativeInteger-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="13222NISTXML-SV-IV-list-nonNegativeInteger-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="13223NISTSchema-SV-IV-list-nonNegativeInteger-enumeration-4 tokoe:valid" result="pass"/><test-case name="13224NISTXML-SV-IV-list-nonNegativeInteger-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="13225NISTXML-SV-IV-list-nonNegativeInteger-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="13226NISTXML-SV-IV-list-nonNegativeInteger-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="13227NISTXML-SV-IV-list-nonNegativeInteger-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="13228NISTXML-SV-IV-list-nonNegativeInteger-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="13229NISTSchema-SV-IV-list-nonNegativeInteger-enumeration-5 tokoe:valid" result="pass"/><test-case name="13230NISTXML-SV-IV-list-nonNegativeInteger-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="13231NISTXML-SV-IV-list-nonNegativeInteger-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="13232NISTXML-SV-IV-list-nonNegativeInteger-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="13233NISTXML-SV-IV-list-nonNegativeInteger-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="13234NISTXML-SV-IV-list-nonNegativeInteger-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="13235NISTSchema-SV-IV-list-nonNegativeInteger-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="13236NISTXML-SV-IV-list-nonNegativeInteger-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="13237NISTXML-SV-IV-list-nonNegativeInteger-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="13238NISTXML-SV-IV-list-nonNegativeInteger-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="13239NISTXML-SV-IV-list-nonNegativeInteger-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="13240NISTXML-SV-IV-list-nonNegativeInteger-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="13241NISTSchema-SV-IV-list-unsignedLong-maxLength-1 tokoe:valid" result="pass"/><test-case name="13242NISTXML-SV-IV-list-unsignedLong-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="13243NISTXML-SV-IV-list-unsignedLong-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="13244NISTXML-SV-IV-list-unsignedLong-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="13245NISTXML-SV-IV-list-unsignedLong-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="13246NISTXML-SV-IV-list-unsignedLong-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="13247NISTSchema-SV-IV-list-unsignedLong-maxLength-2 tokoe:valid" result="pass"/><test-case name="13248NISTXML-SV-IV-list-unsignedLong-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="13249NISTXML-SV-IV-list-unsignedLong-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="13250NISTXML-SV-IV-list-unsignedLong-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="13251NISTXML-SV-IV-list-unsignedLong-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="13252NISTXML-SV-IV-list-unsignedLong-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="13253NISTSchema-SV-IV-list-unsignedLong-maxLength-3 tokoe:valid" result="pass"/><test-case name="13254NISTXML-SV-IV-list-unsignedLong-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="13255NISTXML-SV-IV-list-unsignedLong-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="13256NISTXML-SV-IV-list-unsignedLong-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="13257NISTXML-SV-IV-list-unsignedLong-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="13258NISTXML-SV-IV-list-unsignedLong-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="13259NISTSchema-SV-IV-list-unsignedLong-maxLength-4 tokoe:valid" result="pass"/><test-case name="13260NISTXML-SV-IV-list-unsignedLong-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="13261NISTXML-SV-IV-list-unsignedLong-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="13262NISTXML-SV-IV-list-unsignedLong-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="13263NISTXML-SV-IV-list-unsignedLong-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="13264NISTXML-SV-IV-list-unsignedLong-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="13265NISTSchema-SV-IV-list-unsignedLong-maxLength-5 tokoe:valid" result="pass"/><test-case name="13266NISTXML-SV-IV-list-unsignedLong-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="13267NISTXML-SV-IV-list-unsignedLong-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="13268NISTXML-SV-IV-list-unsignedLong-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="13269NISTXML-SV-IV-list-unsignedLong-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="13270NISTXML-SV-IV-list-unsignedLong-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="13271NISTSchema-SV-IV-list-unsignedLong-minLength-1 tokoe:valid" result="pass"/><test-case name="13272NISTXML-SV-IV-list-unsignedLong-minLength-1-1 tokoe:valid" result="pass"/><test-case name="13273NISTXML-SV-IV-list-unsignedLong-minLength-1-2 tokoe:valid" result="pass"/><test-case name="13274NISTXML-SV-IV-list-unsignedLong-minLength-1-3 tokoe:valid" result="pass"/><test-case name="13275NISTXML-SV-IV-list-unsignedLong-minLength-1-4 tokoe:valid" result="pass"/><test-case name="13276NISTXML-SV-IV-list-unsignedLong-minLength-1-5 tokoe:valid" result="pass"/><test-case name="13277NISTSchema-SV-IV-list-unsignedLong-minLength-2 tokoe:valid" result="pass"/><test-case name="13278NISTXML-SV-IV-list-unsignedLong-minLength-2-1 tokoe:valid" result="pass"/><test-case name="13279NISTXML-SV-IV-list-unsignedLong-minLength-2-2 tokoe:valid" result="pass"/><test-case name="13280NISTXML-SV-IV-list-unsignedLong-minLength-2-3 tokoe:valid" result="pass"/><test-case name="13281NISTXML-SV-IV-list-unsignedLong-minLength-2-4 tokoe:valid" result="pass"/><test-case name="13282NISTXML-SV-IV-list-unsignedLong-minLength-2-5 tokoe:valid" result="pass"/><test-case name="13283NISTSchema-SV-IV-list-unsignedLong-minLength-3 tokoe:valid" result="pass"/><test-case name="13284NISTXML-SV-IV-list-unsignedLong-minLength-3-1 tokoe:valid" result="pass"/><test-case name="13285NISTXML-SV-IV-list-unsignedLong-minLength-3-2 tokoe:valid" result="pass"/><test-case name="13286NISTXML-SV-IV-list-unsignedLong-minLength-3-3 tokoe:valid" result="pass"/><test-case name="13287NISTXML-SV-IV-list-unsignedLong-minLength-3-4 tokoe:valid" result="pass"/><test-case name="13288NISTXML-SV-IV-list-unsignedLong-minLength-3-5 tokoe:valid" result="pass"/><test-case name="13289NISTSchema-SV-IV-list-unsignedLong-minLength-4 tokoe:valid" result="pass"/><test-case name="13290NISTXML-SV-IV-list-unsignedLong-minLength-4-1 tokoe:valid" result="pass"/><test-case name="13291NISTXML-SV-IV-list-unsignedLong-minLength-4-2 tokoe:valid" result="pass"/><test-case name="13292NISTXML-SV-IV-list-unsignedLong-minLength-4-3 tokoe:valid" result="pass"/><test-case name="13293NISTXML-SV-IV-list-unsignedLong-minLength-4-4 tokoe:valid" result="pass"/><test-case name="13294NISTXML-SV-IV-list-unsignedLong-minLength-4-5 tokoe:valid" result="pass"/><test-case name="13295NISTSchema-SV-IV-list-unsignedLong-minLength-5 tokoe:valid" result="pass"/><test-case name="13296NISTXML-SV-IV-list-unsignedLong-minLength-5-1 tokoe:valid" result="pass"/><test-case name="13297NISTXML-SV-IV-list-unsignedLong-minLength-5-2 tokoe:valid" result="pass"/><test-case name="13298NISTXML-SV-IV-list-unsignedLong-minLength-5-3 tokoe:valid" result="pass"/><test-case name="13299NISTXML-SV-IV-list-unsignedLong-minLength-5-4 tokoe:valid" result="pass"/><test-case name="13300NISTXML-SV-IV-list-unsignedLong-minLength-5-5 tokoe:valid" result="pass"/><test-case name="13301NISTSchema-SV-IV-list-unsignedLong-length-1 tokoe:valid" result="pass"/><test-case name="13302NISTXML-SV-IV-list-unsignedLong-length-1-1 tokoe:valid" result="pass"/><test-case name="13303NISTXML-SV-IV-list-unsignedLong-length-1-2 tokoe:valid" result="pass"/><test-case name="13304NISTXML-SV-IV-list-unsignedLong-length-1-3 tokoe:valid" result="pass"/><test-case name="13305NISTXML-SV-IV-list-unsignedLong-length-1-4 tokoe:valid" result="pass"/><test-case name="13306NISTXML-SV-IV-list-unsignedLong-length-1-5 tokoe:valid" result="pass"/><test-case name="13307NISTSchema-SV-IV-list-unsignedLong-length-2 tokoe:valid" result="pass"/><test-case name="13308NISTXML-SV-IV-list-unsignedLong-length-2-1 tokoe:valid" result="pass"/><test-case name="13309NISTXML-SV-IV-list-unsignedLong-length-2-2 tokoe:valid" result="pass"/><test-case name="13310NISTXML-SV-IV-list-unsignedLong-length-2-3 tokoe:valid" result="pass"/><test-case name="13311NISTXML-SV-IV-list-unsignedLong-length-2-4 tokoe:valid" result="pass"/><test-case name="13312NISTXML-SV-IV-list-unsignedLong-length-2-5 tokoe:valid" result="pass"/><test-case name="13313NISTSchema-SV-IV-list-unsignedLong-length-3 tokoe:valid" result="pass"/><test-case name="13314NISTXML-SV-IV-list-unsignedLong-length-3-1 tokoe:valid" result="pass"/><test-case name="13315NISTXML-SV-IV-list-unsignedLong-length-3-2 tokoe:valid" result="pass"/><test-case name="13316NISTXML-SV-IV-list-unsignedLong-length-3-3 tokoe:valid" result="pass"/><test-case name="13317NISTXML-SV-IV-list-unsignedLong-length-3-4 tokoe:valid" result="pass"/><test-case name="13318NISTXML-SV-IV-list-unsignedLong-length-3-5 tokoe:valid" result="pass"/><test-case name="13319NISTSchema-SV-IV-list-unsignedLong-length-4 tokoe:valid" result="pass"/><test-case name="13320NISTXML-SV-IV-list-unsignedLong-length-4-1 tokoe:valid" result="pass"/><test-case name="13321NISTXML-SV-IV-list-unsignedLong-length-4-2 tokoe:valid" result="pass"/><test-case name="13322NISTXML-SV-IV-list-unsignedLong-length-4-3 tokoe:valid" result="pass"/><test-case name="13323NISTXML-SV-IV-list-unsignedLong-length-4-4 tokoe:valid" result="pass"/><test-case name="13324NISTXML-SV-IV-list-unsignedLong-length-4-5 tokoe:valid" result="pass"/><test-case name="13325NISTSchema-SV-IV-list-unsignedLong-length-5 tokoe:valid" result="pass"/><test-case name="13326NISTXML-SV-IV-list-unsignedLong-length-5-1 tokoe:valid" result="pass"/><test-case name="13327NISTXML-SV-IV-list-unsignedLong-length-5-2 tokoe:valid" result="pass"/><test-case name="13328NISTXML-SV-IV-list-unsignedLong-length-5-3 tokoe:valid" result="pass"/><test-case name="13329NISTXML-SV-IV-list-unsignedLong-length-5-4 tokoe:valid" result="pass"/><test-case name="13330NISTXML-SV-IV-list-unsignedLong-length-5-5 tokoe:valid" result="pass"/><test-case name="13331NISTSchema-SV-IV-list-unsignedLong-pattern-1 tokoe:valid" result="pass"/><test-case name="13332NISTXML-SV-IV-list-unsignedLong-pattern-1-1 tokoe:valid" result="pass"/><test-case name="13333NISTXML-SV-IV-list-unsignedLong-pattern-1-2 tokoe:valid" result="pass"/><test-case name="13334NISTXML-SV-IV-list-unsignedLong-pattern-1-3 tokoe:valid" result="pass"/><test-case name="13335NISTXML-SV-IV-list-unsignedLong-pattern-1-4 tokoe:valid" result="pass"/><test-case name="13336NISTXML-SV-IV-list-unsignedLong-pattern-1-5 tokoe:valid" result="pass"/><test-case name="13337NISTSchema-SV-IV-list-unsignedLong-pattern-2 tokoe:valid" result="pass"/><test-case name="13338NISTXML-SV-IV-list-unsignedLong-pattern-2-1 tokoe:valid" result="pass"/><test-case name="13339NISTXML-SV-IV-list-unsignedLong-pattern-2-2 tokoe:valid" result="pass"/><test-case name="13340NISTXML-SV-IV-list-unsignedLong-pattern-2-3 tokoe:valid" result="pass"/><test-case name="13341NISTXML-SV-IV-list-unsignedLong-pattern-2-4 tokoe:valid" result="pass"/><test-case name="13342NISTXML-SV-IV-list-unsignedLong-pattern-2-5 tokoe:valid" result="pass"/><test-case name="13343NISTSchema-SV-IV-list-unsignedLong-pattern-3 tokoe:valid" result="pass"/><test-case name="13344NISTXML-SV-IV-list-unsignedLong-pattern-3-1 tokoe:valid" result="pass"/><test-case name="13345NISTXML-SV-IV-list-unsignedLong-pattern-3-2 tokoe:valid" result="pass"/><test-case name="13346NISTXML-SV-IV-list-unsignedLong-pattern-3-3 tokoe:valid" result="pass"/><test-case name="13347NISTXML-SV-IV-list-unsignedLong-pattern-3-4 tokoe:valid" result="pass"/><test-case name="13348NISTXML-SV-IV-list-unsignedLong-pattern-3-5 tokoe:valid" result="pass"/><test-case name="13349NISTSchema-SV-IV-list-unsignedLong-pattern-4 tokoe:valid" result="pass"/><test-case name="13350NISTXML-SV-IV-list-unsignedLong-pattern-4-1 tokoe:valid" result="pass"/><test-case name="13351NISTXML-SV-IV-list-unsignedLong-pattern-4-2 tokoe:valid" result="pass"/><test-case name="13352NISTXML-SV-IV-list-unsignedLong-pattern-4-3 tokoe:valid" result="pass"/><test-case name="13353NISTXML-SV-IV-list-unsignedLong-pattern-4-4 tokoe:valid" result="pass"/><test-case name="13354NISTXML-SV-IV-list-unsignedLong-pattern-4-5 tokoe:valid" result="pass"/><test-case name="13355NISTSchema-SV-IV-list-unsignedLong-pattern-5 tokoe:valid" result="pass"/><test-case name="13356NISTXML-SV-IV-list-unsignedLong-pattern-5-1 tokoe:valid" result="pass"/><test-case name="13357NISTXML-SV-IV-list-unsignedLong-pattern-5-2 tokoe:valid" result="pass"/><test-case name="13358NISTXML-SV-IV-list-unsignedLong-pattern-5-3 tokoe:valid" result="pass"/><test-case name="13359NISTXML-SV-IV-list-unsignedLong-pattern-5-4 tokoe:valid" result="pass"/><test-case name="13360NISTXML-SV-IV-list-unsignedLong-pattern-5-5 tokoe:valid" result="pass"/><test-case name="13361NISTSchema-SV-IV-list-unsignedLong-enumeration-1 tokoe:valid" result="pass"/><test-case name="13362NISTXML-SV-IV-list-unsignedLong-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="13363NISTXML-SV-IV-list-unsignedLong-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="13364NISTXML-SV-IV-list-unsignedLong-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="13365NISTXML-SV-IV-list-unsignedLong-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="13366NISTXML-SV-IV-list-unsignedLong-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="13367NISTSchema-SV-IV-list-unsignedLong-enumeration-2 tokoe:valid" result="pass"/><test-case name="13368NISTXML-SV-IV-list-unsignedLong-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="13369NISTXML-SV-IV-list-unsignedLong-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="13370NISTXML-SV-IV-list-unsignedLong-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="13371NISTXML-SV-IV-list-unsignedLong-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="13372NISTXML-SV-IV-list-unsignedLong-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="13373NISTSchema-SV-IV-list-unsignedLong-enumeration-3 tokoe:valid" result="pass"/><test-case name="13374NISTXML-SV-IV-list-unsignedLong-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="13375NISTXML-SV-IV-list-unsignedLong-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="13376NISTXML-SV-IV-list-unsignedLong-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="13377NISTXML-SV-IV-list-unsignedLong-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="13378NISTXML-SV-IV-list-unsignedLong-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="13379NISTSchema-SV-IV-list-unsignedLong-enumeration-4 tokoe:valid" result="pass"/><test-case name="13380NISTXML-SV-IV-list-unsignedLong-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="13381NISTXML-SV-IV-list-unsignedLong-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="13382NISTXML-SV-IV-list-unsignedLong-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="13383NISTXML-SV-IV-list-unsignedLong-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="13384NISTXML-SV-IV-list-unsignedLong-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="13385NISTSchema-SV-IV-list-unsignedLong-enumeration-5 tokoe:valid" result="pass"/><test-case name="13386NISTXML-SV-IV-list-unsignedLong-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="13387NISTXML-SV-IV-list-unsignedLong-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="13388NISTXML-SV-IV-list-unsignedLong-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="13389NISTXML-SV-IV-list-unsignedLong-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="13390NISTXML-SV-IV-list-unsignedLong-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="13391NISTSchema-SV-IV-list-unsignedLong-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="13392NISTXML-SV-IV-list-unsignedLong-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="13393NISTXML-SV-IV-list-unsignedLong-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="13394NISTXML-SV-IV-list-unsignedLong-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="13395NISTXML-SV-IV-list-unsignedLong-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="13396NISTXML-SV-IV-list-unsignedLong-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="13397NISTSchema-SV-IV-list-unsignedInt-maxLength-1 tokoe:valid" result="pass"/><test-case name="13398NISTXML-SV-IV-list-unsignedInt-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="13399NISTXML-SV-IV-list-unsignedInt-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="13400NISTXML-SV-IV-list-unsignedInt-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="13401NISTXML-SV-IV-list-unsignedInt-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="13402NISTXML-SV-IV-list-unsignedInt-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="13403NISTSchema-SV-IV-list-unsignedInt-maxLength-2 tokoe:valid" result="pass"/><test-case name="13404NISTXML-SV-IV-list-unsignedInt-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="13405NISTXML-SV-IV-list-unsignedInt-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="13406NISTXML-SV-IV-list-unsignedInt-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="13407NISTXML-SV-IV-list-unsignedInt-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="13408NISTXML-SV-IV-list-unsignedInt-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="13409NISTSchema-SV-IV-list-unsignedInt-maxLength-3 tokoe:valid" result="pass"/><test-case name="13410NISTXML-SV-IV-list-unsignedInt-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="13411NISTXML-SV-IV-list-unsignedInt-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="13412NISTXML-SV-IV-list-unsignedInt-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="13413NISTXML-SV-IV-list-unsignedInt-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="13414NISTXML-SV-IV-list-unsignedInt-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="13415NISTSchema-SV-IV-list-unsignedInt-maxLength-4 tokoe:valid" result="pass"/><test-case name="13416NISTXML-SV-IV-list-unsignedInt-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="13417NISTXML-SV-IV-list-unsignedInt-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="13418NISTXML-SV-IV-list-unsignedInt-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="13419NISTXML-SV-IV-list-unsignedInt-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="13420NISTXML-SV-IV-list-unsignedInt-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="13421NISTSchema-SV-IV-list-unsignedInt-maxLength-5 tokoe:valid" result="pass"/><test-case name="13422NISTXML-SV-IV-list-unsignedInt-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="13423NISTXML-SV-IV-list-unsignedInt-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="13424NISTXML-SV-IV-list-unsignedInt-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="13425NISTXML-SV-IV-list-unsignedInt-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="13426NISTXML-SV-IV-list-unsignedInt-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="13427NISTSchema-SV-IV-list-unsignedInt-minLength-1 tokoe:valid" result="pass"/><test-case name="13428NISTXML-SV-IV-list-unsignedInt-minLength-1-1 tokoe:valid" result="pass"/><test-case name="13429NISTXML-SV-IV-list-unsignedInt-minLength-1-2 tokoe:valid" result="pass"/><test-case name="13430NISTXML-SV-IV-list-unsignedInt-minLength-1-3 tokoe:valid" result="pass"/><test-case name="13431NISTXML-SV-IV-list-unsignedInt-minLength-1-4 tokoe:valid" result="pass"/><test-case name="13432NISTXML-SV-IV-list-unsignedInt-minLength-1-5 tokoe:valid" result="pass"/><test-case name="13433NISTSchema-SV-IV-list-unsignedInt-minLength-2 tokoe:valid" result="pass"/><test-case name="13434NISTXML-SV-IV-list-unsignedInt-minLength-2-1 tokoe:valid" result="pass"/><test-case name="13435NISTXML-SV-IV-list-unsignedInt-minLength-2-2 tokoe:valid" result="pass"/><test-case name="13436NISTXML-SV-IV-list-unsignedInt-minLength-2-3 tokoe:valid" result="pass"/><test-case name="13437NISTXML-SV-IV-list-unsignedInt-minLength-2-4 tokoe:valid" result="pass"/><test-case name="13438NISTXML-SV-IV-list-unsignedInt-minLength-2-5 tokoe:valid" result="pass"/><test-case name="13439NISTSchema-SV-IV-list-unsignedInt-minLength-3 tokoe:valid" result="pass"/><test-case name="13440NISTXML-SV-IV-list-unsignedInt-minLength-3-1 tokoe:valid" result="pass"/><test-case name="13441NISTXML-SV-IV-list-unsignedInt-minLength-3-2 tokoe:valid" result="pass"/><test-case name="13442NISTXML-SV-IV-list-unsignedInt-minLength-3-3 tokoe:valid" result="pass"/><test-case name="13443NISTXML-SV-IV-list-unsignedInt-minLength-3-4 tokoe:valid" result="pass"/><test-case name="13444NISTXML-SV-IV-list-unsignedInt-minLength-3-5 tokoe:valid" result="pass"/><test-case name="13445NISTSchema-SV-IV-list-unsignedInt-minLength-4 tokoe:valid" result="pass"/><test-case name="13446NISTXML-SV-IV-list-unsignedInt-minLength-4-1 tokoe:valid" result="pass"/><test-case name="13447NISTXML-SV-IV-list-unsignedInt-minLength-4-2 tokoe:valid" result="pass"/><test-case name="13448NISTXML-SV-IV-list-unsignedInt-minLength-4-3 tokoe:valid" result="pass"/><test-case name="13449NISTXML-SV-IV-list-unsignedInt-minLength-4-4 tokoe:valid" result="pass"/><test-case name="13450NISTXML-SV-IV-list-unsignedInt-minLength-4-5 tokoe:valid" result="pass"/><test-case name="13451NISTSchema-SV-IV-list-unsignedInt-minLength-5 tokoe:valid" result="pass"/><test-case name="13452NISTXML-SV-IV-list-unsignedInt-minLength-5-1 tokoe:valid" result="pass"/><test-case name="13453NISTXML-SV-IV-list-unsignedInt-minLength-5-2 tokoe:valid" result="pass"/><test-case name="13454NISTXML-SV-IV-list-unsignedInt-minLength-5-3 tokoe:valid" result="pass"/><test-case name="13455NISTXML-SV-IV-list-unsignedInt-minLength-5-4 tokoe:valid" result="pass"/><test-case name="13456NISTXML-SV-IV-list-unsignedInt-minLength-5-5 tokoe:valid" result="pass"/><test-case name="13457NISTSchema-SV-IV-list-unsignedInt-length-1 tokoe:valid" result="pass"/><test-case name="13458NISTXML-SV-IV-list-unsignedInt-length-1-1 tokoe:valid" result="pass"/><test-case name="13459NISTXML-SV-IV-list-unsignedInt-length-1-2 tokoe:valid" result="pass"/><test-case name="13460NISTXML-SV-IV-list-unsignedInt-length-1-3 tokoe:valid" result="pass"/><test-case name="13461NISTXML-SV-IV-list-unsignedInt-length-1-4 tokoe:valid" result="pass"/><test-case name="13462NISTXML-SV-IV-list-unsignedInt-length-1-5 tokoe:valid" result="pass"/><test-case name="13463NISTSchema-SV-IV-list-unsignedInt-length-2 tokoe:valid" result="pass"/><test-case name="13464NISTXML-SV-IV-list-unsignedInt-length-2-1 tokoe:valid" result="pass"/><test-case name="13465NISTXML-SV-IV-list-unsignedInt-length-2-2 tokoe:valid" result="pass"/><test-case name="13466NISTXML-SV-IV-list-unsignedInt-length-2-3 tokoe:valid" result="pass"/><test-case name="13467NISTXML-SV-IV-list-unsignedInt-length-2-4 tokoe:valid" result="pass"/><test-case name="13468NISTXML-SV-IV-list-unsignedInt-length-2-5 tokoe:valid" result="pass"/><test-case name="13469NISTSchema-SV-IV-list-unsignedInt-length-3 tokoe:valid" result="pass"/><test-case name="13470NISTXML-SV-IV-list-unsignedInt-length-3-1 tokoe:valid" result="pass"/><test-case name="13471NISTXML-SV-IV-list-unsignedInt-length-3-2 tokoe:valid" result="pass"/><test-case name="13472NISTXML-SV-IV-list-unsignedInt-length-3-3 tokoe:valid" result="pass"/><test-case name="13473NISTXML-SV-IV-list-unsignedInt-length-3-4 tokoe:valid" result="pass"/><test-case name="13474NISTXML-SV-IV-list-unsignedInt-length-3-5 tokoe:valid" result="pass"/><test-case name="13475NISTSchema-SV-IV-list-unsignedInt-length-4 tokoe:valid" result="pass"/><test-case name="13476NISTXML-SV-IV-list-unsignedInt-length-4-1 tokoe:valid" result="pass"/><test-case name="13477NISTXML-SV-IV-list-unsignedInt-length-4-2 tokoe:valid" result="pass"/><test-case name="13478NISTXML-SV-IV-list-unsignedInt-length-4-3 tokoe:valid" result="pass"/><test-case name="13479NISTXML-SV-IV-list-unsignedInt-length-4-4 tokoe:valid" result="pass"/><test-case name="13480NISTXML-SV-IV-list-unsignedInt-length-4-5 tokoe:valid" result="pass"/><test-case name="13481NISTSchema-SV-IV-list-unsignedInt-length-5 tokoe:valid" result="pass"/><test-case name="13482NISTXML-SV-IV-list-unsignedInt-length-5-1 tokoe:valid" result="pass"/><test-case name="13483NISTXML-SV-IV-list-unsignedInt-length-5-2 tokoe:valid" result="pass"/><test-case name="13484NISTXML-SV-IV-list-unsignedInt-length-5-3 tokoe:valid" result="pass"/><test-case name="13485NISTXML-SV-IV-list-unsignedInt-length-5-4 tokoe:valid" result="pass"/><test-case name="13486NISTXML-SV-IV-list-unsignedInt-length-5-5 tokoe:valid" result="pass"/><test-case name="13487NISTSchema-SV-IV-list-unsignedInt-pattern-1 tokoe:valid" result="pass"/><test-case name="13488NISTXML-SV-IV-list-unsignedInt-pattern-1-1 tokoe:valid" result="pass"/><test-case name="13489NISTXML-SV-IV-list-unsignedInt-pattern-1-2 tokoe:valid" result="pass"/><test-case name="13490NISTXML-SV-IV-list-unsignedInt-pattern-1-3 tokoe:valid" result="pass"/><test-case name="13491NISTXML-SV-IV-list-unsignedInt-pattern-1-4 tokoe:valid" result="pass"/><test-case name="13492NISTXML-SV-IV-list-unsignedInt-pattern-1-5 tokoe:valid" result="pass"/><test-case name="13493NISTSchema-SV-IV-list-unsignedInt-pattern-2 tokoe:valid" result="pass"/><test-case name="13494NISTXML-SV-IV-list-unsignedInt-pattern-2-1 tokoe:valid" result="pass"/><test-case name="13495NISTXML-SV-IV-list-unsignedInt-pattern-2-2 tokoe:valid" result="pass"/><test-case name="13496NISTXML-SV-IV-list-unsignedInt-pattern-2-3 tokoe:valid" result="pass"/><test-case name="13497NISTXML-SV-IV-list-unsignedInt-pattern-2-4 tokoe:valid" result="pass"/><test-case name="13498NISTXML-SV-IV-list-unsignedInt-pattern-2-5 tokoe:valid" result="pass"/><test-case name="13499NISTSchema-SV-IV-list-unsignedInt-pattern-3 tokoe:valid" result="pass"/><test-case name="13500NISTXML-SV-IV-list-unsignedInt-pattern-3-1 tokoe:valid" result="pass"/><test-case name="13501NISTXML-SV-IV-list-unsignedInt-pattern-3-2 tokoe:valid" result="pass"/><test-case name="13502NISTXML-SV-IV-list-unsignedInt-pattern-3-3 tokoe:valid" result="pass"/><test-case name="13503NISTXML-SV-IV-list-unsignedInt-pattern-3-4 tokoe:valid" result="pass"/><test-case name="13504NISTXML-SV-IV-list-unsignedInt-pattern-3-5 tokoe:valid" result="pass"/><test-case name="13505NISTSchema-SV-IV-list-unsignedInt-pattern-4 tokoe:valid" result="pass"/><test-case name="13506NISTXML-SV-IV-list-unsignedInt-pattern-4-1 tokoe:valid" result="pass"/><test-case name="13507NISTXML-SV-IV-list-unsignedInt-pattern-4-2 tokoe:valid" result="pass"/><test-case name="13508NISTXML-SV-IV-list-unsignedInt-pattern-4-3 tokoe:valid" result="pass"/><test-case name="13509NISTXML-SV-IV-list-unsignedInt-pattern-4-4 tokoe:valid" result="pass"/><test-case name="13510NISTXML-SV-IV-list-unsignedInt-pattern-4-5 tokoe:valid" result="pass"/><test-case name="13511NISTSchema-SV-IV-list-unsignedInt-pattern-5 tokoe:valid" result="pass"/><test-case name="13512NISTXML-SV-IV-list-unsignedInt-pattern-5-1 tokoe:valid" result="pass"/><test-case name="13513NISTXML-SV-IV-list-unsignedInt-pattern-5-2 tokoe:valid" result="pass"/><test-case name="13514NISTXML-SV-IV-list-unsignedInt-pattern-5-3 tokoe:valid" result="pass"/><test-case name="13515NISTXML-SV-IV-list-unsignedInt-pattern-5-4 tokoe:valid" result="pass"/><test-case name="13516NISTXML-SV-IV-list-unsignedInt-pattern-5-5 tokoe:valid" result="pass"/><test-case name="13517NISTSchema-SV-IV-list-unsignedInt-enumeration-1 tokoe:valid" result="pass"/><test-case name="13518NISTXML-SV-IV-list-unsignedInt-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="13519NISTXML-SV-IV-list-unsignedInt-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="13520NISTXML-SV-IV-list-unsignedInt-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="13521NISTXML-SV-IV-list-unsignedInt-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="13522NISTXML-SV-IV-list-unsignedInt-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="13523NISTSchema-SV-IV-list-unsignedInt-enumeration-2 tokoe:valid" result="pass"/><test-case name="13524NISTXML-SV-IV-list-unsignedInt-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="13525NISTXML-SV-IV-list-unsignedInt-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="13526NISTXML-SV-IV-list-unsignedInt-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="13527NISTXML-SV-IV-list-unsignedInt-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="13528NISTXML-SV-IV-list-unsignedInt-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="13529NISTSchema-SV-IV-list-unsignedInt-enumeration-3 tokoe:valid" result="pass"/><test-case name="13530NISTXML-SV-IV-list-unsignedInt-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="13531NISTXML-SV-IV-list-unsignedInt-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="13532NISTXML-SV-IV-list-unsignedInt-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="13533NISTXML-SV-IV-list-unsignedInt-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="13534NISTXML-SV-IV-list-unsignedInt-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="13535NISTSchema-SV-IV-list-unsignedInt-enumeration-4 tokoe:valid" result="pass"/><test-case name="13536NISTXML-SV-IV-list-unsignedInt-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="13537NISTXML-SV-IV-list-unsignedInt-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="13538NISTXML-SV-IV-list-unsignedInt-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="13539NISTXML-SV-IV-list-unsignedInt-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="13540NISTXML-SV-IV-list-unsignedInt-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="13541NISTSchema-SV-IV-list-unsignedInt-enumeration-5 tokoe:valid" result="pass"/><test-case name="13542NISTXML-SV-IV-list-unsignedInt-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="13543NISTXML-SV-IV-list-unsignedInt-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="13544NISTXML-SV-IV-list-unsignedInt-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="13545NISTXML-SV-IV-list-unsignedInt-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="13546NISTXML-SV-IV-list-unsignedInt-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="13547NISTSchema-SV-IV-list-unsignedInt-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="13548NISTXML-SV-IV-list-unsignedInt-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="13549NISTXML-SV-IV-list-unsignedInt-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="13550NISTXML-SV-IV-list-unsignedInt-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="13551NISTXML-SV-IV-list-unsignedInt-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="13552NISTXML-SV-IV-list-unsignedInt-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="13553NISTSchema-SV-IV-list-unsignedShort-maxLength-1 tokoe:valid" result="pass"/><test-case name="13554NISTXML-SV-IV-list-unsignedShort-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="13555NISTXML-SV-IV-list-unsignedShort-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="13556NISTXML-SV-IV-list-unsignedShort-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="13557NISTXML-SV-IV-list-unsignedShort-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="13558NISTXML-SV-IV-list-unsignedShort-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="13559NISTSchema-SV-IV-list-unsignedShort-maxLength-2 tokoe:valid" result="pass"/><test-case name="13560NISTXML-SV-IV-list-unsignedShort-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="13561NISTXML-SV-IV-list-unsignedShort-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="13562NISTXML-SV-IV-list-unsignedShort-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="13563NISTXML-SV-IV-list-unsignedShort-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="13564NISTXML-SV-IV-list-unsignedShort-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="13565NISTSchema-SV-IV-list-unsignedShort-maxLength-3 tokoe:valid" result="pass"/><test-case name="13566NISTXML-SV-IV-list-unsignedShort-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="13567NISTXML-SV-IV-list-unsignedShort-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="13568NISTXML-SV-IV-list-unsignedShort-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="13569NISTXML-SV-IV-list-unsignedShort-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="13570NISTXML-SV-IV-list-unsignedShort-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="13571NISTSchema-SV-IV-list-unsignedShort-maxLength-4 tokoe:valid" result="pass"/><test-case name="13572NISTXML-SV-IV-list-unsignedShort-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="13573NISTXML-SV-IV-list-unsignedShort-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="13574NISTXML-SV-IV-list-unsignedShort-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="13575NISTXML-SV-IV-list-unsignedShort-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="13576NISTXML-SV-IV-list-unsignedShort-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="13577NISTSchema-SV-IV-list-unsignedShort-maxLength-5 tokoe:valid" result="pass"/><test-case name="13578NISTXML-SV-IV-list-unsignedShort-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="13579NISTXML-SV-IV-list-unsignedShort-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="13580NISTXML-SV-IV-list-unsignedShort-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="13581NISTXML-SV-IV-list-unsignedShort-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="13582NISTXML-SV-IV-list-unsignedShort-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="13583NISTSchema-SV-IV-list-unsignedShort-minLength-1 tokoe:valid" result="pass"/><test-case name="13584NISTXML-SV-IV-list-unsignedShort-minLength-1-1 tokoe:valid" result="pass"/><test-case name="13585NISTXML-SV-IV-list-unsignedShort-minLength-1-2 tokoe:valid" result="pass"/><test-case name="13586NISTXML-SV-IV-list-unsignedShort-minLength-1-3 tokoe:valid" result="pass"/><test-case name="13587NISTXML-SV-IV-list-unsignedShort-minLength-1-4 tokoe:valid" result="pass"/><test-case name="13588NISTXML-SV-IV-list-unsignedShort-minLength-1-5 tokoe:valid" result="pass"/><test-case name="13589NISTSchema-SV-IV-list-unsignedShort-minLength-2 tokoe:valid" result="pass"/><test-case name="13590NISTXML-SV-IV-list-unsignedShort-minLength-2-1 tokoe:valid" result="pass"/><test-case name="13591NISTXML-SV-IV-list-unsignedShort-minLength-2-2 tokoe:valid" result="pass"/><test-case name="13592NISTXML-SV-IV-list-unsignedShort-minLength-2-3 tokoe:valid" result="pass"/><test-case name="13593NISTXML-SV-IV-list-unsignedShort-minLength-2-4 tokoe:valid" result="pass"/><test-case name="13594NISTXML-SV-IV-list-unsignedShort-minLength-2-5 tokoe:valid" result="pass"/><test-case name="13595NISTSchema-SV-IV-list-unsignedShort-minLength-3 tokoe:valid" result="pass"/><test-case name="13596NISTXML-SV-IV-list-unsignedShort-minLength-3-1 tokoe:valid" result="pass"/><test-case name="13597NISTXML-SV-IV-list-unsignedShort-minLength-3-2 tokoe:valid" result="pass"/><test-case name="13598NISTXML-SV-IV-list-unsignedShort-minLength-3-3 tokoe:valid" result="pass"/><test-case name="13599NISTXML-SV-IV-list-unsignedShort-minLength-3-4 tokoe:valid" result="pass"/><test-case name="13600NISTXML-SV-IV-list-unsignedShort-minLength-3-5 tokoe:valid" result="pass"/><test-case name="13601NISTSchema-SV-IV-list-unsignedShort-minLength-4 tokoe:valid" result="pass"/><test-case name="13602NISTXML-SV-IV-list-unsignedShort-minLength-4-1 tokoe:valid" result="pass"/><test-case name="13603NISTXML-SV-IV-list-unsignedShort-minLength-4-2 tokoe:valid" result="pass"/><test-case name="13604NISTXML-SV-IV-list-unsignedShort-minLength-4-3 tokoe:valid" result="pass"/><test-case name="13605NISTXML-SV-IV-list-unsignedShort-minLength-4-4 tokoe:valid" result="pass"/><test-case name="13606NISTXML-SV-IV-list-unsignedShort-minLength-4-5 tokoe:valid" result="pass"/><test-case name="13607NISTSchema-SV-IV-list-unsignedShort-minLength-5 tokoe:valid" result="pass"/><test-case name="13608NISTXML-SV-IV-list-unsignedShort-minLength-5-1 tokoe:valid" result="pass"/><test-case name="13609NISTXML-SV-IV-list-unsignedShort-minLength-5-2 tokoe:valid" result="pass"/><test-case name="13610NISTXML-SV-IV-list-unsignedShort-minLength-5-3 tokoe:valid" result="pass"/><test-case name="13611NISTXML-SV-IV-list-unsignedShort-minLength-5-4 tokoe:valid" result="pass"/><test-case name="13612NISTXML-SV-IV-list-unsignedShort-minLength-5-5 tokoe:valid" result="pass"/><test-case name="13613NISTSchema-SV-IV-list-unsignedShort-length-1 tokoe:valid" result="pass"/><test-case name="13614NISTXML-SV-IV-list-unsignedShort-length-1-1 tokoe:valid" result="pass"/><test-case name="13615NISTXML-SV-IV-list-unsignedShort-length-1-2 tokoe:valid" result="pass"/><test-case name="13616NISTXML-SV-IV-list-unsignedShort-length-1-3 tokoe:valid" result="pass"/><test-case name="13617NISTXML-SV-IV-list-unsignedShort-length-1-4 tokoe:valid" result="pass"/><test-case name="13618NISTXML-SV-IV-list-unsignedShort-length-1-5 tokoe:valid" result="pass"/><test-case name="13619NISTSchema-SV-IV-list-unsignedShort-length-2 tokoe:valid" result="pass"/><test-case name="13620NISTXML-SV-IV-list-unsignedShort-length-2-1 tokoe:valid" result="pass"/><test-case name="13621NISTXML-SV-IV-list-unsignedShort-length-2-2 tokoe:valid" result="pass"/><test-case name="13622NISTXML-SV-IV-list-unsignedShort-length-2-3 tokoe:valid" result="pass"/><test-case name="13623NISTXML-SV-IV-list-unsignedShort-length-2-4 tokoe:valid" result="pass"/><test-case name="13624NISTXML-SV-IV-list-unsignedShort-length-2-5 tokoe:valid" result="pass"/><test-case name="13625NISTSchema-SV-IV-list-unsignedShort-length-3 tokoe:valid" result="pass"/><test-case name="13626NISTXML-SV-IV-list-unsignedShort-length-3-1 tokoe:valid" result="pass"/><test-case name="13627NISTXML-SV-IV-list-unsignedShort-length-3-2 tokoe:valid" result="pass"/><test-case name="13628NISTXML-SV-IV-list-unsignedShort-length-3-3 tokoe:valid" result="pass"/><test-case name="13629NISTXML-SV-IV-list-unsignedShort-length-3-4 tokoe:valid" result="pass"/><test-case name="13630NISTXML-SV-IV-list-unsignedShort-length-3-5 tokoe:valid" result="pass"/><test-case name="13631NISTSchema-SV-IV-list-unsignedShort-length-4 tokoe:valid" result="pass"/><test-case name="13632NISTXML-SV-IV-list-unsignedShort-length-4-1 tokoe:valid" result="pass"/><test-case name="13633NISTXML-SV-IV-list-unsignedShort-length-4-2 tokoe:valid" result="pass"/><test-case name="13634NISTXML-SV-IV-list-unsignedShort-length-4-3 tokoe:valid" result="pass"/><test-case name="13635NISTXML-SV-IV-list-unsignedShort-length-4-4 tokoe:valid" result="pass"/><test-case name="13636NISTXML-SV-IV-list-unsignedShort-length-4-5 tokoe:valid" result="pass"/><test-case name="13637NISTSchema-SV-IV-list-unsignedShort-length-5 tokoe:valid" result="pass"/><test-case name="13638NISTXML-SV-IV-list-unsignedShort-length-5-1 tokoe:valid" result="pass"/><test-case name="13639NISTXML-SV-IV-list-unsignedShort-length-5-2 tokoe:valid" result="pass"/><test-case name="13640NISTXML-SV-IV-list-unsignedShort-length-5-3 tokoe:valid" result="pass"/><test-case name="13641NISTXML-SV-IV-list-unsignedShort-length-5-4 tokoe:valid" result="pass"/><test-case name="13642NISTXML-SV-IV-list-unsignedShort-length-5-5 tokoe:valid" result="pass"/><test-case name="13643NISTSchema-SV-IV-list-unsignedShort-pattern-1 tokoe:valid" result="pass"/><test-case name="13644NISTXML-SV-IV-list-unsignedShort-pattern-1-1 tokoe:valid" result="pass"/><test-case name="13645NISTXML-SV-IV-list-unsignedShort-pattern-1-2 tokoe:valid" result="pass"/><test-case name="13646NISTXML-SV-IV-list-unsignedShort-pattern-1-3 tokoe:valid" result="pass"/><test-case name="13647NISTXML-SV-IV-list-unsignedShort-pattern-1-4 tokoe:valid" result="pass"/><test-case name="13648NISTXML-SV-IV-list-unsignedShort-pattern-1-5 tokoe:valid" result="pass"/><test-case name="13649NISTSchema-SV-IV-list-unsignedShort-pattern-2 tokoe:valid" result="pass"/><test-case name="13650NISTXML-SV-IV-list-unsignedShort-pattern-2-1 tokoe:valid" result="pass"/><test-case name="13651NISTXML-SV-IV-list-unsignedShort-pattern-2-2 tokoe:valid" result="pass"/><test-case name="13652NISTXML-SV-IV-list-unsignedShort-pattern-2-3 tokoe:valid" result="pass"/><test-case name="13653NISTXML-SV-IV-list-unsignedShort-pattern-2-4 tokoe:valid" result="pass"/><test-case name="13654NISTXML-SV-IV-list-unsignedShort-pattern-2-5 tokoe:valid" result="pass"/><test-case name="13655NISTSchema-SV-IV-list-unsignedShort-pattern-3 tokoe:valid" result="pass"/><test-case name="13656NISTXML-SV-IV-list-unsignedShort-pattern-3-1 tokoe:valid" result="pass"/><test-case name="13657NISTXML-SV-IV-list-unsignedShort-pattern-3-2 tokoe:valid" result="pass"/><test-case name="13658NISTXML-SV-IV-list-unsignedShort-pattern-3-3 tokoe:valid" result="pass"/><test-case name="13659NISTXML-SV-IV-list-unsignedShort-pattern-3-4 tokoe:valid" result="pass"/><test-case name="13660NISTXML-SV-IV-list-unsignedShort-pattern-3-5 tokoe:valid" result="pass"/><test-case name="13661NISTSchema-SV-IV-list-unsignedShort-pattern-4 tokoe:valid" result="pass"/><test-case name="13662NISTXML-SV-IV-list-unsignedShort-pattern-4-1 tokoe:valid" result="pass"/><test-case name="13663NISTXML-SV-IV-list-unsignedShort-pattern-4-2 tokoe:valid" result="pass"/><test-case name="13664NISTXML-SV-IV-list-unsignedShort-pattern-4-3 tokoe:valid" result="pass"/><test-case name="13665NISTXML-SV-IV-list-unsignedShort-pattern-4-4 tokoe:valid" result="pass"/><test-case name="13666NISTXML-SV-IV-list-unsignedShort-pattern-4-5 tokoe:valid" result="pass"/><test-case name="13667NISTSchema-SV-IV-list-unsignedShort-pattern-5 tokoe:valid" result="pass"/><test-case name="13668NISTXML-SV-IV-list-unsignedShort-pattern-5-1 tokoe:valid" result="pass"/><test-case name="13669NISTXML-SV-IV-list-unsignedShort-pattern-5-2 tokoe:valid" result="pass"/><test-case name="13670NISTXML-SV-IV-list-unsignedShort-pattern-5-3 tokoe:valid" result="pass"/><test-case name="13671NISTXML-SV-IV-list-unsignedShort-pattern-5-4 tokoe:valid" result="pass"/><test-case name="13672NISTXML-SV-IV-list-unsignedShort-pattern-5-5 tokoe:valid" result="pass"/><test-case name="13673NISTSchema-SV-IV-list-unsignedShort-enumeration-1 tokoe:valid" result="pass"/><test-case name="13674NISTXML-SV-IV-list-unsignedShort-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="13675NISTXML-SV-IV-list-unsignedShort-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="13676NISTXML-SV-IV-list-unsignedShort-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="13677NISTXML-SV-IV-list-unsignedShort-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="13678NISTXML-SV-IV-list-unsignedShort-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="13679NISTSchema-SV-IV-list-unsignedShort-enumeration-2 tokoe:valid" result="pass"/><test-case name="13680NISTXML-SV-IV-list-unsignedShort-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="13681NISTXML-SV-IV-list-unsignedShort-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="13682NISTXML-SV-IV-list-unsignedShort-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="13683NISTXML-SV-IV-list-unsignedShort-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="13684NISTXML-SV-IV-list-unsignedShort-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="13685NISTSchema-SV-IV-list-unsignedShort-enumeration-3 tokoe:valid" result="pass"/><test-case name="13686NISTXML-SV-IV-list-unsignedShort-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="13687NISTXML-SV-IV-list-unsignedShort-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="13688NISTXML-SV-IV-list-unsignedShort-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="13689NISTXML-SV-IV-list-unsignedShort-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="13690NISTXML-SV-IV-list-unsignedShort-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="13691NISTSchema-SV-IV-list-unsignedShort-enumeration-4 tokoe:valid" result="pass"/><test-case name="13692NISTXML-SV-IV-list-unsignedShort-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="13693NISTXML-SV-IV-list-unsignedShort-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="13694NISTXML-SV-IV-list-unsignedShort-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="13695NISTXML-SV-IV-list-unsignedShort-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="13696NISTXML-SV-IV-list-unsignedShort-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="13697NISTSchema-SV-IV-list-unsignedShort-enumeration-5 tokoe:valid" result="pass"/><test-case name="13698NISTXML-SV-IV-list-unsignedShort-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="13699NISTXML-SV-IV-list-unsignedShort-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="13700NISTXML-SV-IV-list-unsignedShort-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="13701NISTXML-SV-IV-list-unsignedShort-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="13702NISTXML-SV-IV-list-unsignedShort-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="13703NISTSchema-SV-IV-list-unsignedShort-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="13704NISTXML-SV-IV-list-unsignedShort-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="13705NISTXML-SV-IV-list-unsignedShort-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="13706NISTXML-SV-IV-list-unsignedShort-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="13707NISTXML-SV-IV-list-unsignedShort-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="13708NISTXML-SV-IV-list-unsignedShort-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="13709NISTSchema-SV-IV-list-unsignedByte-maxLength-1 tokoe:valid" result="pass"/><test-case name="13710NISTXML-SV-IV-list-unsignedByte-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="13711NISTXML-SV-IV-list-unsignedByte-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="13712NISTXML-SV-IV-list-unsignedByte-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="13713NISTXML-SV-IV-list-unsignedByte-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="13714NISTXML-SV-IV-list-unsignedByte-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="13715NISTSchema-SV-IV-list-unsignedByte-maxLength-2 tokoe:valid" result="pass"/><test-case name="13716NISTXML-SV-IV-list-unsignedByte-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="13717NISTXML-SV-IV-list-unsignedByte-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="13718NISTXML-SV-IV-list-unsignedByte-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="13719NISTXML-SV-IV-list-unsignedByte-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="13720NISTXML-SV-IV-list-unsignedByte-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="13721NISTSchema-SV-IV-list-unsignedByte-maxLength-3 tokoe:valid" result="pass"/><test-case name="13722NISTXML-SV-IV-list-unsignedByte-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="13723NISTXML-SV-IV-list-unsignedByte-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="13724NISTXML-SV-IV-list-unsignedByte-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="13725NISTXML-SV-IV-list-unsignedByte-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="13726NISTXML-SV-IV-list-unsignedByte-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="13727NISTSchema-SV-IV-list-unsignedByte-maxLength-4 tokoe:valid" result="pass"/><test-case name="13728NISTXML-SV-IV-list-unsignedByte-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="13729NISTXML-SV-IV-list-unsignedByte-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="13730NISTXML-SV-IV-list-unsignedByte-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="13731NISTXML-SV-IV-list-unsignedByte-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="13732NISTXML-SV-IV-list-unsignedByte-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="13733NISTSchema-SV-IV-list-unsignedByte-maxLength-5 tokoe:valid" result="pass"/><test-case name="13734NISTXML-SV-IV-list-unsignedByte-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="13735NISTXML-SV-IV-list-unsignedByte-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="13736NISTXML-SV-IV-list-unsignedByte-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="13737NISTXML-SV-IV-list-unsignedByte-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="13738NISTXML-SV-IV-list-unsignedByte-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="13739NISTSchema-SV-IV-list-unsignedByte-minLength-1 tokoe:valid" result="pass"/><test-case name="13740NISTXML-SV-IV-list-unsignedByte-minLength-1-1 tokoe:valid" result="pass"/><test-case name="13741NISTXML-SV-IV-list-unsignedByte-minLength-1-2 tokoe:valid" result="pass"/><test-case name="13742NISTXML-SV-IV-list-unsignedByte-minLength-1-3 tokoe:valid" result="pass"/><test-case name="13743NISTXML-SV-IV-list-unsignedByte-minLength-1-4 tokoe:valid" result="pass"/><test-case name="13744NISTXML-SV-IV-list-unsignedByte-minLength-1-5 tokoe:valid" result="pass"/><test-case name="13745NISTSchema-SV-IV-list-unsignedByte-minLength-2 tokoe:valid" result="pass"/><test-case name="13746NISTXML-SV-IV-list-unsignedByte-minLength-2-1 tokoe:valid" result="pass"/><test-case name="13747NISTXML-SV-IV-list-unsignedByte-minLength-2-2 tokoe:valid" result="pass"/><test-case name="13748NISTXML-SV-IV-list-unsignedByte-minLength-2-3 tokoe:valid" result="pass"/><test-case name="13749NISTXML-SV-IV-list-unsignedByte-minLength-2-4 tokoe:valid" result="pass"/><test-case name="13750NISTXML-SV-IV-list-unsignedByte-minLength-2-5 tokoe:valid" result="pass"/><test-case name="13751NISTSchema-SV-IV-list-unsignedByte-minLength-3 tokoe:valid" result="pass"/><test-case name="13752NISTXML-SV-IV-list-unsignedByte-minLength-3-1 tokoe:valid" result="pass"/><test-case name="13753NISTXML-SV-IV-list-unsignedByte-minLength-3-2 tokoe:valid" result="pass"/><test-case name="13754NISTXML-SV-IV-list-unsignedByte-minLength-3-3 tokoe:valid" result="pass"/><test-case name="13755NISTXML-SV-IV-list-unsignedByte-minLength-3-4 tokoe:valid" result="pass"/><test-case name="13756NISTXML-SV-IV-list-unsignedByte-minLength-3-5 tokoe:valid" result="pass"/><test-case name="13757NISTSchema-SV-IV-list-unsignedByte-minLength-4 tokoe:valid" result="pass"/><test-case name="13758NISTXML-SV-IV-list-unsignedByte-minLength-4-1 tokoe:valid" result="pass"/><test-case name="13759NISTXML-SV-IV-list-unsignedByte-minLength-4-2 tokoe:valid" result="pass"/><test-case name="13760NISTXML-SV-IV-list-unsignedByte-minLength-4-3 tokoe:valid" result="pass"/><test-case name="13761NISTXML-SV-IV-list-unsignedByte-minLength-4-4 tokoe:valid" result="pass"/><test-case name="13762NISTXML-SV-IV-list-unsignedByte-minLength-4-5 tokoe:valid" result="pass"/><test-case name="13763NISTSchema-SV-IV-list-unsignedByte-minLength-5 tokoe:valid" result="pass"/><test-case name="13764NISTXML-SV-IV-list-unsignedByte-minLength-5-1 tokoe:valid" result="pass"/><test-case name="13765NISTXML-SV-IV-list-unsignedByte-minLength-5-2 tokoe:valid" result="pass"/><test-case name="13766NISTXML-SV-IV-list-unsignedByte-minLength-5-3 tokoe:valid" result="pass"/><test-case name="13767NISTXML-SV-IV-list-unsignedByte-minLength-5-4 tokoe:valid" result="pass"/><test-case name="13768NISTXML-SV-IV-list-unsignedByte-minLength-5-5 tokoe:valid" result="pass"/><test-case name="13769NISTSchema-SV-IV-list-unsignedByte-length-1 tokoe:valid" result="pass"/><test-case name="13770NISTXML-SV-IV-list-unsignedByte-length-1-1 tokoe:valid" result="pass"/><test-case name="13771NISTXML-SV-IV-list-unsignedByte-length-1-2 tokoe:valid" result="pass"/><test-case name="13772NISTXML-SV-IV-list-unsignedByte-length-1-3 tokoe:valid" result="pass"/><test-case name="13773NISTXML-SV-IV-list-unsignedByte-length-1-4 tokoe:valid" result="pass"/><test-case name="13774NISTXML-SV-IV-list-unsignedByte-length-1-5 tokoe:valid" result="pass"/><test-case name="13775NISTSchema-SV-IV-list-unsignedByte-length-2 tokoe:valid" result="pass"/><test-case name="13776NISTXML-SV-IV-list-unsignedByte-length-2-1 tokoe:valid" result="pass"/><test-case name="13777NISTXML-SV-IV-list-unsignedByte-length-2-2 tokoe:valid" result="pass"/><test-case name="13778NISTXML-SV-IV-list-unsignedByte-length-2-3 tokoe:valid" result="pass"/><test-case name="13779NISTXML-SV-IV-list-unsignedByte-length-2-4 tokoe:valid" result="pass"/><test-case name="13780NISTXML-SV-IV-list-unsignedByte-length-2-5 tokoe:valid" result="pass"/><test-case name="13781NISTSchema-SV-IV-list-unsignedByte-length-3 tokoe:valid" result="pass"/><test-case name="13782NISTXML-SV-IV-list-unsignedByte-length-3-1 tokoe:valid" result="pass"/><test-case name="13783NISTXML-SV-IV-list-unsignedByte-length-3-2 tokoe:valid" result="pass"/><test-case name="13784NISTXML-SV-IV-list-unsignedByte-length-3-3 tokoe:valid" result="pass"/><test-case name="13785NISTXML-SV-IV-list-unsignedByte-length-3-4 tokoe:valid" result="pass"/><test-case name="13786NISTXML-SV-IV-list-unsignedByte-length-3-5 tokoe:valid" result="pass"/><test-case name="13787NISTSchema-SV-IV-list-unsignedByte-length-4 tokoe:valid" result="pass"/><test-case name="13788NISTXML-SV-IV-list-unsignedByte-length-4-1 tokoe:valid" result="pass"/><test-case name="13789NISTXML-SV-IV-list-unsignedByte-length-4-2 tokoe:valid" result="pass"/><test-case name="13790NISTXML-SV-IV-list-unsignedByte-length-4-3 tokoe:valid" result="pass"/><test-case name="13791NISTXML-SV-IV-list-unsignedByte-length-4-4 tokoe:valid" result="pass"/><test-case name="13792NISTXML-SV-IV-list-unsignedByte-length-4-5 tokoe:valid" result="pass"/><test-case name="13793NISTSchema-SV-IV-list-unsignedByte-length-5 tokoe:valid" result="pass"/><test-case name="13794NISTXML-SV-IV-list-unsignedByte-length-5-1 tokoe:valid" result="pass"/><test-case name="13795NISTXML-SV-IV-list-unsignedByte-length-5-2 tokoe:valid" result="pass"/><test-case name="13796NISTXML-SV-IV-list-unsignedByte-length-5-3 tokoe:valid" result="pass"/><test-case name="13797NISTXML-SV-IV-list-unsignedByte-length-5-4 tokoe:valid" result="pass"/><test-case name="13798NISTXML-SV-IV-list-unsignedByte-length-5-5 tokoe:valid" result="pass"/><test-case name="13799NISTSchema-SV-IV-list-unsignedByte-pattern-1 tokoe:valid" result="pass"/><test-case name="13800NISTXML-SV-IV-list-unsignedByte-pattern-1-1 tokoe:valid" result="pass"/><test-case name="13801NISTXML-SV-IV-list-unsignedByte-pattern-1-2 tokoe:valid" result="pass"/><test-case name="13802NISTXML-SV-IV-list-unsignedByte-pattern-1-3 tokoe:valid" result="pass"/><test-case name="13803NISTXML-SV-IV-list-unsignedByte-pattern-1-4 tokoe:valid" result="pass"/><test-case name="13804NISTXML-SV-IV-list-unsignedByte-pattern-1-5 tokoe:valid" result="pass"/><test-case name="13805NISTSchema-SV-IV-list-unsignedByte-pattern-2 tokoe:valid" result="pass"/><test-case name="13806NISTXML-SV-IV-list-unsignedByte-pattern-2-1 tokoe:valid" result="pass"/><test-case name="13807NISTXML-SV-IV-list-unsignedByte-pattern-2-2 tokoe:valid" result="pass"/><test-case name="13808NISTXML-SV-IV-list-unsignedByte-pattern-2-3 tokoe:valid" result="pass"/><test-case name="13809NISTXML-SV-IV-list-unsignedByte-pattern-2-4 tokoe:valid" result="pass"/><test-case name="13810NISTXML-SV-IV-list-unsignedByte-pattern-2-5 tokoe:valid" result="pass"/><test-case name="13811NISTSchema-SV-IV-list-unsignedByte-pattern-3 tokoe:valid" result="pass"/><test-case name="13812NISTXML-SV-IV-list-unsignedByte-pattern-3-1 tokoe:valid" result="pass"/><test-case name="13813NISTXML-SV-IV-list-unsignedByte-pattern-3-2 tokoe:valid" result="pass"/><test-case name="13814NISTXML-SV-IV-list-unsignedByte-pattern-3-3 tokoe:valid" result="pass"/><test-case name="13815NISTXML-SV-IV-list-unsignedByte-pattern-3-4 tokoe:valid" result="pass"/><test-case name="13816NISTXML-SV-IV-list-unsignedByte-pattern-3-5 tokoe:valid" result="pass"/><test-case name="13817NISTSchema-SV-IV-list-unsignedByte-pattern-4 tokoe:valid" result="pass"/><test-case name="13818NISTXML-SV-IV-list-unsignedByte-pattern-4-1 tokoe:valid" result="pass"/><test-case name="13819NISTXML-SV-IV-list-unsignedByte-pattern-4-2 tokoe:valid" result="pass"/><test-case name="13820NISTXML-SV-IV-list-unsignedByte-pattern-4-3 tokoe:valid" result="pass"/><test-case name="13821NISTXML-SV-IV-list-unsignedByte-pattern-4-4 tokoe:valid" result="pass"/><test-case name="13822NISTXML-SV-IV-list-unsignedByte-pattern-4-5 tokoe:valid" result="pass"/><test-case name="13823NISTSchema-SV-IV-list-unsignedByte-pattern-5 tokoe:valid" result="pass"/><test-case name="13824NISTXML-SV-IV-list-unsignedByte-pattern-5-1 tokoe:valid" result="pass"/><test-case name="13825NISTXML-SV-IV-list-unsignedByte-pattern-5-2 tokoe:valid" result="pass"/><test-case name="13826NISTXML-SV-IV-list-unsignedByte-pattern-5-3 tokoe:valid" result="pass"/><test-case name="13827NISTXML-SV-IV-list-unsignedByte-pattern-5-4 tokoe:valid" result="pass"/><test-case name="13828NISTXML-SV-IV-list-unsignedByte-pattern-5-5 tokoe:valid" result="pass"/><test-case name="13829NISTSchema-SV-IV-list-unsignedByte-enumeration-1 tokoe:valid" result="pass"/><test-case name="13830NISTXML-SV-IV-list-unsignedByte-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="13831NISTXML-SV-IV-list-unsignedByte-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="13832NISTXML-SV-IV-list-unsignedByte-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="13833NISTXML-SV-IV-list-unsignedByte-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="13834NISTXML-SV-IV-list-unsignedByte-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="13835NISTSchema-SV-IV-list-unsignedByte-enumeration-2 tokoe:valid" result="pass"/><test-case name="13836NISTXML-SV-IV-list-unsignedByte-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="13837NISTXML-SV-IV-list-unsignedByte-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="13838NISTXML-SV-IV-list-unsignedByte-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="13839NISTXML-SV-IV-list-unsignedByte-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="13840NISTXML-SV-IV-list-unsignedByte-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="13841NISTSchema-SV-IV-list-unsignedByte-enumeration-3 tokoe:valid" result="pass"/><test-case name="13842NISTXML-SV-IV-list-unsignedByte-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="13843NISTXML-SV-IV-list-unsignedByte-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="13844NISTXML-SV-IV-list-unsignedByte-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="13845NISTXML-SV-IV-list-unsignedByte-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="13846NISTXML-SV-IV-list-unsignedByte-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="13847NISTSchema-SV-IV-list-unsignedByte-enumeration-4 tokoe:valid" result="pass"/><test-case name="13848NISTXML-SV-IV-list-unsignedByte-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="13849NISTXML-SV-IV-list-unsignedByte-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="13850NISTXML-SV-IV-list-unsignedByte-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="13851NISTXML-SV-IV-list-unsignedByte-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="13852NISTXML-SV-IV-list-unsignedByte-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="13853NISTSchema-SV-IV-list-unsignedByte-enumeration-5 tokoe:valid" result="pass"/><test-case name="13854NISTXML-SV-IV-list-unsignedByte-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="13855NISTXML-SV-IV-list-unsignedByte-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="13856NISTXML-SV-IV-list-unsignedByte-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="13857NISTXML-SV-IV-list-unsignedByte-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="13858NISTXML-SV-IV-list-unsignedByte-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="13859NISTSchema-SV-IV-list-unsignedByte-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="13860NISTXML-SV-IV-list-unsignedByte-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="13861NISTXML-SV-IV-list-unsignedByte-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="13862NISTXML-SV-IV-list-unsignedByte-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="13863NISTXML-SV-IV-list-unsignedByte-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="13864NISTXML-SV-IV-list-unsignedByte-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="13865NISTSchema-SV-IV-list-positiveInteger-maxLength-1 tokoe:valid" result="pass"/><test-case name="13866NISTXML-SV-IV-list-positiveInteger-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="13867NISTXML-SV-IV-list-positiveInteger-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="13868NISTXML-SV-IV-list-positiveInteger-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="13869NISTXML-SV-IV-list-positiveInteger-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="13870NISTXML-SV-IV-list-positiveInteger-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="13871NISTSchema-SV-IV-list-positiveInteger-maxLength-2 tokoe:valid" result="pass"/><test-case name="13872NISTXML-SV-IV-list-positiveInteger-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="13873NISTXML-SV-IV-list-positiveInteger-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="13874NISTXML-SV-IV-list-positiveInteger-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="13875NISTXML-SV-IV-list-positiveInteger-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="13876NISTXML-SV-IV-list-positiveInteger-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="13877NISTSchema-SV-IV-list-positiveInteger-maxLength-3 tokoe:valid" result="pass"/><test-case name="13878NISTXML-SV-IV-list-positiveInteger-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="13879NISTXML-SV-IV-list-positiveInteger-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="13880NISTXML-SV-IV-list-positiveInteger-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="13881NISTXML-SV-IV-list-positiveInteger-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="13882NISTXML-SV-IV-list-positiveInteger-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="13883NISTSchema-SV-IV-list-positiveInteger-maxLength-4 tokoe:valid" result="pass"/><test-case name="13884NISTXML-SV-IV-list-positiveInteger-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="13885NISTXML-SV-IV-list-positiveInteger-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="13886NISTXML-SV-IV-list-positiveInteger-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="13887NISTXML-SV-IV-list-positiveInteger-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="13888NISTXML-SV-IV-list-positiveInteger-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="13889NISTSchema-SV-IV-list-positiveInteger-maxLength-5 tokoe:valid" result="pass"/><test-case name="13890NISTXML-SV-IV-list-positiveInteger-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="13891NISTXML-SV-IV-list-positiveInteger-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="13892NISTXML-SV-IV-list-positiveInteger-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="13893NISTXML-SV-IV-list-positiveInteger-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="13894NISTXML-SV-IV-list-positiveInteger-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="13895NISTSchema-SV-IV-list-positiveInteger-minLength-1 tokoe:valid" result="pass"/><test-case name="13896NISTXML-SV-IV-list-positiveInteger-minLength-1-1 tokoe:valid" result="pass"/><test-case name="13897NISTXML-SV-IV-list-positiveInteger-minLength-1-2 tokoe:valid" result="pass"/><test-case name="13898NISTXML-SV-IV-list-positiveInteger-minLength-1-3 tokoe:valid" result="pass"/><test-case name="13899NISTXML-SV-IV-list-positiveInteger-minLength-1-4 tokoe:valid" result="pass"/><test-case name="13900NISTXML-SV-IV-list-positiveInteger-minLength-1-5 tokoe:valid" result="pass"/><test-case name="13901NISTSchema-SV-IV-list-positiveInteger-minLength-2 tokoe:valid" result="pass"/><test-case name="13902NISTXML-SV-IV-list-positiveInteger-minLength-2-1 tokoe:valid" result="pass"/><test-case name="13903NISTXML-SV-IV-list-positiveInteger-minLength-2-2 tokoe:valid" result="pass"/><test-case name="13904NISTXML-SV-IV-list-positiveInteger-minLength-2-3 tokoe:valid" result="pass"/><test-case name="13905NISTXML-SV-IV-list-positiveInteger-minLength-2-4 tokoe:valid" result="pass"/><test-case name="13906NISTXML-SV-IV-list-positiveInteger-minLength-2-5 tokoe:valid" result="pass"/><test-case name="13907NISTSchema-SV-IV-list-positiveInteger-minLength-3 tokoe:valid" result="pass"/><test-case name="13908NISTXML-SV-IV-list-positiveInteger-minLength-3-1 tokoe:valid" result="pass"/><test-case name="13909NISTXML-SV-IV-list-positiveInteger-minLength-3-2 tokoe:valid" result="pass"/><test-case name="13910NISTXML-SV-IV-list-positiveInteger-minLength-3-3 tokoe:valid" result="pass"/><test-case name="13911NISTXML-SV-IV-list-positiveInteger-minLength-3-4 tokoe:valid" result="pass"/><test-case name="13912NISTXML-SV-IV-list-positiveInteger-minLength-3-5 tokoe:valid" result="pass"/><test-case name="13913NISTSchema-SV-IV-list-positiveInteger-minLength-4 tokoe:valid" result="pass"/><test-case name="13914NISTXML-SV-IV-list-positiveInteger-minLength-4-1 tokoe:valid" result="pass"/><test-case name="13915NISTXML-SV-IV-list-positiveInteger-minLength-4-2 tokoe:valid" result="pass"/><test-case name="13916NISTXML-SV-IV-list-positiveInteger-minLength-4-3 tokoe:valid" result="pass"/><test-case name="13917NISTXML-SV-IV-list-positiveInteger-minLength-4-4 tokoe:valid" result="pass"/><test-case name="13918NISTXML-SV-IV-list-positiveInteger-minLength-4-5 tokoe:valid" result="pass"/><test-case name="13919NISTSchema-SV-IV-list-positiveInteger-minLength-5 tokoe:valid" result="pass"/><test-case name="13920NISTXML-SV-IV-list-positiveInteger-minLength-5-1 tokoe:valid" result="pass"/><test-case name="13921NISTXML-SV-IV-list-positiveInteger-minLength-5-2 tokoe:valid" result="pass"/><test-case name="13922NISTXML-SV-IV-list-positiveInteger-minLength-5-3 tokoe:valid" result="pass"/><test-case name="13923NISTXML-SV-IV-list-positiveInteger-minLength-5-4 tokoe:valid" result="pass"/><test-case name="13924NISTXML-SV-IV-list-positiveInteger-minLength-5-5 tokoe:valid" result="pass"/><test-case name="13925NISTSchema-SV-IV-list-positiveInteger-length-1 tokoe:valid" result="pass"/><test-case name="13926NISTXML-SV-IV-list-positiveInteger-length-1-1 tokoe:valid" result="pass"/><test-case name="13927NISTXML-SV-IV-list-positiveInteger-length-1-2 tokoe:valid" result="pass"/><test-case name="13928NISTXML-SV-IV-list-positiveInteger-length-1-3 tokoe:valid" result="pass"/><test-case name="13929NISTXML-SV-IV-list-positiveInteger-length-1-4 tokoe:valid" result="pass"/><test-case name="13930NISTXML-SV-IV-list-positiveInteger-length-1-5 tokoe:valid" result="pass"/><test-case name="13931NISTSchema-SV-IV-list-positiveInteger-length-2 tokoe:valid" result="pass"/><test-case name="13932NISTXML-SV-IV-list-positiveInteger-length-2-1 tokoe:valid" result="pass"/><test-case name="13933NISTXML-SV-IV-list-positiveInteger-length-2-2 tokoe:valid" result="pass"/><test-case name="13934NISTXML-SV-IV-list-positiveInteger-length-2-3 tokoe:valid" result="pass"/><test-case name="13935NISTXML-SV-IV-list-positiveInteger-length-2-4 tokoe:valid" result="pass"/><test-case name="13936NISTXML-SV-IV-list-positiveInteger-length-2-5 tokoe:valid" result="pass"/><test-case name="13937NISTSchema-SV-IV-list-positiveInteger-length-3 tokoe:valid" result="pass"/><test-case name="13938NISTXML-SV-IV-list-positiveInteger-length-3-1 tokoe:valid" result="pass"/><test-case name="13939NISTXML-SV-IV-list-positiveInteger-length-3-2 tokoe:valid" result="pass"/><test-case name="13940NISTXML-SV-IV-list-positiveInteger-length-3-3 tokoe:valid" result="pass"/><test-case name="13941NISTXML-SV-IV-list-positiveInteger-length-3-4 tokoe:valid" result="pass"/><test-case name="13942NISTXML-SV-IV-list-positiveInteger-length-3-5 tokoe:valid" result="pass"/><test-case name="13943NISTSchema-SV-IV-list-positiveInteger-length-4 tokoe:valid" result="pass"/><test-case name="13944NISTXML-SV-IV-list-positiveInteger-length-4-1 tokoe:valid" result="pass"/><test-case name="13945NISTXML-SV-IV-list-positiveInteger-length-4-2 tokoe:valid" result="pass"/><test-case name="13946NISTXML-SV-IV-list-positiveInteger-length-4-3 tokoe:valid" result="pass"/><test-case name="13947NISTXML-SV-IV-list-positiveInteger-length-4-4 tokoe:valid" result="pass"/><test-case name="13948NISTXML-SV-IV-list-positiveInteger-length-4-5 tokoe:valid" result="pass"/><test-case name="13949NISTSchema-SV-IV-list-positiveInteger-length-5 tokoe:valid" result="pass"/><test-case name="13950NISTXML-SV-IV-list-positiveInteger-length-5-1 tokoe:valid" result="pass"/><test-case name="13951NISTXML-SV-IV-list-positiveInteger-length-5-2 tokoe:valid" result="pass"/><test-case name="13952NISTXML-SV-IV-list-positiveInteger-length-5-3 tokoe:valid" result="pass"/><test-case name="13953NISTXML-SV-IV-list-positiveInteger-length-5-4 tokoe:valid" result="pass"/><test-case name="13954NISTXML-SV-IV-list-positiveInteger-length-5-5 tokoe:valid" result="pass"/><test-case name="13955NISTSchema-SV-IV-list-positiveInteger-pattern-1 tokoe:valid" result="pass"/><test-case name="13956NISTXML-SV-IV-list-positiveInteger-pattern-1-1 tokoe:valid" result="pass"/><test-case name="13957NISTXML-SV-IV-list-positiveInteger-pattern-1-2 tokoe:valid" result="pass"/><test-case name="13958NISTXML-SV-IV-list-positiveInteger-pattern-1-3 tokoe:valid" result="pass"/><test-case name="13959NISTXML-SV-IV-list-positiveInteger-pattern-1-4 tokoe:valid" result="pass"/><test-case name="13960NISTXML-SV-IV-list-positiveInteger-pattern-1-5 tokoe:valid" result="pass"/><test-case name="13961NISTSchema-SV-IV-list-positiveInteger-pattern-2 tokoe:valid" result="pass"/><test-case name="13962NISTXML-SV-IV-list-positiveInteger-pattern-2-1 tokoe:valid" result="pass"/><test-case name="13963NISTXML-SV-IV-list-positiveInteger-pattern-2-2 tokoe:valid" result="pass"/><test-case name="13964NISTXML-SV-IV-list-positiveInteger-pattern-2-3 tokoe:valid" result="pass"/><test-case name="13965NISTXML-SV-IV-list-positiveInteger-pattern-2-4 tokoe:valid" result="pass"/><test-case name="13966NISTXML-SV-IV-list-positiveInteger-pattern-2-5 tokoe:valid" result="pass"/><test-case name="13967NISTSchema-SV-IV-list-positiveInteger-pattern-3 tokoe:valid" result="pass"/><test-case name="13968NISTXML-SV-IV-list-positiveInteger-pattern-3-1 tokoe:valid" result="pass"/><test-case name="13969NISTXML-SV-IV-list-positiveInteger-pattern-3-2 tokoe:valid" result="pass"/><test-case name="13970NISTXML-SV-IV-list-positiveInteger-pattern-3-3 tokoe:valid" result="pass"/><test-case name="13971NISTXML-SV-IV-list-positiveInteger-pattern-3-4 tokoe:valid" result="pass"/><test-case name="13972NISTXML-SV-IV-list-positiveInteger-pattern-3-5 tokoe:valid" result="pass"/><test-case name="13973NISTSchema-SV-IV-list-positiveInteger-pattern-4 tokoe:valid" result="pass"/><test-case name="13974NISTXML-SV-IV-list-positiveInteger-pattern-4-1 tokoe:valid" result="pass"/><test-case name="13975NISTXML-SV-IV-list-positiveInteger-pattern-4-2 tokoe:valid" result="pass"/><test-case name="13976NISTXML-SV-IV-list-positiveInteger-pattern-4-3 tokoe:valid" result="pass"/><test-case name="13977NISTXML-SV-IV-list-positiveInteger-pattern-4-4 tokoe:valid" result="pass"/><test-case name="13978NISTXML-SV-IV-list-positiveInteger-pattern-4-5 tokoe:valid" result="pass"/><test-case name="13979NISTSchema-SV-IV-list-positiveInteger-pattern-5 tokoe:valid" result="pass"/><test-case name="13980NISTXML-SV-IV-list-positiveInteger-pattern-5-1 tokoe:valid" result="pass"/><test-case name="13981NISTXML-SV-IV-list-positiveInteger-pattern-5-2 tokoe:valid" result="pass"/><test-case name="13982NISTXML-SV-IV-list-positiveInteger-pattern-5-3 tokoe:valid" result="pass"/><test-case name="13983NISTXML-SV-IV-list-positiveInteger-pattern-5-4 tokoe:valid" result="pass"/><test-case name="13984NISTXML-SV-IV-list-positiveInteger-pattern-5-5 tokoe:valid" result="pass"/><test-case name="13985NISTSchema-SV-IV-list-positiveInteger-enumeration-1 tokoe:valid" result="pass"/><test-case name="13986NISTXML-SV-IV-list-positiveInteger-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="13987NISTXML-SV-IV-list-positiveInteger-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="13988NISTXML-SV-IV-list-positiveInteger-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="13989NISTXML-SV-IV-list-positiveInteger-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="13990NISTXML-SV-IV-list-positiveInteger-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="13991NISTSchema-SV-IV-list-positiveInteger-enumeration-2 tokoe:valid" result="pass"/><test-case name="13992NISTXML-SV-IV-list-positiveInteger-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="13993NISTXML-SV-IV-list-positiveInteger-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="13994NISTXML-SV-IV-list-positiveInteger-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="13995NISTXML-SV-IV-list-positiveInteger-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="13996NISTXML-SV-IV-list-positiveInteger-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="13997NISTSchema-SV-IV-list-positiveInteger-enumeration-3 tokoe:valid" result="pass"/><test-case name="13998NISTXML-SV-IV-list-positiveInteger-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="13999NISTXML-SV-IV-list-positiveInteger-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="14000NISTXML-SV-IV-list-positiveInteger-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="14001NISTXML-SV-IV-list-positiveInteger-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="14002NISTXML-SV-IV-list-positiveInteger-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="14003NISTSchema-SV-IV-list-positiveInteger-enumeration-4 tokoe:valid" result="pass"/><test-case name="14004NISTXML-SV-IV-list-positiveInteger-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="14005NISTXML-SV-IV-list-positiveInteger-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="14006NISTXML-SV-IV-list-positiveInteger-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="14007NISTXML-SV-IV-list-positiveInteger-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="14008NISTXML-SV-IV-list-positiveInteger-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="14009NISTSchema-SV-IV-list-positiveInteger-enumeration-5 tokoe:valid" result="pass"/><test-case name="14010NISTXML-SV-IV-list-positiveInteger-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="14011NISTXML-SV-IV-list-positiveInteger-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="14012NISTXML-SV-IV-list-positiveInteger-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="14013NISTXML-SV-IV-list-positiveInteger-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="14014NISTXML-SV-IV-list-positiveInteger-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="14015NISTSchema-SV-IV-list-positiveInteger-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="14016NISTXML-SV-IV-list-positiveInteger-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="14017NISTXML-SV-IV-list-positiveInteger-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="14018NISTXML-SV-IV-list-positiveInteger-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="14019NISTXML-SV-IV-list-positiveInteger-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="14020NISTXML-SV-IV-list-positiveInteger-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="14021NISTSchema-SV-IV-list-double-maxLength-1 tokoe:valid" result="pass"/><test-case name="14022NISTXML-SV-IV-list-double-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="14023NISTXML-SV-IV-list-double-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="14024NISTXML-SV-IV-list-double-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="14025NISTXML-SV-IV-list-double-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="14026NISTXML-SV-IV-list-double-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="14027NISTSchema-SV-IV-list-double-maxLength-2 tokoe:valid" result="pass"/><test-case name="14028NISTXML-SV-IV-list-double-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="14029NISTXML-SV-IV-list-double-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="14030NISTXML-SV-IV-list-double-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="14031NISTXML-SV-IV-list-double-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="14032NISTXML-SV-IV-list-double-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="14033NISTSchema-SV-IV-list-double-maxLength-3 tokoe:valid" result="pass"/><test-case name="14034NISTXML-SV-IV-list-double-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="14035NISTXML-SV-IV-list-double-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="14036NISTXML-SV-IV-list-double-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="14037NISTXML-SV-IV-list-double-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="14038NISTXML-SV-IV-list-double-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="14039NISTSchema-SV-IV-list-double-maxLength-4 tokoe:valid" result="pass"/><test-case name="14040NISTXML-SV-IV-list-double-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="14041NISTXML-SV-IV-list-double-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="14042NISTXML-SV-IV-list-double-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="14043NISTXML-SV-IV-list-double-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="14044NISTXML-SV-IV-list-double-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="14045NISTSchema-SV-IV-list-double-maxLength-5 tokoe:valid" result="pass"/><test-case name="14046NISTXML-SV-IV-list-double-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="14047NISTXML-SV-IV-list-double-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="14048NISTXML-SV-IV-list-double-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="14049NISTXML-SV-IV-list-double-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="14050NISTXML-SV-IV-list-double-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="14051NISTSchema-SV-IV-list-double-minLength-1 tokoe:valid" result="pass"/><test-case name="14052NISTXML-SV-IV-list-double-minLength-1-1 tokoe:valid" result="pass"/><test-case name="14053NISTXML-SV-IV-list-double-minLength-1-2 tokoe:valid" result="pass"/><test-case name="14054NISTXML-SV-IV-list-double-minLength-1-3 tokoe:valid" result="pass"/><test-case name="14055NISTXML-SV-IV-list-double-minLength-1-4 tokoe:valid" result="pass"/><test-case name="14056NISTXML-SV-IV-list-double-minLength-1-5 tokoe:valid" result="pass"/><test-case name="14057NISTSchema-SV-IV-list-double-minLength-2 tokoe:valid" result="pass"/><test-case name="14058NISTXML-SV-IV-list-double-minLength-2-1 tokoe:valid" result="pass"/><test-case name="14059NISTXML-SV-IV-list-double-minLength-2-2 tokoe:valid" result="pass"/><test-case name="14060NISTXML-SV-IV-list-double-minLength-2-3 tokoe:valid" result="pass"/><test-case name="14061NISTXML-SV-IV-list-double-minLength-2-4 tokoe:valid" result="pass"/><test-case name="14062NISTXML-SV-IV-list-double-minLength-2-5 tokoe:valid" result="pass"/><test-case name="14063NISTSchema-SV-IV-list-double-minLength-3 tokoe:valid" result="pass"/><test-case name="14064NISTXML-SV-IV-list-double-minLength-3-1 tokoe:valid" result="pass"/><test-case name="14065NISTXML-SV-IV-list-double-minLength-3-2 tokoe:valid" result="fail"/><test-case name="14066NISTXML-SV-IV-list-double-minLength-3-3 tokoe:valid" result="pass"/><test-case name="14067NISTXML-SV-IV-list-double-minLength-3-4 tokoe:valid" result="pass"/><test-case name="14068NISTXML-SV-IV-list-double-minLength-3-5 tokoe:valid" result="pass"/><test-case name="14069NISTSchema-SV-IV-list-double-minLength-4 tokoe:valid" result="pass"/><test-case name="14070NISTXML-SV-IV-list-double-minLength-4-1 tokoe:valid" result="pass"/><test-case name="14071NISTXML-SV-IV-list-double-minLength-4-2 tokoe:valid" result="pass"/><test-case name="14072NISTXML-SV-IV-list-double-minLength-4-3 tokoe:valid" result="pass"/><test-case name="14073NISTXML-SV-IV-list-double-minLength-4-4 tokoe:valid" result="pass"/><test-case name="14074NISTXML-SV-IV-list-double-minLength-4-5 tokoe:valid" result="pass"/><test-case name="14075NISTSchema-SV-IV-list-double-minLength-5 tokoe:valid" result="pass"/><test-case name="14076NISTXML-SV-IV-list-double-minLength-5-1 tokoe:valid" result="pass"/><test-case name="14077NISTXML-SV-IV-list-double-minLength-5-2 tokoe:valid" result="pass"/><test-case name="14078NISTXML-SV-IV-list-double-minLength-5-3 tokoe:valid" result="pass"/><test-case name="14079NISTXML-SV-IV-list-double-minLength-5-4 tokoe:valid" result="pass"/><test-case name="14080NISTXML-SV-IV-list-double-minLength-5-5 tokoe:valid" result="pass"/><test-case name="14081NISTSchema-SV-IV-list-double-length-1 tokoe:valid" result="pass"/><test-case name="14082NISTXML-SV-IV-list-double-length-1-1 tokoe:valid" result="pass"/><test-case name="14083NISTXML-SV-IV-list-double-length-1-2 tokoe:valid" result="pass"/><test-case name="14084NISTXML-SV-IV-list-double-length-1-3 tokoe:valid" result="pass"/><test-case name="14085NISTXML-SV-IV-list-double-length-1-4 tokoe:valid" result="pass"/><test-case name="14086NISTXML-SV-IV-list-double-length-1-5 tokoe:valid" result="pass"/><test-case name="14087NISTSchema-SV-IV-list-double-length-2 tokoe:valid" result="pass"/><test-case name="14088NISTXML-SV-IV-list-double-length-2-1 tokoe:valid" result="pass"/><test-case name="14089NISTXML-SV-IV-list-double-length-2-2 tokoe:valid" result="pass"/><test-case name="14090NISTXML-SV-IV-list-double-length-2-3 tokoe:valid" result="pass"/><test-case name="14091NISTXML-SV-IV-list-double-length-2-4 tokoe:valid" result="pass"/><test-case name="14092NISTXML-SV-IV-list-double-length-2-5 tokoe:valid" result="pass"/><test-case name="14093NISTSchema-SV-IV-list-double-length-3 tokoe:valid" result="pass"/><test-case name="14094NISTXML-SV-IV-list-double-length-3-1 tokoe:valid" result="pass"/><test-case name="14095NISTXML-SV-IV-list-double-length-3-2 tokoe:valid" result="pass"/><test-case name="14096NISTXML-SV-IV-list-double-length-3-3 tokoe:valid" result="pass"/><test-case name="14097NISTXML-SV-IV-list-double-length-3-4 tokoe:valid" result="pass"/><test-case name="14098NISTXML-SV-IV-list-double-length-3-5 tokoe:valid" result="pass"/><test-case name="14099NISTSchema-SV-IV-list-double-length-4 tokoe:valid" result="pass"/><test-case name="14100NISTXML-SV-IV-list-double-length-4-1 tokoe:valid" result="pass"/><test-case name="14101NISTXML-SV-IV-list-double-length-4-2 tokoe:valid" result="pass"/><test-case name="14102NISTXML-SV-IV-list-double-length-4-3 tokoe:valid" result="pass"/><test-case name="14103NISTXML-SV-IV-list-double-length-4-4 tokoe:valid" result="pass"/><test-case name="14104NISTXML-SV-IV-list-double-length-4-5 tokoe:valid" result="pass"/><test-case name="14105NISTSchema-SV-IV-list-double-length-5 tokoe:valid" result="pass"/><test-case name="14106NISTXML-SV-IV-list-double-length-5-1 tokoe:valid" result="pass"/><test-case name="14107NISTXML-SV-IV-list-double-length-5-2 tokoe:valid" result="pass"/><test-case name="14108NISTXML-SV-IV-list-double-length-5-3 tokoe:valid" result="pass"/><test-case name="14109NISTXML-SV-IV-list-double-length-5-4 tokoe:valid" result="pass"/><test-case name="14110NISTXML-SV-IV-list-double-length-5-5 tokoe:valid" result="pass"/><test-case name="14111NISTSchema-SV-IV-list-double-pattern-1 tokoe:valid" result="pass"/><test-case name="14112NISTXML-SV-IV-list-double-pattern-1-1 tokoe:valid" result="pass"/><test-case name="14113NISTXML-SV-IV-list-double-pattern-1-2 tokoe:valid" result="pass"/><test-case name="14114NISTXML-SV-IV-list-double-pattern-1-3 tokoe:valid" result="pass"/><test-case name="14115NISTXML-SV-IV-list-double-pattern-1-4 tokoe:valid" result="pass"/><test-case name="14116NISTXML-SV-IV-list-double-pattern-1-5 tokoe:valid" result="pass"/><test-case name="14117NISTSchema-SV-IV-list-double-pattern-2 tokoe:valid" result="pass"/><test-case name="14118NISTXML-SV-IV-list-double-pattern-2-1 tokoe:valid" result="pass"/><test-case name="14119NISTXML-SV-IV-list-double-pattern-2-2 tokoe:valid" result="pass"/><test-case name="14120NISTXML-SV-IV-list-double-pattern-2-3 tokoe:valid" result="pass"/><test-case name="14121NISTXML-SV-IV-list-double-pattern-2-4 tokoe:valid" result="pass"/><test-case name="14122NISTXML-SV-IV-list-double-pattern-2-5 tokoe:valid" result="pass"/><test-case name="14123NISTSchema-SV-IV-list-double-pattern-3 tokoe:valid" result="pass"/><test-case name="14124NISTXML-SV-IV-list-double-pattern-3-1 tokoe:valid" result="pass"/><test-case name="14125NISTXML-SV-IV-list-double-pattern-3-2 tokoe:valid" result="pass"/><test-case name="14126NISTXML-SV-IV-list-double-pattern-3-3 tokoe:valid" result="pass"/><test-case name="14127NISTXML-SV-IV-list-double-pattern-3-4 tokoe:valid" result="pass"/><test-case name="14128NISTXML-SV-IV-list-double-pattern-3-5 tokoe:valid" result="pass"/><test-case name="14129NISTSchema-SV-IV-list-double-pattern-4 tokoe:valid" result="pass"/><test-case name="14130NISTXML-SV-IV-list-double-pattern-4-1 tokoe:valid" result="pass"/><test-case name="14131NISTXML-SV-IV-list-double-pattern-4-2 tokoe:valid" result="pass"/><test-case name="14132NISTXML-SV-IV-list-double-pattern-4-3 tokoe:valid" result="pass"/><test-case name="14133NISTXML-SV-IV-list-double-pattern-4-4 tokoe:valid" result="pass"/><test-case name="14134NISTXML-SV-IV-list-double-pattern-4-5 tokoe:valid" result="pass"/><test-case name="14135NISTSchema-SV-IV-list-double-pattern-5 tokoe:valid" result="pass"/><test-case name="14136NISTXML-SV-IV-list-double-pattern-5-1 tokoe:valid" result="pass"/><test-case name="14137NISTXML-SV-IV-list-double-pattern-5-2 tokoe:valid" result="pass"/><test-case name="14138NISTXML-SV-IV-list-double-pattern-5-3 tokoe:valid" result="pass"/><test-case name="14139NISTXML-SV-IV-list-double-pattern-5-4 tokoe:valid" result="pass"/><test-case name="14140NISTXML-SV-IV-list-double-pattern-5-5 tokoe:valid" result="pass"/><test-case name="14141NISTSchema-SV-IV-list-double-enumeration-1 tokoe:valid" result="pass"/><test-case name="14142NISTXML-SV-IV-list-double-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="14143NISTXML-SV-IV-list-double-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="14144NISTXML-SV-IV-list-double-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="14145NISTXML-SV-IV-list-double-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="14146NISTXML-SV-IV-list-double-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="14147NISTSchema-SV-IV-list-double-enumeration-2 tokoe:valid" result="pass"/><test-case name="14148NISTXML-SV-IV-list-double-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="14149NISTXML-SV-IV-list-double-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="14150NISTXML-SV-IV-list-double-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="14151NISTXML-SV-IV-list-double-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="14152NISTXML-SV-IV-list-double-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="14153NISTSchema-SV-IV-list-double-enumeration-3 tokoe:valid" result="pass"/><test-case name="14154NISTXML-SV-IV-list-double-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="14155NISTXML-SV-IV-list-double-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="14156NISTXML-SV-IV-list-double-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="14157NISTXML-SV-IV-list-double-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="14158NISTXML-SV-IV-list-double-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="14159NISTSchema-SV-IV-list-double-enumeration-4 tokoe:valid" result="pass"/><test-case name="14160NISTXML-SV-IV-list-double-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="14161NISTXML-SV-IV-list-double-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="14162NISTXML-SV-IV-list-double-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="14163NISTXML-SV-IV-list-double-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="14164NISTXML-SV-IV-list-double-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="14165NISTSchema-SV-IV-list-double-enumeration-5 tokoe:valid" result="pass"/><test-case name="14166NISTXML-SV-IV-list-double-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="14167NISTXML-SV-IV-list-double-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="14168NISTXML-SV-IV-list-double-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="14169NISTXML-SV-IV-list-double-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="14170NISTXML-SV-IV-list-double-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="14171NISTSchema-SV-IV-list-double-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="14172NISTXML-SV-IV-list-double-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="14173NISTXML-SV-IV-list-double-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="14174NISTXML-SV-IV-list-double-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="14175NISTXML-SV-IV-list-double-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="14176NISTXML-SV-IV-list-double-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="14177NISTSchema-SV-IV-list-float-maxLength-1 tokoe:valid" result="pass"/><test-case name="14178NISTXML-SV-IV-list-float-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="14179NISTXML-SV-IV-list-float-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="14180NISTXML-SV-IV-list-float-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="14181NISTXML-SV-IV-list-float-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="14182NISTXML-SV-IV-list-float-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="14183NISTSchema-SV-IV-list-float-maxLength-2 tokoe:valid" result="pass"/><test-case name="14184NISTXML-SV-IV-list-float-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="14185NISTXML-SV-IV-list-float-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="14186NISTXML-SV-IV-list-float-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="14187NISTXML-SV-IV-list-float-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="14188NISTXML-SV-IV-list-float-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="14189NISTSchema-SV-IV-list-float-maxLength-3 tokoe:valid" result="pass"/><test-case name="14190NISTXML-SV-IV-list-float-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="14191NISTXML-SV-IV-list-float-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="14192NISTXML-SV-IV-list-float-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="14193NISTXML-SV-IV-list-float-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="14194NISTXML-SV-IV-list-float-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="14195NISTSchema-SV-IV-list-float-maxLength-4 tokoe:valid" result="pass"/><test-case name="14196NISTXML-SV-IV-list-float-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="14197NISTXML-SV-IV-list-float-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="14198NISTXML-SV-IV-list-float-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="14199NISTXML-SV-IV-list-float-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="14200NISTXML-SV-IV-list-float-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="14201NISTSchema-SV-IV-list-float-maxLength-5 tokoe:valid" result="pass"/><test-case name="14202NISTXML-SV-IV-list-float-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="14203NISTXML-SV-IV-list-float-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="14204NISTXML-SV-IV-list-float-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="14205NISTXML-SV-IV-list-float-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="14206NISTXML-SV-IV-list-float-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="14207NISTSchema-SV-IV-list-float-minLength-1 tokoe:valid" result="pass"/><test-case name="14208NISTXML-SV-IV-list-float-minLength-1-1 tokoe:valid" result="pass"/><test-case name="14209NISTXML-SV-IV-list-float-minLength-1-2 tokoe:valid" result="pass"/><test-case name="14210NISTXML-SV-IV-list-float-minLength-1-3 tokoe:valid" result="pass"/><test-case name="14211NISTXML-SV-IV-list-float-minLength-1-4 tokoe:valid" result="pass"/><test-case name="14212NISTXML-SV-IV-list-float-minLength-1-5 tokoe:valid" result="pass"/><test-case name="14213NISTSchema-SV-IV-list-float-minLength-2 tokoe:valid" result="pass"/><test-case name="14214NISTXML-SV-IV-list-float-minLength-2-1 tokoe:valid" result="pass"/><test-case name="14215NISTXML-SV-IV-list-float-minLength-2-2 tokoe:valid" result="pass"/><test-case name="14216NISTXML-SV-IV-list-float-minLength-2-3 tokoe:valid" result="pass"/><test-case name="14217NISTXML-SV-IV-list-float-minLength-2-4 tokoe:valid" result="pass"/><test-case name="14218NISTXML-SV-IV-list-float-minLength-2-5 tokoe:valid" result="pass"/><test-case name="14219NISTSchema-SV-IV-list-float-minLength-3 tokoe:valid" result="pass"/><test-case name="14220NISTXML-SV-IV-list-float-minLength-3-1 tokoe:valid" result="pass"/><test-case name="14221NISTXML-SV-IV-list-float-minLength-3-2 tokoe:valid" result="pass"/><test-case name="14222NISTXML-SV-IV-list-float-minLength-3-3 tokoe:valid" result="pass"/><test-case name="14223NISTXML-SV-IV-list-float-minLength-3-4 tokoe:valid" result="pass"/><test-case name="14224NISTXML-SV-IV-list-float-minLength-3-5 tokoe:valid" result="pass"/><test-case name="14225NISTSchema-SV-IV-list-float-minLength-4 tokoe:valid" result="pass"/><test-case name="14226NISTXML-SV-IV-list-float-minLength-4-1 tokoe:valid" result="pass"/><test-case name="14227NISTXML-SV-IV-list-float-minLength-4-2 tokoe:valid" result="pass"/><test-case name="14228NISTXML-SV-IV-list-float-minLength-4-3 tokoe:valid" result="pass"/><test-case name="14229NISTXML-SV-IV-list-float-minLength-4-4 tokoe:valid" result="pass"/><test-case name="14230NISTXML-SV-IV-list-float-minLength-4-5 tokoe:valid" result="pass"/><test-case name="14231NISTSchema-SV-IV-list-float-minLength-5 tokoe:valid" result="pass"/><test-case name="14232NISTXML-SV-IV-list-float-minLength-5-1 tokoe:valid" result="pass"/><test-case name="14233NISTXML-SV-IV-list-float-minLength-5-2 tokoe:valid" result="pass"/><test-case name="14234NISTXML-SV-IV-list-float-minLength-5-3 tokoe:valid" result="pass"/><test-case name="14235NISTXML-SV-IV-list-float-minLength-5-4 tokoe:valid" result="pass"/><test-case name="14236NISTXML-SV-IV-list-float-minLength-5-5 tokoe:valid" result="pass"/><test-case name="14237NISTSchema-SV-IV-list-float-length-1 tokoe:valid" result="pass"/><test-case name="14238NISTXML-SV-IV-list-float-length-1-1 tokoe:valid" result="pass"/><test-case name="14239NISTXML-SV-IV-list-float-length-1-2 tokoe:valid" result="pass"/><test-case name="14240NISTXML-SV-IV-list-float-length-1-3 tokoe:valid" result="pass"/><test-case name="14241NISTXML-SV-IV-list-float-length-1-4 tokoe:valid" result="pass"/><test-case name="14242NISTXML-SV-IV-list-float-length-1-5 tokoe:valid" result="pass"/><test-case name="14243NISTSchema-SV-IV-list-float-length-2 tokoe:valid" result="pass"/><test-case name="14244NISTXML-SV-IV-list-float-length-2-1 tokoe:valid" result="pass"/><test-case name="14245NISTXML-SV-IV-list-float-length-2-2 tokoe:valid" result="pass"/><test-case name="14246NISTXML-SV-IV-list-float-length-2-3 tokoe:valid" result="pass"/><test-case name="14247NISTXML-SV-IV-list-float-length-2-4 tokoe:valid" result="pass"/><test-case name="14248NISTXML-SV-IV-list-float-length-2-5 tokoe:valid" result="pass"/><test-case name="14249NISTSchema-SV-IV-list-float-length-3 tokoe:valid" result="pass"/><test-case name="14250NISTXML-SV-IV-list-float-length-3-1 tokoe:valid" result="pass"/><test-case name="14251NISTXML-SV-IV-list-float-length-3-2 tokoe:valid" result="pass"/><test-case name="14252NISTXML-SV-IV-list-float-length-3-3 tokoe:valid" result="pass"/><test-case name="14253NISTXML-SV-IV-list-float-length-3-4 tokoe:valid" result="pass"/><test-case name="14254NISTXML-SV-IV-list-float-length-3-5 tokoe:valid" result="pass"/><test-case name="14255NISTSchema-SV-IV-list-float-length-4 tokoe:valid" result="pass"/><test-case name="14256NISTXML-SV-IV-list-float-length-4-1 tokoe:valid" result="pass"/><test-case name="14257NISTXML-SV-IV-list-float-length-4-2 tokoe:valid" result="pass"/><test-case name="14258NISTXML-SV-IV-list-float-length-4-3 tokoe:valid" result="pass"/><test-case name="14259NISTXML-SV-IV-list-float-length-4-4 tokoe:valid" result="pass"/><test-case name="14260NISTXML-SV-IV-list-float-length-4-5 tokoe:valid" result="pass"/><test-case name="14261NISTSchema-SV-IV-list-float-length-5 tokoe:valid" result="pass"/><test-case name="14262NISTXML-SV-IV-list-float-length-5-1 tokoe:valid" result="pass"/><test-case name="14263NISTXML-SV-IV-list-float-length-5-2 tokoe:valid" result="pass"/><test-case name="14264NISTXML-SV-IV-list-float-length-5-3 tokoe:valid" result="pass"/><test-case name="14265NISTXML-SV-IV-list-float-length-5-4 tokoe:valid" result="pass"/><test-case name="14266NISTXML-SV-IV-list-float-length-5-5 tokoe:valid" result="pass"/><test-case name="14267NISTSchema-SV-IV-list-float-pattern-1 tokoe:valid" result="pass"/><test-case name="14268NISTXML-SV-IV-list-float-pattern-1-1 tokoe:valid" result="pass"/><test-case name="14269NISTXML-SV-IV-list-float-pattern-1-2 tokoe:valid" result="pass"/><test-case name="14270NISTXML-SV-IV-list-float-pattern-1-3 tokoe:valid" result="pass"/><test-case name="14271NISTXML-SV-IV-list-float-pattern-1-4 tokoe:valid" result="pass"/><test-case name="14272NISTXML-SV-IV-list-float-pattern-1-5 tokoe:valid" result="pass"/><test-case name="14273NISTSchema-SV-IV-list-float-pattern-2 tokoe:valid" result="pass"/><test-case name="14274NISTXML-SV-IV-list-float-pattern-2-1 tokoe:valid" result="pass"/><test-case name="14275NISTXML-SV-IV-list-float-pattern-2-2 tokoe:valid" result="pass"/><test-case name="14276NISTXML-SV-IV-list-float-pattern-2-3 tokoe:valid" result="pass"/><test-case name="14277NISTXML-SV-IV-list-float-pattern-2-4 tokoe:valid" result="pass"/><test-case name="14278NISTXML-SV-IV-list-float-pattern-2-5 tokoe:valid" result="pass"/><test-case name="14279NISTSchema-SV-IV-list-float-pattern-3 tokoe:valid" result="pass"/><test-case name="14280NISTXML-SV-IV-list-float-pattern-3-1 tokoe:valid" result="pass"/><test-case name="14281NISTXML-SV-IV-list-float-pattern-3-2 tokoe:valid" result="pass"/><test-case name="14282NISTXML-SV-IV-list-float-pattern-3-3 tokoe:valid" result="pass"/><test-case name="14283NISTXML-SV-IV-list-float-pattern-3-4 tokoe:valid" result="pass"/><test-case name="14284NISTXML-SV-IV-list-float-pattern-3-5 tokoe:valid" result="pass"/><test-case name="14285NISTSchema-SV-IV-list-float-pattern-4 tokoe:valid" result="pass"/><test-case name="14286NISTXML-SV-IV-list-float-pattern-4-1 tokoe:valid" result="pass"/><test-case name="14287NISTXML-SV-IV-list-float-pattern-4-2 tokoe:valid" result="pass"/><test-case name="14288NISTXML-SV-IV-list-float-pattern-4-3 tokoe:valid" result="pass"/><test-case name="14289NISTXML-SV-IV-list-float-pattern-4-4 tokoe:valid" result="pass"/><test-case name="14290NISTXML-SV-IV-list-float-pattern-4-5 tokoe:valid" result="pass"/><test-case name="14291NISTSchema-SV-IV-list-float-pattern-5 tokoe:valid" result="pass"/><test-case name="14292NISTXML-SV-IV-list-float-pattern-5-1 tokoe:valid" result="pass"/><test-case name="14293NISTXML-SV-IV-list-float-pattern-5-2 tokoe:valid" result="pass"/><test-case name="14294NISTXML-SV-IV-list-float-pattern-5-3 tokoe:valid" result="pass"/><test-case name="14295NISTXML-SV-IV-list-float-pattern-5-4 tokoe:valid" result="pass"/><test-case name="14296NISTXML-SV-IV-list-float-pattern-5-5 tokoe:valid" result="pass"/><test-case name="14297NISTSchema-SV-IV-list-float-enumeration-1 tokoe:valid" result="pass"/><test-case name="14298NISTXML-SV-IV-list-float-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="14299NISTXML-SV-IV-list-float-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="14300NISTXML-SV-IV-list-float-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="14301NISTXML-SV-IV-list-float-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="14302NISTXML-SV-IV-list-float-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="14303NISTSchema-SV-IV-list-float-enumeration-2 tokoe:valid" result="pass"/><test-case name="14304NISTXML-SV-IV-list-float-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="14305NISTXML-SV-IV-list-float-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="14306NISTXML-SV-IV-list-float-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="14307NISTXML-SV-IV-list-float-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="14308NISTXML-SV-IV-list-float-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="14309NISTSchema-SV-IV-list-float-enumeration-3 tokoe:valid" result="pass"/><test-case name="14310NISTXML-SV-IV-list-float-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="14311NISTXML-SV-IV-list-float-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="14312NISTXML-SV-IV-list-float-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="14313NISTXML-SV-IV-list-float-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="14314NISTXML-SV-IV-list-float-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="14315NISTSchema-SV-IV-list-float-enumeration-4 tokoe:valid" result="pass"/><test-case name="14316NISTXML-SV-IV-list-float-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="14317NISTXML-SV-IV-list-float-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="14318NISTXML-SV-IV-list-float-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="14319NISTXML-SV-IV-list-float-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="14320NISTXML-SV-IV-list-float-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="14321NISTSchema-SV-IV-list-float-enumeration-5 tokoe:valid" result="pass"/><test-case name="14322NISTXML-SV-IV-list-float-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="14323NISTXML-SV-IV-list-float-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="14324NISTXML-SV-IV-list-float-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="14325NISTXML-SV-IV-list-float-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="14326NISTXML-SV-IV-list-float-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="14327NISTSchema-SV-IV-list-float-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="14328NISTXML-SV-IV-list-float-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="14329NISTXML-SV-IV-list-float-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="14330NISTXML-SV-IV-list-float-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="14331NISTXML-SV-IV-list-float-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="14332NISTXML-SV-IV-list-float-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="14333NISTSchema-SV-IV-list-duration-maxLength-1 tokoe:valid" result="pass"/><test-case name="14334NISTXML-SV-IV-list-duration-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="14335NISTXML-SV-IV-list-duration-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="14336NISTXML-SV-IV-list-duration-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="14337NISTXML-SV-IV-list-duration-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="14338NISTXML-SV-IV-list-duration-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="14339NISTSchema-SV-IV-list-duration-maxLength-2 tokoe:valid" result="pass"/><test-case name="14340NISTXML-SV-IV-list-duration-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="14341NISTXML-SV-IV-list-duration-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="14342NISTXML-SV-IV-list-duration-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="14343NISTXML-SV-IV-list-duration-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="14344NISTXML-SV-IV-list-duration-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="14345NISTSchema-SV-IV-list-duration-maxLength-3 tokoe:valid" result="pass"/><test-case name="14346NISTXML-SV-IV-list-duration-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="14347NISTXML-SV-IV-list-duration-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="14348NISTXML-SV-IV-list-duration-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="14349NISTXML-SV-IV-list-duration-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="14350NISTXML-SV-IV-list-duration-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="14351NISTSchema-SV-IV-list-duration-maxLength-4 tokoe:valid" result="pass"/><test-case name="14352NISTXML-SV-IV-list-duration-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="14353NISTXML-SV-IV-list-duration-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="14354NISTXML-SV-IV-list-duration-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="14355NISTXML-SV-IV-list-duration-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="14356NISTXML-SV-IV-list-duration-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="14357NISTSchema-SV-IV-list-duration-maxLength-5 tokoe:valid" result="pass"/><test-case name="14358NISTXML-SV-IV-list-duration-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="14359NISTXML-SV-IV-list-duration-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="14360NISTXML-SV-IV-list-duration-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="14361NISTXML-SV-IV-list-duration-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="14362NISTXML-SV-IV-list-duration-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="14363NISTSchema-SV-IV-list-duration-minLength-1 tokoe:valid" result="pass"/><test-case name="14364NISTXML-SV-IV-list-duration-minLength-1-1 tokoe:valid" result="pass"/><test-case name="14365NISTXML-SV-IV-list-duration-minLength-1-2 tokoe:valid" result="pass"/><test-case name="14366NISTXML-SV-IV-list-duration-minLength-1-3 tokoe:valid" result="pass"/><test-case name="14367NISTXML-SV-IV-list-duration-minLength-1-4 tokoe:valid" result="pass"/><test-case name="14368NISTXML-SV-IV-list-duration-minLength-1-5 tokoe:valid" result="pass"/><test-case name="14369NISTSchema-SV-IV-list-duration-minLength-2 tokoe:valid" result="pass"/><test-case name="14370NISTXML-SV-IV-list-duration-minLength-2-1 tokoe:valid" result="pass"/><test-case name="14371NISTXML-SV-IV-list-duration-minLength-2-2 tokoe:valid" result="pass"/><test-case name="14372NISTXML-SV-IV-list-duration-minLength-2-3 tokoe:valid" result="pass"/><test-case name="14373NISTXML-SV-IV-list-duration-minLength-2-4 tokoe:valid" result="pass"/><test-case name="14374NISTXML-SV-IV-list-duration-minLength-2-5 tokoe:valid" result="pass"/><test-case name="14375NISTSchema-SV-IV-list-duration-minLength-3 tokoe:valid" result="pass"/><test-case name="14376NISTXML-SV-IV-list-duration-minLength-3-1 tokoe:valid" result="pass"/><test-case name="14377NISTXML-SV-IV-list-duration-minLength-3-2 tokoe:valid" result="pass"/><test-case name="14378NISTXML-SV-IV-list-duration-minLength-3-3 tokoe:valid" result="pass"/><test-case name="14379NISTXML-SV-IV-list-duration-minLength-3-4 tokoe:valid" result="pass"/><test-case name="14380NISTXML-SV-IV-list-duration-minLength-3-5 tokoe:valid" result="pass"/><test-case name="14381NISTSchema-SV-IV-list-duration-minLength-4 tokoe:valid" result="pass"/><test-case name="14382NISTXML-SV-IV-list-duration-minLength-4-1 tokoe:valid" result="pass"/><test-case name="14383NISTXML-SV-IV-list-duration-minLength-4-2 tokoe:valid" result="pass"/><test-case name="14384NISTXML-SV-IV-list-duration-minLength-4-3 tokoe:valid" result="pass"/><test-case name="14385NISTXML-SV-IV-list-duration-minLength-4-4 tokoe:valid" result="pass"/><test-case name="14386NISTXML-SV-IV-list-duration-minLength-4-5 tokoe:valid" result="pass"/><test-case name="14387NISTSchema-SV-IV-list-duration-minLength-5 tokoe:valid" result="pass"/><test-case name="14388NISTXML-SV-IV-list-duration-minLength-5-1 tokoe:valid" result="pass"/><test-case name="14389NISTXML-SV-IV-list-duration-minLength-5-2 tokoe:valid" result="pass"/><test-case name="14390NISTXML-SV-IV-list-duration-minLength-5-3 tokoe:valid" result="pass"/><test-case name="14391NISTXML-SV-IV-list-duration-minLength-5-4 tokoe:valid" result="pass"/><test-case name="14392NISTXML-SV-IV-list-duration-minLength-5-5 tokoe:valid" result="pass"/><test-case name="14393NISTSchema-SV-IV-list-duration-length-1 tokoe:valid" result="pass"/><test-case name="14394NISTXML-SV-IV-list-duration-length-1-1 tokoe:valid" result="pass"/><test-case name="14395NISTXML-SV-IV-list-duration-length-1-2 tokoe:valid" result="pass"/><test-case name="14396NISTXML-SV-IV-list-duration-length-1-3 tokoe:valid" result="pass"/><test-case name="14397NISTXML-SV-IV-list-duration-length-1-4 tokoe:valid" result="pass"/><test-case name="14398NISTXML-SV-IV-list-duration-length-1-5 tokoe:valid" result="pass"/><test-case name="14399NISTSchema-SV-IV-list-duration-length-2 tokoe:valid" result="pass"/><test-case name="14400NISTXML-SV-IV-list-duration-length-2-1 tokoe:valid" result="pass"/><test-case name="14401NISTXML-SV-IV-list-duration-length-2-2 tokoe:valid" result="pass"/><test-case name="14402NISTXML-SV-IV-list-duration-length-2-3 tokoe:valid" result="pass"/><test-case name="14403NISTXML-SV-IV-list-duration-length-2-4 tokoe:valid" result="pass"/><test-case name="14404NISTXML-SV-IV-list-duration-length-2-5 tokoe:valid" result="pass"/><test-case name="14405NISTSchema-SV-IV-list-duration-length-3 tokoe:valid" result="pass"/><test-case name="14406NISTXML-SV-IV-list-duration-length-3-1 tokoe:valid" result="pass"/><test-case name="14407NISTXML-SV-IV-list-duration-length-3-2 tokoe:valid" result="pass"/><test-case name="14408NISTXML-SV-IV-list-duration-length-3-3 tokoe:valid" result="pass"/><test-case name="14409NISTXML-SV-IV-list-duration-length-3-4 tokoe:valid" result="pass"/><test-case name="14410NISTXML-SV-IV-list-duration-length-3-5 tokoe:valid" result="pass"/><test-case name="14411NISTSchema-SV-IV-list-duration-length-4 tokoe:valid" result="pass"/><test-case name="14412NISTXML-SV-IV-list-duration-length-4-1 tokoe:valid" result="pass"/><test-case name="14413NISTXML-SV-IV-list-duration-length-4-2 tokoe:valid" result="pass"/><test-case name="14414NISTXML-SV-IV-list-duration-length-4-3 tokoe:valid" result="pass"/><test-case name="14415NISTXML-SV-IV-list-duration-length-4-4 tokoe:valid" result="pass"/><test-case name="14416NISTXML-SV-IV-list-duration-length-4-5 tokoe:valid" result="pass"/><test-case name="14417NISTSchema-SV-IV-list-duration-length-5 tokoe:valid" result="pass"/><test-case name="14418NISTXML-SV-IV-list-duration-length-5-1 tokoe:valid" result="pass"/><test-case name="14419NISTXML-SV-IV-list-duration-length-5-2 tokoe:valid" result="pass"/><test-case name="14420NISTXML-SV-IV-list-duration-length-5-3 tokoe:valid" result="pass"/><test-case name="14421NISTXML-SV-IV-list-duration-length-5-4 tokoe:valid" result="pass"/><test-case name="14422NISTXML-SV-IV-list-duration-length-5-5 tokoe:valid" result="pass"/><test-case name="14423NISTSchema-SV-IV-list-duration-pattern-1 tokoe:valid" result="pass"/><test-case name="14424NISTXML-SV-IV-list-duration-pattern-1-1 tokoe:valid" result="pass"/><test-case name="14425NISTXML-SV-IV-list-duration-pattern-1-2 tokoe:valid" result="pass"/><test-case name="14426NISTXML-SV-IV-list-duration-pattern-1-3 tokoe:valid" result="pass"/><test-case name="14427NISTXML-SV-IV-list-duration-pattern-1-4 tokoe:valid" result="pass"/><test-case name="14428NISTXML-SV-IV-list-duration-pattern-1-5 tokoe:valid" result="pass"/><test-case name="14429NISTSchema-SV-IV-list-duration-pattern-2 tokoe:valid" result="pass"/><test-case name="14430NISTXML-SV-IV-list-duration-pattern-2-1 tokoe:valid" result="pass"/><test-case name="14431NISTXML-SV-IV-list-duration-pattern-2-2 tokoe:valid" result="pass"/><test-case name="14432NISTXML-SV-IV-list-duration-pattern-2-3 tokoe:valid" result="pass"/><test-case name="14433NISTXML-SV-IV-list-duration-pattern-2-4 tokoe:valid" result="pass"/><test-case name="14434NISTXML-SV-IV-list-duration-pattern-2-5 tokoe:valid" result="pass"/><test-case name="14435NISTSchema-SV-IV-list-duration-pattern-3 tokoe:valid" result="pass"/><test-case name="14436NISTXML-SV-IV-list-duration-pattern-3-1 tokoe:valid" result="pass"/><test-case name="14437NISTXML-SV-IV-list-duration-pattern-3-2 tokoe:valid" result="pass"/><test-case name="14438NISTXML-SV-IV-list-duration-pattern-3-3 tokoe:valid" result="pass"/><test-case name="14439NISTXML-SV-IV-list-duration-pattern-3-4 tokoe:valid" result="pass"/><test-case name="14440NISTXML-SV-IV-list-duration-pattern-3-5 tokoe:valid" result="pass"/><test-case name="14441NISTSchema-SV-IV-list-duration-pattern-4 tokoe:valid" result="pass"/><test-case name="14442NISTXML-SV-IV-list-duration-pattern-4-1 tokoe:valid" result="pass"/><test-case name="14443NISTXML-SV-IV-list-duration-pattern-4-2 tokoe:valid" result="pass"/><test-case name="14444NISTXML-SV-IV-list-duration-pattern-4-3 tokoe:valid" result="pass"/><test-case name="14445NISTXML-SV-IV-list-duration-pattern-4-4 tokoe:valid" result="pass"/><test-case name="14446NISTXML-SV-IV-list-duration-pattern-4-5 tokoe:valid" result="pass"/><test-case name="14447NISTSchema-SV-IV-list-duration-pattern-5 tokoe:valid" result="pass"/><test-case name="14448NISTXML-SV-IV-list-duration-pattern-5-1 tokoe:valid" result="pass"/><test-case name="14449NISTXML-SV-IV-list-duration-pattern-5-2 tokoe:valid" result="pass"/><test-case name="14450NISTXML-SV-IV-list-duration-pattern-5-3 tokoe:valid" result="pass"/><test-case name="14451NISTXML-SV-IV-list-duration-pattern-5-4 tokoe:valid" result="pass"/><test-case name="14452NISTXML-SV-IV-list-duration-pattern-5-5 tokoe:valid" result="pass"/><test-case name="14453NISTSchema-SV-IV-list-duration-enumeration-1 tokoe:valid" result="pass"/><test-case name="14454NISTXML-SV-IV-list-duration-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="14455NISTXML-SV-IV-list-duration-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="14456NISTXML-SV-IV-list-duration-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="14457NISTXML-SV-IV-list-duration-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="14458NISTXML-SV-IV-list-duration-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="14459NISTSchema-SV-IV-list-duration-enumeration-2 tokoe:valid" result="pass"/><test-case name="14460NISTXML-SV-IV-list-duration-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="14461NISTXML-SV-IV-list-duration-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="14462NISTXML-SV-IV-list-duration-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="14463NISTXML-SV-IV-list-duration-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="14464NISTXML-SV-IV-list-duration-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="14465NISTSchema-SV-IV-list-duration-enumeration-3 tokoe:valid" result="pass"/><test-case name="14466NISTXML-SV-IV-list-duration-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="14467NISTXML-SV-IV-list-duration-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="14468NISTXML-SV-IV-list-duration-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="14469NISTXML-SV-IV-list-duration-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="14470NISTXML-SV-IV-list-duration-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="14471NISTSchema-SV-IV-list-duration-enumeration-4 tokoe:valid" result="pass"/><test-case name="14472NISTXML-SV-IV-list-duration-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="14473NISTXML-SV-IV-list-duration-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="14474NISTXML-SV-IV-list-duration-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="14475NISTXML-SV-IV-list-duration-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="14476NISTXML-SV-IV-list-duration-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="14477NISTSchema-SV-IV-list-duration-enumeration-5 tokoe:valid" result="pass"/><test-case name="14478NISTXML-SV-IV-list-duration-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="14479NISTXML-SV-IV-list-duration-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="14480NISTXML-SV-IV-list-duration-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="14481NISTXML-SV-IV-list-duration-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="14482NISTXML-SV-IV-list-duration-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="14483NISTSchema-SV-IV-list-duration-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="14484NISTXML-SV-IV-list-duration-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="14485NISTXML-SV-IV-list-duration-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="14486NISTXML-SV-IV-list-duration-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="14487NISTXML-SV-IV-list-duration-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="14488NISTXML-SV-IV-list-duration-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="14489NISTSchema-SV-IV-list-dateTime-maxLength-1 tokoe:valid" result="pass"/><test-case name="14490NISTXML-SV-IV-list-dateTime-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="14491NISTXML-SV-IV-list-dateTime-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="14492NISTXML-SV-IV-list-dateTime-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="14493NISTXML-SV-IV-list-dateTime-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="14494NISTXML-SV-IV-list-dateTime-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="14495NISTSchema-SV-IV-list-dateTime-maxLength-2 tokoe:valid" result="pass"/><test-case name="14496NISTXML-SV-IV-list-dateTime-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="14497NISTXML-SV-IV-list-dateTime-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="14498NISTXML-SV-IV-list-dateTime-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="14499NISTXML-SV-IV-list-dateTime-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="14500NISTXML-SV-IV-list-dateTime-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="14501NISTSchema-SV-IV-list-dateTime-maxLength-3 tokoe:valid" result="pass"/><test-case name="14502NISTXML-SV-IV-list-dateTime-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="14503NISTXML-SV-IV-list-dateTime-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="14504NISTXML-SV-IV-list-dateTime-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="14505NISTXML-SV-IV-list-dateTime-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="14506NISTXML-SV-IV-list-dateTime-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="14507NISTSchema-SV-IV-list-dateTime-maxLength-4 tokoe:valid" result="pass"/><test-case name="14508NISTXML-SV-IV-list-dateTime-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="14509NISTXML-SV-IV-list-dateTime-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="14510NISTXML-SV-IV-list-dateTime-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="14511NISTXML-SV-IV-list-dateTime-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="14512NISTXML-SV-IV-list-dateTime-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="14513NISTSchema-SV-IV-list-dateTime-maxLength-5 tokoe:valid" result="pass"/><test-case name="14514NISTXML-SV-IV-list-dateTime-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="14515NISTXML-SV-IV-list-dateTime-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="14516NISTXML-SV-IV-list-dateTime-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="14517NISTXML-SV-IV-list-dateTime-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="14518NISTXML-SV-IV-list-dateTime-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="14519NISTSchema-SV-IV-list-dateTime-minLength-1 tokoe:valid" result="pass"/><test-case name="14520NISTXML-SV-IV-list-dateTime-minLength-1-1 tokoe:valid" result="pass"/><test-case name="14521NISTXML-SV-IV-list-dateTime-minLength-1-2 tokoe:valid" result="pass"/><test-case name="14522NISTXML-SV-IV-list-dateTime-minLength-1-3 tokoe:valid" result="pass"/><test-case name="14523NISTXML-SV-IV-list-dateTime-minLength-1-4 tokoe:valid" result="pass"/><test-case name="14524NISTXML-SV-IV-list-dateTime-minLength-1-5 tokoe:valid" result="pass"/><test-case name="14525NISTSchema-SV-IV-list-dateTime-minLength-2 tokoe:valid" result="pass"/><test-case name="14526NISTXML-SV-IV-list-dateTime-minLength-2-1 tokoe:valid" result="pass"/><test-case name="14527NISTXML-SV-IV-list-dateTime-minLength-2-2 tokoe:valid" result="pass"/><test-case name="14528NISTXML-SV-IV-list-dateTime-minLength-2-3 tokoe:valid" result="pass"/><test-case name="14529NISTXML-SV-IV-list-dateTime-minLength-2-4 tokoe:valid" result="pass"/><test-case name="14530NISTXML-SV-IV-list-dateTime-minLength-2-5 tokoe:valid" result="pass"/><test-case name="14531NISTSchema-SV-IV-list-dateTime-minLength-3 tokoe:valid" result="pass"/><test-case name="14532NISTXML-SV-IV-list-dateTime-minLength-3-1 tokoe:valid" result="pass"/><test-case name="14533NISTXML-SV-IV-list-dateTime-minLength-3-2 tokoe:valid" result="pass"/><test-case name="14534NISTXML-SV-IV-list-dateTime-minLength-3-3 tokoe:valid" result="pass"/><test-case name="14535NISTXML-SV-IV-list-dateTime-minLength-3-4 tokoe:valid" result="pass"/><test-case name="14536NISTXML-SV-IV-list-dateTime-minLength-3-5 tokoe:valid" result="pass"/><test-case name="14537NISTSchema-SV-IV-list-dateTime-minLength-4 tokoe:valid" result="pass"/><test-case name="14538NISTXML-SV-IV-list-dateTime-minLength-4-1 tokoe:valid" result="pass"/><test-case name="14539NISTXML-SV-IV-list-dateTime-minLength-4-2 tokoe:valid" result="pass"/><test-case name="14540NISTXML-SV-IV-list-dateTime-minLength-4-3 tokoe:valid" result="pass"/><test-case name="14541NISTXML-SV-IV-list-dateTime-minLength-4-4 tokoe:valid" result="pass"/><test-case name="14542NISTXML-SV-IV-list-dateTime-minLength-4-5 tokoe:valid" result="pass"/><test-case name="14543NISTSchema-SV-IV-list-dateTime-minLength-5 tokoe:valid" result="pass"/><test-case name="14544NISTXML-SV-IV-list-dateTime-minLength-5-1 tokoe:valid" result="pass"/><test-case name="14545NISTXML-SV-IV-list-dateTime-minLength-5-2 tokoe:valid" result="pass"/><test-case name="14546NISTXML-SV-IV-list-dateTime-minLength-5-3 tokoe:valid" result="pass"/><test-case name="14547NISTXML-SV-IV-list-dateTime-minLength-5-4 tokoe:valid" result="pass"/><test-case name="14548NISTXML-SV-IV-list-dateTime-minLength-5-5 tokoe:valid" result="pass"/><test-case name="14549NISTSchema-SV-IV-list-dateTime-length-1 tokoe:valid" result="pass"/><test-case name="14550NISTXML-SV-IV-list-dateTime-length-1-1 tokoe:valid" result="pass"/><test-case name="14551NISTXML-SV-IV-list-dateTime-length-1-2 tokoe:valid" result="pass"/><test-case name="14552NISTXML-SV-IV-list-dateTime-length-1-3 tokoe:valid" result="pass"/><test-case name="14553NISTXML-SV-IV-list-dateTime-length-1-4 tokoe:valid" result="pass"/><test-case name="14554NISTXML-SV-IV-list-dateTime-length-1-5 tokoe:valid" result="pass"/><test-case name="14555NISTSchema-SV-IV-list-dateTime-length-2 tokoe:valid" result="pass"/><test-case name="14556NISTXML-SV-IV-list-dateTime-length-2-1 tokoe:valid" result="pass"/><test-case name="14557NISTXML-SV-IV-list-dateTime-length-2-2 tokoe:valid" result="pass"/><test-case name="14558NISTXML-SV-IV-list-dateTime-length-2-3 tokoe:valid" result="pass"/><test-case name="14559NISTXML-SV-IV-list-dateTime-length-2-4 tokoe:valid" result="pass"/><test-case name="14560NISTXML-SV-IV-list-dateTime-length-2-5 tokoe:valid" result="pass"/><test-case name="14561NISTSchema-SV-IV-list-dateTime-length-3 tokoe:valid" result="pass"/><test-case name="14562NISTXML-SV-IV-list-dateTime-length-3-1 tokoe:valid" result="pass"/><test-case name="14563NISTXML-SV-IV-list-dateTime-length-3-2 tokoe:valid" result="pass"/><test-case name="14564NISTXML-SV-IV-list-dateTime-length-3-3 tokoe:valid" result="pass"/><test-case name="14565NISTXML-SV-IV-list-dateTime-length-3-4 tokoe:valid" result="pass"/><test-case name="14566NISTXML-SV-IV-list-dateTime-length-3-5 tokoe:valid" result="pass"/><test-case name="14567NISTSchema-SV-IV-list-dateTime-length-4 tokoe:valid" result="pass"/><test-case name="14568NISTXML-SV-IV-list-dateTime-length-4-1 tokoe:valid" result="pass"/><test-case name="14569NISTXML-SV-IV-list-dateTime-length-4-2 tokoe:valid" result="pass"/><test-case name="14570NISTXML-SV-IV-list-dateTime-length-4-3 tokoe:valid" result="pass"/><test-case name="14571NISTXML-SV-IV-list-dateTime-length-4-4 tokoe:valid" result="pass"/><test-case name="14572NISTXML-SV-IV-list-dateTime-length-4-5 tokoe:valid" result="pass"/><test-case name="14573NISTSchema-SV-IV-list-dateTime-length-5 tokoe:valid" result="pass"/><test-case name="14574NISTXML-SV-IV-list-dateTime-length-5-1 tokoe:valid" result="pass"/><test-case name="14575NISTXML-SV-IV-list-dateTime-length-5-2 tokoe:valid" result="pass"/><test-case name="14576NISTXML-SV-IV-list-dateTime-length-5-3 tokoe:valid" result="pass"/><test-case name="14577NISTXML-SV-IV-list-dateTime-length-5-4 tokoe:valid" result="pass"/><test-case name="14578NISTXML-SV-IV-list-dateTime-length-5-5 tokoe:valid" result="pass"/><test-case name="14579NISTSchema-SV-IV-list-dateTime-pattern-1 tokoe:valid" result="pass"/><test-case name="14580NISTXML-SV-IV-list-dateTime-pattern-1-1 tokoe:valid" result="pass"/><test-case name="14581NISTXML-SV-IV-list-dateTime-pattern-1-2 tokoe:valid" result="pass"/><test-case name="14582NISTXML-SV-IV-list-dateTime-pattern-1-3 tokoe:valid" result="pass"/><test-case name="14583NISTXML-SV-IV-list-dateTime-pattern-1-4 tokoe:valid" result="pass"/><test-case name="14584NISTXML-SV-IV-list-dateTime-pattern-1-5 tokoe:valid" result="pass"/><test-case name="14585NISTSchema-SV-IV-list-dateTime-pattern-2 tokoe:valid" result="pass"/><test-case name="14586NISTXML-SV-IV-list-dateTime-pattern-2-1 tokoe:valid" result="pass"/><test-case name="14587NISTXML-SV-IV-list-dateTime-pattern-2-2 tokoe:valid" result="pass"/><test-case name="14588NISTXML-SV-IV-list-dateTime-pattern-2-3 tokoe:valid" result="pass"/><test-case name="14589NISTXML-SV-IV-list-dateTime-pattern-2-4 tokoe:valid" result="pass"/><test-case name="14590NISTXML-SV-IV-list-dateTime-pattern-2-5 tokoe:valid" result="pass"/><test-case name="14591NISTSchema-SV-IV-list-dateTime-pattern-3 tokoe:valid" result="pass"/><test-case name="14592NISTXML-SV-IV-list-dateTime-pattern-3-1 tokoe:valid" result="pass"/><test-case name="14593NISTXML-SV-IV-list-dateTime-pattern-3-2 tokoe:valid" result="pass"/><test-case name="14594NISTXML-SV-IV-list-dateTime-pattern-3-3 tokoe:valid" result="pass"/><test-case name="14595NISTXML-SV-IV-list-dateTime-pattern-3-4 tokoe:valid" result="pass"/><test-case name="14596NISTXML-SV-IV-list-dateTime-pattern-3-5 tokoe:valid" result="pass"/><test-case name="14597NISTSchema-SV-IV-list-dateTime-pattern-4 tokoe:valid" result="pass"/><test-case name="14598NISTXML-SV-IV-list-dateTime-pattern-4-1 tokoe:valid" result="pass"/><test-case name="14599NISTXML-SV-IV-list-dateTime-pattern-4-2 tokoe:valid" result="pass"/><test-case name="14600NISTXML-SV-IV-list-dateTime-pattern-4-3 tokoe:valid" result="pass"/><test-case name="14601NISTXML-SV-IV-list-dateTime-pattern-4-4 tokoe:valid" result="pass"/><test-case name="14602NISTXML-SV-IV-list-dateTime-pattern-4-5 tokoe:valid" result="pass"/><test-case name="14603NISTSchema-SV-IV-list-dateTime-pattern-5 tokoe:valid" result="pass"/><test-case name="14604NISTXML-SV-IV-list-dateTime-pattern-5-1 tokoe:valid" result="pass"/><test-case name="14605NISTXML-SV-IV-list-dateTime-pattern-5-2 tokoe:valid" result="pass"/><test-case name="14606NISTXML-SV-IV-list-dateTime-pattern-5-3 tokoe:valid" result="pass"/><test-case name="14607NISTXML-SV-IV-list-dateTime-pattern-5-4 tokoe:valid" result="pass"/><test-case name="14608NISTXML-SV-IV-list-dateTime-pattern-5-5 tokoe:valid" result="pass"/><test-case name="14609NISTSchema-SV-IV-list-dateTime-enumeration-1 tokoe:valid" result="pass"/><test-case name="14610NISTXML-SV-IV-list-dateTime-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="14611NISTXML-SV-IV-list-dateTime-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="14612NISTXML-SV-IV-list-dateTime-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="14613NISTXML-SV-IV-list-dateTime-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="14614NISTXML-SV-IV-list-dateTime-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="14615NISTSchema-SV-IV-list-dateTime-enumeration-2 tokoe:valid" result="pass"/><test-case name="14616NISTXML-SV-IV-list-dateTime-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="14617NISTXML-SV-IV-list-dateTime-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="14618NISTXML-SV-IV-list-dateTime-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="14619NISTXML-SV-IV-list-dateTime-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="14620NISTXML-SV-IV-list-dateTime-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="14621NISTSchema-SV-IV-list-dateTime-enumeration-3 tokoe:valid" result="pass"/><test-case name="14622NISTXML-SV-IV-list-dateTime-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="14623NISTXML-SV-IV-list-dateTime-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="14624NISTXML-SV-IV-list-dateTime-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="14625NISTXML-SV-IV-list-dateTime-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="14626NISTXML-SV-IV-list-dateTime-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="14627NISTSchema-SV-IV-list-dateTime-enumeration-4 tokoe:valid" result="pass"/><test-case name="14628NISTXML-SV-IV-list-dateTime-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="14629NISTXML-SV-IV-list-dateTime-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="14630NISTXML-SV-IV-list-dateTime-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="14631NISTXML-SV-IV-list-dateTime-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="14632NISTXML-SV-IV-list-dateTime-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="14633NISTSchema-SV-IV-list-dateTime-enumeration-5 tokoe:valid" result="pass"/><test-case name="14634NISTXML-SV-IV-list-dateTime-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="14635NISTXML-SV-IV-list-dateTime-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="14636NISTXML-SV-IV-list-dateTime-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="14637NISTXML-SV-IV-list-dateTime-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="14638NISTXML-SV-IV-list-dateTime-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="14639NISTSchema-SV-IV-list-dateTime-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="14640NISTXML-SV-IV-list-dateTime-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="14641NISTXML-SV-IV-list-dateTime-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="14642NISTXML-SV-IV-list-dateTime-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="14643NISTXML-SV-IV-list-dateTime-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="14644NISTXML-SV-IV-list-dateTime-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="14645NISTSchema-SV-IV-list-time-maxLength-1 tokoe:valid" result="pass"/><test-case name="14646NISTXML-SV-IV-list-time-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="14647NISTXML-SV-IV-list-time-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="14648NISTXML-SV-IV-list-time-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="14649NISTXML-SV-IV-list-time-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="14650NISTXML-SV-IV-list-time-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="14651NISTSchema-SV-IV-list-time-maxLength-2 tokoe:valid" result="pass"/><test-case name="14652NISTXML-SV-IV-list-time-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="14653NISTXML-SV-IV-list-time-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="14654NISTXML-SV-IV-list-time-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="14655NISTXML-SV-IV-list-time-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="14656NISTXML-SV-IV-list-time-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="14657NISTSchema-SV-IV-list-time-maxLength-3 tokoe:valid" result="pass"/><test-case name="14658NISTXML-SV-IV-list-time-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="14659NISTXML-SV-IV-list-time-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="14660NISTXML-SV-IV-list-time-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="14661NISTXML-SV-IV-list-time-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="14662NISTXML-SV-IV-list-time-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="14663NISTSchema-SV-IV-list-time-maxLength-4 tokoe:valid" result="pass"/><test-case name="14664NISTXML-SV-IV-list-time-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="14665NISTXML-SV-IV-list-time-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="14666NISTXML-SV-IV-list-time-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="14667NISTXML-SV-IV-list-time-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="14668NISTXML-SV-IV-list-time-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="14669NISTSchema-SV-IV-list-time-maxLength-5 tokoe:valid" result="pass"/><test-case name="14670NISTXML-SV-IV-list-time-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="14671NISTXML-SV-IV-list-time-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="14672NISTXML-SV-IV-list-time-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="14673NISTXML-SV-IV-list-time-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="14674NISTXML-SV-IV-list-time-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="14675NISTSchema-SV-IV-list-time-minLength-1 tokoe:valid" result="pass"/><test-case name="14676NISTXML-SV-IV-list-time-minLength-1-1 tokoe:valid" result="pass"/><test-case name="14677NISTXML-SV-IV-list-time-minLength-1-2 tokoe:valid" result="pass"/><test-case name="14678NISTXML-SV-IV-list-time-minLength-1-3 tokoe:valid" result="pass"/><test-case name="14679NISTXML-SV-IV-list-time-minLength-1-4 tokoe:valid" result="pass"/><test-case name="14680NISTXML-SV-IV-list-time-minLength-1-5 tokoe:valid" result="pass"/><test-case name="14681NISTSchema-SV-IV-list-time-minLength-2 tokoe:valid" result="pass"/><test-case name="14682NISTXML-SV-IV-list-time-minLength-2-1 tokoe:valid" result="pass"/><test-case name="14683NISTXML-SV-IV-list-time-minLength-2-2 tokoe:valid" result="pass"/><test-case name="14684NISTXML-SV-IV-list-time-minLength-2-3 tokoe:valid" result="pass"/><test-case name="14685NISTXML-SV-IV-list-time-minLength-2-4 tokoe:valid" result="pass"/><test-case name="14686NISTXML-SV-IV-list-time-minLength-2-5 tokoe:valid" result="pass"/><test-case name="14687NISTSchema-SV-IV-list-time-minLength-3 tokoe:valid" result="pass"/><test-case name="14688NISTXML-SV-IV-list-time-minLength-3-1 tokoe:valid" result="pass"/><test-case name="14689NISTXML-SV-IV-list-time-minLength-3-2 tokoe:valid" result="pass"/><test-case name="14690NISTXML-SV-IV-list-time-minLength-3-3 tokoe:valid" result="pass"/><test-case name="14691NISTXML-SV-IV-list-time-minLength-3-4 tokoe:valid" result="pass"/><test-case name="14692NISTXML-SV-IV-list-time-minLength-3-5 tokoe:valid" result="pass"/><test-case name="14693NISTSchema-SV-IV-list-time-minLength-4 tokoe:valid" result="pass"/><test-case name="14694NISTXML-SV-IV-list-time-minLength-4-1 tokoe:valid" result="pass"/><test-case name="14695NISTXML-SV-IV-list-time-minLength-4-2 tokoe:valid" result="pass"/><test-case name="14696NISTXML-SV-IV-list-time-minLength-4-3 tokoe:valid" result="pass"/><test-case name="14697NISTXML-SV-IV-list-time-minLength-4-4 tokoe:valid" result="pass"/><test-case name="14698NISTXML-SV-IV-list-time-minLength-4-5 tokoe:valid" result="pass"/><test-case name="14699NISTSchema-SV-IV-list-time-minLength-5 tokoe:valid" result="pass"/><test-case name="14700NISTXML-SV-IV-list-time-minLength-5-1 tokoe:valid" result="pass"/><test-case name="14701NISTXML-SV-IV-list-time-minLength-5-2 tokoe:valid" result="pass"/><test-case name="14702NISTXML-SV-IV-list-time-minLength-5-3 tokoe:valid" result="pass"/><test-case name="14703NISTXML-SV-IV-list-time-minLength-5-4 tokoe:valid" result="pass"/><test-case name="14704NISTXML-SV-IV-list-time-minLength-5-5 tokoe:valid" result="pass"/><test-case name="14705NISTSchema-SV-IV-list-time-length-1 tokoe:valid" result="pass"/><test-case name="14706NISTXML-SV-IV-list-time-length-1-1 tokoe:valid" result="pass"/><test-case name="14707NISTXML-SV-IV-list-time-length-1-2 tokoe:valid" result="pass"/><test-case name="14708NISTXML-SV-IV-list-time-length-1-3 tokoe:valid" result="pass"/><test-case name="14709NISTXML-SV-IV-list-time-length-1-4 tokoe:valid" result="pass"/><test-case name="14710NISTXML-SV-IV-list-time-length-1-5 tokoe:valid" result="pass"/><test-case name="14711NISTSchema-SV-IV-list-time-length-2 tokoe:valid" result="pass"/><test-case name="14712NISTXML-SV-IV-list-time-length-2-1 tokoe:valid" result="pass"/><test-case name="14713NISTXML-SV-IV-list-time-length-2-2 tokoe:valid" result="pass"/><test-case name="14714NISTXML-SV-IV-list-time-length-2-3 tokoe:valid" result="pass"/><test-case name="14715NISTXML-SV-IV-list-time-length-2-4 tokoe:valid" result="pass"/><test-case name="14716NISTXML-SV-IV-list-time-length-2-5 tokoe:valid" result="pass"/><test-case name="14717NISTSchema-SV-IV-list-time-length-3 tokoe:valid" result="pass"/><test-case name="14718NISTXML-SV-IV-list-time-length-3-1 tokoe:valid" result="pass"/><test-case name="14719NISTXML-SV-IV-list-time-length-3-2 tokoe:valid" result="pass"/><test-case name="14720NISTXML-SV-IV-list-time-length-3-3 tokoe:valid" result="pass"/><test-case name="14721NISTXML-SV-IV-list-time-length-3-4 tokoe:valid" result="pass"/><test-case name="14722NISTXML-SV-IV-list-time-length-3-5 tokoe:valid" result="pass"/><test-case name="14723NISTSchema-SV-IV-list-time-length-4 tokoe:valid" result="pass"/><test-case name="14724NISTXML-SV-IV-list-time-length-4-1 tokoe:valid" result="pass"/><test-case name="14725NISTXML-SV-IV-list-time-length-4-2 tokoe:valid" result="pass"/><test-case name="14726NISTXML-SV-IV-list-time-length-4-3 tokoe:valid" result="pass"/><test-case name="14727NISTXML-SV-IV-list-time-length-4-4 tokoe:valid" result="pass"/><test-case name="14728NISTXML-SV-IV-list-time-length-4-5 tokoe:valid" result="pass"/><test-case name="14729NISTSchema-SV-IV-list-time-length-5 tokoe:valid" result="pass"/><test-case name="14730NISTXML-SV-IV-list-time-length-5-1 tokoe:valid" result="pass"/><test-case name="14731NISTXML-SV-IV-list-time-length-5-2 tokoe:valid" result="pass"/><test-case name="14732NISTXML-SV-IV-list-time-length-5-3 tokoe:valid" result="pass"/><test-case name="14733NISTXML-SV-IV-list-time-length-5-4 tokoe:valid" result="pass"/><test-case name="14734NISTXML-SV-IV-list-time-length-5-5 tokoe:valid" result="pass"/><test-case name="14735NISTSchema-SV-IV-list-time-pattern-1 tokoe:valid" result="pass"/><test-case name="14736NISTXML-SV-IV-list-time-pattern-1-1 tokoe:valid" result="pass"/><test-case name="14737NISTXML-SV-IV-list-time-pattern-1-2 tokoe:valid" result="pass"/><test-case name="14738NISTXML-SV-IV-list-time-pattern-1-3 tokoe:valid" result="pass"/><test-case name="14739NISTXML-SV-IV-list-time-pattern-1-4 tokoe:valid" result="pass"/><test-case name="14740NISTXML-SV-IV-list-time-pattern-1-5 tokoe:valid" result="pass"/><test-case name="14741NISTSchema-SV-IV-list-time-pattern-2 tokoe:valid" result="pass"/><test-case name="14742NISTXML-SV-IV-list-time-pattern-2-1 tokoe:valid" result="pass"/><test-case name="14743NISTXML-SV-IV-list-time-pattern-2-2 tokoe:valid" result="pass"/><test-case name="14744NISTXML-SV-IV-list-time-pattern-2-3 tokoe:valid" result="pass"/><test-case name="14745NISTXML-SV-IV-list-time-pattern-2-4 tokoe:valid" result="pass"/><test-case name="14746NISTXML-SV-IV-list-time-pattern-2-5 tokoe:valid" result="pass"/><test-case name="14747NISTSchema-SV-IV-list-time-pattern-3 tokoe:valid" result="pass"/><test-case name="14748NISTXML-SV-IV-list-time-pattern-3-1 tokoe:valid" result="pass"/><test-case name="14749NISTXML-SV-IV-list-time-pattern-3-2 tokoe:valid" result="pass"/><test-case name="14750NISTXML-SV-IV-list-time-pattern-3-3 tokoe:valid" result="pass"/><test-case name="14751NISTXML-SV-IV-list-time-pattern-3-4 tokoe:valid" result="pass"/><test-case name="14752NISTXML-SV-IV-list-time-pattern-3-5 tokoe:valid" result="pass"/><test-case name="14753NISTSchema-SV-IV-list-time-pattern-4 tokoe:valid" result="pass"/><test-case name="14754NISTXML-SV-IV-list-time-pattern-4-1 tokoe:valid" result="pass"/><test-case name="14755NISTXML-SV-IV-list-time-pattern-4-2 tokoe:valid" result="pass"/><test-case name="14756NISTXML-SV-IV-list-time-pattern-4-3 tokoe:valid" result="pass"/><test-case name="14757NISTXML-SV-IV-list-time-pattern-4-4 tokoe:valid" result="pass"/><test-case name="14758NISTXML-SV-IV-list-time-pattern-4-5 tokoe:valid" result="pass"/><test-case name="14759NISTSchema-SV-IV-list-time-pattern-5 tokoe:valid" result="pass"/><test-case name="14760NISTXML-SV-IV-list-time-pattern-5-1 tokoe:valid" result="pass"/><test-case name="14761NISTXML-SV-IV-list-time-pattern-5-2 tokoe:valid" result="pass"/><test-case name="14762NISTXML-SV-IV-list-time-pattern-5-3 tokoe:valid" result="pass"/><test-case name="14763NISTXML-SV-IV-list-time-pattern-5-4 tokoe:valid" result="pass"/><test-case name="14764NISTXML-SV-IV-list-time-pattern-5-5 tokoe:valid" result="pass"/><test-case name="14765NISTSchema-SV-IV-list-time-enumeration-1 tokoe:valid" result="pass"/><test-case name="14766NISTXML-SV-IV-list-time-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="14767NISTXML-SV-IV-list-time-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="14768NISTXML-SV-IV-list-time-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="14769NISTXML-SV-IV-list-time-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="14770NISTXML-SV-IV-list-time-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="14771NISTSchema-SV-IV-list-time-enumeration-2 tokoe:valid" result="pass"/><test-case name="14772NISTXML-SV-IV-list-time-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="14773NISTXML-SV-IV-list-time-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="14774NISTXML-SV-IV-list-time-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="14775NISTXML-SV-IV-list-time-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="14776NISTXML-SV-IV-list-time-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="14777NISTSchema-SV-IV-list-time-enumeration-3 tokoe:valid" result="pass"/><test-case name="14778NISTXML-SV-IV-list-time-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="14779NISTXML-SV-IV-list-time-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="14780NISTXML-SV-IV-list-time-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="14781NISTXML-SV-IV-list-time-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="14782NISTXML-SV-IV-list-time-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="14783NISTSchema-SV-IV-list-time-enumeration-4 tokoe:valid" result="pass"/><test-case name="14784NISTXML-SV-IV-list-time-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="14785NISTXML-SV-IV-list-time-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="14786NISTXML-SV-IV-list-time-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="14787NISTXML-SV-IV-list-time-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="14788NISTXML-SV-IV-list-time-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="14789NISTSchema-SV-IV-list-time-enumeration-5 tokoe:valid" result="pass"/><test-case name="14790NISTXML-SV-IV-list-time-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="14791NISTXML-SV-IV-list-time-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="14792NISTXML-SV-IV-list-time-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="14793NISTXML-SV-IV-list-time-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="14794NISTXML-SV-IV-list-time-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="14795NISTSchema-SV-IV-list-time-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="14796NISTXML-SV-IV-list-time-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="14797NISTXML-SV-IV-list-time-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="14798NISTXML-SV-IV-list-time-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="14799NISTXML-SV-IV-list-time-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="14800NISTXML-SV-IV-list-time-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="14801NISTSchema-SV-IV-list-date-maxLength-1 tokoe:valid" result="pass"/><test-case name="14802NISTXML-SV-IV-list-date-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="14803NISTXML-SV-IV-list-date-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="14804NISTXML-SV-IV-list-date-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="14805NISTXML-SV-IV-list-date-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="14806NISTXML-SV-IV-list-date-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="14807NISTSchema-SV-IV-list-date-maxLength-2 tokoe:valid" result="pass"/><test-case name="14808NISTXML-SV-IV-list-date-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="14809NISTXML-SV-IV-list-date-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="14810NISTXML-SV-IV-list-date-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="14811NISTXML-SV-IV-list-date-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="14812NISTXML-SV-IV-list-date-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="14813NISTSchema-SV-IV-list-date-maxLength-3 tokoe:valid" result="pass"/><test-case name="14814NISTXML-SV-IV-list-date-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="14815NISTXML-SV-IV-list-date-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="14816NISTXML-SV-IV-list-date-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="14817NISTXML-SV-IV-list-date-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="14818NISTXML-SV-IV-list-date-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="14819NISTSchema-SV-IV-list-date-maxLength-4 tokoe:valid" result="pass"/><test-case name="14820NISTXML-SV-IV-list-date-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="14821NISTXML-SV-IV-list-date-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="14822NISTXML-SV-IV-list-date-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="14823NISTXML-SV-IV-list-date-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="14824NISTXML-SV-IV-list-date-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="14825NISTSchema-SV-IV-list-date-maxLength-5 tokoe:valid" result="pass"/><test-case name="14826NISTXML-SV-IV-list-date-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="14827NISTXML-SV-IV-list-date-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="14828NISTXML-SV-IV-list-date-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="14829NISTXML-SV-IV-list-date-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="14830NISTXML-SV-IV-list-date-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="14831NISTSchema-SV-IV-list-date-minLength-1 tokoe:valid" result="pass"/><test-case name="14832NISTXML-SV-IV-list-date-minLength-1-1 tokoe:valid" result="pass"/><test-case name="14833NISTXML-SV-IV-list-date-minLength-1-2 tokoe:valid" result="pass"/><test-case name="14834NISTXML-SV-IV-list-date-minLength-1-3 tokoe:valid" result="pass"/><test-case name="14835NISTXML-SV-IV-list-date-minLength-1-4 tokoe:valid" result="pass"/><test-case name="14836NISTXML-SV-IV-list-date-minLength-1-5 tokoe:valid" result="pass"/><test-case name="14837NISTSchema-SV-IV-list-date-minLength-2 tokoe:valid" result="pass"/><test-case name="14838NISTXML-SV-IV-list-date-minLength-2-1 tokoe:valid" result="pass"/><test-case name="14839NISTXML-SV-IV-list-date-minLength-2-2 tokoe:valid" result="pass"/><test-case name="14840NISTXML-SV-IV-list-date-minLength-2-3 tokoe:valid" result="pass"/><test-case name="14841NISTXML-SV-IV-list-date-minLength-2-4 tokoe:valid" result="pass"/><test-case name="14842NISTXML-SV-IV-list-date-minLength-2-5 tokoe:valid" result="pass"/><test-case name="14843NISTSchema-SV-IV-list-date-minLength-3 tokoe:valid" result="pass"/><test-case name="14844NISTXML-SV-IV-list-date-minLength-3-1 tokoe:valid" result="pass"/><test-case name="14845NISTXML-SV-IV-list-date-minLength-3-2 tokoe:valid" result="pass"/><test-case name="14846NISTXML-SV-IV-list-date-minLength-3-3 tokoe:valid" result="pass"/><test-case name="14847NISTXML-SV-IV-list-date-minLength-3-4 tokoe:valid" result="pass"/><test-case name="14848NISTXML-SV-IV-list-date-minLength-3-5 tokoe:valid" result="pass"/><test-case name="14849NISTSchema-SV-IV-list-date-minLength-4 tokoe:valid" result="pass"/><test-case name="14850NISTXML-SV-IV-list-date-minLength-4-1 tokoe:valid" result="pass"/><test-case name="14851NISTXML-SV-IV-list-date-minLength-4-2 tokoe:valid" result="pass"/><test-case name="14852NISTXML-SV-IV-list-date-minLength-4-3 tokoe:valid" result="pass"/><test-case name="14853NISTXML-SV-IV-list-date-minLength-4-4 tokoe:valid" result="pass"/><test-case name="14854NISTXML-SV-IV-list-date-minLength-4-5 tokoe:valid" result="pass"/><test-case name="14855NISTSchema-SV-IV-list-date-minLength-5 tokoe:valid" result="pass"/><test-case name="14856NISTXML-SV-IV-list-date-minLength-5-1 tokoe:valid" result="pass"/><test-case name="14857NISTXML-SV-IV-list-date-minLength-5-2 tokoe:valid" result="pass"/><test-case name="14858NISTXML-SV-IV-list-date-minLength-5-3 tokoe:valid" result="pass"/><test-case name="14859NISTXML-SV-IV-list-date-minLength-5-4 tokoe:valid" result="pass"/><test-case name="14860NISTXML-SV-IV-list-date-minLength-5-5 tokoe:valid" result="pass"/><test-case name="14861NISTSchema-SV-IV-list-date-length-1 tokoe:valid" result="pass"/><test-case name="14862NISTXML-SV-IV-list-date-length-1-1 tokoe:valid" result="pass"/><test-case name="14863NISTXML-SV-IV-list-date-length-1-2 tokoe:valid" result="pass"/><test-case name="14864NISTXML-SV-IV-list-date-length-1-3 tokoe:valid" result="pass"/><test-case name="14865NISTXML-SV-IV-list-date-length-1-4 tokoe:valid" result="pass"/><test-case name="14866NISTXML-SV-IV-list-date-length-1-5 tokoe:valid" result="pass"/><test-case name="14867NISTSchema-SV-IV-list-date-length-2 tokoe:valid" result="pass"/><test-case name="14868NISTXML-SV-IV-list-date-length-2-1 tokoe:valid" result="pass"/><test-case name="14869NISTXML-SV-IV-list-date-length-2-2 tokoe:valid" result="pass"/><test-case name="14870NISTXML-SV-IV-list-date-length-2-3 tokoe:valid" result="pass"/><test-case name="14871NISTXML-SV-IV-list-date-length-2-4 tokoe:valid" result="pass"/><test-case name="14872NISTXML-SV-IV-list-date-length-2-5 tokoe:valid" result="pass"/><test-case name="14873NISTSchema-SV-IV-list-date-length-3 tokoe:valid" result="pass"/><test-case name="14874NISTXML-SV-IV-list-date-length-3-1 tokoe:valid" result="pass"/><test-case name="14875NISTXML-SV-IV-list-date-length-3-2 tokoe:valid" result="pass"/><test-case name="14876NISTXML-SV-IV-list-date-length-3-3 tokoe:valid" result="pass"/><test-case name="14877NISTXML-SV-IV-list-date-length-3-4 tokoe:valid" result="pass"/><test-case name="14878NISTXML-SV-IV-list-date-length-3-5 tokoe:valid" result="pass"/><test-case name="14879NISTSchema-SV-IV-list-date-length-4 tokoe:valid" result="pass"/><test-case name="14880NISTXML-SV-IV-list-date-length-4-1 tokoe:valid" result="pass"/><test-case name="14881NISTXML-SV-IV-list-date-length-4-2 tokoe:valid" result="pass"/><test-case name="14882NISTXML-SV-IV-list-date-length-4-3 tokoe:valid" result="pass"/><test-case name="14883NISTXML-SV-IV-list-date-length-4-4 tokoe:valid" result="pass"/><test-case name="14884NISTXML-SV-IV-list-date-length-4-5 tokoe:valid" result="pass"/><test-case name="14885NISTSchema-SV-IV-list-date-length-5 tokoe:valid" result="pass"/><test-case name="14886NISTXML-SV-IV-list-date-length-5-1 tokoe:valid" result="pass"/><test-case name="14887NISTXML-SV-IV-list-date-length-5-2 tokoe:valid" result="pass"/><test-case name="14888NISTXML-SV-IV-list-date-length-5-3 tokoe:valid" result="pass"/><test-case name="14889NISTXML-SV-IV-list-date-length-5-4 tokoe:valid" result="pass"/><test-case name="14890NISTXML-SV-IV-list-date-length-5-5 tokoe:valid" result="pass"/><test-case name="14891NISTSchema-SV-IV-list-date-pattern-1 tokoe:valid" result="pass"/><test-case name="14892NISTXML-SV-IV-list-date-pattern-1-1 tokoe:valid" result="pass"/><test-case name="14893NISTXML-SV-IV-list-date-pattern-1-2 tokoe:valid" result="pass"/><test-case name="14894NISTXML-SV-IV-list-date-pattern-1-3 tokoe:valid" result="pass"/><test-case name="14895NISTXML-SV-IV-list-date-pattern-1-4 tokoe:valid" result="pass"/><test-case name="14896NISTXML-SV-IV-list-date-pattern-1-5 tokoe:valid" result="pass"/><test-case name="14897NISTSchema-SV-IV-list-date-pattern-2 tokoe:valid" result="pass"/><test-case name="14898NISTXML-SV-IV-list-date-pattern-2-1 tokoe:valid" result="pass"/><test-case name="14899NISTXML-SV-IV-list-date-pattern-2-2 tokoe:valid" result="pass"/><test-case name="14900NISTXML-SV-IV-list-date-pattern-2-3 tokoe:valid" result="pass"/><test-case name="14901NISTXML-SV-IV-list-date-pattern-2-4 tokoe:valid" result="pass"/><test-case name="14902NISTXML-SV-IV-list-date-pattern-2-5 tokoe:valid" result="pass"/><test-case name="14903NISTSchema-SV-IV-list-date-pattern-3 tokoe:valid" result="pass"/><test-case name="14904NISTXML-SV-IV-list-date-pattern-3-1 tokoe:valid" result="pass"/><test-case name="14905NISTXML-SV-IV-list-date-pattern-3-2 tokoe:valid" result="pass"/><test-case name="14906NISTXML-SV-IV-list-date-pattern-3-3 tokoe:valid" result="pass"/><test-case name="14907NISTXML-SV-IV-list-date-pattern-3-4 tokoe:valid" result="pass"/><test-case name="14908NISTXML-SV-IV-list-date-pattern-3-5 tokoe:valid" result="pass"/><test-case name="14909NISTSchema-SV-IV-list-date-pattern-4 tokoe:valid" result="pass"/><test-case name="14910NISTXML-SV-IV-list-date-pattern-4-1 tokoe:valid" result="pass"/><test-case name="14911NISTXML-SV-IV-list-date-pattern-4-2 tokoe:valid" result="pass"/><test-case name="14912NISTXML-SV-IV-list-date-pattern-4-3 tokoe:valid" result="pass"/><test-case name="14913NISTXML-SV-IV-list-date-pattern-4-4 tokoe:valid" result="pass"/><test-case name="14914NISTXML-SV-IV-list-date-pattern-4-5 tokoe:valid" result="pass"/><test-case name="14915NISTSchema-SV-IV-list-date-pattern-5 tokoe:valid" result="pass"/><test-case name="14916NISTXML-SV-IV-list-date-pattern-5-1 tokoe:valid" result="pass"/><test-case name="14917NISTXML-SV-IV-list-date-pattern-5-2 tokoe:valid" result="pass"/><test-case name="14918NISTXML-SV-IV-list-date-pattern-5-3 tokoe:valid" result="pass"/><test-case name="14919NISTXML-SV-IV-list-date-pattern-5-4 tokoe:valid" result="pass"/><test-case name="14920NISTXML-SV-IV-list-date-pattern-5-5 tokoe:valid" result="pass"/><test-case name="14921NISTSchema-SV-IV-list-date-enumeration-1 tokoe:valid" result="pass"/><test-case name="14922NISTXML-SV-IV-list-date-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="14923NISTXML-SV-IV-list-date-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="14924NISTXML-SV-IV-list-date-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="14925NISTXML-SV-IV-list-date-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="14926NISTXML-SV-IV-list-date-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="14927NISTSchema-SV-IV-list-date-enumeration-2 tokoe:valid" result="pass"/><test-case name="14928NISTXML-SV-IV-list-date-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="14929NISTXML-SV-IV-list-date-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="14930NISTXML-SV-IV-list-date-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="14931NISTXML-SV-IV-list-date-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="14932NISTXML-SV-IV-list-date-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="14933NISTSchema-SV-IV-list-date-enumeration-3 tokoe:valid" result="pass"/><test-case name="14934NISTXML-SV-IV-list-date-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="14935NISTXML-SV-IV-list-date-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="14936NISTXML-SV-IV-list-date-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="14937NISTXML-SV-IV-list-date-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="14938NISTXML-SV-IV-list-date-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="14939NISTSchema-SV-IV-list-date-enumeration-4 tokoe:valid" result="pass"/><test-case name="14940NISTXML-SV-IV-list-date-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="14941NISTXML-SV-IV-list-date-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="14942NISTXML-SV-IV-list-date-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="14943NISTXML-SV-IV-list-date-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="14944NISTXML-SV-IV-list-date-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="14945NISTSchema-SV-IV-list-date-enumeration-5 tokoe:valid" result="pass"/><test-case name="14946NISTXML-SV-IV-list-date-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="14947NISTXML-SV-IV-list-date-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="14948NISTXML-SV-IV-list-date-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="14949NISTXML-SV-IV-list-date-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="14950NISTXML-SV-IV-list-date-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="14951NISTSchema-SV-IV-list-date-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="14952NISTXML-SV-IV-list-date-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="14953NISTXML-SV-IV-list-date-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="14954NISTXML-SV-IV-list-date-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="14955NISTXML-SV-IV-list-date-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="14956NISTXML-SV-IV-list-date-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="14957NISTSchema-SV-IV-list-gYearMonth-maxLength-1 tokoe:valid" result="pass"/><test-case name="14958NISTXML-SV-IV-list-gYearMonth-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="14959NISTXML-SV-IV-list-gYearMonth-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="14960NISTXML-SV-IV-list-gYearMonth-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="14961NISTXML-SV-IV-list-gYearMonth-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="14962NISTXML-SV-IV-list-gYearMonth-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="14963NISTSchema-SV-IV-list-gYearMonth-maxLength-2 tokoe:valid" result="pass"/><test-case name="14964NISTXML-SV-IV-list-gYearMonth-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="14965NISTXML-SV-IV-list-gYearMonth-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="14966NISTXML-SV-IV-list-gYearMonth-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="14967NISTXML-SV-IV-list-gYearMonth-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="14968NISTXML-SV-IV-list-gYearMonth-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="14969NISTSchema-SV-IV-list-gYearMonth-maxLength-3 tokoe:valid" result="pass"/><test-case name="14970NISTXML-SV-IV-list-gYearMonth-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="14971NISTXML-SV-IV-list-gYearMonth-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="14972NISTXML-SV-IV-list-gYearMonth-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="14973NISTXML-SV-IV-list-gYearMonth-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="14974NISTXML-SV-IV-list-gYearMonth-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="14975NISTSchema-SV-IV-list-gYearMonth-maxLength-4 tokoe:valid" result="pass"/><test-case name="14976NISTXML-SV-IV-list-gYearMonth-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="14977NISTXML-SV-IV-list-gYearMonth-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="14978NISTXML-SV-IV-list-gYearMonth-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="14979NISTXML-SV-IV-list-gYearMonth-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="14980NISTXML-SV-IV-list-gYearMonth-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="14981NISTSchema-SV-IV-list-gYearMonth-maxLength-5 tokoe:valid" result="pass"/><test-case name="14982NISTXML-SV-IV-list-gYearMonth-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="14983NISTXML-SV-IV-list-gYearMonth-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="14984NISTXML-SV-IV-list-gYearMonth-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="14985NISTXML-SV-IV-list-gYearMonth-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="14986NISTXML-SV-IV-list-gYearMonth-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="14987NISTSchema-SV-IV-list-gYearMonth-minLength-1 tokoe:valid" result="pass"/><test-case name="14988NISTXML-SV-IV-list-gYearMonth-minLength-1-1 tokoe:valid" result="pass"/><test-case name="14989NISTXML-SV-IV-list-gYearMonth-minLength-1-2 tokoe:valid" result="pass"/><test-case name="14990NISTXML-SV-IV-list-gYearMonth-minLength-1-3 tokoe:valid" result="pass"/><test-case name="14991NISTXML-SV-IV-list-gYearMonth-minLength-1-4 tokoe:valid" result="pass"/><test-case name="14992NISTXML-SV-IV-list-gYearMonth-minLength-1-5 tokoe:valid" result="pass"/><test-case name="14993NISTSchema-SV-IV-list-gYearMonth-minLength-2 tokoe:valid" result="pass"/><test-case name="14994NISTXML-SV-IV-list-gYearMonth-minLength-2-1 tokoe:valid" result="pass"/><test-case name="14995NISTXML-SV-IV-list-gYearMonth-minLength-2-2 tokoe:valid" result="pass"/><test-case name="14996NISTXML-SV-IV-list-gYearMonth-minLength-2-3 tokoe:valid" result="pass"/><test-case name="14997NISTXML-SV-IV-list-gYearMonth-minLength-2-4 tokoe:valid" result="pass"/><test-case name="14998NISTXML-SV-IV-list-gYearMonth-minLength-2-5 tokoe:valid" result="pass"/><test-case name="14999NISTSchema-SV-IV-list-gYearMonth-minLength-3 tokoe:valid" result="pass"/><test-case name="15000NISTXML-SV-IV-list-gYearMonth-minLength-3-1 tokoe:valid" result="pass"/><test-case name="15001NISTXML-SV-IV-list-gYearMonth-minLength-3-2 tokoe:valid" result="pass"/><test-case name="15002NISTXML-SV-IV-list-gYearMonth-minLength-3-3 tokoe:valid" result="pass"/><test-case name="15003NISTXML-SV-IV-list-gYearMonth-minLength-3-4 tokoe:valid" result="pass"/><test-case name="15004NISTXML-SV-IV-list-gYearMonth-minLength-3-5 tokoe:valid" result="pass"/><test-case name="15005NISTSchema-SV-IV-list-gYearMonth-minLength-4 tokoe:valid" result="pass"/><test-case name="15006NISTXML-SV-IV-list-gYearMonth-minLength-4-1 tokoe:valid" result="pass"/><test-case name="15007NISTXML-SV-IV-list-gYearMonth-minLength-4-2 tokoe:valid" result="pass"/><test-case name="15008NISTXML-SV-IV-list-gYearMonth-minLength-4-3 tokoe:valid" result="pass"/><test-case name="15009NISTXML-SV-IV-list-gYearMonth-minLength-4-4 tokoe:valid" result="pass"/><test-case name="15010NISTXML-SV-IV-list-gYearMonth-minLength-4-5 tokoe:valid" result="pass"/><test-case name="15011NISTSchema-SV-IV-list-gYearMonth-minLength-5 tokoe:valid" result="pass"/><test-case name="15012NISTXML-SV-IV-list-gYearMonth-minLength-5-1 tokoe:valid" result="pass"/><test-case name="15013NISTXML-SV-IV-list-gYearMonth-minLength-5-2 tokoe:valid" result="pass"/><test-case name="15014NISTXML-SV-IV-list-gYearMonth-minLength-5-3 tokoe:valid" result="pass"/><test-case name="15015NISTXML-SV-IV-list-gYearMonth-minLength-5-4 tokoe:valid" result="pass"/><test-case name="15016NISTXML-SV-IV-list-gYearMonth-minLength-5-5 tokoe:valid" result="pass"/><test-case name="15017NISTSchema-SV-IV-list-gYearMonth-length-1 tokoe:valid" result="pass"/><test-case name="15018NISTXML-SV-IV-list-gYearMonth-length-1-1 tokoe:valid" result="pass"/><test-case name="15019NISTXML-SV-IV-list-gYearMonth-length-1-2 tokoe:valid" result="pass"/><test-case name="15020NISTXML-SV-IV-list-gYearMonth-length-1-3 tokoe:valid" result="pass"/><test-case name="15021NISTXML-SV-IV-list-gYearMonth-length-1-4 tokoe:valid" result="pass"/><test-case name="15022NISTXML-SV-IV-list-gYearMonth-length-1-5 tokoe:valid" result="pass"/><test-case name="15023NISTSchema-SV-IV-list-gYearMonth-length-2 tokoe:valid" result="pass"/><test-case name="15024NISTXML-SV-IV-list-gYearMonth-length-2-1 tokoe:valid" result="pass"/><test-case name="15025NISTXML-SV-IV-list-gYearMonth-length-2-2 tokoe:valid" result="pass"/><test-case name="15026NISTXML-SV-IV-list-gYearMonth-length-2-3 tokoe:valid" result="pass"/><test-case name="15027NISTXML-SV-IV-list-gYearMonth-length-2-4 tokoe:valid" result="pass"/><test-case name="15028NISTXML-SV-IV-list-gYearMonth-length-2-5 tokoe:valid" result="pass"/><test-case name="15029NISTSchema-SV-IV-list-gYearMonth-length-3 tokoe:valid" result="pass"/><test-case name="15030NISTXML-SV-IV-list-gYearMonth-length-3-1 tokoe:valid" result="pass"/><test-case name="15031NISTXML-SV-IV-list-gYearMonth-length-3-2 tokoe:valid" result="pass"/><test-case name="15032NISTXML-SV-IV-list-gYearMonth-length-3-3 tokoe:valid" result="pass"/><test-case name="15033NISTXML-SV-IV-list-gYearMonth-length-3-4 tokoe:valid" result="pass"/><test-case name="15034NISTXML-SV-IV-list-gYearMonth-length-3-5 tokoe:valid" result="pass"/><test-case name="15035NISTSchema-SV-IV-list-gYearMonth-length-4 tokoe:valid" result="pass"/><test-case name="15036NISTXML-SV-IV-list-gYearMonth-length-4-1 tokoe:valid" result="pass"/><test-case name="15037NISTXML-SV-IV-list-gYearMonth-length-4-2 tokoe:valid" result="pass"/><test-case name="15038NISTXML-SV-IV-list-gYearMonth-length-4-3 tokoe:valid" result="pass"/><test-case name="15039NISTXML-SV-IV-list-gYearMonth-length-4-4 tokoe:valid" result="pass"/><test-case name="15040NISTXML-SV-IV-list-gYearMonth-length-4-5 tokoe:valid" result="pass"/><test-case name="15041NISTSchema-SV-IV-list-gYearMonth-length-5 tokoe:valid" result="pass"/><test-case name="15042NISTXML-SV-IV-list-gYearMonth-length-5-1 tokoe:valid" result="pass"/><test-case name="15043NISTXML-SV-IV-list-gYearMonth-length-5-2 tokoe:valid" result="pass"/><test-case name="15044NISTXML-SV-IV-list-gYearMonth-length-5-3 tokoe:valid" result="pass"/><test-case name="15045NISTXML-SV-IV-list-gYearMonth-length-5-4 tokoe:valid" result="pass"/><test-case name="15046NISTXML-SV-IV-list-gYearMonth-length-5-5 tokoe:valid" result="pass"/><test-case name="15047NISTSchema-SV-IV-list-gYearMonth-pattern-1 tokoe:valid" result="pass"/><test-case name="15048NISTXML-SV-IV-list-gYearMonth-pattern-1-1 tokoe:valid" result="pass"/><test-case name="15049NISTXML-SV-IV-list-gYearMonth-pattern-1-2 tokoe:valid" result="pass"/><test-case name="15050NISTXML-SV-IV-list-gYearMonth-pattern-1-3 tokoe:valid" result="pass"/><test-case name="15051NISTXML-SV-IV-list-gYearMonth-pattern-1-4 tokoe:valid" result="pass"/><test-case name="15052NISTXML-SV-IV-list-gYearMonth-pattern-1-5 tokoe:valid" result="pass"/><test-case name="15053NISTSchema-SV-IV-list-gYearMonth-pattern-2 tokoe:valid" result="pass"/><test-case name="15054NISTXML-SV-IV-list-gYearMonth-pattern-2-1 tokoe:valid" result="pass"/><test-case name="15055NISTXML-SV-IV-list-gYearMonth-pattern-2-2 tokoe:valid" result="pass"/><test-case name="15056NISTXML-SV-IV-list-gYearMonth-pattern-2-3 tokoe:valid" result="pass"/><test-case name="15057NISTXML-SV-IV-list-gYearMonth-pattern-2-4 tokoe:valid" result="pass"/><test-case name="15058NISTXML-SV-IV-list-gYearMonth-pattern-2-5 tokoe:valid" result="pass"/><test-case name="15059NISTSchema-SV-IV-list-gYearMonth-pattern-3 tokoe:valid" result="pass"/><test-case name="15060NISTXML-SV-IV-list-gYearMonth-pattern-3-1 tokoe:valid" result="pass"/><test-case name="15061NISTXML-SV-IV-list-gYearMonth-pattern-3-2 tokoe:valid" result="pass"/><test-case name="15062NISTXML-SV-IV-list-gYearMonth-pattern-3-3 tokoe:valid" result="pass"/><test-case name="15063NISTXML-SV-IV-list-gYearMonth-pattern-3-4 tokoe:valid" result="pass"/><test-case name="15064NISTXML-SV-IV-list-gYearMonth-pattern-3-5 tokoe:valid" result="pass"/><test-case name="15065NISTSchema-SV-IV-list-gYearMonth-pattern-4 tokoe:valid" result="pass"/><test-case name="15066NISTXML-SV-IV-list-gYearMonth-pattern-4-1 tokoe:valid" result="pass"/><test-case name="15067NISTXML-SV-IV-list-gYearMonth-pattern-4-2 tokoe:valid" result="pass"/><test-case name="15068NISTXML-SV-IV-list-gYearMonth-pattern-4-3 tokoe:valid" result="pass"/><test-case name="15069NISTXML-SV-IV-list-gYearMonth-pattern-4-4 tokoe:valid" result="pass"/><test-case name="15070NISTXML-SV-IV-list-gYearMonth-pattern-4-5 tokoe:valid" result="pass"/><test-case name="15071NISTSchema-SV-IV-list-gYearMonth-pattern-5 tokoe:valid" result="pass"/><test-case name="15072NISTXML-SV-IV-list-gYearMonth-pattern-5-1 tokoe:valid" result="pass"/><test-case name="15073NISTXML-SV-IV-list-gYearMonth-pattern-5-2 tokoe:valid" result="pass"/><test-case name="15074NISTXML-SV-IV-list-gYearMonth-pattern-5-3 tokoe:valid" result="pass"/><test-case name="15075NISTXML-SV-IV-list-gYearMonth-pattern-5-4 tokoe:valid" result="pass"/><test-case name="15076NISTXML-SV-IV-list-gYearMonth-pattern-5-5 tokoe:valid" result="pass"/><test-case name="15077NISTSchema-SV-IV-list-gYearMonth-enumeration-1 tokoe:valid" result="pass"/><test-case name="15078NISTXML-SV-IV-list-gYearMonth-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="15079NISTXML-SV-IV-list-gYearMonth-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="15080NISTXML-SV-IV-list-gYearMonth-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="15081NISTXML-SV-IV-list-gYearMonth-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="15082NISTXML-SV-IV-list-gYearMonth-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="15083NISTSchema-SV-IV-list-gYearMonth-enumeration-2 tokoe:valid" result="pass"/><test-case name="15084NISTXML-SV-IV-list-gYearMonth-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="15085NISTXML-SV-IV-list-gYearMonth-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="15086NISTXML-SV-IV-list-gYearMonth-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="15087NISTXML-SV-IV-list-gYearMonth-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="15088NISTXML-SV-IV-list-gYearMonth-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="15089NISTSchema-SV-IV-list-gYearMonth-enumeration-3 tokoe:valid" result="pass"/><test-case name="15090NISTXML-SV-IV-list-gYearMonth-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="15091NISTXML-SV-IV-list-gYearMonth-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="15092NISTXML-SV-IV-list-gYearMonth-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="15093NISTXML-SV-IV-list-gYearMonth-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="15094NISTXML-SV-IV-list-gYearMonth-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="15095NISTSchema-SV-IV-list-gYearMonth-enumeration-4 tokoe:valid" result="pass"/><test-case name="15096NISTXML-SV-IV-list-gYearMonth-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="15097NISTXML-SV-IV-list-gYearMonth-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="15098NISTXML-SV-IV-list-gYearMonth-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="15099NISTXML-SV-IV-list-gYearMonth-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="15100NISTXML-SV-IV-list-gYearMonth-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="15101NISTSchema-SV-IV-list-gYearMonth-enumeration-5 tokoe:valid" result="pass"/><test-case name="15102NISTXML-SV-IV-list-gYearMonth-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="15103NISTXML-SV-IV-list-gYearMonth-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="15104NISTXML-SV-IV-list-gYearMonth-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="15105NISTXML-SV-IV-list-gYearMonth-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="15106NISTXML-SV-IV-list-gYearMonth-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="15107NISTSchema-SV-IV-list-gYearMonth-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="15108NISTXML-SV-IV-list-gYearMonth-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="15109NISTXML-SV-IV-list-gYearMonth-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="15110NISTXML-SV-IV-list-gYearMonth-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="15111NISTXML-SV-IV-list-gYearMonth-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="15112NISTXML-SV-IV-list-gYearMonth-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="15113NISTSchema-SV-IV-list-gYear-maxLength-1 tokoe:valid" result="pass"/><test-case name="15114NISTXML-SV-IV-list-gYear-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="15115NISTXML-SV-IV-list-gYear-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="15116NISTXML-SV-IV-list-gYear-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="15117NISTXML-SV-IV-list-gYear-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="15118NISTXML-SV-IV-list-gYear-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="15119NISTSchema-SV-IV-list-gYear-maxLength-2 tokoe:valid" result="pass"/><test-case name="15120NISTXML-SV-IV-list-gYear-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="15121NISTXML-SV-IV-list-gYear-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="15122NISTXML-SV-IV-list-gYear-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="15123NISTXML-SV-IV-list-gYear-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="15124NISTXML-SV-IV-list-gYear-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="15125NISTSchema-SV-IV-list-gYear-maxLength-3 tokoe:valid" result="pass"/><test-case name="15126NISTXML-SV-IV-list-gYear-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="15127NISTXML-SV-IV-list-gYear-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="15128NISTXML-SV-IV-list-gYear-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="15129NISTXML-SV-IV-list-gYear-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="15130NISTXML-SV-IV-list-gYear-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="15131NISTSchema-SV-IV-list-gYear-maxLength-4 tokoe:valid" result="pass"/><test-case name="15132NISTXML-SV-IV-list-gYear-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="15133NISTXML-SV-IV-list-gYear-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="15134NISTXML-SV-IV-list-gYear-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="15135NISTXML-SV-IV-list-gYear-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="15136NISTXML-SV-IV-list-gYear-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="15137NISTSchema-SV-IV-list-gYear-maxLength-5 tokoe:valid" result="pass"/><test-case name="15138NISTXML-SV-IV-list-gYear-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="15139NISTXML-SV-IV-list-gYear-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="15140NISTXML-SV-IV-list-gYear-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="15141NISTXML-SV-IV-list-gYear-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="15142NISTXML-SV-IV-list-gYear-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="15143NISTSchema-SV-IV-list-gYear-minLength-1 tokoe:valid" result="pass"/><test-case name="15144NISTXML-SV-IV-list-gYear-minLength-1-1 tokoe:valid" result="pass"/><test-case name="15145NISTXML-SV-IV-list-gYear-minLength-1-2 tokoe:valid" result="pass"/><test-case name="15146NISTXML-SV-IV-list-gYear-minLength-1-3 tokoe:valid" result="pass"/><test-case name="15147NISTXML-SV-IV-list-gYear-minLength-1-4 tokoe:valid" result="pass"/><test-case name="15148NISTXML-SV-IV-list-gYear-minLength-1-5 tokoe:valid" result="pass"/><test-case name="15149NISTSchema-SV-IV-list-gYear-minLength-2 tokoe:valid" result="pass"/><test-case name="15150NISTXML-SV-IV-list-gYear-minLength-2-1 tokoe:valid" result="pass"/><test-case name="15151NISTXML-SV-IV-list-gYear-minLength-2-2 tokoe:valid" result="pass"/><test-case name="15152NISTXML-SV-IV-list-gYear-minLength-2-3 tokoe:valid" result="pass"/><test-case name="15153NISTXML-SV-IV-list-gYear-minLength-2-4 tokoe:valid" result="pass"/><test-case name="15154NISTXML-SV-IV-list-gYear-minLength-2-5 tokoe:valid" result="pass"/><test-case name="15155NISTSchema-SV-IV-list-gYear-minLength-3 tokoe:valid" result="pass"/><test-case name="15156NISTXML-SV-IV-list-gYear-minLength-3-1 tokoe:valid" result="pass"/><test-case name="15157NISTXML-SV-IV-list-gYear-minLength-3-2 tokoe:valid" result="pass"/><test-case name="15158NISTXML-SV-IV-list-gYear-minLength-3-3 tokoe:valid" result="pass"/><test-case name="15159NISTXML-SV-IV-list-gYear-minLength-3-4 tokoe:valid" result="pass"/><test-case name="15160NISTXML-SV-IV-list-gYear-minLength-3-5 tokoe:valid" result="pass"/><test-case name="15161NISTSchema-SV-IV-list-gYear-minLength-4 tokoe:valid" result="pass"/><test-case name="15162NISTXML-SV-IV-list-gYear-minLength-4-1 tokoe:valid" result="pass"/><test-case name="15163NISTXML-SV-IV-list-gYear-minLength-4-2 tokoe:valid" result="pass"/><test-case name="15164NISTXML-SV-IV-list-gYear-minLength-4-3 tokoe:valid" result="pass"/><test-case name="15165NISTXML-SV-IV-list-gYear-minLength-4-4 tokoe:valid" result="pass"/><test-case name="15166NISTXML-SV-IV-list-gYear-minLength-4-5 tokoe:valid" result="pass"/><test-case name="15167NISTSchema-SV-IV-list-gYear-minLength-5 tokoe:valid" result="pass"/><test-case name="15168NISTXML-SV-IV-list-gYear-minLength-5-1 tokoe:valid" result="pass"/><test-case name="15169NISTXML-SV-IV-list-gYear-minLength-5-2 tokoe:valid" result="pass"/><test-case name="15170NISTXML-SV-IV-list-gYear-minLength-5-3 tokoe:valid" result="pass"/><test-case name="15171NISTXML-SV-IV-list-gYear-minLength-5-4 tokoe:valid" result="pass"/><test-case name="15172NISTXML-SV-IV-list-gYear-minLength-5-5 tokoe:valid" result="pass"/><test-case name="15173NISTSchema-SV-IV-list-gYear-length-1 tokoe:valid" result="pass"/><test-case name="15174NISTXML-SV-IV-list-gYear-length-1-1 tokoe:valid" result="pass"/><test-case name="15175NISTXML-SV-IV-list-gYear-length-1-2 tokoe:valid" result="pass"/><test-case name="15176NISTXML-SV-IV-list-gYear-length-1-3 tokoe:valid" result="pass"/><test-case name="15177NISTXML-SV-IV-list-gYear-length-1-4 tokoe:valid" result="pass"/><test-case name="15178NISTXML-SV-IV-list-gYear-length-1-5 tokoe:valid" result="pass"/><test-case name="15179NISTSchema-SV-IV-list-gYear-length-2 tokoe:valid" result="pass"/><test-case name="15180NISTXML-SV-IV-list-gYear-length-2-1 tokoe:valid" result="pass"/><test-case name="15181NISTXML-SV-IV-list-gYear-length-2-2 tokoe:valid" result="pass"/><test-case name="15182NISTXML-SV-IV-list-gYear-length-2-3 tokoe:valid" result="pass"/><test-case name="15183NISTXML-SV-IV-list-gYear-length-2-4 tokoe:valid" result="pass"/><test-case name="15184NISTXML-SV-IV-list-gYear-length-2-5 tokoe:valid" result="pass"/><test-case name="15185NISTSchema-SV-IV-list-gYear-length-3 tokoe:valid" result="pass"/><test-case name="15186NISTXML-SV-IV-list-gYear-length-3-1 tokoe:valid" result="pass"/><test-case name="15187NISTXML-SV-IV-list-gYear-length-3-2 tokoe:valid" result="pass"/><test-case name="15188NISTXML-SV-IV-list-gYear-length-3-3 tokoe:valid" result="pass"/><test-case name="15189NISTXML-SV-IV-list-gYear-length-3-4 tokoe:valid" result="pass"/><test-case name="15190NISTXML-SV-IV-list-gYear-length-3-5 tokoe:valid" result="pass"/><test-case name="15191NISTSchema-SV-IV-list-gYear-length-4 tokoe:valid" result="pass"/><test-case name="15192NISTXML-SV-IV-list-gYear-length-4-1 tokoe:valid" result="pass"/><test-case name="15193NISTXML-SV-IV-list-gYear-length-4-2 tokoe:valid" result="pass"/><test-case name="15194NISTXML-SV-IV-list-gYear-length-4-3 tokoe:valid" result="pass"/><test-case name="15195NISTXML-SV-IV-list-gYear-length-4-4 tokoe:valid" result="pass"/><test-case name="15196NISTXML-SV-IV-list-gYear-length-4-5 tokoe:valid" result="pass"/><test-case name="15197NISTSchema-SV-IV-list-gYear-length-5 tokoe:valid" result="pass"/><test-case name="15198NISTXML-SV-IV-list-gYear-length-5-1 tokoe:valid" result="pass"/><test-case name="15199NISTXML-SV-IV-list-gYear-length-5-2 tokoe:valid" result="pass"/><test-case name="15200NISTXML-SV-IV-list-gYear-length-5-3 tokoe:valid" result="pass"/><test-case name="15201NISTXML-SV-IV-list-gYear-length-5-4 tokoe:valid" result="pass"/><test-case name="15202NISTXML-SV-IV-list-gYear-length-5-5 tokoe:valid" result="pass"/><test-case name="15203NISTSchema-SV-IV-list-gYear-pattern-1 tokoe:valid" result="pass"/><test-case name="15204NISTXML-SV-IV-list-gYear-pattern-1-1 tokoe:valid" result="pass"/><test-case name="15205NISTXML-SV-IV-list-gYear-pattern-1-2 tokoe:valid" result="pass"/><test-case name="15206NISTXML-SV-IV-list-gYear-pattern-1-3 tokoe:valid" result="pass"/><test-case name="15207NISTXML-SV-IV-list-gYear-pattern-1-4 tokoe:valid" result="pass"/><test-case name="15208NISTXML-SV-IV-list-gYear-pattern-1-5 tokoe:valid" result="pass"/><test-case name="15209NISTSchema-SV-IV-list-gYear-pattern-2 tokoe:valid" result="pass"/><test-case name="15210NISTXML-SV-IV-list-gYear-pattern-2-1 tokoe:valid" result="pass"/><test-case name="15211NISTXML-SV-IV-list-gYear-pattern-2-2 tokoe:valid" result="pass"/><test-case name="15212NISTXML-SV-IV-list-gYear-pattern-2-3 tokoe:valid" result="pass"/><test-case name="15213NISTXML-SV-IV-list-gYear-pattern-2-4 tokoe:valid" result="pass"/><test-case name="15214NISTXML-SV-IV-list-gYear-pattern-2-5 tokoe:valid" result="pass"/><test-case name="15215NISTSchema-SV-IV-list-gYear-pattern-3 tokoe:valid" result="pass"/><test-case name="15216NISTXML-SV-IV-list-gYear-pattern-3-1 tokoe:valid" result="pass"/><test-case name="15217NISTXML-SV-IV-list-gYear-pattern-3-2 tokoe:valid" result="pass"/><test-case name="15218NISTXML-SV-IV-list-gYear-pattern-3-3 tokoe:valid" result="pass"/><test-case name="15219NISTXML-SV-IV-list-gYear-pattern-3-4 tokoe:valid" result="pass"/><test-case name="15220NISTXML-SV-IV-list-gYear-pattern-3-5 tokoe:valid" result="pass"/><test-case name="15221NISTSchema-SV-IV-list-gYear-pattern-4 tokoe:valid" result="pass"/><test-case name="15222NISTXML-SV-IV-list-gYear-pattern-4-1 tokoe:valid" result="pass"/><test-case name="15223NISTXML-SV-IV-list-gYear-pattern-4-2 tokoe:valid" result="pass"/><test-case name="15224NISTXML-SV-IV-list-gYear-pattern-4-3 tokoe:valid" result="pass"/><test-case name="15225NISTXML-SV-IV-list-gYear-pattern-4-4 tokoe:valid" result="pass"/><test-case name="15226NISTXML-SV-IV-list-gYear-pattern-4-5 tokoe:valid" result="pass"/><test-case name="15227NISTSchema-SV-IV-list-gYear-pattern-5 tokoe:valid" result="pass"/><test-case name="15228NISTXML-SV-IV-list-gYear-pattern-5-1 tokoe:valid" result="pass"/><test-case name="15229NISTXML-SV-IV-list-gYear-pattern-5-2 tokoe:valid" result="pass"/><test-case name="15230NISTXML-SV-IV-list-gYear-pattern-5-3 tokoe:valid" result="pass"/><test-case name="15231NISTXML-SV-IV-list-gYear-pattern-5-4 tokoe:valid" result="pass"/><test-case name="15232NISTXML-SV-IV-list-gYear-pattern-5-5 tokoe:valid" result="pass"/><test-case name="15233NISTSchema-SV-IV-list-gYear-enumeration-1 tokoe:valid" result="pass"/><test-case name="15234NISTXML-SV-IV-list-gYear-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="15235NISTXML-SV-IV-list-gYear-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="15236NISTXML-SV-IV-list-gYear-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="15237NISTXML-SV-IV-list-gYear-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="15238NISTXML-SV-IV-list-gYear-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="15239NISTSchema-SV-IV-list-gYear-enumeration-2 tokoe:valid" result="pass"/><test-case name="15240NISTXML-SV-IV-list-gYear-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="15241NISTXML-SV-IV-list-gYear-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="15242NISTXML-SV-IV-list-gYear-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="15243NISTXML-SV-IV-list-gYear-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="15244NISTXML-SV-IV-list-gYear-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="15245NISTSchema-SV-IV-list-gYear-enumeration-3 tokoe:valid" result="pass"/><test-case name="15246NISTXML-SV-IV-list-gYear-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="15247NISTXML-SV-IV-list-gYear-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="15248NISTXML-SV-IV-list-gYear-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="15249NISTXML-SV-IV-list-gYear-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="15250NISTXML-SV-IV-list-gYear-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="15251NISTSchema-SV-IV-list-gYear-enumeration-4 tokoe:valid" result="pass"/><test-case name="15252NISTXML-SV-IV-list-gYear-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="15253NISTXML-SV-IV-list-gYear-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="15254NISTXML-SV-IV-list-gYear-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="15255NISTXML-SV-IV-list-gYear-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="15256NISTXML-SV-IV-list-gYear-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="15257NISTSchema-SV-IV-list-gYear-enumeration-5 tokoe:valid" result="pass"/><test-case name="15258NISTXML-SV-IV-list-gYear-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="15259NISTXML-SV-IV-list-gYear-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="15260NISTXML-SV-IV-list-gYear-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="15261NISTXML-SV-IV-list-gYear-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="15262NISTXML-SV-IV-list-gYear-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="15263NISTSchema-SV-IV-list-gYear-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="15264NISTXML-SV-IV-list-gYear-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="15265NISTXML-SV-IV-list-gYear-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="15266NISTXML-SV-IV-list-gYear-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="15267NISTXML-SV-IV-list-gYear-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="15268NISTXML-SV-IV-list-gYear-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="15269NISTSchema-SV-IV-list-gMonthDay-maxLength-1 tokoe:valid" result="pass"/><test-case name="15270NISTXML-SV-IV-list-gMonthDay-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="15271NISTXML-SV-IV-list-gMonthDay-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="15272NISTXML-SV-IV-list-gMonthDay-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="15273NISTXML-SV-IV-list-gMonthDay-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="15274NISTXML-SV-IV-list-gMonthDay-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="15275NISTSchema-SV-IV-list-gMonthDay-maxLength-2 tokoe:valid" result="pass"/><test-case name="15276NISTXML-SV-IV-list-gMonthDay-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="15277NISTXML-SV-IV-list-gMonthDay-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="15278NISTXML-SV-IV-list-gMonthDay-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="15279NISTXML-SV-IV-list-gMonthDay-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="15280NISTXML-SV-IV-list-gMonthDay-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="15281NISTSchema-SV-IV-list-gMonthDay-maxLength-3 tokoe:valid" result="pass"/><test-case name="15282NISTXML-SV-IV-list-gMonthDay-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="15283NISTXML-SV-IV-list-gMonthDay-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="15284NISTXML-SV-IV-list-gMonthDay-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="15285NISTXML-SV-IV-list-gMonthDay-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="15286NISTXML-SV-IV-list-gMonthDay-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="15287NISTSchema-SV-IV-list-gMonthDay-maxLength-4 tokoe:valid" result="pass"/><test-case name="15288NISTXML-SV-IV-list-gMonthDay-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="15289NISTXML-SV-IV-list-gMonthDay-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="15290NISTXML-SV-IV-list-gMonthDay-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="15291NISTXML-SV-IV-list-gMonthDay-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="15292NISTXML-SV-IV-list-gMonthDay-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="15293NISTSchema-SV-IV-list-gMonthDay-maxLength-5 tokoe:valid" result="pass"/><test-case name="15294NISTXML-SV-IV-list-gMonthDay-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="15295NISTXML-SV-IV-list-gMonthDay-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="15296NISTXML-SV-IV-list-gMonthDay-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="15297NISTXML-SV-IV-list-gMonthDay-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="15298NISTXML-SV-IV-list-gMonthDay-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="15299NISTSchema-SV-IV-list-gMonthDay-minLength-1 tokoe:valid" result="pass"/><test-case name="15300NISTXML-SV-IV-list-gMonthDay-minLength-1-1 tokoe:valid" result="pass"/><test-case name="15301NISTXML-SV-IV-list-gMonthDay-minLength-1-2 tokoe:valid" result="pass"/><test-case name="15302NISTXML-SV-IV-list-gMonthDay-minLength-1-3 tokoe:valid" result="pass"/><test-case name="15303NISTXML-SV-IV-list-gMonthDay-minLength-1-4 tokoe:valid" result="pass"/><test-case name="15304NISTXML-SV-IV-list-gMonthDay-minLength-1-5 tokoe:valid" result="pass"/><test-case name="15305NISTSchema-SV-IV-list-gMonthDay-minLength-2 tokoe:valid" result="pass"/><test-case name="15306NISTXML-SV-IV-list-gMonthDay-minLength-2-1 tokoe:valid" result="pass"/><test-case name="15307NISTXML-SV-IV-list-gMonthDay-minLength-2-2 tokoe:valid" result="pass"/><test-case name="15308NISTXML-SV-IV-list-gMonthDay-minLength-2-3 tokoe:valid" result="pass"/><test-case name="15309NISTXML-SV-IV-list-gMonthDay-minLength-2-4 tokoe:valid" result="pass"/><test-case name="15310NISTXML-SV-IV-list-gMonthDay-minLength-2-5 tokoe:valid" result="pass"/><test-case name="15311NISTSchema-SV-IV-list-gMonthDay-minLength-3 tokoe:valid" result="pass"/><test-case name="15312NISTXML-SV-IV-list-gMonthDay-minLength-3-1 tokoe:valid" result="pass"/><test-case name="15313NISTXML-SV-IV-list-gMonthDay-minLength-3-2 tokoe:valid" result="pass"/><test-case name="15314NISTXML-SV-IV-list-gMonthDay-minLength-3-3 tokoe:valid" result="pass"/><test-case name="15315NISTXML-SV-IV-list-gMonthDay-minLength-3-4 tokoe:valid" result="pass"/><test-case name="15316NISTXML-SV-IV-list-gMonthDay-minLength-3-5 tokoe:valid" result="pass"/><test-case name="15317NISTSchema-SV-IV-list-gMonthDay-minLength-4 tokoe:valid" result="pass"/><test-case name="15318NISTXML-SV-IV-list-gMonthDay-minLength-4-1 tokoe:valid" result="pass"/><test-case name="15319NISTXML-SV-IV-list-gMonthDay-minLength-4-2 tokoe:valid" result="pass"/><test-case name="15320NISTXML-SV-IV-list-gMonthDay-minLength-4-3 tokoe:valid" result="pass"/><test-case name="15321NISTXML-SV-IV-list-gMonthDay-minLength-4-4 tokoe:valid" result="pass"/><test-case name="15322NISTXML-SV-IV-list-gMonthDay-minLength-4-5 tokoe:valid" result="pass"/><test-case name="15323NISTSchema-SV-IV-list-gMonthDay-minLength-5 tokoe:valid" result="pass"/><test-case name="15324NISTXML-SV-IV-list-gMonthDay-minLength-5-1 tokoe:valid" result="pass"/><test-case name="15325NISTXML-SV-IV-list-gMonthDay-minLength-5-2 tokoe:valid" result="pass"/><test-case name="15326NISTXML-SV-IV-list-gMonthDay-minLength-5-3 tokoe:valid" result="pass"/><test-case name="15327NISTXML-SV-IV-list-gMonthDay-minLength-5-4 tokoe:valid" result="pass"/><test-case name="15328NISTXML-SV-IV-list-gMonthDay-minLength-5-5 tokoe:valid" result="pass"/><test-case name="15329NISTSchema-SV-IV-list-gMonthDay-length-1 tokoe:valid" result="pass"/><test-case name="15330NISTXML-SV-IV-list-gMonthDay-length-1-1 tokoe:valid" result="pass"/><test-case name="15331NISTXML-SV-IV-list-gMonthDay-length-1-2 tokoe:valid" result="pass"/><test-case name="15332NISTXML-SV-IV-list-gMonthDay-length-1-3 tokoe:valid" result="pass"/><test-case name="15333NISTXML-SV-IV-list-gMonthDay-length-1-4 tokoe:valid" result="pass"/><test-case name="15334NISTXML-SV-IV-list-gMonthDay-length-1-5 tokoe:valid" result="pass"/><test-case name="15335NISTSchema-SV-IV-list-gMonthDay-length-2 tokoe:valid" result="pass"/><test-case name="15336NISTXML-SV-IV-list-gMonthDay-length-2-1 tokoe:valid" result="pass"/><test-case name="15337NISTXML-SV-IV-list-gMonthDay-length-2-2 tokoe:valid" result="pass"/><test-case name="15338NISTXML-SV-IV-list-gMonthDay-length-2-3 tokoe:valid" result="pass"/><test-case name="15339NISTXML-SV-IV-list-gMonthDay-length-2-4 tokoe:valid" result="pass"/><test-case name="15340NISTXML-SV-IV-list-gMonthDay-length-2-5 tokoe:valid" result="pass"/><test-case name="15341NISTSchema-SV-IV-list-gMonthDay-length-3 tokoe:valid" result="pass"/><test-case name="15342NISTXML-SV-IV-list-gMonthDay-length-3-1 tokoe:valid" result="pass"/><test-case name="15343NISTXML-SV-IV-list-gMonthDay-length-3-2 tokoe:valid" result="pass"/><test-case name="15344NISTXML-SV-IV-list-gMonthDay-length-3-3 tokoe:valid" result="pass"/><test-case name="15345NISTXML-SV-IV-list-gMonthDay-length-3-4 tokoe:valid" result="pass"/><test-case name="15346NISTXML-SV-IV-list-gMonthDay-length-3-5 tokoe:valid" result="pass"/><test-case name="15347NISTSchema-SV-IV-list-gMonthDay-length-4 tokoe:valid" result="pass"/><test-case name="15348NISTXML-SV-IV-list-gMonthDay-length-4-1 tokoe:valid" result="pass"/><test-case name="15349NISTXML-SV-IV-list-gMonthDay-length-4-2 tokoe:valid" result="pass"/><test-case name="15350NISTXML-SV-IV-list-gMonthDay-length-4-3 tokoe:valid" result="pass"/><test-case name="15351NISTXML-SV-IV-list-gMonthDay-length-4-4 tokoe:valid" result="pass"/><test-case name="15352NISTXML-SV-IV-list-gMonthDay-length-4-5 tokoe:valid" result="pass"/><test-case name="15353NISTSchema-SV-IV-list-gMonthDay-length-5 tokoe:valid" result="pass"/><test-case name="15354NISTXML-SV-IV-list-gMonthDay-length-5-1 tokoe:valid" result="pass"/><test-case name="15355NISTXML-SV-IV-list-gMonthDay-length-5-2 tokoe:valid" result="pass"/><test-case name="15356NISTXML-SV-IV-list-gMonthDay-length-5-3 tokoe:valid" result="pass"/><test-case name="15357NISTXML-SV-IV-list-gMonthDay-length-5-4 tokoe:valid" result="pass"/><test-case name="15358NISTXML-SV-IV-list-gMonthDay-length-5-5 tokoe:valid" result="pass"/><test-case name="15359NISTSchema-SV-IV-list-gMonthDay-pattern-1 tokoe:valid" result="pass"/><test-case name="15360NISTXML-SV-IV-list-gMonthDay-pattern-1-1 tokoe:valid" result="pass"/><test-case name="15361NISTXML-SV-IV-list-gMonthDay-pattern-1-2 tokoe:valid" result="pass"/><test-case name="15362NISTXML-SV-IV-list-gMonthDay-pattern-1-3 tokoe:valid" result="pass"/><test-case name="15363NISTXML-SV-IV-list-gMonthDay-pattern-1-4 tokoe:valid" result="pass"/><test-case name="15364NISTXML-SV-IV-list-gMonthDay-pattern-1-5 tokoe:valid" result="pass"/><test-case name="15365NISTSchema-SV-IV-list-gMonthDay-pattern-2 tokoe:valid" result="pass"/><test-case name="15366NISTXML-SV-IV-list-gMonthDay-pattern-2-1 tokoe:valid" result="pass"/><test-case name="15367NISTXML-SV-IV-list-gMonthDay-pattern-2-2 tokoe:valid" result="pass"/><test-case name="15368NISTXML-SV-IV-list-gMonthDay-pattern-2-3 tokoe:valid" result="pass"/><test-case name="15369NISTXML-SV-IV-list-gMonthDay-pattern-2-4 tokoe:valid" result="pass"/><test-case name="15370NISTXML-SV-IV-list-gMonthDay-pattern-2-5 tokoe:valid" result="pass"/><test-case name="15371NISTSchema-SV-IV-list-gMonthDay-pattern-3 tokoe:valid" result="pass"/><test-case name="15372NISTXML-SV-IV-list-gMonthDay-pattern-3-1 tokoe:valid" result="pass"/><test-case name="15373NISTXML-SV-IV-list-gMonthDay-pattern-3-2 tokoe:valid" result="pass"/><test-case name="15374NISTXML-SV-IV-list-gMonthDay-pattern-3-3 tokoe:valid" result="pass"/><test-case name="15375NISTXML-SV-IV-list-gMonthDay-pattern-3-4 tokoe:valid" result="pass"/><test-case name="15376NISTXML-SV-IV-list-gMonthDay-pattern-3-5 tokoe:valid" result="pass"/><test-case name="15377NISTSchema-SV-IV-list-gMonthDay-pattern-4 tokoe:valid" result="pass"/><test-case name="15378NISTXML-SV-IV-list-gMonthDay-pattern-4-1 tokoe:valid" result="pass"/><test-case name="15379NISTXML-SV-IV-list-gMonthDay-pattern-4-2 tokoe:valid" result="pass"/><test-case name="15380NISTXML-SV-IV-list-gMonthDay-pattern-4-3 tokoe:valid" result="pass"/><test-case name="15381NISTXML-SV-IV-list-gMonthDay-pattern-4-4 tokoe:valid" result="pass"/><test-case name="15382NISTXML-SV-IV-list-gMonthDay-pattern-4-5 tokoe:valid" result="pass"/><test-case name="15383NISTSchema-SV-IV-list-gMonthDay-pattern-5 tokoe:valid" result="pass"/><test-case name="15384NISTXML-SV-IV-list-gMonthDay-pattern-5-1 tokoe:valid" result="pass"/><test-case name="15385NISTXML-SV-IV-list-gMonthDay-pattern-5-2 tokoe:valid" result="pass"/><test-case name="15386NISTXML-SV-IV-list-gMonthDay-pattern-5-3 tokoe:valid" result="pass"/><test-case name="15387NISTXML-SV-IV-list-gMonthDay-pattern-5-4 tokoe:valid" result="pass"/><test-case name="15388NISTXML-SV-IV-list-gMonthDay-pattern-5-5 tokoe:valid" result="pass"/><test-case name="15389NISTSchema-SV-IV-list-gMonthDay-enumeration-1 tokoe:valid" result="pass"/><test-case name="15390NISTXML-SV-IV-list-gMonthDay-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="15391NISTXML-SV-IV-list-gMonthDay-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="15392NISTXML-SV-IV-list-gMonthDay-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="15393NISTXML-SV-IV-list-gMonthDay-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="15394NISTXML-SV-IV-list-gMonthDay-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="15395NISTSchema-SV-IV-list-gMonthDay-enumeration-2 tokoe:valid" result="pass"/><test-case name="15396NISTXML-SV-IV-list-gMonthDay-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="15397NISTXML-SV-IV-list-gMonthDay-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="15398NISTXML-SV-IV-list-gMonthDay-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="15399NISTXML-SV-IV-list-gMonthDay-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="15400NISTXML-SV-IV-list-gMonthDay-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="15401NISTSchema-SV-IV-list-gMonthDay-enumeration-3 tokoe:valid" result="pass"/><test-case name="15402NISTXML-SV-IV-list-gMonthDay-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="15403NISTXML-SV-IV-list-gMonthDay-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="15404NISTXML-SV-IV-list-gMonthDay-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="15405NISTXML-SV-IV-list-gMonthDay-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="15406NISTXML-SV-IV-list-gMonthDay-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="15407NISTSchema-SV-IV-list-gMonthDay-enumeration-4 tokoe:valid" result="pass"/><test-case name="15408NISTXML-SV-IV-list-gMonthDay-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="15409NISTXML-SV-IV-list-gMonthDay-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="15410NISTXML-SV-IV-list-gMonthDay-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="15411NISTXML-SV-IV-list-gMonthDay-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="15412NISTXML-SV-IV-list-gMonthDay-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="15413NISTSchema-SV-IV-list-gMonthDay-enumeration-5 tokoe:valid" result="pass"/><test-case name="15414NISTXML-SV-IV-list-gMonthDay-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="15415NISTXML-SV-IV-list-gMonthDay-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="15416NISTXML-SV-IV-list-gMonthDay-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="15417NISTXML-SV-IV-list-gMonthDay-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="15418NISTXML-SV-IV-list-gMonthDay-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="15419NISTSchema-SV-IV-list-gMonthDay-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="15420NISTXML-SV-IV-list-gMonthDay-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="15421NISTXML-SV-IV-list-gMonthDay-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="15422NISTXML-SV-IV-list-gMonthDay-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="15423NISTXML-SV-IV-list-gMonthDay-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="15424NISTXML-SV-IV-list-gMonthDay-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="15425NISTSchema-SV-IV-list-gDay-maxLength-1 tokoe:valid" result="pass"/><test-case name="15426NISTXML-SV-IV-list-gDay-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="15427NISTXML-SV-IV-list-gDay-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="15428NISTXML-SV-IV-list-gDay-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="15429NISTXML-SV-IV-list-gDay-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="15430NISTXML-SV-IV-list-gDay-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="15431NISTSchema-SV-IV-list-gDay-maxLength-2 tokoe:valid" result="pass"/><test-case name="15432NISTXML-SV-IV-list-gDay-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="15433NISTXML-SV-IV-list-gDay-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="15434NISTXML-SV-IV-list-gDay-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="15435NISTXML-SV-IV-list-gDay-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="15436NISTXML-SV-IV-list-gDay-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="15437NISTSchema-SV-IV-list-gDay-maxLength-3 tokoe:valid" result="pass"/><test-case name="15438NISTXML-SV-IV-list-gDay-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="15439NISTXML-SV-IV-list-gDay-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="15440NISTXML-SV-IV-list-gDay-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="15441NISTXML-SV-IV-list-gDay-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="15442NISTXML-SV-IV-list-gDay-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="15443NISTSchema-SV-IV-list-gDay-maxLength-4 tokoe:valid" result="pass"/><test-case name="15444NISTXML-SV-IV-list-gDay-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="15445NISTXML-SV-IV-list-gDay-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="15446NISTXML-SV-IV-list-gDay-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="15447NISTXML-SV-IV-list-gDay-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="15448NISTXML-SV-IV-list-gDay-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="15449NISTSchema-SV-IV-list-gDay-maxLength-5 tokoe:valid" result="pass"/><test-case name="15450NISTXML-SV-IV-list-gDay-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="15451NISTXML-SV-IV-list-gDay-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="15452NISTXML-SV-IV-list-gDay-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="15453NISTXML-SV-IV-list-gDay-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="15454NISTXML-SV-IV-list-gDay-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="15455NISTSchema-SV-IV-list-gDay-minLength-1 tokoe:valid" result="pass"/><test-case name="15456NISTXML-SV-IV-list-gDay-minLength-1-1 tokoe:valid" result="pass"/><test-case name="15457NISTXML-SV-IV-list-gDay-minLength-1-2 tokoe:valid" result="pass"/><test-case name="15458NISTXML-SV-IV-list-gDay-minLength-1-3 tokoe:valid" result="pass"/><test-case name="15459NISTXML-SV-IV-list-gDay-minLength-1-4 tokoe:valid" result="pass"/><test-case name="15460NISTXML-SV-IV-list-gDay-minLength-1-5 tokoe:valid" result="pass"/><test-case name="15461NISTSchema-SV-IV-list-gDay-minLength-2 tokoe:valid" result="pass"/><test-case name="15462NISTXML-SV-IV-list-gDay-minLength-2-1 tokoe:valid" result="pass"/><test-case name="15463NISTXML-SV-IV-list-gDay-minLength-2-2 tokoe:valid" result="pass"/><test-case name="15464NISTXML-SV-IV-list-gDay-minLength-2-3 tokoe:valid" result="pass"/><test-case name="15465NISTXML-SV-IV-list-gDay-minLength-2-4 tokoe:valid" result="pass"/><test-case name="15466NISTXML-SV-IV-list-gDay-minLength-2-5 tokoe:valid" result="pass"/><test-case name="15467NISTSchema-SV-IV-list-gDay-minLength-3 tokoe:valid" result="pass"/><test-case name="15468NISTXML-SV-IV-list-gDay-minLength-3-1 tokoe:valid" result="pass"/><test-case name="15469NISTXML-SV-IV-list-gDay-minLength-3-2 tokoe:valid" result="pass"/><test-case name="15470NISTXML-SV-IV-list-gDay-minLength-3-3 tokoe:valid" result="pass"/><test-case name="15471NISTXML-SV-IV-list-gDay-minLength-3-4 tokoe:valid" result="pass"/><test-case name="15472NISTXML-SV-IV-list-gDay-minLength-3-5 tokoe:valid" result="pass"/><test-case name="15473NISTSchema-SV-IV-list-gDay-minLength-4 tokoe:valid" result="pass"/><test-case name="15474NISTXML-SV-IV-list-gDay-minLength-4-1 tokoe:valid" result="pass"/><test-case name="15475NISTXML-SV-IV-list-gDay-minLength-4-2 tokoe:valid" result="pass"/><test-case name="15476NISTXML-SV-IV-list-gDay-minLength-4-3 tokoe:valid" result="pass"/><test-case name="15477NISTXML-SV-IV-list-gDay-minLength-4-4 tokoe:valid" result="pass"/><test-case name="15478NISTXML-SV-IV-list-gDay-minLength-4-5 tokoe:valid" result="pass"/><test-case name="15479NISTSchema-SV-IV-list-gDay-minLength-5 tokoe:valid" result="pass"/><test-case name="15480NISTXML-SV-IV-list-gDay-minLength-5-1 tokoe:valid" result="pass"/><test-case name="15481NISTXML-SV-IV-list-gDay-minLength-5-2 tokoe:valid" result="pass"/><test-case name="15482NISTXML-SV-IV-list-gDay-minLength-5-3 tokoe:valid" result="pass"/><test-case name="15483NISTXML-SV-IV-list-gDay-minLength-5-4 tokoe:valid" result="pass"/><test-case name="15484NISTXML-SV-IV-list-gDay-minLength-5-5 tokoe:valid" result="pass"/><test-case name="15485NISTSchema-SV-IV-list-gDay-length-1 tokoe:valid" result="pass"/><test-case name="15486NISTXML-SV-IV-list-gDay-length-1-1 tokoe:valid" result="pass"/><test-case name="15487NISTXML-SV-IV-list-gDay-length-1-2 tokoe:valid" result="pass"/><test-case name="15488NISTXML-SV-IV-list-gDay-length-1-3 tokoe:valid" result="pass"/><test-case name="15489NISTXML-SV-IV-list-gDay-length-1-4 tokoe:valid" result="pass"/><test-case name="15490NISTXML-SV-IV-list-gDay-length-1-5 tokoe:valid" result="pass"/><test-case name="15491NISTSchema-SV-IV-list-gDay-length-2 tokoe:valid" result="pass"/><test-case name="15492NISTXML-SV-IV-list-gDay-length-2-1 tokoe:valid" result="pass"/><test-case name="15493NISTXML-SV-IV-list-gDay-length-2-2 tokoe:valid" result="pass"/><test-case name="15494NISTXML-SV-IV-list-gDay-length-2-3 tokoe:valid" result="pass"/><test-case name="15495NISTXML-SV-IV-list-gDay-length-2-4 tokoe:valid" result="pass"/><test-case name="15496NISTXML-SV-IV-list-gDay-length-2-5 tokoe:valid" result="pass"/><test-case name="15497NISTSchema-SV-IV-list-gDay-length-3 tokoe:valid" result="pass"/><test-case name="15498NISTXML-SV-IV-list-gDay-length-3-1 tokoe:valid" result="pass"/><test-case name="15499NISTXML-SV-IV-list-gDay-length-3-2 tokoe:valid" result="pass"/><test-case name="15500NISTXML-SV-IV-list-gDay-length-3-3 tokoe:valid" result="pass"/><test-case name="15501NISTXML-SV-IV-list-gDay-length-3-4 tokoe:valid" result="pass"/><test-case name="15502NISTXML-SV-IV-list-gDay-length-3-5 tokoe:valid" result="pass"/><test-case name="15503NISTSchema-SV-IV-list-gDay-length-4 tokoe:valid" result="pass"/><test-case name="15504NISTXML-SV-IV-list-gDay-length-4-1 tokoe:valid" result="pass"/><test-case name="15505NISTXML-SV-IV-list-gDay-length-4-2 tokoe:valid" result="pass"/><test-case name="15506NISTXML-SV-IV-list-gDay-length-4-3 tokoe:valid" result="pass"/><test-case name="15507NISTXML-SV-IV-list-gDay-length-4-4 tokoe:valid" result="pass"/><test-case name="15508NISTXML-SV-IV-list-gDay-length-4-5 tokoe:valid" result="pass"/><test-case name="15509NISTSchema-SV-IV-list-gDay-length-5 tokoe:valid" result="pass"/><test-case name="15510NISTXML-SV-IV-list-gDay-length-5-1 tokoe:valid" result="pass"/><test-case name="15511NISTXML-SV-IV-list-gDay-length-5-2 tokoe:valid" result="pass"/><test-case name="15512NISTXML-SV-IV-list-gDay-length-5-3 tokoe:valid" result="pass"/><test-case name="15513NISTXML-SV-IV-list-gDay-length-5-4 tokoe:valid" result="pass"/><test-case name="15514NISTXML-SV-IV-list-gDay-length-5-5 tokoe:valid" result="pass"/><test-case name="15515NISTSchema-SV-IV-list-gDay-pattern-1 tokoe:valid" result="pass"/><test-case name="15516NISTXML-SV-IV-list-gDay-pattern-1-1 tokoe:valid" result="pass"/><test-case name="15517NISTXML-SV-IV-list-gDay-pattern-1-2 tokoe:valid" result="pass"/><test-case name="15518NISTXML-SV-IV-list-gDay-pattern-1-3 tokoe:valid" result="pass"/><test-case name="15519NISTXML-SV-IV-list-gDay-pattern-1-4 tokoe:valid" result="pass"/><test-case name="15520NISTXML-SV-IV-list-gDay-pattern-1-5 tokoe:valid" result="pass"/><test-case name="15521NISTSchema-SV-IV-list-gDay-pattern-2 tokoe:valid" result="pass"/><test-case name="15522NISTXML-SV-IV-list-gDay-pattern-2-1 tokoe:valid" result="pass"/><test-case name="15523NISTXML-SV-IV-list-gDay-pattern-2-2 tokoe:valid" result="pass"/><test-case name="15524NISTXML-SV-IV-list-gDay-pattern-2-3 tokoe:valid" result="pass"/><test-case name="15525NISTXML-SV-IV-list-gDay-pattern-2-4 tokoe:valid" result="pass"/><test-case name="15526NISTXML-SV-IV-list-gDay-pattern-2-5 tokoe:valid" result="pass"/><test-case name="15527NISTSchema-SV-IV-list-gDay-pattern-3 tokoe:valid" result="pass"/><test-case name="15528NISTXML-SV-IV-list-gDay-pattern-3-1 tokoe:valid" result="pass"/><test-case name="15529NISTXML-SV-IV-list-gDay-pattern-3-2 tokoe:valid" result="pass"/><test-case name="15530NISTXML-SV-IV-list-gDay-pattern-3-3 tokoe:valid" result="pass"/><test-case name="15531NISTXML-SV-IV-list-gDay-pattern-3-4 tokoe:valid" result="pass"/><test-case name="15532NISTXML-SV-IV-list-gDay-pattern-3-5 tokoe:valid" result="pass"/><test-case name="15533NISTSchema-SV-IV-list-gDay-pattern-4 tokoe:valid" result="pass"/><test-case name="15534NISTXML-SV-IV-list-gDay-pattern-4-1 tokoe:valid" result="pass"/><test-case name="15535NISTXML-SV-IV-list-gDay-pattern-4-2 tokoe:valid" result="pass"/><test-case name="15536NISTXML-SV-IV-list-gDay-pattern-4-3 tokoe:valid" result="pass"/><test-case name="15537NISTXML-SV-IV-list-gDay-pattern-4-4 tokoe:valid" result="pass"/><test-case name="15538NISTXML-SV-IV-list-gDay-pattern-4-5 tokoe:valid" result="pass"/><test-case name="15539NISTSchema-SV-IV-list-gDay-pattern-5 tokoe:valid" result="pass"/><test-case name="15540NISTXML-SV-IV-list-gDay-pattern-5-1 tokoe:valid" result="pass"/><test-case name="15541NISTXML-SV-IV-list-gDay-pattern-5-2 tokoe:valid" result="pass"/><test-case name="15542NISTXML-SV-IV-list-gDay-pattern-5-3 tokoe:valid" result="pass"/><test-case name="15543NISTXML-SV-IV-list-gDay-pattern-5-4 tokoe:valid" result="pass"/><test-case name="15544NISTXML-SV-IV-list-gDay-pattern-5-5 tokoe:valid" result="pass"/><test-case name="15545NISTSchema-SV-IV-list-gDay-enumeration-1 tokoe:valid" result="pass"/><test-case name="15546NISTXML-SV-IV-list-gDay-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="15547NISTXML-SV-IV-list-gDay-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="15548NISTXML-SV-IV-list-gDay-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="15549NISTXML-SV-IV-list-gDay-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="15550NISTXML-SV-IV-list-gDay-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="15551NISTSchema-SV-IV-list-gDay-enumeration-2 tokoe:valid" result="pass"/><test-case name="15552NISTXML-SV-IV-list-gDay-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="15553NISTXML-SV-IV-list-gDay-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="15554NISTXML-SV-IV-list-gDay-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="15555NISTXML-SV-IV-list-gDay-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="15556NISTXML-SV-IV-list-gDay-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="15557NISTSchema-SV-IV-list-gDay-enumeration-3 tokoe:valid" result="pass"/><test-case name="15558NISTXML-SV-IV-list-gDay-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="15559NISTXML-SV-IV-list-gDay-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="15560NISTXML-SV-IV-list-gDay-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="15561NISTXML-SV-IV-list-gDay-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="15562NISTXML-SV-IV-list-gDay-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="15563NISTSchema-SV-IV-list-gDay-enumeration-4 tokoe:valid" result="pass"/><test-case name="15564NISTXML-SV-IV-list-gDay-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="15565NISTXML-SV-IV-list-gDay-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="15566NISTXML-SV-IV-list-gDay-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="15567NISTXML-SV-IV-list-gDay-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="15568NISTXML-SV-IV-list-gDay-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="15569NISTSchema-SV-IV-list-gDay-enumeration-5 tokoe:valid" result="pass"/><test-case name="15570NISTXML-SV-IV-list-gDay-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="15571NISTXML-SV-IV-list-gDay-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="15572NISTXML-SV-IV-list-gDay-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="15573NISTXML-SV-IV-list-gDay-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="15574NISTXML-SV-IV-list-gDay-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="15575NISTSchema-SV-IV-list-gDay-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="15576NISTXML-SV-IV-list-gDay-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="15577NISTXML-SV-IV-list-gDay-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="15578NISTXML-SV-IV-list-gDay-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="15579NISTXML-SV-IV-list-gDay-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="15580NISTXML-SV-IV-list-gDay-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="15581NISTSchema-SV-IV-list-gMonth-maxLength-1 tokoe:valid" result="pass"/><test-case name="15582NISTXML-SV-IV-list-gMonth-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="15583NISTXML-SV-IV-list-gMonth-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="15584NISTXML-SV-IV-list-gMonth-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="15585NISTXML-SV-IV-list-gMonth-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="15586NISTXML-SV-IV-list-gMonth-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="15587NISTSchema-SV-IV-list-gMonth-maxLength-2 tokoe:valid" result="pass"/><test-case name="15588NISTXML-SV-IV-list-gMonth-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="15589NISTXML-SV-IV-list-gMonth-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="15590NISTXML-SV-IV-list-gMonth-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="15591NISTXML-SV-IV-list-gMonth-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="15592NISTXML-SV-IV-list-gMonth-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="15593NISTSchema-SV-IV-list-gMonth-maxLength-3 tokoe:valid" result="pass"/><test-case name="15594NISTXML-SV-IV-list-gMonth-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="15595NISTXML-SV-IV-list-gMonth-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="15596NISTXML-SV-IV-list-gMonth-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="15597NISTXML-SV-IV-list-gMonth-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="15598NISTXML-SV-IV-list-gMonth-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="15599NISTSchema-SV-IV-list-gMonth-maxLength-4 tokoe:valid" result="pass"/><test-case name="15600NISTXML-SV-IV-list-gMonth-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="15601NISTXML-SV-IV-list-gMonth-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="15602NISTXML-SV-IV-list-gMonth-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="15603NISTXML-SV-IV-list-gMonth-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="15604NISTXML-SV-IV-list-gMonth-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="15605NISTSchema-SV-IV-list-gMonth-maxLength-5 tokoe:valid" result="pass"/><test-case name="15606NISTXML-SV-IV-list-gMonth-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="15607NISTXML-SV-IV-list-gMonth-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="15608NISTXML-SV-IV-list-gMonth-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="15609NISTXML-SV-IV-list-gMonth-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="15610NISTXML-SV-IV-list-gMonth-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="15611NISTSchema-SV-IV-list-gMonth-minLength-1 tokoe:valid" result="pass"/><test-case name="15612NISTXML-SV-IV-list-gMonth-minLength-1-1 tokoe:valid" result="pass"/><test-case name="15613NISTXML-SV-IV-list-gMonth-minLength-1-2 tokoe:valid" result="pass"/><test-case name="15614NISTXML-SV-IV-list-gMonth-minLength-1-3 tokoe:valid" result="pass"/><test-case name="15615NISTXML-SV-IV-list-gMonth-minLength-1-4 tokoe:valid" result="pass"/><test-case name="15616NISTXML-SV-IV-list-gMonth-minLength-1-5 tokoe:valid" result="pass"/><test-case name="15617NISTSchema-SV-IV-list-gMonth-minLength-2 tokoe:valid" result="pass"/><test-case name="15618NISTXML-SV-IV-list-gMonth-minLength-2-1 tokoe:valid" result="pass"/><test-case name="15619NISTXML-SV-IV-list-gMonth-minLength-2-2 tokoe:valid" result="pass"/><test-case name="15620NISTXML-SV-IV-list-gMonth-minLength-2-3 tokoe:valid" result="pass"/><test-case name="15621NISTXML-SV-IV-list-gMonth-minLength-2-4 tokoe:valid" result="pass"/><test-case name="15622NISTXML-SV-IV-list-gMonth-minLength-2-5 tokoe:valid" result="pass"/><test-case name="15623NISTSchema-SV-IV-list-gMonth-minLength-3 tokoe:valid" result="pass"/><test-case name="15624NISTXML-SV-IV-list-gMonth-minLength-3-1 tokoe:valid" result="pass"/><test-case name="15625NISTXML-SV-IV-list-gMonth-minLength-3-2 tokoe:valid" result="pass"/><test-case name="15626NISTXML-SV-IV-list-gMonth-minLength-3-3 tokoe:valid" result="pass"/><test-case name="15627NISTXML-SV-IV-list-gMonth-minLength-3-4 tokoe:valid" result="pass"/><test-case name="15628NISTXML-SV-IV-list-gMonth-minLength-3-5 tokoe:valid" result="pass"/><test-case name="15629NISTSchema-SV-IV-list-gMonth-minLength-4 tokoe:valid" result="pass"/><test-case name="15630NISTXML-SV-IV-list-gMonth-minLength-4-1 tokoe:valid" result="pass"/><test-case name="15631NISTXML-SV-IV-list-gMonth-minLength-4-2 tokoe:valid" result="pass"/><test-case name="15632NISTXML-SV-IV-list-gMonth-minLength-4-3 tokoe:valid" result="pass"/><test-case name="15633NISTXML-SV-IV-list-gMonth-minLength-4-4 tokoe:valid" result="pass"/><test-case name="15634NISTXML-SV-IV-list-gMonth-minLength-4-5 tokoe:valid" result="pass"/><test-case name="15635NISTSchema-SV-IV-list-gMonth-minLength-5 tokoe:valid" result="pass"/><test-case name="15636NISTXML-SV-IV-list-gMonth-minLength-5-1 tokoe:valid" result="pass"/><test-case name="15637NISTXML-SV-IV-list-gMonth-minLength-5-2 tokoe:valid" result="pass"/><test-case name="15638NISTXML-SV-IV-list-gMonth-minLength-5-3 tokoe:valid" result="pass"/><test-case name="15639NISTXML-SV-IV-list-gMonth-minLength-5-4 tokoe:valid" result="pass"/><test-case name="15640NISTXML-SV-IV-list-gMonth-minLength-5-5 tokoe:valid" result="pass"/><test-case name="15641NISTSchema-SV-IV-list-gMonth-length-1 tokoe:valid" result="pass"/><test-case name="15642NISTXML-SV-IV-list-gMonth-length-1-1 tokoe:valid" result="pass"/><test-case name="15643NISTXML-SV-IV-list-gMonth-length-1-2 tokoe:valid" result="pass"/><test-case name="15644NISTXML-SV-IV-list-gMonth-length-1-3 tokoe:valid" result="pass"/><test-case name="15645NISTXML-SV-IV-list-gMonth-length-1-4 tokoe:valid" result="pass"/><test-case name="15646NISTXML-SV-IV-list-gMonth-length-1-5 tokoe:valid" result="pass"/><test-case name="15647NISTSchema-SV-IV-list-gMonth-length-2 tokoe:valid" result="pass"/><test-case name="15648NISTXML-SV-IV-list-gMonth-length-2-1 tokoe:valid" result="pass"/><test-case name="15649NISTXML-SV-IV-list-gMonth-length-2-2 tokoe:valid" result="pass"/><test-case name="15650NISTXML-SV-IV-list-gMonth-length-2-3 tokoe:valid" result="pass"/><test-case name="15651NISTXML-SV-IV-list-gMonth-length-2-4 tokoe:valid" result="pass"/><test-case name="15652NISTXML-SV-IV-list-gMonth-length-2-5 tokoe:valid" result="pass"/><test-case name="15653NISTSchema-SV-IV-list-gMonth-length-3 tokoe:valid" result="pass"/><test-case name="15654NISTXML-SV-IV-list-gMonth-length-3-1 tokoe:valid" result="pass"/><test-case name="15655NISTXML-SV-IV-list-gMonth-length-3-2 tokoe:valid" result="pass"/><test-case name="15656NISTXML-SV-IV-list-gMonth-length-3-3 tokoe:valid" result="pass"/><test-case name="15657NISTXML-SV-IV-list-gMonth-length-3-4 tokoe:valid" result="pass"/><test-case name="15658NISTXML-SV-IV-list-gMonth-length-3-5 tokoe:valid" result="pass"/><test-case name="15659NISTSchema-SV-IV-list-gMonth-length-4 tokoe:valid" result="pass"/><test-case name="15660NISTXML-SV-IV-list-gMonth-length-4-1 tokoe:valid" result="pass"/><test-case name="15661NISTXML-SV-IV-list-gMonth-length-4-2 tokoe:valid" result="pass"/><test-case name="15662NISTXML-SV-IV-list-gMonth-length-4-3 tokoe:valid" result="pass"/><test-case name="15663NISTXML-SV-IV-list-gMonth-length-4-4 tokoe:valid" result="pass"/><test-case name="15664NISTXML-SV-IV-list-gMonth-length-4-5 tokoe:valid" result="pass"/><test-case name="15665NISTSchema-SV-IV-list-gMonth-length-5 tokoe:valid" result="pass"/><test-case name="15666NISTXML-SV-IV-list-gMonth-length-5-1 tokoe:valid" result="pass"/><test-case name="15667NISTXML-SV-IV-list-gMonth-length-5-2 tokoe:valid" result="pass"/><test-case name="15668NISTXML-SV-IV-list-gMonth-length-5-3 tokoe:valid" result="pass"/><test-case name="15669NISTXML-SV-IV-list-gMonth-length-5-4 tokoe:valid" result="pass"/><test-case name="15670NISTXML-SV-IV-list-gMonth-length-5-5 tokoe:valid" result="pass"/><test-case name="15671NISTSchema-SV-IV-list-gMonth-pattern-1 tokoe:valid" result="pass"/><test-case name="15672NISTXML-SV-IV-list-gMonth-pattern-1-1 tokoe:valid" result="pass"/><test-case name="15673NISTXML-SV-IV-list-gMonth-pattern-1-2 tokoe:valid" result="pass"/><test-case name="15674NISTXML-SV-IV-list-gMonth-pattern-1-3 tokoe:valid" result="pass"/><test-case name="15675NISTXML-SV-IV-list-gMonth-pattern-1-4 tokoe:valid" result="pass"/><test-case name="15676NISTXML-SV-IV-list-gMonth-pattern-1-5 tokoe:valid" result="pass"/><test-case name="15677NISTSchema-SV-IV-list-gMonth-pattern-2 tokoe:valid" result="pass"/><test-case name="15678NISTXML-SV-IV-list-gMonth-pattern-2-1 tokoe:valid" result="pass"/><test-case name="15679NISTXML-SV-IV-list-gMonth-pattern-2-2 tokoe:valid" result="pass"/><test-case name="15680NISTXML-SV-IV-list-gMonth-pattern-2-3 tokoe:valid" result="pass"/><test-case name="15681NISTXML-SV-IV-list-gMonth-pattern-2-4 tokoe:valid" result="pass"/><test-case name="15682NISTXML-SV-IV-list-gMonth-pattern-2-5 tokoe:valid" result="pass"/><test-case name="15683NISTSchema-SV-IV-list-gMonth-pattern-3 tokoe:valid" result="pass"/><test-case name="15684NISTXML-SV-IV-list-gMonth-pattern-3-1 tokoe:valid" result="pass"/><test-case name="15685NISTXML-SV-IV-list-gMonth-pattern-3-2 tokoe:valid" result="pass"/><test-case name="15686NISTXML-SV-IV-list-gMonth-pattern-3-3 tokoe:valid" result="pass"/><test-case name="15687NISTXML-SV-IV-list-gMonth-pattern-3-4 tokoe:valid" result="pass"/><test-case name="15688NISTXML-SV-IV-list-gMonth-pattern-3-5 tokoe:valid" result="pass"/><test-case name="15689NISTSchema-SV-IV-list-gMonth-pattern-4 tokoe:valid" result="pass"/><test-case name="15690NISTXML-SV-IV-list-gMonth-pattern-4-1 tokoe:valid" result="pass"/><test-case name="15691NISTXML-SV-IV-list-gMonth-pattern-4-2 tokoe:valid" result="pass"/><test-case name="15692NISTXML-SV-IV-list-gMonth-pattern-4-3 tokoe:valid" result="pass"/><test-case name="15693NISTXML-SV-IV-list-gMonth-pattern-4-4 tokoe:valid" result="pass"/><test-case name="15694NISTXML-SV-IV-list-gMonth-pattern-4-5 tokoe:valid" result="pass"/><test-case name="15695NISTSchema-SV-IV-list-gMonth-pattern-5 tokoe:valid" result="pass"/><test-case name="15696NISTXML-SV-IV-list-gMonth-pattern-5-1 tokoe:valid" result="pass"/><test-case name="15697NISTXML-SV-IV-list-gMonth-pattern-5-2 tokoe:valid" result="pass"/><test-case name="15698NISTXML-SV-IV-list-gMonth-pattern-5-3 tokoe:valid" result="pass"/><test-case name="15699NISTXML-SV-IV-list-gMonth-pattern-5-4 tokoe:valid" result="pass"/><test-case name="15700NISTXML-SV-IV-list-gMonth-pattern-5-5 tokoe:valid" result="pass"/><test-case name="15701NISTSchema-SV-IV-list-gMonth-enumeration-1 tokoe:valid" result="pass"/><test-case name="15702NISTXML-SV-IV-list-gMonth-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="15703NISTXML-SV-IV-list-gMonth-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="15704NISTXML-SV-IV-list-gMonth-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="15705NISTXML-SV-IV-list-gMonth-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="15706NISTXML-SV-IV-list-gMonth-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="15707NISTSchema-SV-IV-list-gMonth-enumeration-2 tokoe:valid" result="pass"/><test-case name="15708NISTXML-SV-IV-list-gMonth-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="15709NISTXML-SV-IV-list-gMonth-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="15710NISTXML-SV-IV-list-gMonth-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="15711NISTXML-SV-IV-list-gMonth-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="15712NISTXML-SV-IV-list-gMonth-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="15713NISTSchema-SV-IV-list-gMonth-enumeration-3 tokoe:valid" result="pass"/><test-case name="15714NISTXML-SV-IV-list-gMonth-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="15715NISTXML-SV-IV-list-gMonth-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="15716NISTXML-SV-IV-list-gMonth-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="15717NISTXML-SV-IV-list-gMonth-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="15718NISTXML-SV-IV-list-gMonth-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="15719NISTSchema-SV-IV-list-gMonth-enumeration-4 tokoe:valid" result="pass"/><test-case name="15720NISTXML-SV-IV-list-gMonth-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="15721NISTXML-SV-IV-list-gMonth-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="15722NISTXML-SV-IV-list-gMonth-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="15723NISTXML-SV-IV-list-gMonth-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="15724NISTXML-SV-IV-list-gMonth-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="15725NISTSchema-SV-IV-list-gMonth-enumeration-5 tokoe:valid" result="pass"/><test-case name="15726NISTXML-SV-IV-list-gMonth-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="15727NISTXML-SV-IV-list-gMonth-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="15728NISTXML-SV-IV-list-gMonth-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="15729NISTXML-SV-IV-list-gMonth-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="15730NISTXML-SV-IV-list-gMonth-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="15731NISTSchema-SV-IV-list-gMonth-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="15732NISTXML-SV-IV-list-gMonth-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="15733NISTXML-SV-IV-list-gMonth-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="15734NISTXML-SV-IV-list-gMonth-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="15735NISTXML-SV-IV-list-gMonth-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="15736NISTXML-SV-IV-list-gMonth-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="15737NISTSchema-SV-IV-list-string-maxLength-1 tokoe:valid" result="pass"/><test-case name="15738NISTXML-SV-IV-list-string-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="15739NISTXML-SV-IV-list-string-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="15740NISTXML-SV-IV-list-string-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="15741NISTXML-SV-IV-list-string-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="15742NISTXML-SV-IV-list-string-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="15743NISTSchema-SV-IV-list-string-maxLength-2 tokoe:valid" result="pass"/><test-case name="15744NISTXML-SV-IV-list-string-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="15745NISTXML-SV-IV-list-string-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="15746NISTXML-SV-IV-list-string-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="15747NISTXML-SV-IV-list-string-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="15748NISTXML-SV-IV-list-string-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="15749NISTSchema-SV-IV-list-string-maxLength-3 tokoe:valid" result="pass"/><test-case name="15750NISTXML-SV-IV-list-string-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="15751NISTXML-SV-IV-list-string-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="15752NISTXML-SV-IV-list-string-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="15753NISTXML-SV-IV-list-string-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="15754NISTXML-SV-IV-list-string-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="15755NISTSchema-SV-IV-list-string-maxLength-4 tokoe:valid" result="pass"/><test-case name="15756NISTXML-SV-IV-list-string-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="15757NISTXML-SV-IV-list-string-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="15758NISTXML-SV-IV-list-string-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="15759NISTXML-SV-IV-list-string-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="15760NISTXML-SV-IV-list-string-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="15761NISTSchema-SV-IV-list-string-maxLength-5 tokoe:valid" result="pass"/><test-case name="15762NISTXML-SV-IV-list-string-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="15763NISTXML-SV-IV-list-string-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="15764NISTXML-SV-IV-list-string-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="15765NISTXML-SV-IV-list-string-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="15766NISTXML-SV-IV-list-string-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="15767NISTSchema-SV-IV-list-string-minLength-1 tokoe:valid" result="pass"/><test-case name="15768NISTXML-SV-IV-list-string-minLength-1-1 tokoe:valid" result="pass"/><test-case name="15769NISTXML-SV-IV-list-string-minLength-1-2 tokoe:valid" result="pass"/><test-case name="15770NISTXML-SV-IV-list-string-minLength-1-3 tokoe:valid" result="pass"/><test-case name="15771NISTXML-SV-IV-list-string-minLength-1-4 tokoe:valid" result="pass"/><test-case name="15772NISTXML-SV-IV-list-string-minLength-1-5 tokoe:valid" result="pass"/><test-case name="15773NISTSchema-SV-IV-list-string-minLength-2 tokoe:valid" result="pass"/><test-case name="15774NISTXML-SV-IV-list-string-minLength-2-1 tokoe:valid" result="pass"/><test-case name="15775NISTXML-SV-IV-list-string-minLength-2-2 tokoe:valid" result="pass"/><test-case name="15776NISTXML-SV-IV-list-string-minLength-2-3 tokoe:valid" result="pass"/><test-case name="15777NISTXML-SV-IV-list-string-minLength-2-4 tokoe:valid" result="pass"/><test-case name="15778NISTXML-SV-IV-list-string-minLength-2-5 tokoe:valid" result="pass"/><test-case name="15779NISTSchema-SV-IV-list-string-minLength-3 tokoe:valid" result="pass"/><test-case name="15780NISTXML-SV-IV-list-string-minLength-3-1 tokoe:valid" result="pass"/><test-case name="15781NISTXML-SV-IV-list-string-minLength-3-2 tokoe:valid" result="pass"/><test-case name="15782NISTXML-SV-IV-list-string-minLength-3-3 tokoe:valid" result="pass"/><test-case name="15783NISTXML-SV-IV-list-string-minLength-3-4 tokoe:valid" result="pass"/><test-case name="15784NISTXML-SV-IV-list-string-minLength-3-5 tokoe:valid" result="pass"/><test-case name="15785NISTSchema-SV-IV-list-string-minLength-4 tokoe:valid" result="pass"/><test-case name="15786NISTXML-SV-IV-list-string-minLength-4-1 tokoe:valid" result="pass"/><test-case name="15787NISTXML-SV-IV-list-string-minLength-4-2 tokoe:valid" result="pass"/><test-case name="15788NISTXML-SV-IV-list-string-minLength-4-3 tokoe:valid" result="pass"/><test-case name="15789NISTXML-SV-IV-list-string-minLength-4-4 tokoe:valid" result="pass"/><test-case name="15790NISTXML-SV-IV-list-string-minLength-4-5 tokoe:valid" result="pass"/><test-case name="15791NISTSchema-SV-IV-list-string-minLength-5 tokoe:valid" result="pass"/><test-case name="15792NISTXML-SV-IV-list-string-minLength-5-1 tokoe:valid" result="pass"/><test-case name="15793NISTXML-SV-IV-list-string-minLength-5-2 tokoe:valid" result="pass"/><test-case name="15794NISTXML-SV-IV-list-string-minLength-5-3 tokoe:valid" result="pass"/><test-case name="15795NISTXML-SV-IV-list-string-minLength-5-4 tokoe:valid" result="pass"/><test-case name="15796NISTXML-SV-IV-list-string-minLength-5-5 tokoe:valid" result="pass"/><test-case name="15797NISTSchema-SV-IV-list-string-length-1 tokoe:valid" result="pass"/><test-case name="15798NISTXML-SV-IV-list-string-length-1-1 tokoe:valid" result="pass"/><test-case name="15799NISTXML-SV-IV-list-string-length-1-2 tokoe:valid" result="pass"/><test-case name="15800NISTXML-SV-IV-list-string-length-1-3 tokoe:valid" result="pass"/><test-case name="15801NISTXML-SV-IV-list-string-length-1-4 tokoe:valid" result="pass"/><test-case name="15802NISTXML-SV-IV-list-string-length-1-5 tokoe:valid" result="pass"/><test-case name="15803NISTSchema-SV-IV-list-string-length-2 tokoe:valid" result="pass"/><test-case name="15804NISTXML-SV-IV-list-string-length-2-1 tokoe:valid" result="pass"/><test-case name="15805NISTXML-SV-IV-list-string-length-2-2 tokoe:valid" result="pass"/><test-case name="15806NISTXML-SV-IV-list-string-length-2-3 tokoe:valid" result="pass"/><test-case name="15807NISTXML-SV-IV-list-string-length-2-4 tokoe:valid" result="pass"/><test-case name="15808NISTXML-SV-IV-list-string-length-2-5 tokoe:valid" result="pass"/><test-case name="15809NISTSchema-SV-IV-list-string-length-3 tokoe:valid" result="pass"/><test-case name="15810NISTXML-SV-IV-list-string-length-3-1 tokoe:valid" result="pass"/><test-case name="15811NISTXML-SV-IV-list-string-length-3-2 tokoe:valid" result="pass"/><test-case name="15812NISTXML-SV-IV-list-string-length-3-3 tokoe:valid" result="pass"/><test-case name="15813NISTXML-SV-IV-list-string-length-3-4 tokoe:valid" result="pass"/><test-case name="15814NISTXML-SV-IV-list-string-length-3-5 tokoe:valid" result="pass"/><test-case name="15815NISTSchema-SV-IV-list-string-length-4 tokoe:valid" result="pass"/><test-case name="15816NISTXML-SV-IV-list-string-length-4-1 tokoe:valid" result="pass"/><test-case name="15817NISTXML-SV-IV-list-string-length-4-2 tokoe:valid" result="pass"/><test-case name="15818NISTXML-SV-IV-list-string-length-4-3 tokoe:valid" result="pass"/><test-case name="15819NISTXML-SV-IV-list-string-length-4-4 tokoe:valid" result="pass"/><test-case name="15820NISTXML-SV-IV-list-string-length-4-5 tokoe:valid" result="pass"/><test-case name="15821NISTSchema-SV-IV-list-string-length-5 tokoe:valid" result="pass"/><test-case name="15822NISTXML-SV-IV-list-string-length-5-1 tokoe:valid" result="pass"/><test-case name="15823NISTXML-SV-IV-list-string-length-5-2 tokoe:valid" result="pass"/><test-case name="15824NISTXML-SV-IV-list-string-length-5-3 tokoe:valid" result="pass"/><test-case name="15825NISTXML-SV-IV-list-string-length-5-4 tokoe:valid" result="pass"/><test-case name="15826NISTXML-SV-IV-list-string-length-5-5 tokoe:valid" result="pass"/><test-case name="15827NISTSchema-SV-IV-list-string-pattern-1 tokoe:valid" result="pass"/><test-case name="15828NISTXML-SV-IV-list-string-pattern-1-1 tokoe:valid" result="pass"/><test-case name="15829NISTXML-SV-IV-list-string-pattern-1-2 tokoe:valid" result="pass"/><test-case name="15830NISTXML-SV-IV-list-string-pattern-1-3 tokoe:valid" result="pass"/><test-case name="15831NISTXML-SV-IV-list-string-pattern-1-4 tokoe:valid" result="pass"/><test-case name="15832NISTXML-SV-IV-list-string-pattern-1-5 tokoe:valid" result="pass"/><test-case name="15833NISTSchema-SV-IV-list-string-pattern-2 tokoe:valid" result="pass"/><test-case name="15834NISTXML-SV-IV-list-string-pattern-2-1 tokoe:valid" result="pass"/><test-case name="15835NISTXML-SV-IV-list-string-pattern-2-2 tokoe:valid" result="pass"/><test-case name="15836NISTXML-SV-IV-list-string-pattern-2-3 tokoe:valid" result="pass"/><test-case name="15837NISTXML-SV-IV-list-string-pattern-2-4 tokoe:valid" result="pass"/><test-case name="15838NISTXML-SV-IV-list-string-pattern-2-5 tokoe:valid" result="pass"/><test-case name="15839NISTSchema-SV-IV-list-string-pattern-3 tokoe:valid" result="pass"/><test-case name="15840NISTXML-SV-IV-list-string-pattern-3-1 tokoe:valid" result="pass"/><test-case name="15841NISTXML-SV-IV-list-string-pattern-3-2 tokoe:valid" result="pass"/><test-case name="15842NISTXML-SV-IV-list-string-pattern-3-3 tokoe:valid" result="pass"/><test-case name="15843NISTXML-SV-IV-list-string-pattern-3-4 tokoe:valid" result="pass"/><test-case name="15844NISTXML-SV-IV-list-string-pattern-3-5 tokoe:valid" result="pass"/><test-case name="15845NISTSchema-SV-IV-list-string-pattern-4 tokoe:valid" result="pass"/><test-case name="15846NISTXML-SV-IV-list-string-pattern-4-1 tokoe:valid" result="pass"/><test-case name="15847NISTXML-SV-IV-list-string-pattern-4-2 tokoe:valid" result="pass"/><test-case name="15848NISTXML-SV-IV-list-string-pattern-4-3 tokoe:valid" result="pass"/><test-case name="15849NISTXML-SV-IV-list-string-pattern-4-4 tokoe:valid" result="pass"/><test-case name="15850NISTXML-SV-IV-list-string-pattern-4-5 tokoe:valid" result="pass"/><test-case name="15851NISTSchema-SV-IV-list-string-pattern-5 tokoe:valid" result="pass"/><test-case name="15852NISTXML-SV-IV-list-string-pattern-5-1 tokoe:valid" result="pass"/><test-case name="15853NISTXML-SV-IV-list-string-pattern-5-2 tokoe:valid" result="pass"/><test-case name="15854NISTXML-SV-IV-list-string-pattern-5-3 tokoe:valid" result="pass"/><test-case name="15855NISTXML-SV-IV-list-string-pattern-5-4 tokoe:valid" result="pass"/><test-case name="15856NISTXML-SV-IV-list-string-pattern-5-5 tokoe:valid" result="pass"/><test-case name="15857NISTSchema-SV-IV-list-string-enumeration-1 tokoe:valid" result="pass"/><test-case name="15858NISTXML-SV-IV-list-string-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="15859NISTXML-SV-IV-list-string-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="15860NISTXML-SV-IV-list-string-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="15861NISTXML-SV-IV-list-string-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="15862NISTXML-SV-IV-list-string-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="15863NISTSchema-SV-IV-list-string-enumeration-2 tokoe:valid" result="pass"/><test-case name="15864NISTXML-SV-IV-list-string-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="15865NISTXML-SV-IV-list-string-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="15866NISTXML-SV-IV-list-string-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="15867NISTXML-SV-IV-list-string-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="15868NISTXML-SV-IV-list-string-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="15869NISTSchema-SV-IV-list-string-enumeration-3 tokoe:valid" result="pass"/><test-case name="15870NISTXML-SV-IV-list-string-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="15871NISTXML-SV-IV-list-string-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="15872NISTXML-SV-IV-list-string-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="15873NISTXML-SV-IV-list-string-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="15874NISTXML-SV-IV-list-string-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="15875NISTSchema-SV-IV-list-string-enumeration-4 tokoe:valid" result="pass"/><test-case name="15876NISTXML-SV-IV-list-string-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="15877NISTXML-SV-IV-list-string-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="15878NISTXML-SV-IV-list-string-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="15879NISTXML-SV-IV-list-string-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="15880NISTXML-SV-IV-list-string-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="15881NISTSchema-SV-IV-list-string-enumeration-5 tokoe:valid" result="pass"/><test-case name="15882NISTXML-SV-IV-list-string-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="15883NISTXML-SV-IV-list-string-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="15884NISTXML-SV-IV-list-string-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="15885NISTXML-SV-IV-list-string-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="15886NISTXML-SV-IV-list-string-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="15887NISTSchema-SV-IV-list-string-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="15888NISTXML-SV-IV-list-string-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="15889NISTXML-SV-IV-list-string-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="15890NISTXML-SV-IV-list-string-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="15891NISTXML-SV-IV-list-string-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="15892NISTXML-SV-IV-list-string-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="15893NISTSchema-SV-IV-list-normalizedString-maxLength-1 tokoe:valid" result="pass"/><test-case name="15894NISTXML-SV-IV-list-normalizedString-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="15895NISTXML-SV-IV-list-normalizedString-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="15896NISTXML-SV-IV-list-normalizedString-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="15897NISTXML-SV-IV-list-normalizedString-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="15898NISTXML-SV-IV-list-normalizedString-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="15899NISTSchema-SV-IV-list-normalizedString-maxLength-2 tokoe:valid" result="pass"/><test-case name="15900NISTXML-SV-IV-list-normalizedString-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="15901NISTXML-SV-IV-list-normalizedString-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="15902NISTXML-SV-IV-list-normalizedString-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="15903NISTXML-SV-IV-list-normalizedString-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="15904NISTXML-SV-IV-list-normalizedString-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="15905NISTSchema-SV-IV-list-normalizedString-maxLength-3 tokoe:valid" result="pass"/><test-case name="15906NISTXML-SV-IV-list-normalizedString-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="15907NISTXML-SV-IV-list-normalizedString-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="15908NISTXML-SV-IV-list-normalizedString-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="15909NISTXML-SV-IV-list-normalizedString-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="15910NISTXML-SV-IV-list-normalizedString-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="15911NISTSchema-SV-IV-list-normalizedString-maxLength-4 tokoe:valid" result="pass"/><test-case name="15912NISTXML-SV-IV-list-normalizedString-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="15913NISTXML-SV-IV-list-normalizedString-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="15914NISTXML-SV-IV-list-normalizedString-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="15915NISTXML-SV-IV-list-normalizedString-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="15916NISTXML-SV-IV-list-normalizedString-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="15917NISTSchema-SV-IV-list-normalizedString-maxLength-5 tokoe:valid" result="pass"/><test-case name="15918NISTXML-SV-IV-list-normalizedString-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="15919NISTXML-SV-IV-list-normalizedString-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="15920NISTXML-SV-IV-list-normalizedString-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="15921NISTXML-SV-IV-list-normalizedString-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="15922NISTXML-SV-IV-list-normalizedString-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="15923NISTSchema-SV-IV-list-normalizedString-minLength-1 tokoe:valid" result="pass"/><test-case name="15924NISTXML-SV-IV-list-normalizedString-minLength-1-1 tokoe:valid" result="pass"/><test-case name="15925NISTXML-SV-IV-list-normalizedString-minLength-1-2 tokoe:valid" result="pass"/><test-case name="15926NISTXML-SV-IV-list-normalizedString-minLength-1-3 tokoe:valid" result="pass"/><test-case name="15927NISTXML-SV-IV-list-normalizedString-minLength-1-4 tokoe:valid" result="pass"/><test-case name="15928NISTXML-SV-IV-list-normalizedString-minLength-1-5 tokoe:valid" result="pass"/><test-case name="15929NISTSchema-SV-IV-list-normalizedString-minLength-2 tokoe:valid" result="pass"/><test-case name="15930NISTXML-SV-IV-list-normalizedString-minLength-2-1 tokoe:valid" result="pass"/><test-case name="15931NISTXML-SV-IV-list-normalizedString-minLength-2-2 tokoe:valid" result="pass"/><test-case name="15932NISTXML-SV-IV-list-normalizedString-minLength-2-3 tokoe:valid" result="pass"/><test-case name="15933NISTXML-SV-IV-list-normalizedString-minLength-2-4 tokoe:valid" result="pass"/><test-case name="15934NISTXML-SV-IV-list-normalizedString-minLength-2-5 tokoe:valid" result="pass"/><test-case name="15935NISTSchema-SV-IV-list-normalizedString-minLength-3 tokoe:valid" result="pass"/><test-case name="15936NISTXML-SV-IV-list-normalizedString-minLength-3-1 tokoe:valid" result="pass"/><test-case name="15937NISTXML-SV-IV-list-normalizedString-minLength-3-2 tokoe:valid" result="pass"/><test-case name="15938NISTXML-SV-IV-list-normalizedString-minLength-3-3 tokoe:valid" result="pass"/><test-case name="15939NISTXML-SV-IV-list-normalizedString-minLength-3-4 tokoe:valid" result="pass"/><test-case name="15940NISTXML-SV-IV-list-normalizedString-minLength-3-5 tokoe:valid" result="pass"/><test-case name="15941NISTSchema-SV-IV-list-normalizedString-minLength-4 tokoe:valid" result="pass"/><test-case name="15942NISTXML-SV-IV-list-normalizedString-minLength-4-1 tokoe:valid" result="pass"/><test-case name="15943NISTXML-SV-IV-list-normalizedString-minLength-4-2 tokoe:valid" result="pass"/><test-case name="15944NISTXML-SV-IV-list-normalizedString-minLength-4-3 tokoe:valid" result="pass"/><test-case name="15945NISTXML-SV-IV-list-normalizedString-minLength-4-4 tokoe:valid" result="pass"/><test-case name="15946NISTXML-SV-IV-list-normalizedString-minLength-4-5 tokoe:valid" result="pass"/><test-case name="15947NISTSchema-SV-IV-list-normalizedString-minLength-5 tokoe:valid" result="pass"/><test-case name="15948NISTXML-SV-IV-list-normalizedString-minLength-5-1 tokoe:valid" result="pass"/><test-case name="15949NISTXML-SV-IV-list-normalizedString-minLength-5-2 tokoe:valid" result="pass"/><test-case name="15950NISTXML-SV-IV-list-normalizedString-minLength-5-3 tokoe:valid" result="pass"/><test-case name="15951NISTXML-SV-IV-list-normalizedString-minLength-5-4 tokoe:valid" result="pass"/><test-case name="15952NISTXML-SV-IV-list-normalizedString-minLength-5-5 tokoe:valid" result="pass"/><test-case name="15953NISTSchema-SV-IV-list-normalizedString-length-1 tokoe:valid" result="pass"/><test-case name="15954NISTXML-SV-IV-list-normalizedString-length-1-1 tokoe:valid" result="pass"/><test-case name="15955NISTXML-SV-IV-list-normalizedString-length-1-2 tokoe:valid" result="pass"/><test-case name="15956NISTXML-SV-IV-list-normalizedString-length-1-3 tokoe:valid" result="pass"/><test-case name="15957NISTXML-SV-IV-list-normalizedString-length-1-4 tokoe:valid" result="pass"/><test-case name="15958NISTXML-SV-IV-list-normalizedString-length-1-5 tokoe:valid" result="pass"/><test-case name="15959NISTSchema-SV-IV-list-normalizedString-length-2 tokoe:valid" result="pass"/><test-case name="15960NISTXML-SV-IV-list-normalizedString-length-2-1 tokoe:valid" result="pass"/><test-case name="15961NISTXML-SV-IV-list-normalizedString-length-2-2 tokoe:valid" result="pass"/><test-case name="15962NISTXML-SV-IV-list-normalizedString-length-2-3 tokoe:valid" result="pass"/><test-case name="15963NISTXML-SV-IV-list-normalizedString-length-2-4 tokoe:valid" result="pass"/><test-case name="15964NISTXML-SV-IV-list-normalizedString-length-2-5 tokoe:valid" result="pass"/><test-case name="15965NISTSchema-SV-IV-list-normalizedString-length-3 tokoe:valid" result="pass"/><test-case name="15966NISTXML-SV-IV-list-normalizedString-length-3-1 tokoe:valid" result="pass"/><test-case name="15967NISTXML-SV-IV-list-normalizedString-length-3-2 tokoe:valid" result="pass"/><test-case name="15968NISTXML-SV-IV-list-normalizedString-length-3-3 tokoe:valid" result="pass"/><test-case name="15969NISTXML-SV-IV-list-normalizedString-length-3-4 tokoe:valid" result="pass"/><test-case name="15970NISTXML-SV-IV-list-normalizedString-length-3-5 tokoe:valid" result="pass"/><test-case name="15971NISTSchema-SV-IV-list-normalizedString-length-4 tokoe:valid" result="pass"/><test-case name="15972NISTXML-SV-IV-list-normalizedString-length-4-1 tokoe:valid" result="pass"/><test-case name="15973NISTXML-SV-IV-list-normalizedString-length-4-2 tokoe:valid" result="pass"/><test-case name="15974NISTXML-SV-IV-list-normalizedString-length-4-3 tokoe:valid" result="pass"/><test-case name="15975NISTXML-SV-IV-list-normalizedString-length-4-4 tokoe:valid" result="pass"/><test-case name="15976NISTXML-SV-IV-list-normalizedString-length-4-5 tokoe:valid" result="pass"/><test-case name="15977NISTSchema-SV-IV-list-normalizedString-length-5 tokoe:valid" result="pass"/><test-case name="15978NISTXML-SV-IV-list-normalizedString-length-5-1 tokoe:valid" result="pass"/><test-case name="15979NISTXML-SV-IV-list-normalizedString-length-5-2 tokoe:valid" result="pass"/><test-case name="15980NISTXML-SV-IV-list-normalizedString-length-5-3 tokoe:valid" result="pass"/><test-case name="15981NISTXML-SV-IV-list-normalizedString-length-5-4 tokoe:valid" result="pass"/><test-case name="15982NISTXML-SV-IV-list-normalizedString-length-5-5 tokoe:valid" result="pass"/><test-case name="15983NISTSchema-SV-IV-list-normalizedString-pattern-1 tokoe:valid" result="pass"/><test-case name="15984NISTXML-SV-IV-list-normalizedString-pattern-1-1 tokoe:valid" result="pass"/><test-case name="15985NISTXML-SV-IV-list-normalizedString-pattern-1-2 tokoe:valid" result="pass"/><test-case name="15986NISTXML-SV-IV-list-normalizedString-pattern-1-3 tokoe:valid" result="pass"/><test-case name="15987NISTXML-SV-IV-list-normalizedString-pattern-1-4 tokoe:valid" result="pass"/><test-case name="15988NISTXML-SV-IV-list-normalizedString-pattern-1-5 tokoe:valid" result="pass"/><test-case name="15989NISTSchema-SV-IV-list-normalizedString-pattern-2 tokoe:valid" result="pass"/><test-case name="15990NISTXML-SV-IV-list-normalizedString-pattern-2-1 tokoe:valid" result="pass"/><test-case name="15991NISTXML-SV-IV-list-normalizedString-pattern-2-2 tokoe:valid" result="pass"/><test-case name="15992NISTXML-SV-IV-list-normalizedString-pattern-2-3 tokoe:valid" result="pass"/><test-case name="15993NISTXML-SV-IV-list-normalizedString-pattern-2-4 tokoe:valid" result="pass"/><test-case name="15994NISTXML-SV-IV-list-normalizedString-pattern-2-5 tokoe:valid" result="pass"/><test-case name="15995NISTSchema-SV-IV-list-normalizedString-pattern-3 tokoe:valid" result="pass"/><test-case name="15996NISTXML-SV-IV-list-normalizedString-pattern-3-1 tokoe:valid" result="pass"/><test-case name="15997NISTXML-SV-IV-list-normalizedString-pattern-3-2 tokoe:valid" result="pass"/><test-case name="15998NISTXML-SV-IV-list-normalizedString-pattern-3-3 tokoe:valid" result="pass"/><test-case name="15999NISTXML-SV-IV-list-normalizedString-pattern-3-4 tokoe:valid" result="pass"/><test-case name="16000NISTXML-SV-IV-list-normalizedString-pattern-3-5 tokoe:valid" result="pass"/><test-case name="16001NISTSchema-SV-IV-list-normalizedString-pattern-4 tokoe:valid" result="pass"/><test-case name="16002NISTXML-SV-IV-list-normalizedString-pattern-4-1 tokoe:valid" result="pass"/><test-case name="16003NISTXML-SV-IV-list-normalizedString-pattern-4-2 tokoe:valid" result="pass"/><test-case name="16004NISTXML-SV-IV-list-normalizedString-pattern-4-3 tokoe:valid" result="pass"/><test-case name="16005NISTXML-SV-IV-list-normalizedString-pattern-4-4 tokoe:valid" result="pass"/><test-case name="16006NISTXML-SV-IV-list-normalizedString-pattern-4-5 tokoe:valid" result="pass"/><test-case name="16007NISTSchema-SV-IV-list-normalizedString-pattern-5 tokoe:valid" result="pass"/><test-case name="16008NISTXML-SV-IV-list-normalizedString-pattern-5-1 tokoe:valid" result="pass"/><test-case name="16009NISTXML-SV-IV-list-normalizedString-pattern-5-2 tokoe:valid" result="pass"/><test-case name="16010NISTXML-SV-IV-list-normalizedString-pattern-5-3 tokoe:valid" result="pass"/><test-case name="16011NISTXML-SV-IV-list-normalizedString-pattern-5-4 tokoe:valid" result="pass"/><test-case name="16012NISTXML-SV-IV-list-normalizedString-pattern-5-5 tokoe:valid" result="pass"/><test-case name="16013NISTSchema-SV-IV-list-normalizedString-enumeration-1 tokoe:valid" result="pass"/><test-case name="16014NISTXML-SV-IV-list-normalizedString-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="16015NISTXML-SV-IV-list-normalizedString-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="16016NISTXML-SV-IV-list-normalizedString-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="16017NISTXML-SV-IV-list-normalizedString-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="16018NISTXML-SV-IV-list-normalizedString-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="16019NISTSchema-SV-IV-list-normalizedString-enumeration-2 tokoe:valid" result="pass"/><test-case name="16020NISTXML-SV-IV-list-normalizedString-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="16021NISTXML-SV-IV-list-normalizedString-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="16022NISTXML-SV-IV-list-normalizedString-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="16023NISTXML-SV-IV-list-normalizedString-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="16024NISTXML-SV-IV-list-normalizedString-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="16025NISTSchema-SV-IV-list-normalizedString-enumeration-3 tokoe:valid" result="pass"/><test-case name="16026NISTXML-SV-IV-list-normalizedString-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="16027NISTXML-SV-IV-list-normalizedString-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="16028NISTXML-SV-IV-list-normalizedString-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="16029NISTXML-SV-IV-list-normalizedString-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="16030NISTXML-SV-IV-list-normalizedString-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="16031NISTSchema-SV-IV-list-normalizedString-enumeration-4 tokoe:valid" result="pass"/><test-case name="16032NISTXML-SV-IV-list-normalizedString-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="16033NISTXML-SV-IV-list-normalizedString-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="16034NISTXML-SV-IV-list-normalizedString-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="16035NISTXML-SV-IV-list-normalizedString-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="16036NISTXML-SV-IV-list-normalizedString-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="16037NISTSchema-SV-IV-list-normalizedString-enumeration-5 tokoe:valid" result="pass"/><test-case name="16038NISTXML-SV-IV-list-normalizedString-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="16039NISTXML-SV-IV-list-normalizedString-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="16040NISTXML-SV-IV-list-normalizedString-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="16041NISTXML-SV-IV-list-normalizedString-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="16042NISTXML-SV-IV-list-normalizedString-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="16043NISTSchema-SV-IV-list-normalizedString-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="16044NISTXML-SV-IV-list-normalizedString-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="16045NISTXML-SV-IV-list-normalizedString-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="16046NISTXML-SV-IV-list-normalizedString-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="16047NISTXML-SV-IV-list-normalizedString-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="16048NISTXML-SV-IV-list-normalizedString-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="16049NISTSchema-SV-IV-list-token-maxLength-1 tokoe:valid" result="pass"/><test-case name="16050NISTXML-SV-IV-list-token-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="16051NISTXML-SV-IV-list-token-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="16052NISTXML-SV-IV-list-token-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="16053NISTXML-SV-IV-list-token-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="16054NISTXML-SV-IV-list-token-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="16055NISTSchema-SV-IV-list-token-maxLength-2 tokoe:valid" result="pass"/><test-case name="16056NISTXML-SV-IV-list-token-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="16057NISTXML-SV-IV-list-token-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="16058NISTXML-SV-IV-list-token-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="16059NISTXML-SV-IV-list-token-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="16060NISTXML-SV-IV-list-token-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="16061NISTSchema-SV-IV-list-token-maxLength-3 tokoe:valid" result="pass"/><test-case name="16062NISTXML-SV-IV-list-token-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="16063NISTXML-SV-IV-list-token-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="16064NISTXML-SV-IV-list-token-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="16065NISTXML-SV-IV-list-token-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="16066NISTXML-SV-IV-list-token-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="16067NISTSchema-SV-IV-list-token-maxLength-4 tokoe:valid" result="pass"/><test-case name="16068NISTXML-SV-IV-list-token-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="16069NISTXML-SV-IV-list-token-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="16070NISTXML-SV-IV-list-token-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="16071NISTXML-SV-IV-list-token-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="16072NISTXML-SV-IV-list-token-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="16073NISTSchema-SV-IV-list-token-maxLength-5 tokoe:valid" result="pass"/><test-case name="16074NISTXML-SV-IV-list-token-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="16075NISTXML-SV-IV-list-token-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="16076NISTXML-SV-IV-list-token-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="16077NISTXML-SV-IV-list-token-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="16078NISTXML-SV-IV-list-token-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="16079NISTSchema-SV-IV-list-token-minLength-1 tokoe:valid" result="pass"/><test-case name="16080NISTXML-SV-IV-list-token-minLength-1-1 tokoe:valid" result="pass"/><test-case name="16081NISTXML-SV-IV-list-token-minLength-1-2 tokoe:valid" result="pass"/><test-case name="16082NISTXML-SV-IV-list-token-minLength-1-3 tokoe:valid" result="pass"/><test-case name="16083NISTXML-SV-IV-list-token-minLength-1-4 tokoe:valid" result="pass"/><test-case name="16084NISTXML-SV-IV-list-token-minLength-1-5 tokoe:valid" result="pass"/><test-case name="16085NISTSchema-SV-IV-list-token-minLength-2 tokoe:valid" result="pass"/><test-case name="16086NISTXML-SV-IV-list-token-minLength-2-1 tokoe:valid" result="pass"/><test-case name="16087NISTXML-SV-IV-list-token-minLength-2-2 tokoe:valid" result="pass"/><test-case name="16088NISTXML-SV-IV-list-token-minLength-2-3 tokoe:valid" result="pass"/><test-case name="16089NISTXML-SV-IV-list-token-minLength-2-4 tokoe:valid" result="pass"/><test-case name="16090NISTXML-SV-IV-list-token-minLength-2-5 tokoe:valid" result="pass"/><test-case name="16091NISTSchema-SV-IV-list-token-minLength-3 tokoe:valid" result="pass"/><test-case name="16092NISTXML-SV-IV-list-token-minLength-3-1 tokoe:valid" result="pass"/><test-case name="16093NISTXML-SV-IV-list-token-minLength-3-2 tokoe:valid" result="pass"/><test-case name="16094NISTXML-SV-IV-list-token-minLength-3-3 tokoe:valid" result="pass"/><test-case name="16095NISTXML-SV-IV-list-token-minLength-3-4 tokoe:valid" result="pass"/><test-case name="16096NISTXML-SV-IV-list-token-minLength-3-5 tokoe:valid" result="pass"/><test-case name="16097NISTSchema-SV-IV-list-token-minLength-4 tokoe:valid" result="pass"/><test-case name="16098NISTXML-SV-IV-list-token-minLength-4-1 tokoe:valid" result="pass"/><test-case name="16099NISTXML-SV-IV-list-token-minLength-4-2 tokoe:valid" result="pass"/><test-case name="16100NISTXML-SV-IV-list-token-minLength-4-3 tokoe:valid" result="pass"/><test-case name="16101NISTXML-SV-IV-list-token-minLength-4-4 tokoe:valid" result="pass"/><test-case name="16102NISTXML-SV-IV-list-token-minLength-4-5 tokoe:valid" result="pass"/><test-case name="16103NISTSchema-SV-IV-list-token-minLength-5 tokoe:valid" result="pass"/><test-case name="16104NISTXML-SV-IV-list-token-minLength-5-1 tokoe:valid" result="pass"/><test-case name="16105NISTXML-SV-IV-list-token-minLength-5-2 tokoe:valid" result="pass"/><test-case name="16106NISTXML-SV-IV-list-token-minLength-5-3 tokoe:valid" result="pass"/><test-case name="16107NISTXML-SV-IV-list-token-minLength-5-4 tokoe:valid" result="pass"/><test-case name="16108NISTXML-SV-IV-list-token-minLength-5-5 tokoe:valid" result="pass"/><test-case name="16109NISTSchema-SV-IV-list-token-length-1 tokoe:valid" result="pass"/><test-case name="16110NISTXML-SV-IV-list-token-length-1-1 tokoe:valid" result="pass"/><test-case name="16111NISTXML-SV-IV-list-token-length-1-2 tokoe:valid" result="pass"/><test-case name="16112NISTXML-SV-IV-list-token-length-1-3 tokoe:valid" result="pass"/><test-case name="16113NISTXML-SV-IV-list-token-length-1-4 tokoe:valid" result="pass"/><test-case name="16114NISTXML-SV-IV-list-token-length-1-5 tokoe:valid" result="pass"/><test-case name="16115NISTSchema-SV-IV-list-token-length-2 tokoe:valid" result="pass"/><test-case name="16116NISTXML-SV-IV-list-token-length-2-1 tokoe:valid" result="pass"/><test-case name="16117NISTXML-SV-IV-list-token-length-2-2 tokoe:valid" result="pass"/><test-case name="16118NISTXML-SV-IV-list-token-length-2-3 tokoe:valid" result="pass"/><test-case name="16119NISTXML-SV-IV-list-token-length-2-4 tokoe:valid" result="pass"/><test-case name="16120NISTXML-SV-IV-list-token-length-2-5 tokoe:valid" result="pass"/><test-case name="16121NISTSchema-SV-IV-list-token-length-3 tokoe:valid" result="pass"/><test-case name="16122NISTXML-SV-IV-list-token-length-3-1 tokoe:valid" result="pass"/><test-case name="16123NISTXML-SV-IV-list-token-length-3-2 tokoe:valid" result="pass"/><test-case name="16124NISTXML-SV-IV-list-token-length-3-3 tokoe:valid" result="pass"/><test-case name="16125NISTXML-SV-IV-list-token-length-3-4 tokoe:valid" result="pass"/><test-case name="16126NISTXML-SV-IV-list-token-length-3-5 tokoe:valid" result="pass"/><test-case name="16127NISTSchema-SV-IV-list-token-length-4 tokoe:valid" result="pass"/><test-case name="16128NISTXML-SV-IV-list-token-length-4-1 tokoe:valid" result="pass"/><test-case name="16129NISTXML-SV-IV-list-token-length-4-2 tokoe:valid" result="pass"/><test-case name="16130NISTXML-SV-IV-list-token-length-4-3 tokoe:valid" result="pass"/><test-case name="16131NISTXML-SV-IV-list-token-length-4-4 tokoe:valid" result="pass"/><test-case name="16132NISTXML-SV-IV-list-token-length-4-5 tokoe:valid" result="pass"/><test-case name="16133NISTSchema-SV-IV-list-token-length-5 tokoe:valid" result="pass"/><test-case name="16134NISTXML-SV-IV-list-token-length-5-1 tokoe:valid" result="pass"/><test-case name="16135NISTXML-SV-IV-list-token-length-5-2 tokoe:valid" result="pass"/><test-case name="16136NISTXML-SV-IV-list-token-length-5-3 tokoe:valid" result="pass"/><test-case name="16137NISTXML-SV-IV-list-token-length-5-4 tokoe:valid" result="pass"/><test-case name="16138NISTXML-SV-IV-list-token-length-5-5 tokoe:valid" result="pass"/><test-case name="16139NISTSchema-SV-IV-list-token-pattern-1 tokoe:valid" result="pass"/><test-case name="16140NISTXML-SV-IV-list-token-pattern-1-1 tokoe:valid" result="pass"/><test-case name="16141NISTXML-SV-IV-list-token-pattern-1-2 tokoe:valid" result="pass"/><test-case name="16142NISTXML-SV-IV-list-token-pattern-1-3 tokoe:valid" result="pass"/><test-case name="16143NISTXML-SV-IV-list-token-pattern-1-4 tokoe:valid" result="pass"/><test-case name="16144NISTXML-SV-IV-list-token-pattern-1-5 tokoe:valid" result="pass"/><test-case name="16145NISTSchema-SV-IV-list-token-pattern-2 tokoe:valid" result="pass"/><test-case name="16146NISTXML-SV-IV-list-token-pattern-2-1 tokoe:valid" result="pass"/><test-case name="16147NISTXML-SV-IV-list-token-pattern-2-2 tokoe:valid" result="pass"/><test-case name="16148NISTXML-SV-IV-list-token-pattern-2-3 tokoe:valid" result="pass"/><test-case name="16149NISTXML-SV-IV-list-token-pattern-2-4 tokoe:valid" result="pass"/><test-case name="16150NISTXML-SV-IV-list-token-pattern-2-5 tokoe:valid" result="pass"/><test-case name="16151NISTSchema-SV-IV-list-token-pattern-3 tokoe:valid" result="pass"/><test-case name="16152NISTXML-SV-IV-list-token-pattern-3-1 tokoe:valid" result="pass"/><test-case name="16153NISTXML-SV-IV-list-token-pattern-3-2 tokoe:valid" result="pass"/><test-case name="16154NISTXML-SV-IV-list-token-pattern-3-3 tokoe:valid" result="pass"/><test-case name="16155NISTXML-SV-IV-list-token-pattern-3-4 tokoe:valid" result="pass"/><test-case name="16156NISTXML-SV-IV-list-token-pattern-3-5 tokoe:valid" result="pass"/><test-case name="16157NISTSchema-SV-IV-list-token-pattern-4 tokoe:valid" result="pass"/><test-case name="16158NISTXML-SV-IV-list-token-pattern-4-1 tokoe:valid" result="pass"/><test-case name="16159NISTXML-SV-IV-list-token-pattern-4-2 tokoe:valid" result="pass"/><test-case name="16160NISTXML-SV-IV-list-token-pattern-4-3 tokoe:valid" result="pass"/><test-case name="16161NISTXML-SV-IV-list-token-pattern-4-4 tokoe:valid" result="pass"/><test-case name="16162NISTXML-SV-IV-list-token-pattern-4-5 tokoe:valid" result="pass"/><test-case name="16163NISTSchema-SV-IV-list-token-pattern-5 tokoe:valid" result="pass"/><test-case name="16164NISTXML-SV-IV-list-token-pattern-5-1 tokoe:valid" result="pass"/><test-case name="16165NISTXML-SV-IV-list-token-pattern-5-2 tokoe:valid" result="pass"/><test-case name="16166NISTXML-SV-IV-list-token-pattern-5-3 tokoe:valid" result="pass"/><test-case name="16167NISTXML-SV-IV-list-token-pattern-5-4 tokoe:valid" result="pass"/><test-case name="16168NISTXML-SV-IV-list-token-pattern-5-5 tokoe:valid" result="pass"/><test-case name="16169NISTSchema-SV-IV-list-token-enumeration-1 tokoe:valid" result="pass"/><test-case name="16170NISTXML-SV-IV-list-token-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="16171NISTXML-SV-IV-list-token-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="16172NISTXML-SV-IV-list-token-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="16173NISTXML-SV-IV-list-token-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="16174NISTXML-SV-IV-list-token-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="16175NISTSchema-SV-IV-list-token-enumeration-2 tokoe:valid" result="pass"/><test-case name="16176NISTXML-SV-IV-list-token-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="16177NISTXML-SV-IV-list-token-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="16178NISTXML-SV-IV-list-token-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="16179NISTXML-SV-IV-list-token-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="16180NISTXML-SV-IV-list-token-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="16181NISTSchema-SV-IV-list-token-enumeration-3 tokoe:valid" result="pass"/><test-case name="16182NISTXML-SV-IV-list-token-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="16183NISTXML-SV-IV-list-token-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="16184NISTXML-SV-IV-list-token-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="16185NISTXML-SV-IV-list-token-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="16186NISTXML-SV-IV-list-token-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="16187NISTSchema-SV-IV-list-token-enumeration-4 tokoe:valid" result="pass"/><test-case name="16188NISTXML-SV-IV-list-token-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="16189NISTXML-SV-IV-list-token-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="16190NISTXML-SV-IV-list-token-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="16191NISTXML-SV-IV-list-token-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="16192NISTXML-SV-IV-list-token-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="16193NISTSchema-SV-IV-list-token-enumeration-5 tokoe:valid" result="pass"/><test-case name="16194NISTXML-SV-IV-list-token-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="16195NISTXML-SV-IV-list-token-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="16196NISTXML-SV-IV-list-token-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="16197NISTXML-SV-IV-list-token-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="16198NISTXML-SV-IV-list-token-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="16199NISTSchema-SV-IV-list-token-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="16200NISTXML-SV-IV-list-token-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="16201NISTXML-SV-IV-list-token-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="16202NISTXML-SV-IV-list-token-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="16203NISTXML-SV-IV-list-token-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="16204NISTXML-SV-IV-list-token-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="16205NISTSchema-SV-IV-list-Name-maxLength-1 tokoe:valid" result="pass"/><test-case name="16206NISTXML-SV-IV-list-Name-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="16207NISTXML-SV-IV-list-Name-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="16208NISTXML-SV-IV-list-Name-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="16209NISTXML-SV-IV-list-Name-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="16210NISTXML-SV-IV-list-Name-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="16211NISTSchema-SV-IV-list-Name-maxLength-2 tokoe:valid" result="pass"/><test-case name="16212NISTXML-SV-IV-list-Name-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="16213NISTXML-SV-IV-list-Name-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="16214NISTXML-SV-IV-list-Name-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="16215NISTXML-SV-IV-list-Name-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="16216NISTXML-SV-IV-list-Name-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="16217NISTSchema-SV-IV-list-Name-maxLength-3 tokoe:valid" result="pass"/><test-case name="16218NISTXML-SV-IV-list-Name-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="16219NISTXML-SV-IV-list-Name-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="16220NISTXML-SV-IV-list-Name-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="16221NISTXML-SV-IV-list-Name-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="16222NISTXML-SV-IV-list-Name-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="16223NISTSchema-SV-IV-list-Name-maxLength-4 tokoe:valid" result="pass"/><test-case name="16224NISTXML-SV-IV-list-Name-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="16225NISTXML-SV-IV-list-Name-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="16226NISTXML-SV-IV-list-Name-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="16227NISTXML-SV-IV-list-Name-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="16228NISTXML-SV-IV-list-Name-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="16229NISTSchema-SV-IV-list-Name-maxLength-5 tokoe:valid" result="pass"/><test-case name="16230NISTXML-SV-IV-list-Name-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="16231NISTXML-SV-IV-list-Name-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="16232NISTXML-SV-IV-list-Name-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="16233NISTXML-SV-IV-list-Name-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="16234NISTXML-SV-IV-list-Name-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="16235NISTSchema-SV-IV-list-Name-minLength-1 tokoe:valid" result="pass"/><test-case name="16236NISTXML-SV-IV-list-Name-minLength-1-1 tokoe:valid" result="pass"/><test-case name="16237NISTXML-SV-IV-list-Name-minLength-1-2 tokoe:valid" result="pass"/><test-case name="16238NISTXML-SV-IV-list-Name-minLength-1-3 tokoe:valid" result="pass"/><test-case name="16239NISTXML-SV-IV-list-Name-minLength-1-4 tokoe:valid" result="pass"/><test-case name="16240NISTXML-SV-IV-list-Name-minLength-1-5 tokoe:valid" result="pass"/><test-case name="16241NISTSchema-SV-IV-list-Name-minLength-2 tokoe:valid" result="pass"/><test-case name="16242NISTXML-SV-IV-list-Name-minLength-2-1 tokoe:valid" result="pass"/><test-case name="16243NISTXML-SV-IV-list-Name-minLength-2-2 tokoe:valid" result="pass"/><test-case name="16244NISTXML-SV-IV-list-Name-minLength-2-3 tokoe:valid" result="pass"/><test-case name="16245NISTXML-SV-IV-list-Name-minLength-2-4 tokoe:valid" result="pass"/><test-case name="16246NISTXML-SV-IV-list-Name-minLength-2-5 tokoe:valid" result="pass"/><test-case name="16247NISTSchema-SV-IV-list-Name-minLength-3 tokoe:valid" result="pass"/><test-case name="16248NISTXML-SV-IV-list-Name-minLength-3-1 tokoe:valid" result="pass"/><test-case name="16249NISTXML-SV-IV-list-Name-minLength-3-2 tokoe:valid" result="pass"/><test-case name="16250NISTXML-SV-IV-list-Name-minLength-3-3 tokoe:valid" result="pass"/><test-case name="16251NISTXML-SV-IV-list-Name-minLength-3-4 tokoe:valid" result="pass"/><test-case name="16252NISTXML-SV-IV-list-Name-minLength-3-5 tokoe:valid" result="pass"/><test-case name="16253NISTSchema-SV-IV-list-Name-minLength-4 tokoe:valid" result="pass"/><test-case name="16254NISTXML-SV-IV-list-Name-minLength-4-1 tokoe:valid" result="pass"/><test-case name="16255NISTXML-SV-IV-list-Name-minLength-4-2 tokoe:valid" result="pass"/><test-case name="16256NISTXML-SV-IV-list-Name-minLength-4-3 tokoe:valid" result="pass"/><test-case name="16257NISTXML-SV-IV-list-Name-minLength-4-4 tokoe:valid" result="pass"/><test-case name="16258NISTXML-SV-IV-list-Name-minLength-4-5 tokoe:valid" result="pass"/><test-case name="16259NISTSchema-SV-IV-list-Name-minLength-5 tokoe:valid" result="pass"/><test-case name="16260NISTXML-SV-IV-list-Name-minLength-5-1 tokoe:valid" result="pass"/><test-case name="16261NISTXML-SV-IV-list-Name-minLength-5-2 tokoe:valid" result="pass"/><test-case name="16262NISTXML-SV-IV-list-Name-minLength-5-3 tokoe:valid" result="pass"/><test-case name="16263NISTXML-SV-IV-list-Name-minLength-5-4 tokoe:valid" result="pass"/><test-case name="16264NISTXML-SV-IV-list-Name-minLength-5-5 tokoe:valid" result="pass"/><test-case name="16265NISTSchema-SV-IV-list-Name-length-1 tokoe:valid" result="pass"/><test-case name="16266NISTXML-SV-IV-list-Name-length-1-1 tokoe:valid" result="pass"/><test-case name="16267NISTXML-SV-IV-list-Name-length-1-2 tokoe:valid" result="pass"/><test-case name="16268NISTXML-SV-IV-list-Name-length-1-3 tokoe:valid" result="pass"/><test-case name="16269NISTXML-SV-IV-list-Name-length-1-4 tokoe:valid" result="pass"/><test-case name="16270NISTXML-SV-IV-list-Name-length-1-5 tokoe:valid" result="pass"/><test-case name="16271NISTSchema-SV-IV-list-Name-length-2 tokoe:valid" result="pass"/><test-case name="16272NISTXML-SV-IV-list-Name-length-2-1 tokoe:valid" result="pass"/><test-case name="16273NISTXML-SV-IV-list-Name-length-2-2 tokoe:valid" result="pass"/><test-case name="16274NISTXML-SV-IV-list-Name-length-2-3 tokoe:valid" result="pass"/><test-case name="16275NISTXML-SV-IV-list-Name-length-2-4 tokoe:valid" result="pass"/><test-case name="16276NISTXML-SV-IV-list-Name-length-2-5 tokoe:valid" result="pass"/><test-case name="16277NISTSchema-SV-IV-list-Name-length-3 tokoe:valid" result="pass"/><test-case name="16278NISTXML-SV-IV-list-Name-length-3-1 tokoe:valid" result="pass"/><test-case name="16279NISTXML-SV-IV-list-Name-length-3-2 tokoe:valid" result="pass"/><test-case name="16280NISTXML-SV-IV-list-Name-length-3-3 tokoe:valid" result="pass"/><test-case name="16281NISTXML-SV-IV-list-Name-length-3-4 tokoe:valid" result="pass"/><test-case name="16282NISTXML-SV-IV-list-Name-length-3-5 tokoe:valid" result="pass"/><test-case name="16283NISTSchema-SV-IV-list-Name-length-4 tokoe:valid" result="pass"/><test-case name="16284NISTXML-SV-IV-list-Name-length-4-1 tokoe:valid" result="pass"/><test-case name="16285NISTXML-SV-IV-list-Name-length-4-2 tokoe:valid" result="pass"/><test-case name="16286NISTXML-SV-IV-list-Name-length-4-3 tokoe:valid" result="pass"/><test-case name="16287NISTXML-SV-IV-list-Name-length-4-4 tokoe:valid" result="pass"/><test-case name="16288NISTXML-SV-IV-list-Name-length-4-5 tokoe:valid" result="pass"/><test-case name="16289NISTSchema-SV-IV-list-Name-length-5 tokoe:valid" result="pass"/><test-case name="16290NISTXML-SV-IV-list-Name-length-5-1 tokoe:valid" result="pass"/><test-case name="16291NISTXML-SV-IV-list-Name-length-5-2 tokoe:valid" result="pass"/><test-case name="16292NISTXML-SV-IV-list-Name-length-5-3 tokoe:valid" result="pass"/><test-case name="16293NISTXML-SV-IV-list-Name-length-5-4 tokoe:valid" result="pass"/><test-case name="16294NISTXML-SV-IV-list-Name-length-5-5 tokoe:valid" result="pass"/><test-case name="16295NISTSchema-SV-IV-list-Name-pattern-1 tokoe:valid" result="pass"/><test-case name="16296NISTXML-SV-IV-list-Name-pattern-1-1 tokoe:valid" result="pass"/><test-case name="16297NISTXML-SV-IV-list-Name-pattern-1-2 tokoe:valid" result="pass"/><test-case name="16298NISTXML-SV-IV-list-Name-pattern-1-3 tokoe:valid" result="pass"/><test-case name="16299NISTXML-SV-IV-list-Name-pattern-1-4 tokoe:valid" result="pass"/><test-case name="16300NISTXML-SV-IV-list-Name-pattern-1-5 tokoe:valid" result="pass"/><test-case name="16301NISTSchema-SV-IV-list-Name-pattern-2 tokoe:valid" result="pass"/><test-case name="16302NISTXML-SV-IV-list-Name-pattern-2-1 tokoe:valid" result="pass"/><test-case name="16303NISTXML-SV-IV-list-Name-pattern-2-2 tokoe:valid" result="pass"/><test-case name="16304NISTXML-SV-IV-list-Name-pattern-2-3 tokoe:valid" result="pass"/><test-case name="16305NISTXML-SV-IV-list-Name-pattern-2-4 tokoe:valid" result="pass"/><test-case name="16306NISTXML-SV-IV-list-Name-pattern-2-5 tokoe:valid" result="pass"/><test-case name="16307NISTSchema-SV-IV-list-Name-pattern-3 tokoe:valid" result="pass"/><test-case name="16308NISTXML-SV-IV-list-Name-pattern-3-1 tokoe:valid" result="pass"/><test-case name="16309NISTXML-SV-IV-list-Name-pattern-3-2 tokoe:valid" result="pass"/><test-case name="16310NISTXML-SV-IV-list-Name-pattern-3-3 tokoe:valid" result="pass"/><test-case name="16311NISTXML-SV-IV-list-Name-pattern-3-4 tokoe:valid" result="pass"/><test-case name="16312NISTXML-SV-IV-list-Name-pattern-3-5 tokoe:valid" result="pass"/><test-case name="16313NISTSchema-SV-IV-list-Name-pattern-4 tokoe:valid" result="pass"/><test-case name="16314NISTXML-SV-IV-list-Name-pattern-4-1 tokoe:valid" result="pass"/><test-case name="16315NISTXML-SV-IV-list-Name-pattern-4-2 tokoe:valid" result="pass"/><test-case name="16316NISTXML-SV-IV-list-Name-pattern-4-3 tokoe:valid" result="pass"/><test-case name="16317NISTXML-SV-IV-list-Name-pattern-4-4 tokoe:valid" result="pass"/><test-case name="16318NISTXML-SV-IV-list-Name-pattern-4-5 tokoe:valid" result="pass"/><test-case name="16319NISTSchema-SV-IV-list-Name-pattern-5 tokoe:valid" result="pass"/><test-case name="16320NISTXML-SV-IV-list-Name-pattern-5-1 tokoe:valid" result="pass"/><test-case name="16321NISTXML-SV-IV-list-Name-pattern-5-2 tokoe:valid" result="pass"/><test-case name="16322NISTXML-SV-IV-list-Name-pattern-5-3 tokoe:valid" result="pass"/><test-case name="16323NISTXML-SV-IV-list-Name-pattern-5-4 tokoe:valid" result="pass"/><test-case name="16324NISTXML-SV-IV-list-Name-pattern-5-5 tokoe:valid" result="pass"/><test-case name="16325NISTSchema-SV-IV-list-Name-enumeration-1 tokoe:valid" result="pass"/><test-case name="16326NISTXML-SV-IV-list-Name-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="16327NISTXML-SV-IV-list-Name-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="16328NISTXML-SV-IV-list-Name-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="16329NISTXML-SV-IV-list-Name-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="16330NISTXML-SV-IV-list-Name-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="16331NISTSchema-SV-IV-list-Name-enumeration-2 tokoe:valid" result="pass"/><test-case name="16332NISTXML-SV-IV-list-Name-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="16333NISTXML-SV-IV-list-Name-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="16334NISTXML-SV-IV-list-Name-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="16335NISTXML-SV-IV-list-Name-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="16336NISTXML-SV-IV-list-Name-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="16337NISTSchema-SV-IV-list-Name-enumeration-3 tokoe:valid" result="pass"/><test-case name="16338NISTXML-SV-IV-list-Name-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="16339NISTXML-SV-IV-list-Name-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="16340NISTXML-SV-IV-list-Name-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="16341NISTXML-SV-IV-list-Name-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="16342NISTXML-SV-IV-list-Name-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="16343NISTSchema-SV-IV-list-Name-enumeration-4 tokoe:valid" result="pass"/><test-case name="16344NISTXML-SV-IV-list-Name-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="16345NISTXML-SV-IV-list-Name-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="16346NISTXML-SV-IV-list-Name-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="16347NISTXML-SV-IV-list-Name-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="16348NISTXML-SV-IV-list-Name-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="16349NISTSchema-SV-IV-list-Name-enumeration-5 tokoe:valid" result="pass"/><test-case name="16350NISTXML-SV-IV-list-Name-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="16351NISTXML-SV-IV-list-Name-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="16352NISTXML-SV-IV-list-Name-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="16353NISTXML-SV-IV-list-Name-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="16354NISTXML-SV-IV-list-Name-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="16355NISTSchema-SV-IV-list-Name-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="16356NISTXML-SV-IV-list-Name-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="16357NISTXML-SV-IV-list-Name-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="16358NISTXML-SV-IV-list-Name-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="16359NISTXML-SV-IV-list-Name-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="16360NISTXML-SV-IV-list-Name-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="16361NISTSchema-SV-IV-list-NMTOKEN-maxLength-1 tokoe:valid" result="pass"/><test-case name="16362NISTXML-SV-IV-list-NMTOKEN-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="16363NISTXML-SV-IV-list-NMTOKEN-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="16364NISTXML-SV-IV-list-NMTOKEN-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="16365NISTXML-SV-IV-list-NMTOKEN-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="16366NISTXML-SV-IV-list-NMTOKEN-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="16367NISTSchema-SV-IV-list-NMTOKEN-maxLength-2 tokoe:valid" result="pass"/><test-case name="16368NISTXML-SV-IV-list-NMTOKEN-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="16369NISTXML-SV-IV-list-NMTOKEN-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="16370NISTXML-SV-IV-list-NMTOKEN-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="16371NISTXML-SV-IV-list-NMTOKEN-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="16372NISTXML-SV-IV-list-NMTOKEN-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="16373NISTSchema-SV-IV-list-NMTOKEN-maxLength-3 tokoe:valid" result="pass"/><test-case name="16374NISTXML-SV-IV-list-NMTOKEN-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="16375NISTXML-SV-IV-list-NMTOKEN-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="16376NISTXML-SV-IV-list-NMTOKEN-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="16377NISTXML-SV-IV-list-NMTOKEN-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="16378NISTXML-SV-IV-list-NMTOKEN-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="16379NISTSchema-SV-IV-list-NMTOKEN-maxLength-4 tokoe:valid" result="pass"/><test-case name="16380NISTXML-SV-IV-list-NMTOKEN-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="16381NISTXML-SV-IV-list-NMTOKEN-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="16382NISTXML-SV-IV-list-NMTOKEN-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="16383NISTXML-SV-IV-list-NMTOKEN-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="16384NISTXML-SV-IV-list-NMTOKEN-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="16385NISTSchema-SV-IV-list-NMTOKEN-maxLength-5 tokoe:valid" result="pass"/><test-case name="16386NISTXML-SV-IV-list-NMTOKEN-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="16387NISTXML-SV-IV-list-NMTOKEN-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="16388NISTXML-SV-IV-list-NMTOKEN-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="16389NISTXML-SV-IV-list-NMTOKEN-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="16390NISTXML-SV-IV-list-NMTOKEN-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="16391NISTSchema-SV-IV-list-NMTOKEN-minLength-1 tokoe:valid" result="pass"/><test-case name="16392NISTXML-SV-IV-list-NMTOKEN-minLength-1-1 tokoe:valid" result="pass"/><test-case name="16393NISTXML-SV-IV-list-NMTOKEN-minLength-1-2 tokoe:valid" result="pass"/><test-case name="16394NISTXML-SV-IV-list-NMTOKEN-minLength-1-3 tokoe:valid" result="pass"/><test-case name="16395NISTXML-SV-IV-list-NMTOKEN-minLength-1-4 tokoe:valid" result="pass"/><test-case name="16396NISTXML-SV-IV-list-NMTOKEN-minLength-1-5 tokoe:valid" result="pass"/><test-case name="16397NISTSchema-SV-IV-list-NMTOKEN-minLength-2 tokoe:valid" result="pass"/><test-case name="16398NISTXML-SV-IV-list-NMTOKEN-minLength-2-1 tokoe:valid" result="pass"/><test-case name="16399NISTXML-SV-IV-list-NMTOKEN-minLength-2-2 tokoe:valid" result="pass"/><test-case name="16400NISTXML-SV-IV-list-NMTOKEN-minLength-2-3 tokoe:valid" result="pass"/><test-case name="16401NISTXML-SV-IV-list-NMTOKEN-minLength-2-4 tokoe:valid" result="pass"/><test-case name="16402NISTXML-SV-IV-list-NMTOKEN-minLength-2-5 tokoe:valid" result="pass"/><test-case name="16403NISTSchema-SV-IV-list-NMTOKEN-minLength-3 tokoe:valid" result="pass"/><test-case name="16404NISTXML-SV-IV-list-NMTOKEN-minLength-3-1 tokoe:valid" result="pass"/><test-case name="16405NISTXML-SV-IV-list-NMTOKEN-minLength-3-2 tokoe:valid" result="pass"/><test-case name="16406NISTXML-SV-IV-list-NMTOKEN-minLength-3-3 tokoe:valid" result="pass"/><test-case name="16407NISTXML-SV-IV-list-NMTOKEN-minLength-3-4 tokoe:valid" result="pass"/><test-case name="16408NISTXML-SV-IV-list-NMTOKEN-minLength-3-5 tokoe:valid" result="pass"/><test-case name="16409NISTSchema-SV-IV-list-NMTOKEN-minLength-4 tokoe:valid" result="pass"/><test-case name="16410NISTXML-SV-IV-list-NMTOKEN-minLength-4-1 tokoe:valid" result="pass"/><test-case name="16411NISTXML-SV-IV-list-NMTOKEN-minLength-4-2 tokoe:valid" result="pass"/><test-case name="16412NISTXML-SV-IV-list-NMTOKEN-minLength-4-3 tokoe:valid" result="pass"/><test-case name="16413NISTXML-SV-IV-list-NMTOKEN-minLength-4-4 tokoe:valid" result="pass"/><test-case name="16414NISTXML-SV-IV-list-NMTOKEN-minLength-4-5 tokoe:valid" result="pass"/><test-case name="16415NISTSchema-SV-IV-list-NMTOKEN-minLength-5 tokoe:valid" result="pass"/><test-case name="16416NISTXML-SV-IV-list-NMTOKEN-minLength-5-1 tokoe:valid" result="pass"/><test-case name="16417NISTXML-SV-IV-list-NMTOKEN-minLength-5-2 tokoe:valid" result="pass"/><test-case name="16418NISTXML-SV-IV-list-NMTOKEN-minLength-5-3 tokoe:valid" result="pass"/><test-case name="16419NISTXML-SV-IV-list-NMTOKEN-minLength-5-4 tokoe:valid" result="pass"/><test-case name="16420NISTXML-SV-IV-list-NMTOKEN-minLength-5-5 tokoe:valid" result="pass"/><test-case name="16421NISTSchema-SV-IV-list-NMTOKEN-length-1 tokoe:valid" result="pass"/><test-case name="16422NISTXML-SV-IV-list-NMTOKEN-length-1-1 tokoe:valid" result="pass"/><test-case name="16423NISTXML-SV-IV-list-NMTOKEN-length-1-2 tokoe:valid" result="pass"/><test-case name="16424NISTXML-SV-IV-list-NMTOKEN-length-1-3 tokoe:valid" result="pass"/><test-case name="16425NISTXML-SV-IV-list-NMTOKEN-length-1-4 tokoe:valid" result="pass"/><test-case name="16426NISTXML-SV-IV-list-NMTOKEN-length-1-5 tokoe:valid" result="pass"/><test-case name="16427NISTSchema-SV-IV-list-NMTOKEN-length-2 tokoe:valid" result="pass"/><test-case name="16428NISTXML-SV-IV-list-NMTOKEN-length-2-1 tokoe:valid" result="pass"/><test-case name="16429NISTXML-SV-IV-list-NMTOKEN-length-2-2 tokoe:valid" result="pass"/><test-case name="16430NISTXML-SV-IV-list-NMTOKEN-length-2-3 tokoe:valid" result="pass"/><test-case name="16431NISTXML-SV-IV-list-NMTOKEN-length-2-4 tokoe:valid" result="pass"/><test-case name="16432NISTXML-SV-IV-list-NMTOKEN-length-2-5 tokoe:valid" result="pass"/><test-case name="16433NISTSchema-SV-IV-list-NMTOKEN-length-3 tokoe:valid" result="pass"/><test-case name="16434NISTXML-SV-IV-list-NMTOKEN-length-3-1 tokoe:valid" result="pass"/><test-case name="16435NISTXML-SV-IV-list-NMTOKEN-length-3-2 tokoe:valid" result="pass"/><test-case name="16436NISTXML-SV-IV-list-NMTOKEN-length-3-3 tokoe:valid" result="pass"/><test-case name="16437NISTXML-SV-IV-list-NMTOKEN-length-3-4 tokoe:valid" result="pass"/><test-case name="16438NISTXML-SV-IV-list-NMTOKEN-length-3-5 tokoe:valid" result="pass"/><test-case name="16439NISTSchema-SV-IV-list-NMTOKEN-length-4 tokoe:valid" result="pass"/><test-case name="16440NISTXML-SV-IV-list-NMTOKEN-length-4-1 tokoe:valid" result="pass"/><test-case name="16441NISTXML-SV-IV-list-NMTOKEN-length-4-2 tokoe:valid" result="pass"/><test-case name="16442NISTXML-SV-IV-list-NMTOKEN-length-4-3 tokoe:valid" result="pass"/><test-case name="16443NISTXML-SV-IV-list-NMTOKEN-length-4-4 tokoe:valid" result="pass"/><test-case name="16444NISTXML-SV-IV-list-NMTOKEN-length-4-5 tokoe:valid" result="pass"/><test-case name="16445NISTSchema-SV-IV-list-NMTOKEN-length-5 tokoe:valid" result="pass"/><test-case name="16446NISTXML-SV-IV-list-NMTOKEN-length-5-1 tokoe:valid" result="pass"/><test-case name="16447NISTXML-SV-IV-list-NMTOKEN-length-5-2 tokoe:valid" result="pass"/><test-case name="16448NISTXML-SV-IV-list-NMTOKEN-length-5-3 tokoe:valid" result="pass"/><test-case name="16449NISTXML-SV-IV-list-NMTOKEN-length-5-4 tokoe:valid" result="pass"/><test-case name="16450NISTXML-SV-IV-list-NMTOKEN-length-5-5 tokoe:valid" result="pass"/><test-case name="16451NISTSchema-SV-IV-list-NMTOKEN-pattern-1 tokoe:valid" result="pass"/><test-case name="16452NISTXML-SV-IV-list-NMTOKEN-pattern-1-1 tokoe:valid" result="pass"/><test-case name="16453NISTXML-SV-IV-list-NMTOKEN-pattern-1-2 tokoe:valid" result="pass"/><test-case name="16454NISTXML-SV-IV-list-NMTOKEN-pattern-1-3 tokoe:valid" result="pass"/><test-case name="16455NISTXML-SV-IV-list-NMTOKEN-pattern-1-4 tokoe:valid" result="pass"/><test-case name="16456NISTXML-SV-IV-list-NMTOKEN-pattern-1-5 tokoe:valid" result="pass"/><test-case name="16457NISTSchema-SV-IV-list-NMTOKEN-pattern-2 tokoe:valid" result="pass"/><test-case name="16458NISTXML-SV-IV-list-NMTOKEN-pattern-2-1 tokoe:valid" result="pass"/><test-case name="16459NISTXML-SV-IV-list-NMTOKEN-pattern-2-2 tokoe:valid" result="pass"/><test-case name="16460NISTXML-SV-IV-list-NMTOKEN-pattern-2-3 tokoe:valid" result="pass"/><test-case name="16461NISTXML-SV-IV-list-NMTOKEN-pattern-2-4 tokoe:valid" result="pass"/><test-case name="16462NISTXML-SV-IV-list-NMTOKEN-pattern-2-5 tokoe:valid" result="pass"/><test-case name="16463NISTSchema-SV-IV-list-NMTOKEN-pattern-3 tokoe:valid" result="pass"/><test-case name="16464NISTXML-SV-IV-list-NMTOKEN-pattern-3-1 tokoe:valid" result="pass"/><test-case name="16465NISTXML-SV-IV-list-NMTOKEN-pattern-3-2 tokoe:valid" result="pass"/><test-case name="16466NISTXML-SV-IV-list-NMTOKEN-pattern-3-3 tokoe:valid" result="pass"/><test-case name="16467NISTXML-SV-IV-list-NMTOKEN-pattern-3-4 tokoe:valid" result="pass"/><test-case name="16468NISTXML-SV-IV-list-NMTOKEN-pattern-3-5 tokoe:valid" result="pass"/><test-case name="16469NISTSchema-SV-IV-list-NMTOKEN-pattern-4 tokoe:valid" result="pass"/><test-case name="16470NISTXML-SV-IV-list-NMTOKEN-pattern-4-1 tokoe:valid" result="pass"/><test-case name="16471NISTXML-SV-IV-list-NMTOKEN-pattern-4-2 tokoe:valid" result="pass"/><test-case name="16472NISTXML-SV-IV-list-NMTOKEN-pattern-4-3 tokoe:valid" result="pass"/><test-case name="16473NISTXML-SV-IV-list-NMTOKEN-pattern-4-4 tokoe:valid" result="pass"/><test-case name="16474NISTXML-SV-IV-list-NMTOKEN-pattern-4-5 tokoe:valid" result="pass"/><test-case name="16475NISTSchema-SV-IV-list-NMTOKEN-pattern-5 tokoe:valid" result="pass"/><test-case name="16476NISTXML-SV-IV-list-NMTOKEN-pattern-5-1 tokoe:valid" result="pass"/><test-case name="16477NISTXML-SV-IV-list-NMTOKEN-pattern-5-2 tokoe:valid" result="pass"/><test-case name="16478NISTXML-SV-IV-list-NMTOKEN-pattern-5-3 tokoe:valid" result="pass"/><test-case name="16479NISTXML-SV-IV-list-NMTOKEN-pattern-5-4 tokoe:valid" result="pass"/><test-case name="16480NISTXML-SV-IV-list-NMTOKEN-pattern-5-5 tokoe:valid" result="pass"/><test-case name="16481NISTSchema-SV-IV-list-NMTOKEN-enumeration-1 tokoe:valid" result="pass"/><test-case name="16482NISTXML-SV-IV-list-NMTOKEN-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="16483NISTXML-SV-IV-list-NMTOKEN-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="16484NISTXML-SV-IV-list-NMTOKEN-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="16485NISTXML-SV-IV-list-NMTOKEN-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="16486NISTXML-SV-IV-list-NMTOKEN-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="16487NISTSchema-SV-IV-list-NMTOKEN-enumeration-2 tokoe:valid" result="pass"/><test-case name="16488NISTXML-SV-IV-list-NMTOKEN-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="16489NISTXML-SV-IV-list-NMTOKEN-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="16490NISTXML-SV-IV-list-NMTOKEN-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="16491NISTXML-SV-IV-list-NMTOKEN-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="16492NISTXML-SV-IV-list-NMTOKEN-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="16493NISTSchema-SV-IV-list-NMTOKEN-enumeration-3 tokoe:valid" result="pass"/><test-case name="16494NISTXML-SV-IV-list-NMTOKEN-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="16495NISTXML-SV-IV-list-NMTOKEN-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="16496NISTXML-SV-IV-list-NMTOKEN-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="16497NISTXML-SV-IV-list-NMTOKEN-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="16498NISTXML-SV-IV-list-NMTOKEN-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="16499NISTSchema-SV-IV-list-NMTOKEN-enumeration-4 tokoe:valid" result="pass"/><test-case name="16500NISTXML-SV-IV-list-NMTOKEN-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="16501NISTXML-SV-IV-list-NMTOKEN-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="16502NISTXML-SV-IV-list-NMTOKEN-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="16503NISTXML-SV-IV-list-NMTOKEN-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="16504NISTXML-SV-IV-list-NMTOKEN-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="16505NISTSchema-SV-IV-list-NMTOKEN-enumeration-5 tokoe:valid" result="pass"/><test-case name="16506NISTXML-SV-IV-list-NMTOKEN-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="16507NISTXML-SV-IV-list-NMTOKEN-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="16508NISTXML-SV-IV-list-NMTOKEN-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="16509NISTXML-SV-IV-list-NMTOKEN-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="16510NISTXML-SV-IV-list-NMTOKEN-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="16511NISTSchema-SV-IV-list-NMTOKEN-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="16512NISTXML-SV-IV-list-NMTOKEN-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="16513NISTXML-SV-IV-list-NMTOKEN-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="16514NISTXML-SV-IV-list-NMTOKEN-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="16515NISTXML-SV-IV-list-NMTOKEN-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="16516NISTXML-SV-IV-list-NMTOKEN-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="16517NISTSchema-SV-IV-list-NMTOKENS-maxLength-1 tokoe:valid" result="pass"/><test-case name="16518NISTXML-SV-IV-list-NMTOKENS-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="16519NISTXML-SV-IV-list-NMTOKENS-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="16520NISTXML-SV-IV-list-NMTOKENS-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="16521NISTXML-SV-IV-list-NMTOKENS-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="16522NISTXML-SV-IV-list-NMTOKENS-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="16523NISTSchema-SV-IV-list-NMTOKENS-maxLength-2 tokoe:valid" result="pass"/><test-case name="16524NISTXML-SV-IV-list-NMTOKENS-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="16525NISTXML-SV-IV-list-NMTOKENS-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="16526NISTXML-SV-IV-list-NMTOKENS-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="16527NISTXML-SV-IV-list-NMTOKENS-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="16528NISTXML-SV-IV-list-NMTOKENS-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="16529NISTSchema-SV-IV-list-NMTOKENS-maxLength-3 tokoe:valid" result="pass"/><test-case name="16530NISTXML-SV-IV-list-NMTOKENS-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="16531NISTXML-SV-IV-list-NMTOKENS-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="16532NISTXML-SV-IV-list-NMTOKENS-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="16533NISTXML-SV-IV-list-NMTOKENS-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="16534NISTXML-SV-IV-list-NMTOKENS-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="16535NISTSchema-SV-IV-list-NMTOKENS-maxLength-4 tokoe:valid" result="pass"/><test-case name="16536NISTXML-SV-IV-list-NMTOKENS-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="16537NISTXML-SV-IV-list-NMTOKENS-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="16538NISTXML-SV-IV-list-NMTOKENS-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="16539NISTXML-SV-IV-list-NMTOKENS-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="16540NISTXML-SV-IV-list-NMTOKENS-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="16541NISTSchema-SV-IV-list-NMTOKENS-maxLength-5 tokoe:valid" result="pass"/><test-case name="16542NISTXML-SV-IV-list-NMTOKENS-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="16543NISTXML-SV-IV-list-NMTOKENS-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="16544NISTXML-SV-IV-list-NMTOKENS-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="16545NISTXML-SV-IV-list-NMTOKENS-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="16546NISTXML-SV-IV-list-NMTOKENS-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="16547NISTSchema-SV-IV-list-NMTOKENS-minLength-1 tokoe:valid" result="pass"/><test-case name="16548NISTXML-SV-IV-list-NMTOKENS-minLength-1-1 tokoe:valid" result="pass"/><test-case name="16549NISTXML-SV-IV-list-NMTOKENS-minLength-1-2 tokoe:valid" result="pass"/><test-case name="16550NISTXML-SV-IV-list-NMTOKENS-minLength-1-3 tokoe:valid" result="pass"/><test-case name="16551NISTXML-SV-IV-list-NMTOKENS-minLength-1-4 tokoe:valid" result="pass"/><test-case name="16552NISTXML-SV-IV-list-NMTOKENS-minLength-1-5 tokoe:valid" result="pass"/><test-case name="16553NISTSchema-SV-IV-list-NMTOKENS-minLength-2 tokoe:valid" result="pass"/><test-case name="16554NISTXML-SV-IV-list-NMTOKENS-minLength-2-1 tokoe:valid" result="pass"/><test-case name="16555NISTXML-SV-IV-list-NMTOKENS-minLength-2-2 tokoe:valid" result="pass"/><test-case name="16556NISTXML-SV-IV-list-NMTOKENS-minLength-2-3 tokoe:valid" result="pass"/><test-case name="16557NISTXML-SV-IV-list-NMTOKENS-minLength-2-4 tokoe:valid" result="pass"/><test-case name="16558NISTXML-SV-IV-list-NMTOKENS-minLength-2-5 tokoe:valid" result="pass"/><test-case name="16559NISTSchema-SV-IV-list-NMTOKENS-minLength-3 tokoe:valid" result="pass"/><test-case name="16560NISTXML-SV-IV-list-NMTOKENS-minLength-3-1 tokoe:valid" result="pass"/><test-case name="16561NISTXML-SV-IV-list-NMTOKENS-minLength-3-2 tokoe:valid" result="pass"/><test-case name="16562NISTXML-SV-IV-list-NMTOKENS-minLength-3-3 tokoe:valid" result="pass"/><test-case name="16563NISTXML-SV-IV-list-NMTOKENS-minLength-3-4 tokoe:valid" result="pass"/><test-case name="16564NISTXML-SV-IV-list-NMTOKENS-minLength-3-5 tokoe:valid" result="pass"/><test-case name="16565NISTSchema-SV-IV-list-NMTOKENS-minLength-4 tokoe:valid" result="pass"/><test-case name="16566NISTXML-SV-IV-list-NMTOKENS-minLength-4-1 tokoe:valid" result="pass"/><test-case name="16567NISTXML-SV-IV-list-NMTOKENS-minLength-4-2 tokoe:valid" result="pass"/><test-case name="16568NISTXML-SV-IV-list-NMTOKENS-minLength-4-3 tokoe:valid" result="pass"/><test-case name="16569NISTXML-SV-IV-list-NMTOKENS-minLength-4-4 tokoe:valid" result="pass"/><test-case name="16570NISTXML-SV-IV-list-NMTOKENS-minLength-4-5 tokoe:valid" result="pass"/><test-case name="16571NISTSchema-SV-IV-list-NMTOKENS-minLength-5 tokoe:valid" result="pass"/><test-case name="16572NISTXML-SV-IV-list-NMTOKENS-minLength-5-1 tokoe:valid" result="pass"/><test-case name="16573NISTXML-SV-IV-list-NMTOKENS-minLength-5-2 tokoe:valid" result="pass"/><test-case name="16574NISTXML-SV-IV-list-NMTOKENS-minLength-5-3 tokoe:valid" result="pass"/><test-case name="16575NISTXML-SV-IV-list-NMTOKENS-minLength-5-4 tokoe:valid" result="pass"/><test-case name="16576NISTXML-SV-IV-list-NMTOKENS-minLength-5-5 tokoe:valid" result="pass"/><test-case name="16577NISTSchema-SV-IV-list-NMTOKENS-length-1 tokoe:valid" result="pass"/><test-case name="16578NISTXML-SV-IV-list-NMTOKENS-length-1-1 tokoe:valid" result="pass"/><test-case name="16579NISTXML-SV-IV-list-NMTOKENS-length-1-2 tokoe:valid" result="pass"/><test-case name="16580NISTXML-SV-IV-list-NMTOKENS-length-1-3 tokoe:valid" result="pass"/><test-case name="16581NISTXML-SV-IV-list-NMTOKENS-length-1-4 tokoe:valid" result="pass"/><test-case name="16582NISTXML-SV-IV-list-NMTOKENS-length-1-5 tokoe:valid" result="pass"/><test-case name="16583NISTSchema-SV-IV-list-NMTOKENS-length-2 tokoe:valid" result="pass"/><test-case name="16584NISTXML-SV-IV-list-NMTOKENS-length-2-1 tokoe:valid" result="pass"/><test-case name="16585NISTXML-SV-IV-list-NMTOKENS-length-2-2 tokoe:valid" result="pass"/><test-case name="16586NISTXML-SV-IV-list-NMTOKENS-length-2-3 tokoe:valid" result="pass"/><test-case name="16587NISTXML-SV-IV-list-NMTOKENS-length-2-4 tokoe:valid" result="pass"/><test-case name="16588NISTXML-SV-IV-list-NMTOKENS-length-2-5 tokoe:valid" result="pass"/><test-case name="16589NISTSchema-SV-IV-list-NMTOKENS-length-3 tokoe:valid" result="pass"/><test-case name="16590NISTXML-SV-IV-list-NMTOKENS-length-3-1 tokoe:valid" result="pass"/><test-case name="16591NISTXML-SV-IV-list-NMTOKENS-length-3-2 tokoe:valid" result="pass"/><test-case name="16592NISTXML-SV-IV-list-NMTOKENS-length-3-3 tokoe:valid" result="pass"/><test-case name="16593NISTXML-SV-IV-list-NMTOKENS-length-3-4 tokoe:valid" result="pass"/><test-case name="16594NISTXML-SV-IV-list-NMTOKENS-length-3-5 tokoe:valid" result="pass"/><test-case name="16595NISTSchema-SV-IV-list-NMTOKENS-length-4 tokoe:valid" result="pass"/><test-case name="16596NISTXML-SV-IV-list-NMTOKENS-length-4-1 tokoe:valid" result="pass"/><test-case name="16597NISTXML-SV-IV-list-NMTOKENS-length-4-2 tokoe:valid" result="pass"/><test-case name="16598NISTXML-SV-IV-list-NMTOKENS-length-4-3 tokoe:valid" result="pass"/><test-case name="16599NISTXML-SV-IV-list-NMTOKENS-length-4-4 tokoe:valid" result="pass"/><test-case name="16600NISTXML-SV-IV-list-NMTOKENS-length-4-5 tokoe:valid" result="pass"/><test-case name="16601NISTSchema-SV-IV-list-NMTOKENS-length-5 tokoe:valid" result="pass"/><test-case name="16602NISTXML-SV-IV-list-NMTOKENS-length-5-1 tokoe:valid" result="pass"/><test-case name="16603NISTXML-SV-IV-list-NMTOKENS-length-5-2 tokoe:valid" result="pass"/><test-case name="16604NISTXML-SV-IV-list-NMTOKENS-length-5-3 tokoe:valid" result="pass"/><test-case name="16605NISTXML-SV-IV-list-NMTOKENS-length-5-4 tokoe:valid" result="pass"/><test-case name="16606NISTXML-SV-IV-list-NMTOKENS-length-5-5 tokoe:valid" result="pass"/><test-case name="16607NISTSchema-SV-IV-list-NMTOKENS-pattern-1 tokoe:valid" result="pass"/><test-case name="16608NISTXML-SV-IV-list-NMTOKENS-pattern-1-1 tokoe:valid" result="pass"/><test-case name="16609NISTXML-SV-IV-list-NMTOKENS-pattern-1-2 tokoe:valid" result="pass"/><test-case name="16610NISTXML-SV-IV-list-NMTOKENS-pattern-1-3 tokoe:valid" result="pass"/><test-case name="16611NISTXML-SV-IV-list-NMTOKENS-pattern-1-4 tokoe:valid" result="pass"/><test-case name="16612NISTXML-SV-IV-list-NMTOKENS-pattern-1-5 tokoe:valid" result="pass"/><test-case name="16613NISTSchema-SV-IV-list-NMTOKENS-pattern-2 tokoe:valid" result="pass"/><test-case name="16614NISTXML-SV-IV-list-NMTOKENS-pattern-2-1 tokoe:valid" result="pass"/><test-case name="16615NISTXML-SV-IV-list-NMTOKENS-pattern-2-2 tokoe:valid" result="pass"/><test-case name="16616NISTXML-SV-IV-list-NMTOKENS-pattern-2-3 tokoe:valid" result="pass"/><test-case name="16617NISTXML-SV-IV-list-NMTOKENS-pattern-2-4 tokoe:valid" result="pass"/><test-case name="16618NISTXML-SV-IV-list-NMTOKENS-pattern-2-5 tokoe:valid" result="pass"/><test-case name="16619NISTSchema-SV-IV-list-NMTOKENS-pattern-3 tokoe:valid" result="pass"/><test-case name="16620NISTXML-SV-IV-list-NMTOKENS-pattern-3-1 tokoe:valid" result="pass"/><test-case name="16621NISTXML-SV-IV-list-NMTOKENS-pattern-3-2 tokoe:valid" result="pass"/><test-case name="16622NISTXML-SV-IV-list-NMTOKENS-pattern-3-3 tokoe:valid" result="pass"/><test-case name="16623NISTXML-SV-IV-list-NMTOKENS-pattern-3-4 tokoe:valid" result="pass"/><test-case name="16624NISTXML-SV-IV-list-NMTOKENS-pattern-3-5 tokoe:valid" result="pass"/><test-case name="16625NISTSchema-SV-IV-list-NMTOKENS-pattern-4 tokoe:valid" result="pass"/><test-case name="16626NISTXML-SV-IV-list-NMTOKENS-pattern-4-1 tokoe:valid" result="pass"/><test-case name="16627NISTXML-SV-IV-list-NMTOKENS-pattern-4-2 tokoe:valid" result="pass"/><test-case name="16628NISTXML-SV-IV-list-NMTOKENS-pattern-4-3 tokoe:valid" result="pass"/><test-case name="16629NISTXML-SV-IV-list-NMTOKENS-pattern-4-4 tokoe:valid" result="pass"/><test-case name="16630NISTXML-SV-IV-list-NMTOKENS-pattern-4-5 tokoe:valid" result="pass"/><test-case name="16631NISTSchema-SV-IV-list-NMTOKENS-pattern-5 tokoe:valid" result="pass"/><test-case name="16632NISTXML-SV-IV-list-NMTOKENS-pattern-5-1 tokoe:valid" result="pass"/><test-case name="16633NISTXML-SV-IV-list-NMTOKENS-pattern-5-2 tokoe:valid" result="pass"/><test-case name="16634NISTXML-SV-IV-list-NMTOKENS-pattern-5-3 tokoe:valid" result="pass"/><test-case name="16635NISTXML-SV-IV-list-NMTOKENS-pattern-5-4 tokoe:valid" result="pass"/><test-case name="16636NISTXML-SV-IV-list-NMTOKENS-pattern-5-5 tokoe:valid" result="pass"/><test-case name="16637NISTSchema-SV-IV-list-NMTOKENS-enumeration-1 tokoe:valid" result="pass"/><test-case name="16638NISTXML-SV-IV-list-NMTOKENS-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="16639NISTXML-SV-IV-list-NMTOKENS-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="16640NISTXML-SV-IV-list-NMTOKENS-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="16641NISTXML-SV-IV-list-NMTOKENS-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="16642NISTXML-SV-IV-list-NMTOKENS-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="16643NISTSchema-SV-IV-list-NMTOKENS-enumeration-2 tokoe:valid" result="pass"/><test-case name="16644NISTXML-SV-IV-list-NMTOKENS-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="16645NISTXML-SV-IV-list-NMTOKENS-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="16646NISTXML-SV-IV-list-NMTOKENS-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="16647NISTXML-SV-IV-list-NMTOKENS-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="16648NISTXML-SV-IV-list-NMTOKENS-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="16649NISTSchema-SV-IV-list-NMTOKENS-enumeration-3 tokoe:valid" result="pass"/><test-case name="16650NISTXML-SV-IV-list-NMTOKENS-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="16651NISTXML-SV-IV-list-NMTOKENS-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="16652NISTXML-SV-IV-list-NMTOKENS-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="16653NISTXML-SV-IV-list-NMTOKENS-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="16654NISTXML-SV-IV-list-NMTOKENS-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="16655NISTSchema-SV-IV-list-NMTOKENS-enumeration-4 tokoe:valid" result="pass"/><test-case name="16656NISTXML-SV-IV-list-NMTOKENS-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="16657NISTXML-SV-IV-list-NMTOKENS-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="16658NISTXML-SV-IV-list-NMTOKENS-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="16659NISTXML-SV-IV-list-NMTOKENS-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="16660NISTXML-SV-IV-list-NMTOKENS-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="16661NISTSchema-SV-IV-list-NMTOKENS-enumeration-5 tokoe:valid" result="pass"/><test-case name="16662NISTXML-SV-IV-list-NMTOKENS-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="16663NISTXML-SV-IV-list-NMTOKENS-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="16664NISTXML-SV-IV-list-NMTOKENS-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="16665NISTXML-SV-IV-list-NMTOKENS-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="16666NISTXML-SV-IV-list-NMTOKENS-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="16667NISTSchema-SV-IV-list-NMTOKENS-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="16668NISTXML-SV-IV-list-NMTOKENS-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="16669NISTXML-SV-IV-list-NMTOKENS-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="16670NISTXML-SV-IV-list-NMTOKENS-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="16671NISTXML-SV-IV-list-NMTOKENS-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="16672NISTXML-SV-IV-list-NMTOKENS-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="16673NISTSchema-SV-IV-list-NCName-maxLength-1 tokoe:valid" result="pass"/><test-case name="16674NISTXML-SV-IV-list-NCName-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="16675NISTXML-SV-IV-list-NCName-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="16676NISTXML-SV-IV-list-NCName-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="16677NISTXML-SV-IV-list-NCName-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="16678NISTXML-SV-IV-list-NCName-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="16679NISTSchema-SV-IV-list-NCName-maxLength-2 tokoe:valid" result="pass"/><test-case name="16680NISTXML-SV-IV-list-NCName-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="16681NISTXML-SV-IV-list-NCName-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="16682NISTXML-SV-IV-list-NCName-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="16683NISTXML-SV-IV-list-NCName-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="16684NISTXML-SV-IV-list-NCName-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="16685NISTSchema-SV-IV-list-NCName-maxLength-3 tokoe:valid" result="pass"/><test-case name="16686NISTXML-SV-IV-list-NCName-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="16687NISTXML-SV-IV-list-NCName-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="16688NISTXML-SV-IV-list-NCName-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="16689NISTXML-SV-IV-list-NCName-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="16690NISTXML-SV-IV-list-NCName-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="16691NISTSchema-SV-IV-list-NCName-maxLength-4 tokoe:valid" result="pass"/><test-case name="16692NISTXML-SV-IV-list-NCName-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="16693NISTXML-SV-IV-list-NCName-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="16694NISTXML-SV-IV-list-NCName-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="16695NISTXML-SV-IV-list-NCName-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="16696NISTXML-SV-IV-list-NCName-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="16697NISTSchema-SV-IV-list-NCName-maxLength-5 tokoe:valid" result="pass"/><test-case name="16698NISTXML-SV-IV-list-NCName-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="16699NISTXML-SV-IV-list-NCName-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="16700NISTXML-SV-IV-list-NCName-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="16701NISTXML-SV-IV-list-NCName-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="16702NISTXML-SV-IV-list-NCName-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="16703NISTSchema-SV-IV-list-NCName-minLength-1 tokoe:valid" result="pass"/><test-case name="16704NISTXML-SV-IV-list-NCName-minLength-1-1 tokoe:valid" result="pass"/><test-case name="16705NISTXML-SV-IV-list-NCName-minLength-1-2 tokoe:valid" result="pass"/><test-case name="16706NISTXML-SV-IV-list-NCName-minLength-1-3 tokoe:valid" result="pass"/><test-case name="16707NISTXML-SV-IV-list-NCName-minLength-1-4 tokoe:valid" result="pass"/><test-case name="16708NISTXML-SV-IV-list-NCName-minLength-1-5 tokoe:valid" result="pass"/><test-case name="16709NISTSchema-SV-IV-list-NCName-minLength-2 tokoe:valid" result="pass"/><test-case name="16710NISTXML-SV-IV-list-NCName-minLength-2-1 tokoe:valid" result="pass"/><test-case name="16711NISTXML-SV-IV-list-NCName-minLength-2-2 tokoe:valid" result="pass"/><test-case name="16712NISTXML-SV-IV-list-NCName-minLength-2-3 tokoe:valid" result="pass"/><test-case name="16713NISTXML-SV-IV-list-NCName-minLength-2-4 tokoe:valid" result="pass"/><test-case name="16714NISTXML-SV-IV-list-NCName-minLength-2-5 tokoe:valid" result="pass"/><test-case name="16715NISTSchema-SV-IV-list-NCName-minLength-3 tokoe:valid" result="pass"/><test-case name="16716NISTXML-SV-IV-list-NCName-minLength-3-1 tokoe:valid" result="pass"/><test-case name="16717NISTXML-SV-IV-list-NCName-minLength-3-2 tokoe:valid" result="pass"/><test-case name="16718NISTXML-SV-IV-list-NCName-minLength-3-3 tokoe:valid" result="pass"/><test-case name="16719NISTXML-SV-IV-list-NCName-minLength-3-4 tokoe:valid" result="pass"/><test-case name="16720NISTXML-SV-IV-list-NCName-minLength-3-5 tokoe:valid" result="pass"/><test-case name="16721NISTSchema-SV-IV-list-NCName-minLength-4 tokoe:valid" result="pass"/><test-case name="16722NISTXML-SV-IV-list-NCName-minLength-4-1 tokoe:valid" result="pass"/><test-case name="16723NISTXML-SV-IV-list-NCName-minLength-4-2 tokoe:valid" result="pass"/><test-case name="16724NISTXML-SV-IV-list-NCName-minLength-4-3 tokoe:valid" result="pass"/><test-case name="16725NISTXML-SV-IV-list-NCName-minLength-4-4 tokoe:valid" result="pass"/><test-case name="16726NISTXML-SV-IV-list-NCName-minLength-4-5 tokoe:valid" result="pass"/><test-case name="16727NISTSchema-SV-IV-list-NCName-minLength-5 tokoe:valid" result="pass"/><test-case name="16728NISTXML-SV-IV-list-NCName-minLength-5-1 tokoe:valid" result="pass"/><test-case name="16729NISTXML-SV-IV-list-NCName-minLength-5-2 tokoe:valid" result="pass"/><test-case name="16730NISTXML-SV-IV-list-NCName-minLength-5-3 tokoe:valid" result="pass"/><test-case name="16731NISTXML-SV-IV-list-NCName-minLength-5-4 tokoe:valid" result="pass"/><test-case name="16732NISTXML-SV-IV-list-NCName-minLength-5-5 tokoe:valid" result="pass"/><test-case name="16733NISTSchema-SV-IV-list-NCName-length-1 tokoe:valid" result="pass"/><test-case name="16734NISTXML-SV-IV-list-NCName-length-1-1 tokoe:valid" result="pass"/><test-case name="16735NISTXML-SV-IV-list-NCName-length-1-2 tokoe:valid" result="pass"/><test-case name="16736NISTXML-SV-IV-list-NCName-length-1-3 tokoe:valid" result="pass"/><test-case name="16737NISTXML-SV-IV-list-NCName-length-1-4 tokoe:valid" result="pass"/><test-case name="16738NISTXML-SV-IV-list-NCName-length-1-5 tokoe:valid" result="pass"/><test-case name="16739NISTSchema-SV-IV-list-NCName-length-2 tokoe:valid" result="pass"/><test-case name="16740NISTXML-SV-IV-list-NCName-length-2-1 tokoe:valid" result="pass"/><test-case name="16741NISTXML-SV-IV-list-NCName-length-2-2 tokoe:valid" result="pass"/><test-case name="16742NISTXML-SV-IV-list-NCName-length-2-3 tokoe:valid" result="pass"/><test-case name="16743NISTXML-SV-IV-list-NCName-length-2-4 tokoe:valid" result="pass"/><test-case name="16744NISTXML-SV-IV-list-NCName-length-2-5 tokoe:valid" result="pass"/><test-case name="16745NISTSchema-SV-IV-list-NCName-length-3 tokoe:valid" result="pass"/><test-case name="16746NISTXML-SV-IV-list-NCName-length-3-1 tokoe:valid" result="pass"/><test-case name="16747NISTXML-SV-IV-list-NCName-length-3-2 tokoe:valid" result="pass"/><test-case name="16748NISTXML-SV-IV-list-NCName-length-3-3 tokoe:valid" result="pass"/><test-case name="16749NISTXML-SV-IV-list-NCName-length-3-4 tokoe:valid" result="pass"/><test-case name="16750NISTXML-SV-IV-list-NCName-length-3-5 tokoe:valid" result="pass"/><test-case name="16751NISTSchema-SV-IV-list-NCName-length-4 tokoe:valid" result="pass"/><test-case name="16752NISTXML-SV-IV-list-NCName-length-4-1 tokoe:valid" result="pass"/><test-case name="16753NISTXML-SV-IV-list-NCName-length-4-2 tokoe:valid" result="pass"/><test-case name="16754NISTXML-SV-IV-list-NCName-length-4-3 tokoe:valid" result="pass"/><test-case name="16755NISTXML-SV-IV-list-NCName-length-4-4 tokoe:valid" result="pass"/><test-case name="16756NISTXML-SV-IV-list-NCName-length-4-5 tokoe:valid" result="pass"/><test-case name="16757NISTSchema-SV-IV-list-NCName-length-5 tokoe:valid" result="pass"/><test-case name="16758NISTXML-SV-IV-list-NCName-length-5-1 tokoe:valid" result="pass"/><test-case name="16759NISTXML-SV-IV-list-NCName-length-5-2 tokoe:valid" result="pass"/><test-case name="16760NISTXML-SV-IV-list-NCName-length-5-3 tokoe:valid" result="pass"/><test-case name="16761NISTXML-SV-IV-list-NCName-length-5-4 tokoe:valid" result="pass"/><test-case name="16762NISTXML-SV-IV-list-NCName-length-5-5 tokoe:valid" result="pass"/><test-case name="16763NISTSchema-SV-IV-list-NCName-pattern-1 tokoe:valid" result="pass"/><test-case name="16764NISTXML-SV-IV-list-NCName-pattern-1-1 tokoe:valid" result="pass"/><test-case name="16765NISTXML-SV-IV-list-NCName-pattern-1-2 tokoe:valid" result="pass"/><test-case name="16766NISTXML-SV-IV-list-NCName-pattern-1-3 tokoe:valid" result="pass"/><test-case name="16767NISTXML-SV-IV-list-NCName-pattern-1-4 tokoe:valid" result="pass"/><test-case name="16768NISTXML-SV-IV-list-NCName-pattern-1-5 tokoe:valid" result="pass"/><test-case name="16769NISTSchema-SV-IV-list-NCName-pattern-2 tokoe:valid" result="pass"/><test-case name="16770NISTXML-SV-IV-list-NCName-pattern-2-1 tokoe:valid" result="pass"/><test-case name="16771NISTXML-SV-IV-list-NCName-pattern-2-2 tokoe:valid" result="pass"/><test-case name="16772NISTXML-SV-IV-list-NCName-pattern-2-3 tokoe:valid" result="pass"/><test-case name="16773NISTXML-SV-IV-list-NCName-pattern-2-4 tokoe:valid" result="pass"/><test-case name="16774NISTXML-SV-IV-list-NCName-pattern-2-5 tokoe:valid" result="pass"/><test-case name="16775NISTSchema-SV-IV-list-NCName-pattern-3 tokoe:valid" result="pass"/><test-case name="16776NISTXML-SV-IV-list-NCName-pattern-3-1 tokoe:valid" result="pass"/><test-case name="16777NISTXML-SV-IV-list-NCName-pattern-3-2 tokoe:valid" result="pass"/><test-case name="16778NISTXML-SV-IV-list-NCName-pattern-3-3 tokoe:valid" result="pass"/><test-case name="16779NISTXML-SV-IV-list-NCName-pattern-3-4 tokoe:valid" result="pass"/><test-case name="16780NISTXML-SV-IV-list-NCName-pattern-3-5 tokoe:valid" result="pass"/><test-case name="16781NISTSchema-SV-IV-list-NCName-pattern-4 tokoe:valid" result="pass"/><test-case name="16782NISTXML-SV-IV-list-NCName-pattern-4-1 tokoe:valid" result="pass"/><test-case name="16783NISTXML-SV-IV-list-NCName-pattern-4-2 tokoe:valid" result="pass"/><test-case name="16784NISTXML-SV-IV-list-NCName-pattern-4-3 tokoe:valid" result="pass"/><test-case name="16785NISTXML-SV-IV-list-NCName-pattern-4-4 tokoe:valid" result="pass"/><test-case name="16786NISTXML-SV-IV-list-NCName-pattern-4-5 tokoe:valid" result="pass"/><test-case name="16787NISTSchema-SV-IV-list-NCName-pattern-5 tokoe:valid" result="pass"/><test-case name="16788NISTXML-SV-IV-list-NCName-pattern-5-1 tokoe:valid" result="pass"/><test-case name="16789NISTXML-SV-IV-list-NCName-pattern-5-2 tokoe:valid" result="pass"/><test-case name="16790NISTXML-SV-IV-list-NCName-pattern-5-3 tokoe:valid" result="pass"/><test-case name="16791NISTXML-SV-IV-list-NCName-pattern-5-4 tokoe:valid" result="pass"/><test-case name="16792NISTXML-SV-IV-list-NCName-pattern-5-5 tokoe:valid" result="pass"/><test-case name="16793NISTSchema-SV-IV-list-NCName-enumeration-1 tokoe:valid" result="pass"/><test-case name="16794NISTXML-SV-IV-list-NCName-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="16795NISTXML-SV-IV-list-NCName-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="16796NISTXML-SV-IV-list-NCName-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="16797NISTXML-SV-IV-list-NCName-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="16798NISTXML-SV-IV-list-NCName-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="16799NISTSchema-SV-IV-list-NCName-enumeration-2 tokoe:valid" result="pass"/><test-case name="16800NISTXML-SV-IV-list-NCName-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="16801NISTXML-SV-IV-list-NCName-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="16802NISTXML-SV-IV-list-NCName-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="16803NISTXML-SV-IV-list-NCName-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="16804NISTXML-SV-IV-list-NCName-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="16805NISTSchema-SV-IV-list-NCName-enumeration-3 tokoe:valid" result="pass"/><test-case name="16806NISTXML-SV-IV-list-NCName-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="16807NISTXML-SV-IV-list-NCName-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="16808NISTXML-SV-IV-list-NCName-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="16809NISTXML-SV-IV-list-NCName-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="16810NISTXML-SV-IV-list-NCName-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="16811NISTSchema-SV-IV-list-NCName-enumeration-4 tokoe:valid" result="pass"/><test-case name="16812NISTXML-SV-IV-list-NCName-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="16813NISTXML-SV-IV-list-NCName-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="16814NISTXML-SV-IV-list-NCName-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="16815NISTXML-SV-IV-list-NCName-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="16816NISTXML-SV-IV-list-NCName-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="16817NISTSchema-SV-IV-list-NCName-enumeration-5 tokoe:valid" result="pass"/><test-case name="16818NISTXML-SV-IV-list-NCName-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="16819NISTXML-SV-IV-list-NCName-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="16820NISTXML-SV-IV-list-NCName-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="16821NISTXML-SV-IV-list-NCName-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="16822NISTXML-SV-IV-list-NCName-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="16823NISTSchema-SV-IV-list-NCName-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="16824NISTXML-SV-IV-list-NCName-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="16825NISTXML-SV-IV-list-NCName-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="16826NISTXML-SV-IV-list-NCName-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="16827NISTXML-SV-IV-list-NCName-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="16828NISTXML-SV-IV-list-NCName-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="16829NISTSchema-SV-IV-list-ID-maxLength-1 tokoe:valid" result="pass"/><test-case name="16830NISTXML-SV-IV-list-ID-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="16831NISTXML-SV-IV-list-ID-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="16832NISTXML-SV-IV-list-ID-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="16833NISTXML-SV-IV-list-ID-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="16834NISTXML-SV-IV-list-ID-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="16835NISTSchema-SV-IV-list-ID-maxLength-2 tokoe:valid" result="pass"/><test-case name="16836NISTXML-SV-IV-list-ID-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="16837NISTXML-SV-IV-list-ID-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="16838NISTXML-SV-IV-list-ID-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="16839NISTXML-SV-IV-list-ID-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="16840NISTXML-SV-IV-list-ID-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="16841NISTSchema-SV-IV-list-ID-maxLength-3 tokoe:valid" result="pass"/><test-case name="16842NISTXML-SV-IV-list-ID-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="16843NISTXML-SV-IV-list-ID-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="16844NISTXML-SV-IV-list-ID-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="16845NISTXML-SV-IV-list-ID-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="16846NISTXML-SV-IV-list-ID-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="16847NISTSchema-SV-IV-list-ID-maxLength-4 tokoe:valid" result="pass"/><test-case name="16848NISTXML-SV-IV-list-ID-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="16849NISTXML-SV-IV-list-ID-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="16850NISTXML-SV-IV-list-ID-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="16851NISTXML-SV-IV-list-ID-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="16852NISTXML-SV-IV-list-ID-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="16853NISTSchema-SV-IV-list-ID-maxLength-5 tokoe:valid" result="pass"/><test-case name="16854NISTXML-SV-IV-list-ID-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="16855NISTXML-SV-IV-list-ID-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="16856NISTXML-SV-IV-list-ID-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="16857NISTXML-SV-IV-list-ID-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="16858NISTXML-SV-IV-list-ID-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="16859NISTSchema-SV-IV-list-ID-minLength-1 tokoe:valid" result="pass"/><test-case name="16860NISTXML-SV-IV-list-ID-minLength-1-1 tokoe:valid" result="pass"/><test-case name="16861NISTXML-SV-IV-list-ID-minLength-1-2 tokoe:valid" result="pass"/><test-case name="16862NISTXML-SV-IV-list-ID-minLength-1-3 tokoe:valid" result="pass"/><test-case name="16863NISTXML-SV-IV-list-ID-minLength-1-4 tokoe:valid" result="pass"/><test-case name="16864NISTXML-SV-IV-list-ID-minLength-1-5 tokoe:valid" result="pass"/><test-case name="16865NISTSchema-SV-IV-list-ID-minLength-2 tokoe:valid" result="pass"/><test-case name="16866NISTXML-SV-IV-list-ID-minLength-2-1 tokoe:valid" result="pass"/><test-case name="16867NISTXML-SV-IV-list-ID-minLength-2-2 tokoe:valid" result="pass"/><test-case name="16868NISTXML-SV-IV-list-ID-minLength-2-3 tokoe:valid" result="pass"/><test-case name="16869NISTXML-SV-IV-list-ID-minLength-2-4 tokoe:valid" result="pass"/><test-case name="16870NISTXML-SV-IV-list-ID-minLength-2-5 tokoe:valid" result="pass"/><test-case name="16871NISTSchema-SV-IV-list-ID-minLength-3 tokoe:valid" result="pass"/><test-case name="16872NISTXML-SV-IV-list-ID-minLength-3-1 tokoe:valid" result="pass"/><test-case name="16873NISTXML-SV-IV-list-ID-minLength-3-2 tokoe:valid" result="pass"/><test-case name="16874NISTXML-SV-IV-list-ID-minLength-3-3 tokoe:valid" result="pass"/><test-case name="16875NISTXML-SV-IV-list-ID-minLength-3-4 tokoe:valid" result="pass"/><test-case name="16876NISTXML-SV-IV-list-ID-minLength-3-5 tokoe:valid" result="pass"/><test-case name="16877NISTSchema-SV-IV-list-ID-minLength-4 tokoe:valid" result="pass"/><test-case name="16878NISTXML-SV-IV-list-ID-minLength-4-1 tokoe:valid" result="pass"/><test-case name="16879NISTXML-SV-IV-list-ID-minLength-4-2 tokoe:valid" result="pass"/><test-case name="16880NISTXML-SV-IV-list-ID-minLength-4-3 tokoe:valid" result="pass"/><test-case name="16881NISTXML-SV-IV-list-ID-minLength-4-4 tokoe:valid" result="pass"/><test-case name="16882NISTXML-SV-IV-list-ID-minLength-4-5 tokoe:valid" result="pass"/><test-case name="16883NISTSchema-SV-IV-list-ID-minLength-5 tokoe:valid" result="pass"/><test-case name="16884NISTXML-SV-IV-list-ID-minLength-5-1 tokoe:valid" result="pass"/><test-case name="16885NISTXML-SV-IV-list-ID-minLength-5-2 tokoe:valid" result="pass"/><test-case name="16886NISTXML-SV-IV-list-ID-minLength-5-3 tokoe:valid" result="pass"/><test-case name="16887NISTXML-SV-IV-list-ID-minLength-5-4 tokoe:valid" result="pass"/><test-case name="16888NISTXML-SV-IV-list-ID-minLength-5-5 tokoe:valid" result="pass"/><test-case name="16889NISTSchema-SV-IV-list-ID-length-1 tokoe:valid" result="pass"/><test-case name="16890NISTXML-SV-IV-list-ID-length-1-1 tokoe:valid" result="pass"/><test-case name="16891NISTXML-SV-IV-list-ID-length-1-2 tokoe:valid" result="pass"/><test-case name="16892NISTXML-SV-IV-list-ID-length-1-3 tokoe:valid" result="pass"/><test-case name="16893NISTXML-SV-IV-list-ID-length-1-4 tokoe:valid" result="pass"/><test-case name="16894NISTXML-SV-IV-list-ID-length-1-5 tokoe:valid" result="pass"/><test-case name="16895NISTSchema-SV-IV-list-ID-length-2 tokoe:valid" result="pass"/><test-case name="16896NISTXML-SV-IV-list-ID-length-2-1 tokoe:valid" result="pass"/><test-case name="16897NISTXML-SV-IV-list-ID-length-2-2 tokoe:valid" result="pass"/><test-case name="16898NISTXML-SV-IV-list-ID-length-2-3 tokoe:valid" result="pass"/><test-case name="16899NISTXML-SV-IV-list-ID-length-2-4 tokoe:valid" result="pass"/><test-case name="16900NISTXML-SV-IV-list-ID-length-2-5 tokoe:valid" result="pass"/><test-case name="16901NISTSchema-SV-IV-list-ID-length-3 tokoe:valid" result="pass"/><test-case name="16902NISTXML-SV-IV-list-ID-length-3-1 tokoe:valid" result="pass"/><test-case name="16903NISTXML-SV-IV-list-ID-length-3-2 tokoe:valid" result="pass"/><test-case name="16904NISTXML-SV-IV-list-ID-length-3-3 tokoe:valid" result="pass"/><test-case name="16905NISTXML-SV-IV-list-ID-length-3-4 tokoe:valid" result="pass"/><test-case name="16906NISTXML-SV-IV-list-ID-length-3-5 tokoe:valid" result="pass"/><test-case name="16907NISTSchema-SV-IV-list-ID-length-4 tokoe:valid" result="pass"/><test-case name="16908NISTXML-SV-IV-list-ID-length-4-1 tokoe:valid" result="pass"/><test-case name="16909NISTXML-SV-IV-list-ID-length-4-2 tokoe:valid" result="pass"/><test-case name="16910NISTXML-SV-IV-list-ID-length-4-3 tokoe:valid" result="pass"/><test-case name="16911NISTXML-SV-IV-list-ID-length-4-4 tokoe:valid" result="pass"/><test-case name="16912NISTXML-SV-IV-list-ID-length-4-5 tokoe:valid" result="pass"/><test-case name="16913NISTSchema-SV-IV-list-ID-length-5 tokoe:valid" result="pass"/><test-case name="16914NISTXML-SV-IV-list-ID-length-5-1 tokoe:valid" result="pass"/><test-case name="16915NISTXML-SV-IV-list-ID-length-5-2 tokoe:valid" result="pass"/><test-case name="16916NISTXML-SV-IV-list-ID-length-5-3 tokoe:valid" result="pass"/><test-case name="16917NISTXML-SV-IV-list-ID-length-5-4 tokoe:valid" result="pass"/><test-case name="16918NISTXML-SV-IV-list-ID-length-5-5 tokoe:valid" result="pass"/><test-case name="16919NISTSchema-SV-IV-list-ID-pattern-1 tokoe:valid" result="pass"/><test-case name="16920NISTXML-SV-IV-list-ID-pattern-1-1 tokoe:valid" result="pass"/><test-case name="16921NISTXML-SV-IV-list-ID-pattern-1-2 tokoe:valid" result="pass"/><test-case name="16922NISTXML-SV-IV-list-ID-pattern-1-3 tokoe:valid" result="pass"/><test-case name="16923NISTXML-SV-IV-list-ID-pattern-1-4 tokoe:valid" result="pass"/><test-case name="16924NISTXML-SV-IV-list-ID-pattern-1-5 tokoe:valid" result="pass"/><test-case name="16925NISTSchema-SV-IV-list-ID-pattern-2 tokoe:valid" result="pass"/><test-case name="16926NISTXML-SV-IV-list-ID-pattern-2-1 tokoe:valid" result="pass"/><test-case name="16927NISTXML-SV-IV-list-ID-pattern-2-2 tokoe:valid" result="pass"/><test-case name="16928NISTXML-SV-IV-list-ID-pattern-2-3 tokoe:valid" result="pass"/><test-case name="16929NISTXML-SV-IV-list-ID-pattern-2-4 tokoe:valid" result="pass"/><test-case name="16930NISTXML-SV-IV-list-ID-pattern-2-5 tokoe:valid" result="pass"/><test-case name="16931NISTSchema-SV-IV-list-ID-pattern-3 tokoe:valid" result="pass"/><test-case name="16932NISTXML-SV-IV-list-ID-pattern-3-1 tokoe:valid" result="pass"/><test-case name="16933NISTXML-SV-IV-list-ID-pattern-3-2 tokoe:valid" result="pass"/><test-case name="16934NISTXML-SV-IV-list-ID-pattern-3-3 tokoe:valid" result="pass"/><test-case name="16935NISTXML-SV-IV-list-ID-pattern-3-4 tokoe:valid" result="pass"/><test-case name="16936NISTXML-SV-IV-list-ID-pattern-3-5 tokoe:valid" result="pass"/><test-case name="16937NISTSchema-SV-IV-list-ID-pattern-4 tokoe:valid" result="pass"/><test-case name="16938NISTXML-SV-IV-list-ID-pattern-4-1 tokoe:valid" result="pass"/><test-case name="16939NISTXML-SV-IV-list-ID-pattern-4-2 tokoe:valid" result="pass"/><test-case name="16940NISTXML-SV-IV-list-ID-pattern-4-3 tokoe:valid" result="pass"/><test-case name="16941NISTXML-SV-IV-list-ID-pattern-4-4 tokoe:valid" result="pass"/><test-case name="16942NISTXML-SV-IV-list-ID-pattern-4-5 tokoe:valid" result="pass"/><test-case name="16943NISTSchema-SV-IV-list-ID-pattern-5 tokoe:valid" result="pass"/><test-case name="16944NISTXML-SV-IV-list-ID-pattern-5-1 tokoe:valid" result="pass"/><test-case name="16945NISTXML-SV-IV-list-ID-pattern-5-2 tokoe:valid" result="pass"/><test-case name="16946NISTXML-SV-IV-list-ID-pattern-5-3 tokoe:valid" result="pass"/><test-case name="16947NISTXML-SV-IV-list-ID-pattern-5-4 tokoe:valid" result="pass"/><test-case name="16948NISTXML-SV-IV-list-ID-pattern-5-5 tokoe:valid" result="pass"/><test-case name="16949NISTSchema-SV-IV-list-ID-enumeration-1 tokoe:valid" result="pass"/><test-case name="16950NISTXML-SV-IV-list-ID-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="16951NISTXML-SV-IV-list-ID-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="16952NISTXML-SV-IV-list-ID-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="16953NISTXML-SV-IV-list-ID-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="16954NISTXML-SV-IV-list-ID-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="16955NISTSchema-SV-IV-list-ID-enumeration-2 tokoe:valid" result="pass"/><test-case name="16956NISTXML-SV-IV-list-ID-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="16957NISTXML-SV-IV-list-ID-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="16958NISTXML-SV-IV-list-ID-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="16959NISTXML-SV-IV-list-ID-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="16960NISTXML-SV-IV-list-ID-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="16961NISTSchema-SV-IV-list-ID-enumeration-3 tokoe:valid" result="pass"/><test-case name="16962NISTXML-SV-IV-list-ID-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="16963NISTXML-SV-IV-list-ID-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="16964NISTXML-SV-IV-list-ID-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="16965NISTXML-SV-IV-list-ID-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="16966NISTXML-SV-IV-list-ID-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="16967NISTSchema-SV-IV-list-ID-enumeration-4 tokoe:valid" result="pass"/><test-case name="16968NISTXML-SV-IV-list-ID-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="16969NISTXML-SV-IV-list-ID-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="16970NISTXML-SV-IV-list-ID-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="16971NISTXML-SV-IV-list-ID-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="16972NISTXML-SV-IV-list-ID-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="16973NISTSchema-SV-IV-list-ID-enumeration-5 tokoe:valid" result="pass"/><test-case name="16974NISTXML-SV-IV-list-ID-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="16975NISTXML-SV-IV-list-ID-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="16976NISTXML-SV-IV-list-ID-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="16977NISTXML-SV-IV-list-ID-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="16978NISTXML-SV-IV-list-ID-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="16979NISTSchema-SV-IV-list-ID-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="16980NISTXML-SV-IV-list-ID-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="16981NISTXML-SV-IV-list-ID-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="16982NISTXML-SV-IV-list-ID-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="16983NISTXML-SV-IV-list-ID-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="16984NISTXML-SV-IV-list-ID-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="16985NISTSchema-SV-IV-list-language-maxLength-1 tokoe:valid" result="pass"/><test-case name="16986NISTXML-SV-IV-list-language-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="16987NISTXML-SV-IV-list-language-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="16988NISTXML-SV-IV-list-language-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="16989NISTXML-SV-IV-list-language-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="16990NISTXML-SV-IV-list-language-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="16991NISTSchema-SV-IV-list-language-maxLength-2 tokoe:valid" result="pass"/><test-case name="16992NISTXML-SV-IV-list-language-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="16993NISTXML-SV-IV-list-language-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="16994NISTXML-SV-IV-list-language-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="16995NISTXML-SV-IV-list-language-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="16996NISTXML-SV-IV-list-language-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="16997NISTSchema-SV-IV-list-language-maxLength-3 tokoe:valid" result="pass"/><test-case name="16998NISTXML-SV-IV-list-language-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="16999NISTXML-SV-IV-list-language-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="17000NISTXML-SV-IV-list-language-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="17001NISTXML-SV-IV-list-language-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="17002NISTXML-SV-IV-list-language-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="17003NISTSchema-SV-IV-list-language-maxLength-4 tokoe:valid" result="pass"/><test-case name="17004NISTXML-SV-IV-list-language-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="17005NISTXML-SV-IV-list-language-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="17006NISTXML-SV-IV-list-language-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="17007NISTXML-SV-IV-list-language-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="17008NISTXML-SV-IV-list-language-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="17009NISTSchema-SV-IV-list-language-maxLength-5 tokoe:valid" result="pass"/><test-case name="17010NISTXML-SV-IV-list-language-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="17011NISTXML-SV-IV-list-language-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="17012NISTXML-SV-IV-list-language-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="17013NISTXML-SV-IV-list-language-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="17014NISTXML-SV-IV-list-language-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="17015NISTSchema-SV-IV-list-language-minLength-1 tokoe:valid" result="pass"/><test-case name="17016NISTXML-SV-IV-list-language-minLength-1-1 tokoe:valid" result="pass"/><test-case name="17017NISTXML-SV-IV-list-language-minLength-1-2 tokoe:valid" result="pass"/><test-case name="17018NISTXML-SV-IV-list-language-minLength-1-3 tokoe:valid" result="pass"/><test-case name="17019NISTXML-SV-IV-list-language-minLength-1-4 tokoe:valid" result="pass"/><test-case name="17020NISTXML-SV-IV-list-language-minLength-1-5 tokoe:valid" result="pass"/><test-case name="17021NISTSchema-SV-IV-list-language-minLength-2 tokoe:valid" result="pass"/><test-case name="17022NISTXML-SV-IV-list-language-minLength-2-1 tokoe:valid" result="pass"/><test-case name="17023NISTXML-SV-IV-list-language-minLength-2-2 tokoe:valid" result="pass"/><test-case name="17024NISTXML-SV-IV-list-language-minLength-2-3 tokoe:valid" result="pass"/><test-case name="17025NISTXML-SV-IV-list-language-minLength-2-4 tokoe:valid" result="pass"/><test-case name="17026NISTXML-SV-IV-list-language-minLength-2-5 tokoe:valid" result="pass"/><test-case name="17027NISTSchema-SV-IV-list-language-minLength-3 tokoe:valid" result="pass"/><test-case name="17028NISTXML-SV-IV-list-language-minLength-3-1 tokoe:valid" result="pass"/><test-case name="17029NISTXML-SV-IV-list-language-minLength-3-2 tokoe:valid" result="pass"/><test-case name="17030NISTXML-SV-IV-list-language-minLength-3-3 tokoe:valid" result="pass"/><test-case name="17031NISTXML-SV-IV-list-language-minLength-3-4 tokoe:valid" result="pass"/><test-case name="17032NISTXML-SV-IV-list-language-minLength-3-5 tokoe:valid" result="pass"/><test-case name="17033NISTSchema-SV-IV-list-language-minLength-4 tokoe:valid" result="pass"/><test-case name="17034NISTXML-SV-IV-list-language-minLength-4-1 tokoe:valid" result="pass"/><test-case name="17035NISTXML-SV-IV-list-language-minLength-4-2 tokoe:valid" result="pass"/><test-case name="17036NISTXML-SV-IV-list-language-minLength-4-3 tokoe:valid" result="pass"/><test-case name="17037NISTXML-SV-IV-list-language-minLength-4-4 tokoe:valid" result="pass"/><test-case name="17038NISTXML-SV-IV-list-language-minLength-4-5 tokoe:valid" result="pass"/><test-case name="17039NISTSchema-SV-IV-list-language-minLength-5 tokoe:valid" result="pass"/><test-case name="17040NISTXML-SV-IV-list-language-minLength-5-1 tokoe:valid" result="pass"/><test-case name="17041NISTXML-SV-IV-list-language-minLength-5-2 tokoe:valid" result="pass"/><test-case name="17042NISTXML-SV-IV-list-language-minLength-5-3 tokoe:valid" result="pass"/><test-case name="17043NISTXML-SV-IV-list-language-minLength-5-4 tokoe:valid" result="pass"/><test-case name="17044NISTXML-SV-IV-list-language-minLength-5-5 tokoe:valid" result="pass"/><test-case name="17045NISTSchema-SV-IV-list-language-length-1 tokoe:valid" result="pass"/><test-case name="17046NISTXML-SV-IV-list-language-length-1-1 tokoe:valid" result="pass"/><test-case name="17047NISTXML-SV-IV-list-language-length-1-2 tokoe:valid" result="pass"/><test-case name="17048NISTXML-SV-IV-list-language-length-1-3 tokoe:valid" result="pass"/><test-case name="17049NISTXML-SV-IV-list-language-length-1-4 tokoe:valid" result="pass"/><test-case name="17050NISTXML-SV-IV-list-language-length-1-5 tokoe:valid" result="pass"/><test-case name="17051NISTSchema-SV-IV-list-language-length-2 tokoe:valid" result="pass"/><test-case name="17052NISTXML-SV-IV-list-language-length-2-1 tokoe:valid" result="pass"/><test-case name="17053NISTXML-SV-IV-list-language-length-2-2 tokoe:valid" result="pass"/><test-case name="17054NISTXML-SV-IV-list-language-length-2-3 tokoe:valid" result="pass"/><test-case name="17055NISTXML-SV-IV-list-language-length-2-4 tokoe:valid" result="pass"/><test-case name="17056NISTXML-SV-IV-list-language-length-2-5 tokoe:valid" result="pass"/><test-case name="17057NISTSchema-SV-IV-list-language-length-3 tokoe:valid" result="pass"/><test-case name="17058NISTXML-SV-IV-list-language-length-3-1 tokoe:valid" result="pass"/><test-case name="17059NISTXML-SV-IV-list-language-length-3-2 tokoe:valid" result="pass"/><test-case name="17060NISTXML-SV-IV-list-language-length-3-3 tokoe:valid" result="pass"/><test-case name="17061NISTXML-SV-IV-list-language-length-3-4 tokoe:valid" result="pass"/><test-case name="17062NISTXML-SV-IV-list-language-length-3-5 tokoe:valid" result="pass"/><test-case name="17063NISTSchema-SV-IV-list-language-length-4 tokoe:valid" result="pass"/><test-case name="17064NISTXML-SV-IV-list-language-length-4-1 tokoe:valid" result="pass"/><test-case name="17065NISTXML-SV-IV-list-language-length-4-2 tokoe:valid" result="pass"/><test-case name="17066NISTXML-SV-IV-list-language-length-4-3 tokoe:valid" result="pass"/><test-case name="17067NISTXML-SV-IV-list-language-length-4-4 tokoe:valid" result="pass"/><test-case name="17068NISTXML-SV-IV-list-language-length-4-5 tokoe:valid" result="pass"/><test-case name="17069NISTSchema-SV-IV-list-language-length-5 tokoe:valid" result="pass"/><test-case name="17070NISTXML-SV-IV-list-language-length-5-1 tokoe:valid" result="pass"/><test-case name="17071NISTXML-SV-IV-list-language-length-5-2 tokoe:valid" result="pass"/><test-case name="17072NISTXML-SV-IV-list-language-length-5-3 tokoe:valid" result="pass"/><test-case name="17073NISTXML-SV-IV-list-language-length-5-4 tokoe:valid" result="pass"/><test-case name="17074NISTXML-SV-IV-list-language-length-5-5 tokoe:valid" result="pass"/><test-case name="17075NISTSchema-SV-IV-list-language-pattern-1 tokoe:valid" result="pass"/><test-case name="17076NISTXML-SV-IV-list-language-pattern-1-1 tokoe:valid" result="pass"/><test-case name="17077NISTXML-SV-IV-list-language-pattern-1-2 tokoe:valid" result="pass"/><test-case name="17078NISTXML-SV-IV-list-language-pattern-1-3 tokoe:valid" result="pass"/><test-case name="17079NISTXML-SV-IV-list-language-pattern-1-4 tokoe:valid" result="pass"/><test-case name="17080NISTXML-SV-IV-list-language-pattern-1-5 tokoe:valid" result="pass"/><test-case name="17081NISTSchema-SV-IV-list-language-pattern-2 tokoe:valid" result="pass"/><test-case name="17082NISTXML-SV-IV-list-language-pattern-2-1 tokoe:valid" result="pass"/><test-case name="17083NISTXML-SV-IV-list-language-pattern-2-2 tokoe:valid" result="pass"/><test-case name="17084NISTXML-SV-IV-list-language-pattern-2-3 tokoe:valid" result="pass"/><test-case name="17085NISTXML-SV-IV-list-language-pattern-2-4 tokoe:valid" result="pass"/><test-case name="17086NISTXML-SV-IV-list-language-pattern-2-5 tokoe:valid" result="pass"/><test-case name="17087NISTSchema-SV-IV-list-language-pattern-3 tokoe:valid" result="pass"/><test-case name="17088NISTXML-SV-IV-list-language-pattern-3-1 tokoe:valid" result="pass"/><test-case name="17089NISTXML-SV-IV-list-language-pattern-3-2 tokoe:valid" result="pass"/><test-case name="17090NISTXML-SV-IV-list-language-pattern-3-3 tokoe:valid" result="pass"/><test-case name="17091NISTXML-SV-IV-list-language-pattern-3-4 tokoe:valid" result="pass"/><test-case name="17092NISTXML-SV-IV-list-language-pattern-3-5 tokoe:valid" result="pass"/><test-case name="17093NISTSchema-SV-IV-list-language-pattern-4 tokoe:valid" result="pass"/><test-case name="17094NISTXML-SV-IV-list-language-pattern-4-1 tokoe:valid" result="pass"/><test-case name="17095NISTXML-SV-IV-list-language-pattern-4-2 tokoe:valid" result="pass"/><test-case name="17096NISTXML-SV-IV-list-language-pattern-4-3 tokoe:valid" result="pass"/><test-case name="17097NISTXML-SV-IV-list-language-pattern-4-4 tokoe:valid" result="pass"/><test-case name="17098NISTXML-SV-IV-list-language-pattern-4-5 tokoe:valid" result="pass"/><test-case name="17099NISTSchema-SV-IV-list-language-pattern-5 tokoe:valid" result="pass"/><test-case name="17100NISTXML-SV-IV-list-language-pattern-5-1 tokoe:valid" result="pass"/><test-case name="17101NISTXML-SV-IV-list-language-pattern-5-2 tokoe:valid" result="pass"/><test-case name="17102NISTXML-SV-IV-list-language-pattern-5-3 tokoe:valid" result="pass"/><test-case name="17103NISTXML-SV-IV-list-language-pattern-5-4 tokoe:valid" result="pass"/><test-case name="17104NISTXML-SV-IV-list-language-pattern-5-5 tokoe:valid" result="pass"/><test-case name="17105NISTSchema-SV-IV-list-language-enumeration-1 tokoe:valid" result="pass"/><test-case name="17106NISTXML-SV-IV-list-language-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="17107NISTXML-SV-IV-list-language-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="17108NISTXML-SV-IV-list-language-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="17109NISTXML-SV-IV-list-language-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="17110NISTXML-SV-IV-list-language-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="17111NISTSchema-SV-IV-list-language-enumeration-2 tokoe:valid" result="pass"/><test-case name="17112NISTXML-SV-IV-list-language-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="17113NISTXML-SV-IV-list-language-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="17114NISTXML-SV-IV-list-language-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="17115NISTXML-SV-IV-list-language-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="17116NISTXML-SV-IV-list-language-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="17117NISTSchema-SV-IV-list-language-enumeration-3 tokoe:valid" result="pass"/><test-case name="17118NISTXML-SV-IV-list-language-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="17119NISTXML-SV-IV-list-language-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="17120NISTXML-SV-IV-list-language-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="17121NISTXML-SV-IV-list-language-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="17122NISTXML-SV-IV-list-language-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="17123NISTSchema-SV-IV-list-language-enumeration-4 tokoe:valid" result="pass"/><test-case name="17124NISTXML-SV-IV-list-language-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="17125NISTXML-SV-IV-list-language-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="17126NISTXML-SV-IV-list-language-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="17127NISTXML-SV-IV-list-language-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="17128NISTXML-SV-IV-list-language-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="17129NISTSchema-SV-IV-list-language-enumeration-5 tokoe:valid" result="pass"/><test-case name="17130NISTXML-SV-IV-list-language-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="17131NISTXML-SV-IV-list-language-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="17132NISTXML-SV-IV-list-language-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="17133NISTXML-SV-IV-list-language-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="17134NISTXML-SV-IV-list-language-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="17135NISTSchema-SV-IV-list-language-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="17136NISTXML-SV-IV-list-language-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="17137NISTXML-SV-IV-list-language-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="17138NISTXML-SV-IV-list-language-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="17139NISTXML-SV-IV-list-language-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="17140NISTXML-SV-IV-list-language-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="17141NISTSchema-SV-IV-list-anyURI-maxLength-1 tokoe:valid" result="pass"/><test-case name="17142NISTXML-SV-IV-list-anyURI-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="17143NISTXML-SV-IV-list-anyURI-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="17144NISTXML-SV-IV-list-anyURI-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="17145NISTXML-SV-IV-list-anyURI-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="17146NISTXML-SV-IV-list-anyURI-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="17147NISTSchema-SV-IV-list-anyURI-maxLength-2 tokoe:valid" result="pass"/><test-case name="17148NISTXML-SV-IV-list-anyURI-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="17149NISTXML-SV-IV-list-anyURI-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="17150NISTXML-SV-IV-list-anyURI-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="17151NISTXML-SV-IV-list-anyURI-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="17152NISTXML-SV-IV-list-anyURI-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="17153NISTSchema-SV-IV-list-anyURI-maxLength-3 tokoe:valid" result="pass"/><test-case name="17154NISTXML-SV-IV-list-anyURI-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="17155NISTXML-SV-IV-list-anyURI-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="17156NISTXML-SV-IV-list-anyURI-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="17157NISTXML-SV-IV-list-anyURI-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="17158NISTXML-SV-IV-list-anyURI-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="17159NISTSchema-SV-IV-list-anyURI-maxLength-4 tokoe:valid" result="pass"/><test-case name="17160NISTXML-SV-IV-list-anyURI-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="17161NISTXML-SV-IV-list-anyURI-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="17162NISTXML-SV-IV-list-anyURI-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="17163NISTXML-SV-IV-list-anyURI-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="17164NISTXML-SV-IV-list-anyURI-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="17165NISTSchema-SV-IV-list-anyURI-maxLength-5 tokoe:valid" result="pass"/><test-case name="17166NISTXML-SV-IV-list-anyURI-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="17167NISTXML-SV-IV-list-anyURI-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="17168NISTXML-SV-IV-list-anyURI-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="17169NISTXML-SV-IV-list-anyURI-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="17170NISTXML-SV-IV-list-anyURI-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="17171NISTSchema-SV-IV-list-anyURI-minLength-1 tokoe:valid" result="pass"/><test-case name="17172NISTXML-SV-IV-list-anyURI-minLength-1-1 tokoe:valid" result="pass"/><test-case name="17173NISTXML-SV-IV-list-anyURI-minLength-1-2 tokoe:valid" result="pass"/><test-case name="17174NISTXML-SV-IV-list-anyURI-minLength-1-3 tokoe:valid" result="pass"/><test-case name="17175NISTXML-SV-IV-list-anyURI-minLength-1-4 tokoe:valid" result="pass"/><test-case name="17176NISTXML-SV-IV-list-anyURI-minLength-1-5 tokoe:valid" result="pass"/><test-case name="17177NISTSchema-SV-IV-list-anyURI-minLength-2 tokoe:valid" result="pass"/><test-case name="17178NISTXML-SV-IV-list-anyURI-minLength-2-1 tokoe:valid" result="pass"/><test-case name="17179NISTXML-SV-IV-list-anyURI-minLength-2-2 tokoe:valid" result="pass"/><test-case name="17180NISTXML-SV-IV-list-anyURI-minLength-2-3 tokoe:valid" result="pass"/><test-case name="17181NISTXML-SV-IV-list-anyURI-minLength-2-4 tokoe:valid" result="pass"/><test-case name="17182NISTXML-SV-IV-list-anyURI-minLength-2-5 tokoe:valid" result="pass"/><test-case name="17183NISTSchema-SV-IV-list-anyURI-minLength-3 tokoe:valid" result="pass"/><test-case name="17184NISTXML-SV-IV-list-anyURI-minLength-3-1 tokoe:valid" result="pass"/><test-case name="17185NISTXML-SV-IV-list-anyURI-minLength-3-2 tokoe:valid" result="pass"/><test-case name="17186NISTXML-SV-IV-list-anyURI-minLength-3-3 tokoe:valid" result="pass"/><test-case name="17187NISTXML-SV-IV-list-anyURI-minLength-3-4 tokoe:valid" result="pass"/><test-case name="17188NISTXML-SV-IV-list-anyURI-minLength-3-5 tokoe:valid" result="pass"/><test-case name="17189NISTSchema-SV-IV-list-anyURI-minLength-4 tokoe:valid" result="pass"/><test-case name="17190NISTXML-SV-IV-list-anyURI-minLength-4-1 tokoe:valid" result="pass"/><test-case name="17191NISTXML-SV-IV-list-anyURI-minLength-4-2 tokoe:valid" result="pass"/><test-case name="17192NISTXML-SV-IV-list-anyURI-minLength-4-3 tokoe:valid" result="pass"/><test-case name="17193NISTXML-SV-IV-list-anyURI-minLength-4-4 tokoe:valid" result="pass"/><test-case name="17194NISTXML-SV-IV-list-anyURI-minLength-4-5 tokoe:valid" result="pass"/><test-case name="17195NISTSchema-SV-IV-list-anyURI-minLength-5 tokoe:valid" result="pass"/><test-case name="17196NISTXML-SV-IV-list-anyURI-minLength-5-1 tokoe:valid" result="pass"/><test-case name="17197NISTXML-SV-IV-list-anyURI-minLength-5-2 tokoe:valid" result="pass"/><test-case name="17198NISTXML-SV-IV-list-anyURI-minLength-5-3 tokoe:valid" result="pass"/><test-case name="17199NISTXML-SV-IV-list-anyURI-minLength-5-4 tokoe:valid" result="pass"/><test-case name="17200NISTXML-SV-IV-list-anyURI-minLength-5-5 tokoe:valid" result="pass"/><test-case name="17201NISTSchema-SV-IV-list-anyURI-length-1 tokoe:valid" result="pass"/><test-case name="17202NISTXML-SV-IV-list-anyURI-length-1-1 tokoe:valid" result="pass"/><test-case name="17203NISTXML-SV-IV-list-anyURI-length-1-2 tokoe:valid" result="pass"/><test-case name="17204NISTXML-SV-IV-list-anyURI-length-1-3 tokoe:valid" result="pass"/><test-case name="17205NISTXML-SV-IV-list-anyURI-length-1-4 tokoe:valid" result="pass"/><test-case name="17206NISTXML-SV-IV-list-anyURI-length-1-5 tokoe:valid" result="pass"/><test-case name="17207NISTSchema-SV-IV-list-anyURI-length-2 tokoe:valid" result="pass"/><test-case name="17208NISTXML-SV-IV-list-anyURI-length-2-1 tokoe:valid" result="pass"/><test-case name="17209NISTXML-SV-IV-list-anyURI-length-2-2 tokoe:valid" result="pass"/><test-case name="17210NISTXML-SV-IV-list-anyURI-length-2-3 tokoe:valid" result="pass"/><test-case name="17211NISTXML-SV-IV-list-anyURI-length-2-4 tokoe:valid" result="pass"/><test-case name="17212NISTXML-SV-IV-list-anyURI-length-2-5 tokoe:valid" result="pass"/><test-case name="17213NISTSchema-SV-IV-list-anyURI-length-3 tokoe:valid" result="pass"/><test-case name="17214NISTXML-SV-IV-list-anyURI-length-3-1 tokoe:valid" result="pass"/><test-case name="17215NISTXML-SV-IV-list-anyURI-length-3-2 tokoe:valid" result="pass"/><test-case name="17216NISTXML-SV-IV-list-anyURI-length-3-3 tokoe:valid" result="pass"/><test-case name="17217NISTXML-SV-IV-list-anyURI-length-3-4 tokoe:valid" result="pass"/><test-case name="17218NISTXML-SV-IV-list-anyURI-length-3-5 tokoe:valid" result="pass"/><test-case name="17219NISTSchema-SV-IV-list-anyURI-length-4 tokoe:valid" result="pass"/><test-case name="17220NISTXML-SV-IV-list-anyURI-length-4-1 tokoe:valid" result="pass"/><test-case name="17221NISTXML-SV-IV-list-anyURI-length-4-2 tokoe:valid" result="pass"/><test-case name="17222NISTXML-SV-IV-list-anyURI-length-4-3 tokoe:valid" result="pass"/><test-case name="17223NISTXML-SV-IV-list-anyURI-length-4-4 tokoe:valid" result="pass"/><test-case name="17224NISTXML-SV-IV-list-anyURI-length-4-5 tokoe:valid" result="pass"/><test-case name="17225NISTSchema-SV-IV-list-anyURI-length-5 tokoe:valid" result="pass"/><test-case name="17226NISTXML-SV-IV-list-anyURI-length-5-1 tokoe:valid" result="pass"/><test-case name="17227NISTXML-SV-IV-list-anyURI-length-5-2 tokoe:valid" result="pass"/><test-case name="17228NISTXML-SV-IV-list-anyURI-length-5-3 tokoe:valid" result="pass"/><test-case name="17229NISTXML-SV-IV-list-anyURI-length-5-4 tokoe:valid" result="pass"/><test-case name="17230NISTXML-SV-IV-list-anyURI-length-5-5 tokoe:valid" result="pass"/><test-case name="17231NISTSchema-SV-IV-list-anyURI-pattern-1 tokoe:valid" result="pass"/><test-case name="17232NISTXML-SV-IV-list-anyURI-pattern-1-1 tokoe:valid" result="pass"/><test-case name="17233NISTXML-SV-IV-list-anyURI-pattern-1-2 tokoe:valid" result="pass"/><test-case name="17234NISTXML-SV-IV-list-anyURI-pattern-1-3 tokoe:valid" result="pass"/><test-case name="17235NISTXML-SV-IV-list-anyURI-pattern-1-4 tokoe:valid" result="pass"/><test-case name="17236NISTXML-SV-IV-list-anyURI-pattern-1-5 tokoe:valid" result="pass"/><test-case name="17237NISTSchema-SV-IV-list-anyURI-pattern-2 tokoe:valid" result="pass"/><test-case name="17238NISTXML-SV-IV-list-anyURI-pattern-2-1 tokoe:valid" result="pass"/><test-case name="17239NISTXML-SV-IV-list-anyURI-pattern-2-2 tokoe:valid" result="pass"/><test-case name="17240NISTXML-SV-IV-list-anyURI-pattern-2-3 tokoe:valid" result="pass"/><test-case name="17241NISTXML-SV-IV-list-anyURI-pattern-2-4 tokoe:valid" result="pass"/><test-case name="17242NISTXML-SV-IV-list-anyURI-pattern-2-5 tokoe:valid" result="pass"/><test-case name="17243NISTSchema-SV-IV-list-anyURI-pattern-3 tokoe:valid" result="pass"/><test-case name="17244NISTXML-SV-IV-list-anyURI-pattern-3-1 tokoe:valid" result="pass"/><test-case name="17245NISTXML-SV-IV-list-anyURI-pattern-3-2 tokoe:valid" result="pass"/><test-case name="17246NISTXML-SV-IV-list-anyURI-pattern-3-3 tokoe:valid" result="pass"/><test-case name="17247NISTXML-SV-IV-list-anyURI-pattern-3-4 tokoe:valid" result="pass"/><test-case name="17248NISTXML-SV-IV-list-anyURI-pattern-3-5 tokoe:valid" result="pass"/><test-case name="17249NISTSchema-SV-IV-list-anyURI-pattern-4 tokoe:valid" result="pass"/><test-case name="17250NISTXML-SV-IV-list-anyURI-pattern-4-1 tokoe:valid" result="pass"/><test-case name="17251NISTXML-SV-IV-list-anyURI-pattern-4-2 tokoe:valid" result="pass"/><test-case name="17252NISTXML-SV-IV-list-anyURI-pattern-4-3 tokoe:valid" result="pass"/><test-case name="17253NISTXML-SV-IV-list-anyURI-pattern-4-4 tokoe:valid" result="pass"/><test-case name="17254NISTXML-SV-IV-list-anyURI-pattern-4-5 tokoe:valid" result="pass"/><test-case name="17255NISTSchema-SV-IV-list-anyURI-pattern-5 tokoe:valid" result="pass"/><test-case name="17256NISTXML-SV-IV-list-anyURI-pattern-5-1 tokoe:valid" result="pass"/><test-case name="17257NISTXML-SV-IV-list-anyURI-pattern-5-2 tokoe:valid" result="pass"/><test-case name="17258NISTXML-SV-IV-list-anyURI-pattern-5-3 tokoe:valid" result="pass"/><test-case name="17259NISTXML-SV-IV-list-anyURI-pattern-5-4 tokoe:valid" result="pass"/><test-case name="17260NISTXML-SV-IV-list-anyURI-pattern-5-5 tokoe:valid" result="pass"/><test-case name="17261NISTSchema-SV-IV-list-anyURI-enumeration-1 tokoe:valid" result="pass"/><test-case name="17262NISTXML-SV-IV-list-anyURI-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="17263NISTXML-SV-IV-list-anyURI-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="17264NISTXML-SV-IV-list-anyURI-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="17265NISTXML-SV-IV-list-anyURI-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="17266NISTXML-SV-IV-list-anyURI-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="17267NISTSchema-SV-IV-list-anyURI-enumeration-2 tokoe:valid" result="pass"/><test-case name="17268NISTXML-SV-IV-list-anyURI-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="17269NISTXML-SV-IV-list-anyURI-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="17270NISTXML-SV-IV-list-anyURI-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="17271NISTXML-SV-IV-list-anyURI-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="17272NISTXML-SV-IV-list-anyURI-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="17273NISTSchema-SV-IV-list-anyURI-enumeration-3 tokoe:valid" result="pass"/><test-case name="17274NISTXML-SV-IV-list-anyURI-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="17275NISTXML-SV-IV-list-anyURI-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="17276NISTXML-SV-IV-list-anyURI-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="17277NISTXML-SV-IV-list-anyURI-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="17278NISTXML-SV-IV-list-anyURI-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="17279NISTSchema-SV-IV-list-anyURI-enumeration-4 tokoe:valid" result="pass"/><test-case name="17280NISTXML-SV-IV-list-anyURI-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="17281NISTXML-SV-IV-list-anyURI-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="17282NISTXML-SV-IV-list-anyURI-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="17283NISTXML-SV-IV-list-anyURI-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="17284NISTXML-SV-IV-list-anyURI-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="17285NISTSchema-SV-IV-list-anyURI-enumeration-5 tokoe:valid" result="pass"/><test-case name="17286NISTXML-SV-IV-list-anyURI-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="17287NISTXML-SV-IV-list-anyURI-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="17288NISTXML-SV-IV-list-anyURI-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="17289NISTXML-SV-IV-list-anyURI-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="17290NISTXML-SV-IV-list-anyURI-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="17291NISTSchema-SV-IV-list-anyURI-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="17292NISTXML-SV-IV-list-anyURI-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="17293NISTXML-SV-IV-list-anyURI-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="17294NISTXML-SV-IV-list-anyURI-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="17295NISTXML-SV-IV-list-anyURI-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="17296NISTXML-SV-IV-list-anyURI-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="17297NISTSchema-SV-IV-list-QName-maxLength-1 tokoe:valid" result="pass"/><test-case name="17298NISTXML-SV-IV-list-QName-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="17299NISTXML-SV-IV-list-QName-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="17300NISTXML-SV-IV-list-QName-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="17301NISTXML-SV-IV-list-QName-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="17302NISTXML-SV-IV-list-QName-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="17303NISTSchema-SV-IV-list-QName-maxLength-2 tokoe:valid" result="pass"/><test-case name="17304NISTXML-SV-IV-list-QName-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="17305NISTXML-SV-IV-list-QName-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="17306NISTXML-SV-IV-list-QName-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="17307NISTXML-SV-IV-list-QName-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="17308NISTXML-SV-IV-list-QName-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="17309NISTSchema-SV-IV-list-QName-maxLength-3 tokoe:valid" result="pass"/><test-case name="17310NISTXML-SV-IV-list-QName-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="17311NISTXML-SV-IV-list-QName-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="17312NISTXML-SV-IV-list-QName-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="17313NISTXML-SV-IV-list-QName-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="17314NISTXML-SV-IV-list-QName-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="17315NISTSchema-SV-IV-list-QName-maxLength-4 tokoe:valid" result="pass"/><test-case name="17316NISTXML-SV-IV-list-QName-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="17317NISTXML-SV-IV-list-QName-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="17318NISTXML-SV-IV-list-QName-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="17319NISTXML-SV-IV-list-QName-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="17320NISTXML-SV-IV-list-QName-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="17321NISTSchema-SV-IV-list-QName-maxLength-5 tokoe:valid" result="pass"/><test-case name="17322NISTXML-SV-IV-list-QName-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="17323NISTXML-SV-IV-list-QName-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="17324NISTXML-SV-IV-list-QName-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="17325NISTXML-SV-IV-list-QName-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="17326NISTXML-SV-IV-list-QName-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="17327NISTSchema-SV-IV-list-QName-minLength-1 tokoe:valid" result="pass"/><test-case name="17328NISTXML-SV-IV-list-QName-minLength-1-1 tokoe:valid" result="pass"/><test-case name="17329NISTXML-SV-IV-list-QName-minLength-1-2 tokoe:valid" result="pass"/><test-case name="17330NISTXML-SV-IV-list-QName-minLength-1-3 tokoe:valid" result="pass"/><test-case name="17331NISTXML-SV-IV-list-QName-minLength-1-4 tokoe:valid" result="pass"/><test-case name="17332NISTXML-SV-IV-list-QName-minLength-1-5 tokoe:valid" result="pass"/><test-case name="17333NISTSchema-SV-IV-list-QName-minLength-2 tokoe:valid" result="pass"/><test-case name="17334NISTXML-SV-IV-list-QName-minLength-2-1 tokoe:valid" result="pass"/><test-case name="17335NISTXML-SV-IV-list-QName-minLength-2-2 tokoe:valid" result="pass"/><test-case name="17336NISTXML-SV-IV-list-QName-minLength-2-3 tokoe:valid" result="pass"/><test-case name="17337NISTXML-SV-IV-list-QName-minLength-2-4 tokoe:valid" result="pass"/><test-case name="17338NISTXML-SV-IV-list-QName-minLength-2-5 tokoe:valid" result="pass"/><test-case name="17339NISTSchema-SV-IV-list-QName-minLength-3 tokoe:valid" result="pass"/><test-case name="17340NISTXML-SV-IV-list-QName-minLength-3-1 tokoe:valid" result="pass"/><test-case name="17341NISTXML-SV-IV-list-QName-minLength-3-2 tokoe:valid" result="pass"/><test-case name="17342NISTXML-SV-IV-list-QName-minLength-3-3 tokoe:valid" result="pass"/><test-case name="17343NISTXML-SV-IV-list-QName-minLength-3-4 tokoe:valid" result="pass"/><test-case name="17344NISTXML-SV-IV-list-QName-minLength-3-5 tokoe:valid" result="pass"/><test-case name="17345NISTSchema-SV-IV-list-QName-minLength-4 tokoe:valid" result="pass"/><test-case name="17346NISTXML-SV-IV-list-QName-minLength-4-1 tokoe:valid" result="pass"/><test-case name="17347NISTXML-SV-IV-list-QName-minLength-4-2 tokoe:valid" result="pass"/><test-case name="17348NISTXML-SV-IV-list-QName-minLength-4-3 tokoe:valid" result="pass"/><test-case name="17349NISTXML-SV-IV-list-QName-minLength-4-4 tokoe:valid" result="pass"/><test-case name="17350NISTXML-SV-IV-list-QName-minLength-4-5 tokoe:valid" result="pass"/><test-case name="17351NISTSchema-SV-IV-list-QName-minLength-5 tokoe:valid" result="pass"/><test-case name="17352NISTXML-SV-IV-list-QName-minLength-5-1 tokoe:valid" result="pass"/><test-case name="17353NISTXML-SV-IV-list-QName-minLength-5-2 tokoe:valid" result="pass"/><test-case name="17354NISTXML-SV-IV-list-QName-minLength-5-3 tokoe:valid" result="pass"/><test-case name="17355NISTXML-SV-IV-list-QName-minLength-5-4 tokoe:valid" result="pass"/><test-case name="17356NISTXML-SV-IV-list-QName-minLength-5-5 tokoe:valid" result="pass"/><test-case name="17357NISTSchema-SV-IV-list-QName-length-1 tokoe:valid" result="pass"/><test-case name="17358NISTXML-SV-IV-list-QName-length-1-1 tokoe:valid" result="pass"/><test-case name="17359NISTXML-SV-IV-list-QName-length-1-2 tokoe:valid" result="pass"/><test-case name="17360NISTXML-SV-IV-list-QName-length-1-3 tokoe:valid" result="pass"/><test-case name="17361NISTXML-SV-IV-list-QName-length-1-4 tokoe:valid" result="pass"/><test-case name="17362NISTXML-SV-IV-list-QName-length-1-5 tokoe:valid" result="pass"/><test-case name="17363NISTSchema-SV-IV-list-QName-length-2 tokoe:valid" result="pass"/><test-case name="17364NISTXML-SV-IV-list-QName-length-2-1 tokoe:valid" result="pass"/><test-case name="17365NISTXML-SV-IV-list-QName-length-2-2 tokoe:valid" result="pass"/><test-case name="17366NISTXML-SV-IV-list-QName-length-2-3 tokoe:valid" result="pass"/><test-case name="17367NISTXML-SV-IV-list-QName-length-2-4 tokoe:valid" result="pass"/><test-case name="17368NISTXML-SV-IV-list-QName-length-2-5 tokoe:valid" result="pass"/><test-case name="17369NISTSchema-SV-IV-list-QName-length-3 tokoe:valid" result="pass"/><test-case name="17370NISTXML-SV-IV-list-QName-length-3-1 tokoe:valid" result="pass"/><test-case name="17371NISTXML-SV-IV-list-QName-length-3-2 tokoe:valid" result="pass"/><test-case name="17372NISTXML-SV-IV-list-QName-length-3-3 tokoe:valid" result="pass"/><test-case name="17373NISTXML-SV-IV-list-QName-length-3-4 tokoe:valid" result="pass"/><test-case name="17374NISTXML-SV-IV-list-QName-length-3-5 tokoe:valid" result="pass"/><test-case name="17375NISTSchema-SV-IV-list-QName-length-4 tokoe:valid" result="pass"/><test-case name="17376NISTXML-SV-IV-list-QName-length-4-1 tokoe:valid" result="pass"/><test-case name="17377NISTXML-SV-IV-list-QName-length-4-2 tokoe:valid" result="pass"/><test-case name="17378NISTXML-SV-IV-list-QName-length-4-3 tokoe:valid" result="pass"/><test-case name="17379NISTXML-SV-IV-list-QName-length-4-4 tokoe:valid" result="pass"/><test-case name="17380NISTXML-SV-IV-list-QName-length-4-5 tokoe:valid" result="pass"/><test-case name="17381NISTSchema-SV-IV-list-QName-length-5 tokoe:valid" result="pass"/><test-case name="17382NISTXML-SV-IV-list-QName-length-5-1 tokoe:valid" result="pass"/><test-case name="17383NISTXML-SV-IV-list-QName-length-5-2 tokoe:valid" result="pass"/><test-case name="17384NISTXML-SV-IV-list-QName-length-5-3 tokoe:valid" result="pass"/><test-case name="17385NISTXML-SV-IV-list-QName-length-5-4 tokoe:valid" result="pass"/><test-case name="17386NISTXML-SV-IV-list-QName-length-5-5 tokoe:valid" result="pass"/><test-case name="17387NISTSchema-SV-IV-list-QName-pattern-1 tokoe:valid" result="pass"/><test-case name="17388NISTXML-SV-IV-list-QName-pattern-1-1 tokoe:valid" result="pass"/><test-case name="17389NISTXML-SV-IV-list-QName-pattern-1-2 tokoe:valid" result="pass"/><test-case name="17390NISTXML-SV-IV-list-QName-pattern-1-3 tokoe:valid" result="pass"/><test-case name="17391NISTXML-SV-IV-list-QName-pattern-1-4 tokoe:valid" result="pass"/><test-case name="17392NISTXML-SV-IV-list-QName-pattern-1-5 tokoe:valid" result="pass"/><test-case name="17393NISTSchema-SV-IV-list-QName-pattern-2 tokoe:valid" result="pass"/><test-case name="17394NISTXML-SV-IV-list-QName-pattern-2-1 tokoe:valid" result="pass"/><test-case name="17395NISTXML-SV-IV-list-QName-pattern-2-2 tokoe:valid" result="pass"/><test-case name="17396NISTXML-SV-IV-list-QName-pattern-2-3 tokoe:valid" result="pass"/><test-case name="17397NISTXML-SV-IV-list-QName-pattern-2-4 tokoe:valid" result="pass"/><test-case name="17398NISTXML-SV-IV-list-QName-pattern-2-5 tokoe:valid" result="pass"/><test-case name="17399NISTSchema-SV-IV-list-QName-pattern-3 tokoe:valid" result="pass"/><test-case name="17400NISTXML-SV-IV-list-QName-pattern-3-1 tokoe:valid" result="pass"/><test-case name="17401NISTXML-SV-IV-list-QName-pattern-3-2 tokoe:valid" result="pass"/><test-case name="17402NISTXML-SV-IV-list-QName-pattern-3-3 tokoe:valid" result="pass"/><test-case name="17403NISTXML-SV-IV-list-QName-pattern-3-4 tokoe:valid" result="pass"/><test-case name="17404NISTXML-SV-IV-list-QName-pattern-3-5 tokoe:valid" result="pass"/><test-case name="17405NISTSchema-SV-IV-list-QName-pattern-4 tokoe:valid" result="pass"/><test-case name="17406NISTXML-SV-IV-list-QName-pattern-4-1 tokoe:valid" result="pass"/><test-case name="17407NISTXML-SV-IV-list-QName-pattern-4-2 tokoe:valid" result="pass"/><test-case name="17408NISTXML-SV-IV-list-QName-pattern-4-3 tokoe:valid" result="pass"/><test-case name="17409NISTXML-SV-IV-list-QName-pattern-4-4 tokoe:valid" result="pass"/><test-case name="17410NISTXML-SV-IV-list-QName-pattern-4-5 tokoe:valid" result="pass"/><test-case name="17411NISTSchema-SV-IV-list-QName-pattern-5 tokoe:valid" result="pass"/><test-case name="17412NISTXML-SV-IV-list-QName-pattern-5-1 tokoe:valid" result="pass"/><test-case name="17413NISTXML-SV-IV-list-QName-pattern-5-2 tokoe:valid" result="pass"/><test-case name="17414NISTXML-SV-IV-list-QName-pattern-5-3 tokoe:valid" result="pass"/><test-case name="17415NISTXML-SV-IV-list-QName-pattern-5-4 tokoe:valid" result="pass"/><test-case name="17416NISTXML-SV-IV-list-QName-pattern-5-5 tokoe:valid" result="pass"/><test-case name="17417NISTSchema-SV-IV-list-QName-enumeration-1 tokoe:valid" result="pass"/><test-case name="17418NISTXML-SV-IV-list-QName-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="17419NISTXML-SV-IV-list-QName-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="17420NISTXML-SV-IV-list-QName-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="17421NISTXML-SV-IV-list-QName-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="17422NISTXML-SV-IV-list-QName-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="17423NISTSchema-SV-IV-list-QName-enumeration-2 tokoe:valid" result="pass"/><test-case name="17424NISTXML-SV-IV-list-QName-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="17425NISTXML-SV-IV-list-QName-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="17426NISTXML-SV-IV-list-QName-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="17427NISTXML-SV-IV-list-QName-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="17428NISTXML-SV-IV-list-QName-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="17429NISTSchema-SV-IV-list-QName-enumeration-3 tokoe:valid" result="pass"/><test-case name="17430NISTXML-SV-IV-list-QName-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="17431NISTXML-SV-IV-list-QName-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="17432NISTXML-SV-IV-list-QName-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="17433NISTXML-SV-IV-list-QName-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="17434NISTXML-SV-IV-list-QName-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="17435NISTSchema-SV-IV-list-QName-enumeration-4 tokoe:valid" result="pass"/><test-case name="17436NISTXML-SV-IV-list-QName-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="17437NISTXML-SV-IV-list-QName-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="17438NISTXML-SV-IV-list-QName-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="17439NISTXML-SV-IV-list-QName-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="17440NISTXML-SV-IV-list-QName-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="17441NISTSchema-SV-IV-list-QName-enumeration-5 tokoe:valid" result="pass"/><test-case name="17442NISTXML-SV-IV-list-QName-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="17443NISTXML-SV-IV-list-QName-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="17444NISTXML-SV-IV-list-QName-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="17445NISTXML-SV-IV-list-QName-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="17446NISTXML-SV-IV-list-QName-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="17447NISTSchema-SV-IV-list-QName-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="17448NISTXML-SV-IV-list-QName-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="17449NISTXML-SV-IV-list-QName-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="17450NISTXML-SV-IV-list-QName-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="17451NISTXML-SV-IV-list-QName-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="17452NISTXML-SV-IV-list-QName-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="17453NISTSchema-SV-IV-list-boolean-maxLength-1 tokoe:valid" result="pass"/><test-case name="17454NISTXML-SV-IV-list-boolean-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="17455NISTXML-SV-IV-list-boolean-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="17456NISTXML-SV-IV-list-boolean-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="17457NISTXML-SV-IV-list-boolean-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="17458NISTXML-SV-IV-list-boolean-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="17459NISTSchema-SV-IV-list-boolean-maxLength-2 tokoe:valid" result="pass"/><test-case name="17460NISTXML-SV-IV-list-boolean-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="17461NISTXML-SV-IV-list-boolean-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="17462NISTXML-SV-IV-list-boolean-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="17463NISTXML-SV-IV-list-boolean-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="17464NISTXML-SV-IV-list-boolean-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="17465NISTSchema-SV-IV-list-boolean-maxLength-3 tokoe:valid" result="pass"/><test-case name="17466NISTXML-SV-IV-list-boolean-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="17467NISTXML-SV-IV-list-boolean-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="17468NISTXML-SV-IV-list-boolean-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="17469NISTXML-SV-IV-list-boolean-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="17470NISTXML-SV-IV-list-boolean-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="17471NISTSchema-SV-IV-list-boolean-maxLength-4 tokoe:valid" result="pass"/><test-case name="17472NISTXML-SV-IV-list-boolean-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="17473NISTXML-SV-IV-list-boolean-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="17474NISTXML-SV-IV-list-boolean-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="17475NISTXML-SV-IV-list-boolean-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="17476NISTXML-SV-IV-list-boolean-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="17477NISTSchema-SV-IV-list-boolean-maxLength-5 tokoe:valid" result="pass"/><test-case name="17478NISTXML-SV-IV-list-boolean-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="17479NISTXML-SV-IV-list-boolean-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="17480NISTXML-SV-IV-list-boolean-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="17481NISTXML-SV-IV-list-boolean-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="17482NISTXML-SV-IV-list-boolean-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="17483NISTSchema-SV-IV-list-boolean-minLength-1 tokoe:valid" result="pass"/><test-case name="17484NISTXML-SV-IV-list-boolean-minLength-1-1 tokoe:valid" result="pass"/><test-case name="17485NISTXML-SV-IV-list-boolean-minLength-1-2 tokoe:valid" result="pass"/><test-case name="17486NISTXML-SV-IV-list-boolean-minLength-1-3 tokoe:valid" result="pass"/><test-case name="17487NISTXML-SV-IV-list-boolean-minLength-1-4 tokoe:valid" result="pass"/><test-case name="17488NISTXML-SV-IV-list-boolean-minLength-1-5 tokoe:valid" result="pass"/><test-case name="17489NISTSchema-SV-IV-list-boolean-minLength-2 tokoe:valid" result="pass"/><test-case name="17490NISTXML-SV-IV-list-boolean-minLength-2-1 tokoe:valid" result="pass"/><test-case name="17491NISTXML-SV-IV-list-boolean-minLength-2-2 tokoe:valid" result="pass"/><test-case name="17492NISTXML-SV-IV-list-boolean-minLength-2-3 tokoe:valid" result="pass"/><test-case name="17493NISTXML-SV-IV-list-boolean-minLength-2-4 tokoe:valid" result="pass"/><test-case name="17494NISTXML-SV-IV-list-boolean-minLength-2-5 tokoe:valid" result="pass"/><test-case name="17495NISTSchema-SV-IV-list-boolean-minLength-3 tokoe:valid" result="pass"/><test-case name="17496NISTXML-SV-IV-list-boolean-minLength-3-1 tokoe:valid" result="pass"/><test-case name="17497NISTXML-SV-IV-list-boolean-minLength-3-2 tokoe:valid" result="pass"/><test-case name="17498NISTXML-SV-IV-list-boolean-minLength-3-3 tokoe:valid" result="pass"/><test-case name="17499NISTXML-SV-IV-list-boolean-minLength-3-4 tokoe:valid" result="pass"/><test-case name="17500NISTXML-SV-IV-list-boolean-minLength-3-5 tokoe:valid" result="pass"/><test-case name="17501NISTSchema-SV-IV-list-boolean-minLength-4 tokoe:valid" result="pass"/><test-case name="17502NISTXML-SV-IV-list-boolean-minLength-4-1 tokoe:valid" result="pass"/><test-case name="17503NISTXML-SV-IV-list-boolean-minLength-4-2 tokoe:valid" result="pass"/><test-case name="17504NISTXML-SV-IV-list-boolean-minLength-4-3 tokoe:valid" result="pass"/><test-case name="17505NISTXML-SV-IV-list-boolean-minLength-4-4 tokoe:valid" result="pass"/><test-case name="17506NISTXML-SV-IV-list-boolean-minLength-4-5 tokoe:valid" result="pass"/><test-case name="17507NISTSchema-SV-IV-list-boolean-minLength-5 tokoe:valid" result="pass"/><test-case name="17508NISTXML-SV-IV-list-boolean-minLength-5-1 tokoe:valid" result="pass"/><test-case name="17509NISTXML-SV-IV-list-boolean-minLength-5-2 tokoe:valid" result="pass"/><test-case name="17510NISTXML-SV-IV-list-boolean-minLength-5-3 tokoe:valid" result="pass"/><test-case name="17511NISTXML-SV-IV-list-boolean-minLength-5-4 tokoe:valid" result="pass"/><test-case name="17512NISTXML-SV-IV-list-boolean-minLength-5-5 tokoe:valid" result="pass"/><test-case name="17513NISTSchema-SV-IV-list-boolean-length-1 tokoe:valid" result="pass"/><test-case name="17514NISTXML-SV-IV-list-boolean-length-1-1 tokoe:valid" result="pass"/><test-case name="17515NISTXML-SV-IV-list-boolean-length-1-2 tokoe:valid" result="pass"/><test-case name="17516NISTXML-SV-IV-list-boolean-length-1-3 tokoe:valid" result="pass"/><test-case name="17517NISTXML-SV-IV-list-boolean-length-1-4 tokoe:valid" result="pass"/><test-case name="17518NISTXML-SV-IV-list-boolean-length-1-5 tokoe:valid" result="pass"/><test-case name="17519NISTSchema-SV-IV-list-boolean-length-2 tokoe:valid" result="pass"/><test-case name="17520NISTXML-SV-IV-list-boolean-length-2-1 tokoe:valid" result="pass"/><test-case name="17521NISTXML-SV-IV-list-boolean-length-2-2 tokoe:valid" result="pass"/><test-case name="17522NISTXML-SV-IV-list-boolean-length-2-3 tokoe:valid" result="pass"/><test-case name="17523NISTXML-SV-IV-list-boolean-length-2-4 tokoe:valid" result="pass"/><test-case name="17524NISTXML-SV-IV-list-boolean-length-2-5 tokoe:valid" result="pass"/><test-case name="17525NISTSchema-SV-IV-list-boolean-length-3 tokoe:valid" result="pass"/><test-case name="17526NISTXML-SV-IV-list-boolean-length-3-1 tokoe:valid" result="pass"/><test-case name="17527NISTXML-SV-IV-list-boolean-length-3-2 tokoe:valid" result="pass"/><test-case name="17528NISTXML-SV-IV-list-boolean-length-3-3 tokoe:valid" result="pass"/><test-case name="17529NISTXML-SV-IV-list-boolean-length-3-4 tokoe:valid" result="pass"/><test-case name="17530NISTXML-SV-IV-list-boolean-length-3-5 tokoe:valid" result="pass"/><test-case name="17531NISTSchema-SV-IV-list-boolean-length-4 tokoe:valid" result="pass"/><test-case name="17532NISTXML-SV-IV-list-boolean-length-4-1 tokoe:valid" result="pass"/><test-case name="17533NISTXML-SV-IV-list-boolean-length-4-2 tokoe:valid" result="pass"/><test-case name="17534NISTXML-SV-IV-list-boolean-length-4-3 tokoe:valid" result="pass"/><test-case name="17535NISTXML-SV-IV-list-boolean-length-4-4 tokoe:valid" result="pass"/><test-case name="17536NISTXML-SV-IV-list-boolean-length-4-5 tokoe:valid" result="pass"/><test-case name="17537NISTSchema-SV-IV-list-boolean-length-5 tokoe:valid" result="pass"/><test-case name="17538NISTXML-SV-IV-list-boolean-length-5-1 tokoe:valid" result="pass"/><test-case name="17539NISTXML-SV-IV-list-boolean-length-5-2 tokoe:valid" result="pass"/><test-case name="17540NISTXML-SV-IV-list-boolean-length-5-3 tokoe:valid" result="pass"/><test-case name="17541NISTXML-SV-IV-list-boolean-length-5-4 tokoe:valid" result="pass"/><test-case name="17542NISTXML-SV-IV-list-boolean-length-5-5 tokoe:valid" result="pass"/><test-case name="17543NISTSchema-SV-IV-list-boolean-pattern-1 tokoe:valid" result="pass"/><test-case name="17544NISTXML-SV-IV-list-boolean-pattern-1-1 tokoe:valid" result="pass"/><test-case name="17545NISTXML-SV-IV-list-boolean-pattern-1-2 tokoe:valid" result="pass"/><test-case name="17546NISTXML-SV-IV-list-boolean-pattern-1-3 tokoe:valid" result="pass"/><test-case name="17547NISTXML-SV-IV-list-boolean-pattern-1-4 tokoe:valid" result="pass"/><test-case name="17548NISTXML-SV-IV-list-boolean-pattern-1-5 tokoe:valid" result="pass"/><test-case name="17549NISTSchema-SV-IV-list-boolean-pattern-2 tokoe:valid" result="pass"/><test-case name="17550NISTXML-SV-IV-list-boolean-pattern-2-1 tokoe:valid" result="pass"/><test-case name="17551NISTXML-SV-IV-list-boolean-pattern-2-2 tokoe:valid" result="pass"/><test-case name="17552NISTXML-SV-IV-list-boolean-pattern-2-3 tokoe:valid" result="pass"/><test-case name="17553NISTXML-SV-IV-list-boolean-pattern-2-4 tokoe:valid" result="pass"/><test-case name="17554NISTXML-SV-IV-list-boolean-pattern-2-5 tokoe:valid" result="pass"/><test-case name="17555NISTSchema-SV-IV-list-boolean-pattern-3 tokoe:valid" result="pass"/><test-case name="17556NISTXML-SV-IV-list-boolean-pattern-3-1 tokoe:valid" result="pass"/><test-case name="17557NISTXML-SV-IV-list-boolean-pattern-3-2 tokoe:valid" result="pass"/><test-case name="17558NISTXML-SV-IV-list-boolean-pattern-3-3 tokoe:valid" result="pass"/><test-case name="17559NISTXML-SV-IV-list-boolean-pattern-3-4 tokoe:valid" result="pass"/><test-case name="17560NISTXML-SV-IV-list-boolean-pattern-3-5 tokoe:valid" result="pass"/><test-case name="17561NISTSchema-SV-IV-list-boolean-pattern-4 tokoe:valid" result="pass"/><test-case name="17562NISTXML-SV-IV-list-boolean-pattern-4-1 tokoe:valid" result="pass"/><test-case name="17563NISTXML-SV-IV-list-boolean-pattern-4-2 tokoe:valid" result="pass"/><test-case name="17564NISTXML-SV-IV-list-boolean-pattern-4-3 tokoe:valid" result="pass"/><test-case name="17565NISTXML-SV-IV-list-boolean-pattern-4-4 tokoe:valid" result="pass"/><test-case name="17566NISTXML-SV-IV-list-boolean-pattern-4-5 tokoe:valid" result="pass"/><test-case name="17567NISTSchema-SV-IV-list-boolean-pattern-5 tokoe:valid" result="pass"/><test-case name="17568NISTXML-SV-IV-list-boolean-pattern-5-1 tokoe:valid" result="pass"/><test-case name="17569NISTXML-SV-IV-list-boolean-pattern-5-2 tokoe:valid" result="pass"/><test-case name="17570NISTXML-SV-IV-list-boolean-pattern-5-3 tokoe:valid" result="pass"/><test-case name="17571NISTXML-SV-IV-list-boolean-pattern-5-4 tokoe:valid" result="pass"/><test-case name="17572NISTXML-SV-IV-list-boolean-pattern-5-5 tokoe:valid" result="pass"/><test-case name="17573NISTSchema-SV-IV-list-boolean-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="17574NISTXML-SV-IV-list-boolean-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="17575NISTXML-SV-IV-list-boolean-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="17576NISTXML-SV-IV-list-boolean-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="17577NISTXML-SV-IV-list-boolean-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="17578NISTXML-SV-IV-list-boolean-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="17579NISTSchema-SV-IV-list-base64Binary-maxLength-1 tokoe:valid" result="pass"/><test-case name="17580NISTXML-SV-IV-list-base64Binary-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="17581NISTXML-SV-IV-list-base64Binary-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="17582NISTXML-SV-IV-list-base64Binary-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="17583NISTXML-SV-IV-list-base64Binary-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="17584NISTXML-SV-IV-list-base64Binary-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="17585NISTSchema-SV-IV-list-base64Binary-maxLength-2 tokoe:valid" result="pass"/><test-case name="17586NISTXML-SV-IV-list-base64Binary-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="17587NISTXML-SV-IV-list-base64Binary-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="17588NISTXML-SV-IV-list-base64Binary-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="17589NISTXML-SV-IV-list-base64Binary-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="17590NISTXML-SV-IV-list-base64Binary-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="17591NISTSchema-SV-IV-list-base64Binary-maxLength-3 tokoe:valid" result="pass"/><test-case name="17592NISTXML-SV-IV-list-base64Binary-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="17593NISTXML-SV-IV-list-base64Binary-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="17594NISTXML-SV-IV-list-base64Binary-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="17595NISTXML-SV-IV-list-base64Binary-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="17596NISTXML-SV-IV-list-base64Binary-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="17597NISTSchema-SV-IV-list-base64Binary-maxLength-4 tokoe:valid" result="pass"/><test-case name="17598NISTXML-SV-IV-list-base64Binary-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="17599NISTXML-SV-IV-list-base64Binary-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="17600NISTXML-SV-IV-list-base64Binary-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="17601NISTXML-SV-IV-list-base64Binary-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="17602NISTXML-SV-IV-list-base64Binary-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="17603NISTSchema-SV-IV-list-base64Binary-maxLength-5 tokoe:valid" result="pass"/><test-case name="17604NISTXML-SV-IV-list-base64Binary-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="17605NISTXML-SV-IV-list-base64Binary-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="17606NISTXML-SV-IV-list-base64Binary-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="17607NISTXML-SV-IV-list-base64Binary-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="17608NISTXML-SV-IV-list-base64Binary-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="17609NISTSchema-SV-IV-list-base64Binary-minLength-1 tokoe:valid" result="pass"/><test-case name="17610NISTXML-SV-IV-list-base64Binary-minLength-1-1 tokoe:valid" result="pass"/><test-case name="17611NISTXML-SV-IV-list-base64Binary-minLength-1-2 tokoe:valid" result="pass"/><test-case name="17612NISTXML-SV-IV-list-base64Binary-minLength-1-3 tokoe:valid" result="pass"/><test-case name="17613NISTXML-SV-IV-list-base64Binary-minLength-1-4 tokoe:valid" result="pass"/><test-case name="17614NISTXML-SV-IV-list-base64Binary-minLength-1-5 tokoe:valid" result="pass"/><test-case name="17615NISTSchema-SV-IV-list-base64Binary-minLength-2 tokoe:valid" result="pass"/><test-case name="17616NISTXML-SV-IV-list-base64Binary-minLength-2-1 tokoe:valid" result="pass"/><test-case name="17617NISTXML-SV-IV-list-base64Binary-minLength-2-2 tokoe:valid" result="pass"/><test-case name="17618NISTXML-SV-IV-list-base64Binary-minLength-2-3 tokoe:valid" result="pass"/><test-case name="17619NISTXML-SV-IV-list-base64Binary-minLength-2-4 tokoe:valid" result="pass"/><test-case name="17620NISTXML-SV-IV-list-base64Binary-minLength-2-5 tokoe:valid" result="pass"/><test-case name="17621NISTSchema-SV-IV-list-base64Binary-minLength-3 tokoe:valid" result="pass"/><test-case name="17622NISTXML-SV-IV-list-base64Binary-minLength-3-1 tokoe:valid" result="pass"/><test-case name="17623NISTXML-SV-IV-list-base64Binary-minLength-3-2 tokoe:valid" result="pass"/><test-case name="17624NISTXML-SV-IV-list-base64Binary-minLength-3-3 tokoe:valid" result="pass"/><test-case name="17625NISTXML-SV-IV-list-base64Binary-minLength-3-4 tokoe:valid" result="pass"/><test-case name="17626NISTXML-SV-IV-list-base64Binary-minLength-3-5 tokoe:valid" result="pass"/><test-case name="17627NISTSchema-SV-IV-list-base64Binary-minLength-4 tokoe:valid" result="pass"/><test-case name="17628NISTXML-SV-IV-list-base64Binary-minLength-4-1 tokoe:valid" result="pass"/><test-case name="17629NISTXML-SV-IV-list-base64Binary-minLength-4-2 tokoe:valid" result="pass"/><test-case name="17630NISTXML-SV-IV-list-base64Binary-minLength-4-3 tokoe:valid" result="pass"/><test-case name="17631NISTXML-SV-IV-list-base64Binary-minLength-4-4 tokoe:valid" result="pass"/><test-case name="17632NISTXML-SV-IV-list-base64Binary-minLength-4-5 tokoe:valid" result="pass"/><test-case name="17633NISTSchema-SV-IV-list-base64Binary-minLength-5 tokoe:valid" result="pass"/><test-case name="17634NISTXML-SV-IV-list-base64Binary-minLength-5-1 tokoe:valid" result="pass"/><test-case name="17635NISTXML-SV-IV-list-base64Binary-minLength-5-2 tokoe:valid" result="pass"/><test-case name="17636NISTXML-SV-IV-list-base64Binary-minLength-5-3 tokoe:valid" result="pass"/><test-case name="17637NISTXML-SV-IV-list-base64Binary-minLength-5-4 tokoe:valid" result="pass"/><test-case name="17638NISTXML-SV-IV-list-base64Binary-minLength-5-5 tokoe:valid" result="pass"/><test-case name="17639NISTSchema-SV-IV-list-base64Binary-length-1 tokoe:valid" result="pass"/><test-case name="17640NISTXML-SV-IV-list-base64Binary-length-1-1 tokoe:valid" result="pass"/><test-case name="17641NISTXML-SV-IV-list-base64Binary-length-1-2 tokoe:valid" result="pass"/><test-case name="17642NISTXML-SV-IV-list-base64Binary-length-1-3 tokoe:valid" result="pass"/><test-case name="17643NISTXML-SV-IV-list-base64Binary-length-1-4 tokoe:valid" result="pass"/><test-case name="17644NISTXML-SV-IV-list-base64Binary-length-1-5 tokoe:valid" result="pass"/><test-case name="17645NISTSchema-SV-IV-list-base64Binary-length-2 tokoe:valid" result="pass"/><test-case name="17646NISTXML-SV-IV-list-base64Binary-length-2-1 tokoe:valid" result="pass"/><test-case name="17647NISTXML-SV-IV-list-base64Binary-length-2-2 tokoe:valid" result="pass"/><test-case name="17648NISTXML-SV-IV-list-base64Binary-length-2-3 tokoe:valid" result="pass"/><test-case name="17649NISTXML-SV-IV-list-base64Binary-length-2-4 tokoe:valid" result="pass"/><test-case name="17650NISTXML-SV-IV-list-base64Binary-length-2-5 tokoe:valid" result="pass"/><test-case name="17651NISTSchema-SV-IV-list-base64Binary-length-3 tokoe:valid" result="pass"/><test-case name="17652NISTXML-SV-IV-list-base64Binary-length-3-1 tokoe:valid" result="pass"/><test-case name="17653NISTXML-SV-IV-list-base64Binary-length-3-2 tokoe:valid" result="pass"/><test-case name="17654NISTXML-SV-IV-list-base64Binary-length-3-3 tokoe:valid" result="pass"/><test-case name="17655NISTXML-SV-IV-list-base64Binary-length-3-4 tokoe:valid" result="pass"/><test-case name="17656NISTXML-SV-IV-list-base64Binary-length-3-5 tokoe:valid" result="pass"/><test-case name="17657NISTSchema-SV-IV-list-base64Binary-length-4 tokoe:valid" result="pass"/><test-case name="17658NISTXML-SV-IV-list-base64Binary-length-4-1 tokoe:valid" result="pass"/><test-case name="17659NISTXML-SV-IV-list-base64Binary-length-4-2 tokoe:valid" result="pass"/><test-case name="17660NISTXML-SV-IV-list-base64Binary-length-4-3 tokoe:valid" result="pass"/><test-case name="17661NISTXML-SV-IV-list-base64Binary-length-4-4 tokoe:valid" result="pass"/><test-case name="17662NISTXML-SV-IV-list-base64Binary-length-4-5 tokoe:valid" result="pass"/><test-case name="17663NISTSchema-SV-IV-list-base64Binary-length-5 tokoe:valid" result="pass"/><test-case name="17664NISTXML-SV-IV-list-base64Binary-length-5-1 tokoe:valid" result="pass"/><test-case name="17665NISTXML-SV-IV-list-base64Binary-length-5-2 tokoe:valid" result="pass"/><test-case name="17666NISTXML-SV-IV-list-base64Binary-length-5-3 tokoe:valid" result="pass"/><test-case name="17667NISTXML-SV-IV-list-base64Binary-length-5-4 tokoe:valid" result="pass"/><test-case name="17668NISTXML-SV-IV-list-base64Binary-length-5-5 tokoe:valid" result="pass"/><test-case name="17669NISTSchema-SV-IV-list-base64Binary-pattern-1 tokoe:valid" result="pass"/><test-case name="17670NISTXML-SV-IV-list-base64Binary-pattern-1-1 tokoe:valid" result="pass"/><test-case name="17671NISTXML-SV-IV-list-base64Binary-pattern-1-2 tokoe:valid" result="pass"/><test-case name="17672NISTXML-SV-IV-list-base64Binary-pattern-1-3 tokoe:valid" result="pass"/><test-case name="17673NISTXML-SV-IV-list-base64Binary-pattern-1-4 tokoe:valid" result="pass"/><test-case name="17674NISTXML-SV-IV-list-base64Binary-pattern-1-5 tokoe:valid" result="pass"/><test-case name="17675NISTSchema-SV-IV-list-base64Binary-pattern-2 tokoe:valid" result="pass"/><test-case name="17676NISTXML-SV-IV-list-base64Binary-pattern-2-1 tokoe:valid" result="pass"/><test-case name="17677NISTXML-SV-IV-list-base64Binary-pattern-2-2 tokoe:valid" result="pass"/><test-case name="17678NISTXML-SV-IV-list-base64Binary-pattern-2-3 tokoe:valid" result="pass"/><test-case name="17679NISTXML-SV-IV-list-base64Binary-pattern-2-4 tokoe:valid" result="pass"/><test-case name="17680NISTXML-SV-IV-list-base64Binary-pattern-2-5 tokoe:valid" result="pass"/><test-case name="17681NISTSchema-SV-IV-list-base64Binary-pattern-3 tokoe:valid" result="pass"/><test-case name="17682NISTXML-SV-IV-list-base64Binary-pattern-3-1 tokoe:valid" result="pass"/><test-case name="17683NISTXML-SV-IV-list-base64Binary-pattern-3-2 tokoe:valid" result="pass"/><test-case name="17684NISTXML-SV-IV-list-base64Binary-pattern-3-3 tokoe:valid" result="pass"/><test-case name="17685NISTXML-SV-IV-list-base64Binary-pattern-3-4 tokoe:valid" result="pass"/><test-case name="17686NISTXML-SV-IV-list-base64Binary-pattern-3-5 tokoe:valid" result="pass"/><test-case name="17687NISTSchema-SV-IV-list-base64Binary-pattern-4 tokoe:valid" result="pass"/><test-case name="17688NISTXML-SV-IV-list-base64Binary-pattern-4-1 tokoe:valid" result="pass"/><test-case name="17689NISTXML-SV-IV-list-base64Binary-pattern-4-2 tokoe:valid" result="pass"/><test-case name="17690NISTXML-SV-IV-list-base64Binary-pattern-4-3 tokoe:valid" result="pass"/><test-case name="17691NISTXML-SV-IV-list-base64Binary-pattern-4-4 tokoe:valid" result="pass"/><test-case name="17692NISTXML-SV-IV-list-base64Binary-pattern-4-5 tokoe:valid" result="pass"/><test-case name="17693NISTSchema-SV-IV-list-base64Binary-pattern-5 tokoe:valid" result="pass"/><test-case name="17694NISTXML-SV-IV-list-base64Binary-pattern-5-1 tokoe:valid" result="pass"/><test-case name="17695NISTXML-SV-IV-list-base64Binary-pattern-5-2 tokoe:valid" result="pass"/><test-case name="17696NISTXML-SV-IV-list-base64Binary-pattern-5-3 tokoe:valid" result="pass"/><test-case name="17697NISTXML-SV-IV-list-base64Binary-pattern-5-4 tokoe:valid" result="pass"/><test-case name="17698NISTXML-SV-IV-list-base64Binary-pattern-5-5 tokoe:valid" result="pass"/><test-case name="17699NISTSchema-SV-IV-list-base64Binary-enumeration-1 tokoe:valid" result="pass"/><test-case name="17700NISTXML-SV-IV-list-base64Binary-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="17701NISTXML-SV-IV-list-base64Binary-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="17702NISTXML-SV-IV-list-base64Binary-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="17703NISTXML-SV-IV-list-base64Binary-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="17704NISTXML-SV-IV-list-base64Binary-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="17705NISTSchema-SV-IV-list-base64Binary-enumeration-2 tokoe:valid" result="pass"/><test-case name="17706NISTXML-SV-IV-list-base64Binary-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="17707NISTXML-SV-IV-list-base64Binary-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="17708NISTXML-SV-IV-list-base64Binary-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="17709NISTXML-SV-IV-list-base64Binary-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="17710NISTXML-SV-IV-list-base64Binary-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="17711NISTSchema-SV-IV-list-base64Binary-enumeration-3 tokoe:valid" result="pass"/><test-case name="17712NISTXML-SV-IV-list-base64Binary-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="17713NISTXML-SV-IV-list-base64Binary-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="17714NISTXML-SV-IV-list-base64Binary-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="17715NISTXML-SV-IV-list-base64Binary-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="17716NISTXML-SV-IV-list-base64Binary-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="17717NISTSchema-SV-IV-list-base64Binary-enumeration-4 tokoe:valid" result="pass"/><test-case name="17718NISTXML-SV-IV-list-base64Binary-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="17719NISTXML-SV-IV-list-base64Binary-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="17720NISTXML-SV-IV-list-base64Binary-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="17721NISTXML-SV-IV-list-base64Binary-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="17722NISTXML-SV-IV-list-base64Binary-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="17723NISTSchema-SV-IV-list-base64Binary-enumeration-5 tokoe:valid" result="pass"/><test-case name="17724NISTXML-SV-IV-list-base64Binary-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="17725NISTXML-SV-IV-list-base64Binary-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="17726NISTXML-SV-IV-list-base64Binary-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="17727NISTXML-SV-IV-list-base64Binary-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="17728NISTXML-SV-IV-list-base64Binary-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="17729NISTSchema-SV-IV-list-base64Binary-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="17730NISTXML-SV-IV-list-base64Binary-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="17731NISTXML-SV-IV-list-base64Binary-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="17732NISTXML-SV-IV-list-base64Binary-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="17733NISTXML-SV-IV-list-base64Binary-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="17734NISTXML-SV-IV-list-base64Binary-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="17735NISTSchema-SV-IV-list-hexBinary-maxLength-1 tokoe:valid" result="pass"/><test-case name="17736NISTXML-SV-IV-list-hexBinary-maxLength-1-1 tokoe:valid" result="pass"/><test-case name="17737NISTXML-SV-IV-list-hexBinary-maxLength-1-2 tokoe:valid" result="pass"/><test-case name="17738NISTXML-SV-IV-list-hexBinary-maxLength-1-3 tokoe:valid" result="pass"/><test-case name="17739NISTXML-SV-IV-list-hexBinary-maxLength-1-4 tokoe:valid" result="pass"/><test-case name="17740NISTXML-SV-IV-list-hexBinary-maxLength-1-5 tokoe:valid" result="pass"/><test-case name="17741NISTSchema-SV-IV-list-hexBinary-maxLength-2 tokoe:valid" result="pass"/><test-case name="17742NISTXML-SV-IV-list-hexBinary-maxLength-2-1 tokoe:valid" result="pass"/><test-case name="17743NISTXML-SV-IV-list-hexBinary-maxLength-2-2 tokoe:valid" result="pass"/><test-case name="17744NISTXML-SV-IV-list-hexBinary-maxLength-2-3 tokoe:valid" result="pass"/><test-case name="17745NISTXML-SV-IV-list-hexBinary-maxLength-2-4 tokoe:valid" result="pass"/><test-case name="17746NISTXML-SV-IV-list-hexBinary-maxLength-2-5 tokoe:valid" result="pass"/><test-case name="17747NISTSchema-SV-IV-list-hexBinary-maxLength-3 tokoe:valid" result="pass"/><test-case name="17748NISTXML-SV-IV-list-hexBinary-maxLength-3-1 tokoe:valid" result="pass"/><test-case name="17749NISTXML-SV-IV-list-hexBinary-maxLength-3-2 tokoe:valid" result="pass"/><test-case name="17750NISTXML-SV-IV-list-hexBinary-maxLength-3-3 tokoe:valid" result="pass"/><test-case name="17751NISTXML-SV-IV-list-hexBinary-maxLength-3-4 tokoe:valid" result="pass"/><test-case name="17752NISTXML-SV-IV-list-hexBinary-maxLength-3-5 tokoe:valid" result="pass"/><test-case name="17753NISTSchema-SV-IV-list-hexBinary-maxLength-4 tokoe:valid" result="pass"/><test-case name="17754NISTXML-SV-IV-list-hexBinary-maxLength-4-1 tokoe:valid" result="pass"/><test-case name="17755NISTXML-SV-IV-list-hexBinary-maxLength-4-2 tokoe:valid" result="pass"/><test-case name="17756NISTXML-SV-IV-list-hexBinary-maxLength-4-3 tokoe:valid" result="pass"/><test-case name="17757NISTXML-SV-IV-list-hexBinary-maxLength-4-4 tokoe:valid" result="pass"/><test-case name="17758NISTXML-SV-IV-list-hexBinary-maxLength-4-5 tokoe:valid" result="pass"/><test-case name="17759NISTSchema-SV-IV-list-hexBinary-maxLength-5 tokoe:valid" result="pass"/><test-case name="17760NISTXML-SV-IV-list-hexBinary-maxLength-5-1 tokoe:valid" result="pass"/><test-case name="17761NISTXML-SV-IV-list-hexBinary-maxLength-5-2 tokoe:valid" result="pass"/><test-case name="17762NISTXML-SV-IV-list-hexBinary-maxLength-5-3 tokoe:valid" result="pass"/><test-case name="17763NISTXML-SV-IV-list-hexBinary-maxLength-5-4 tokoe:valid" result="pass"/><test-case name="17764NISTXML-SV-IV-list-hexBinary-maxLength-5-5 tokoe:valid" result="pass"/><test-case name="17765NISTSchema-SV-IV-list-hexBinary-minLength-1 tokoe:valid" result="pass"/><test-case name="17766NISTXML-SV-IV-list-hexBinary-minLength-1-1 tokoe:valid" result="pass"/><test-case name="17767NISTXML-SV-IV-list-hexBinary-minLength-1-2 tokoe:valid" result="pass"/><test-case name="17768NISTXML-SV-IV-list-hexBinary-minLength-1-3 tokoe:valid" result="pass"/><test-case name="17769NISTXML-SV-IV-list-hexBinary-minLength-1-4 tokoe:valid" result="pass"/><test-case name="17770NISTXML-SV-IV-list-hexBinary-minLength-1-5 tokoe:valid" result="pass"/><test-case name="17771NISTSchema-SV-IV-list-hexBinary-minLength-2 tokoe:valid" result="pass"/><test-case name="17772NISTXML-SV-IV-list-hexBinary-minLength-2-1 tokoe:valid" result="pass"/><test-case name="17773NISTXML-SV-IV-list-hexBinary-minLength-2-2 tokoe:valid" result="pass"/><test-case name="17774NISTXML-SV-IV-list-hexBinary-minLength-2-3 tokoe:valid" result="pass"/><test-case name="17775NISTXML-SV-IV-list-hexBinary-minLength-2-4 tokoe:valid" result="pass"/><test-case name="17776NISTXML-SV-IV-list-hexBinary-minLength-2-5 tokoe:valid" result="pass"/><test-case name="17777NISTSchema-SV-IV-list-hexBinary-minLength-3 tokoe:valid" result="pass"/><test-case name="17778NISTXML-SV-IV-list-hexBinary-minLength-3-1 tokoe:valid" result="pass"/><test-case name="17779NISTXML-SV-IV-list-hexBinary-minLength-3-2 tokoe:valid" result="pass"/><test-case name="17780NISTXML-SV-IV-list-hexBinary-minLength-3-3 tokoe:valid" result="pass"/><test-case name="17781NISTXML-SV-IV-list-hexBinary-minLength-3-4 tokoe:valid" result="pass"/><test-case name="17782NISTXML-SV-IV-list-hexBinary-minLength-3-5 tokoe:valid" result="pass"/><test-case name="17783NISTSchema-SV-IV-list-hexBinary-minLength-4 tokoe:valid" result="pass"/><test-case name="17784NISTXML-SV-IV-list-hexBinary-minLength-4-1 tokoe:valid" result="pass"/><test-case name="17785NISTXML-SV-IV-list-hexBinary-minLength-4-2 tokoe:valid" result="pass"/><test-case name="17786NISTXML-SV-IV-list-hexBinary-minLength-4-3 tokoe:valid" result="pass"/><test-case name="17787NISTXML-SV-IV-list-hexBinary-minLength-4-4 tokoe:valid" result="pass"/><test-case name="17788NISTXML-SV-IV-list-hexBinary-minLength-4-5 tokoe:valid" result="pass"/><test-case name="17789NISTSchema-SV-IV-list-hexBinary-minLength-5 tokoe:valid" result="pass"/><test-case name="17790NISTXML-SV-IV-list-hexBinary-minLength-5-1 tokoe:valid" result="pass"/><test-case name="17791NISTXML-SV-IV-list-hexBinary-minLength-5-2 tokoe:valid" result="pass"/><test-case name="17792NISTXML-SV-IV-list-hexBinary-minLength-5-3 tokoe:valid" result="pass"/><test-case name="17793NISTXML-SV-IV-list-hexBinary-minLength-5-4 tokoe:valid" result="pass"/><test-case name="17794NISTXML-SV-IV-list-hexBinary-minLength-5-5 tokoe:valid" result="pass"/><test-case name="17795NISTSchema-SV-IV-list-hexBinary-length-1 tokoe:valid" result="pass"/><test-case name="17796NISTXML-SV-IV-list-hexBinary-length-1-1 tokoe:valid" result="pass"/><test-case name="17797NISTXML-SV-IV-list-hexBinary-length-1-2 tokoe:valid" result="pass"/><test-case name="17798NISTXML-SV-IV-list-hexBinary-length-1-3 tokoe:valid" result="pass"/><test-case name="17799NISTXML-SV-IV-list-hexBinary-length-1-4 tokoe:valid" result="pass"/><test-case name="17800NISTXML-SV-IV-list-hexBinary-length-1-5 tokoe:valid" result="pass"/><test-case name="17801NISTSchema-SV-IV-list-hexBinary-length-2 tokoe:valid" result="pass"/><test-case name="17802NISTXML-SV-IV-list-hexBinary-length-2-1 tokoe:valid" result="pass"/><test-case name="17803NISTXML-SV-IV-list-hexBinary-length-2-2 tokoe:valid" result="pass"/><test-case name="17804NISTXML-SV-IV-list-hexBinary-length-2-3 tokoe:valid" result="pass"/><test-case name="17805NISTXML-SV-IV-list-hexBinary-length-2-4 tokoe:valid" result="pass"/><test-case name="17806NISTXML-SV-IV-list-hexBinary-length-2-5 tokoe:valid" result="pass"/><test-case name="17807NISTSchema-SV-IV-list-hexBinary-length-3 tokoe:valid" result="pass"/><test-case name="17808NISTXML-SV-IV-list-hexBinary-length-3-1 tokoe:valid" result="pass"/><test-case name="17809NISTXML-SV-IV-list-hexBinary-length-3-2 tokoe:valid" result="pass"/><test-case name="17810NISTXML-SV-IV-list-hexBinary-length-3-3 tokoe:valid" result="pass"/><test-case name="17811NISTXML-SV-IV-list-hexBinary-length-3-4 tokoe:valid" result="pass"/><test-case name="17812NISTXML-SV-IV-list-hexBinary-length-3-5 tokoe:valid" result="pass"/><test-case name="17813NISTSchema-SV-IV-list-hexBinary-length-4 tokoe:valid" result="pass"/><test-case name="17814NISTXML-SV-IV-list-hexBinary-length-4-1 tokoe:valid" result="pass"/><test-case name="17815NISTXML-SV-IV-list-hexBinary-length-4-2 tokoe:valid" result="pass"/><test-case name="17816NISTXML-SV-IV-list-hexBinary-length-4-3 tokoe:valid" result="pass"/><test-case name="17817NISTXML-SV-IV-list-hexBinary-length-4-4 tokoe:valid" result="pass"/><test-case name="17818NISTXML-SV-IV-list-hexBinary-length-4-5 tokoe:valid" result="pass"/><test-case name="17819NISTSchema-SV-IV-list-hexBinary-length-5 tokoe:valid" result="pass"/><test-case name="17820NISTXML-SV-IV-list-hexBinary-length-5-1 tokoe:valid" result="pass"/><test-case name="17821NISTXML-SV-IV-list-hexBinary-length-5-2 tokoe:valid" result="pass"/><test-case name="17822NISTXML-SV-IV-list-hexBinary-length-5-3 tokoe:valid" result="pass"/><test-case name="17823NISTXML-SV-IV-list-hexBinary-length-5-4 tokoe:valid" result="pass"/><test-case name="17824NISTXML-SV-IV-list-hexBinary-length-5-5 tokoe:valid" result="pass"/><test-case name="17825NISTSchema-SV-IV-list-hexBinary-pattern-1 tokoe:valid" result="pass"/><test-case name="17826NISTXML-SV-IV-list-hexBinary-pattern-1-1 tokoe:valid" result="pass"/><test-case name="17827NISTXML-SV-IV-list-hexBinary-pattern-1-2 tokoe:valid" result="pass"/><test-case name="17828NISTXML-SV-IV-list-hexBinary-pattern-1-3 tokoe:valid" result="pass"/><test-case name="17829NISTXML-SV-IV-list-hexBinary-pattern-1-4 tokoe:valid" result="pass"/><test-case name="17830NISTXML-SV-IV-list-hexBinary-pattern-1-5 tokoe:valid" result="pass"/><test-case name="17831NISTSchema-SV-IV-list-hexBinary-pattern-2 tokoe:valid" result="pass"/><test-case name="17832NISTXML-SV-IV-list-hexBinary-pattern-2-1 tokoe:valid" result="pass"/><test-case name="17833NISTXML-SV-IV-list-hexBinary-pattern-2-2 tokoe:valid" result="pass"/><test-case name="17834NISTXML-SV-IV-list-hexBinary-pattern-2-3 tokoe:valid" result="pass"/><test-case name="17835NISTXML-SV-IV-list-hexBinary-pattern-2-4 tokoe:valid" result="pass"/><test-case name="17836NISTXML-SV-IV-list-hexBinary-pattern-2-5 tokoe:valid" result="pass"/><test-case name="17837NISTSchema-SV-IV-list-hexBinary-pattern-3 tokoe:valid" result="pass"/><test-case name="17838NISTXML-SV-IV-list-hexBinary-pattern-3-1 tokoe:valid" result="pass"/><test-case name="17839NISTXML-SV-IV-list-hexBinary-pattern-3-2 tokoe:valid" result="pass"/><test-case name="17840NISTXML-SV-IV-list-hexBinary-pattern-3-3 tokoe:valid" result="pass"/><test-case name="17841NISTXML-SV-IV-list-hexBinary-pattern-3-4 tokoe:valid" result="pass"/><test-case name="17842NISTXML-SV-IV-list-hexBinary-pattern-3-5 tokoe:valid" result="pass"/><test-case name="17843NISTSchema-SV-IV-list-hexBinary-pattern-4 tokoe:valid" result="pass"/><test-case name="17844NISTXML-SV-IV-list-hexBinary-pattern-4-1 tokoe:valid" result="pass"/><test-case name="17845NISTXML-SV-IV-list-hexBinary-pattern-4-2 tokoe:valid" result="pass"/><test-case name="17846NISTXML-SV-IV-list-hexBinary-pattern-4-3 tokoe:valid" result="pass"/><test-case name="17847NISTXML-SV-IV-list-hexBinary-pattern-4-4 tokoe:valid" result="pass"/><test-case name="17848NISTXML-SV-IV-list-hexBinary-pattern-4-5 tokoe:valid" result="pass"/><test-case name="17849NISTSchema-SV-IV-list-hexBinary-pattern-5 tokoe:valid" result="pass"/><test-case name="17850NISTXML-SV-IV-list-hexBinary-pattern-5-1 tokoe:valid" result="pass"/><test-case name="17851NISTXML-SV-IV-list-hexBinary-pattern-5-2 tokoe:valid" result="pass"/><test-case name="17852NISTXML-SV-IV-list-hexBinary-pattern-5-3 tokoe:valid" result="pass"/><test-case name="17853NISTXML-SV-IV-list-hexBinary-pattern-5-4 tokoe:valid" result="pass"/><test-case name="17854NISTXML-SV-IV-list-hexBinary-pattern-5-5 tokoe:valid" result="pass"/><test-case name="17855NISTSchema-SV-IV-list-hexBinary-enumeration-1 tokoe:valid" result="pass"/><test-case name="17856NISTXML-SV-IV-list-hexBinary-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="17857NISTXML-SV-IV-list-hexBinary-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="17858NISTXML-SV-IV-list-hexBinary-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="17859NISTXML-SV-IV-list-hexBinary-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="17860NISTXML-SV-IV-list-hexBinary-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="17861NISTSchema-SV-IV-list-hexBinary-enumeration-2 tokoe:valid" result="pass"/><test-case name="17862NISTXML-SV-IV-list-hexBinary-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="17863NISTXML-SV-IV-list-hexBinary-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="17864NISTXML-SV-IV-list-hexBinary-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="17865NISTXML-SV-IV-list-hexBinary-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="17866NISTXML-SV-IV-list-hexBinary-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="17867NISTSchema-SV-IV-list-hexBinary-enumeration-3 tokoe:valid" result="pass"/><test-case name="17868NISTXML-SV-IV-list-hexBinary-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="17869NISTXML-SV-IV-list-hexBinary-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="17870NISTXML-SV-IV-list-hexBinary-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="17871NISTXML-SV-IV-list-hexBinary-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="17872NISTXML-SV-IV-list-hexBinary-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="17873NISTSchema-SV-IV-list-hexBinary-enumeration-4 tokoe:valid" result="pass"/><test-case name="17874NISTXML-SV-IV-list-hexBinary-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="17875NISTXML-SV-IV-list-hexBinary-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="17876NISTXML-SV-IV-list-hexBinary-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="17877NISTXML-SV-IV-list-hexBinary-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="17878NISTXML-SV-IV-list-hexBinary-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="17879NISTSchema-SV-IV-list-hexBinary-enumeration-5 tokoe:valid" result="pass"/><test-case name="17880NISTXML-SV-IV-list-hexBinary-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="17881NISTXML-SV-IV-list-hexBinary-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="17882NISTXML-SV-IV-list-hexBinary-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="17883NISTXML-SV-IV-list-hexBinary-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="17884NISTXML-SV-IV-list-hexBinary-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="17885NISTSchema-SV-IV-list-hexBinary-whiteSpace-1 tokoe:valid" result="pass"/><test-case name="17886NISTXML-SV-IV-list-hexBinary-whiteSpace-1-1 tokoe:valid" result="pass"/><test-case name="17887NISTXML-SV-IV-list-hexBinary-whiteSpace-1-2 tokoe:valid" result="pass"/><test-case name="17888NISTXML-SV-IV-list-hexBinary-whiteSpace-1-3 tokoe:valid" result="pass"/><test-case name="17889NISTXML-SV-IV-list-hexBinary-whiteSpace-1-4 tokoe:valid" result="pass"/><test-case name="17890NISTXML-SV-IV-list-hexBinary-whiteSpace-1-5 tokoe:valid" result="pass"/><test-case name="17891NISTSchema-SV-II-list-decimal-maxLength-1 tokoe:valid" result="pass"/><test-case name="17892NISTXML-SV-II-list-decimal-maxLength-1-1 tokoe:invalid" result="pass"/><test-case name="17893NISTXML-SV-II-list-decimal-maxLength-1-2 tokoe:invalid" result="pass"/><test-case name="17894NISTXML-SV-II-list-decimal-maxLength-1-3 tokoe:invalid" result="pass"/><test-case name="17895NISTXML-SV-II-list-decimal-maxLength-1-4 tokoe:invalid" result="pass"/><test-case name="17896NISTXML-SV-II-list-decimal-maxLength-1-5 tokoe:invalid" result="pass"/><test-case name="17897NISTSchema-SV-II-list-decimal-maxLength-2 tokoe:valid" result="pass"/><test-case name="17898NISTXML-SV-II-list-decimal-maxLength-2-1 tokoe:invalid" result="pass"/><test-case name="17899NISTXML-SV-II-list-decimal-maxLength-2-2 tokoe:invalid" result="pass"/><test-case name="17900NISTXML-SV-II-list-decimal-maxLength-2-3 tokoe:invalid" result="pass"/><test-case name="17901NISTXML-SV-II-list-decimal-maxLength-2-4 tokoe:invalid" result="pass"/><test-case name="17902NISTXML-SV-II-list-decimal-maxLength-2-5 tokoe:invalid" result="pass"/><test-case name="17903NISTSchema-SV-II-list-decimal-maxLength-3 tokoe:valid" result="pass"/><test-case name="17904NISTXML-SV-II-list-decimal-maxLength-3-1 tokoe:invalid" result="pass"/><test-case name="17905NISTXML-SV-II-list-decimal-maxLength-3-2 tokoe:invalid" result="pass"/><test-case name="17906NISTXML-SV-II-list-decimal-maxLength-3-3 tokoe:invalid" result="pass"/><test-case name="17907NISTXML-SV-II-list-decimal-maxLength-3-4 tokoe:invalid" result="pass"/><test-case name="17908NISTXML-SV-II-list-decimal-maxLength-3-5 tokoe:invalid" result="pass"/><test-case name="17909NISTSchema-SV-II-list-decimal-maxLength-4 tokoe:valid" result="pass"/><test-case name="17910NISTXML-SV-II-list-decimal-maxLength-4-1 tokoe:invalid" result="pass"/><test-case name="17911NISTXML-SV-II-list-decimal-maxLength-4-2 tokoe:invalid" result="pass"/><test-case name="17912NISTXML-SV-II-list-decimal-maxLength-4-3 tokoe:invalid" result="pass"/><test-case name="17913NISTXML-SV-II-list-decimal-maxLength-4-4 tokoe:invalid" result="pass"/><test-case name="17914NISTXML-SV-II-list-decimal-maxLength-4-5 tokoe:invalid" result="pass"/><test-case name="17915NISTSchema-SV-II-list-decimal-maxLength-5 tokoe:valid" result="pass"/><test-case name="17916NISTXML-SV-II-list-decimal-maxLength-5-1 tokoe:invalid" result="pass"/><test-case name="17917NISTXML-SV-II-list-decimal-maxLength-5-2 tokoe:invalid" result="pass"/><test-case name="17918NISTXML-SV-II-list-decimal-maxLength-5-3 tokoe:invalid" result="pass"/><test-case name="17919NISTXML-SV-II-list-decimal-maxLength-5-4 tokoe:invalid" result="pass"/><test-case name="17920NISTXML-SV-II-list-decimal-maxLength-5-5 tokoe:invalid" result="pass"/><test-case name="17921NISTSchema-SV-II-list-decimal-minLength-1 tokoe:valid" result="pass"/><test-case name="17922NISTXML-SV-II-list-decimal-minLength-1-1 tokoe:invalid" result="pass"/><test-case name="17923NISTXML-SV-II-list-decimal-minLength-1-2 tokoe:invalid" result="pass"/><test-case name="17924NISTXML-SV-II-list-decimal-minLength-1-3 tokoe:invalid" result="pass"/><test-case name="17925NISTXML-SV-II-list-decimal-minLength-1-4 tokoe:invalid" result="pass"/><test-case name="17926NISTXML-SV-II-list-decimal-minLength-1-5 tokoe:invalid" result="pass"/><test-case name="17927NISTSchema-SV-II-list-decimal-minLength-2 tokoe:valid" result="pass"/><test-case name="17928NISTXML-SV-II-list-decimal-minLength-2-1 tokoe:invalid" result="pass"/><test-case name="17929NISTXML-SV-II-list-decimal-minLength-2-2 tokoe:invalid" result="pass"/><test-case name="17930NISTXML-SV-II-list-decimal-minLength-2-3 tokoe:invalid" result="pass"/><test-case name="17931NISTXML-SV-II-list-decimal-minLength-2-4 tokoe:invalid" result="pass"/><test-case name="17932NISTXML-SV-II-list-decimal-minLength-2-5 tokoe:invalid" result="pass"/><test-case name="17933NISTSchema-SV-II-list-decimal-minLength-3 tokoe:valid" result="pass"/><test-case name="17934NISTXML-SV-II-list-decimal-minLength-3-1 tokoe:invalid" result="pass"/><test-case name="17935NISTXML-SV-II-list-decimal-minLength-3-2 tokoe:invalid" result="pass"/><test-case name="17936NISTXML-SV-II-list-decimal-minLength-3-3 tokoe:invalid" result="pass"/><test-case name="17937NISTXML-SV-II-list-decimal-minLength-3-4 tokoe:invalid" result="pass"/><test-case name="17938NISTXML-SV-II-list-decimal-minLength-3-5 tokoe:invalid" result="pass"/><test-case name="17939NISTSchema-SV-II-list-decimal-minLength-4 tokoe:valid" result="pass"/><test-case name="17940NISTXML-SV-II-list-decimal-minLength-4-1 tokoe:invalid" result="pass"/><test-case name="17941NISTXML-SV-II-list-decimal-minLength-4-2 tokoe:invalid" result="pass"/><test-case name="17942NISTXML-SV-II-list-decimal-minLength-4-3 tokoe:invalid" result="pass"/><test-case name="17943NISTXML-SV-II-list-decimal-minLength-4-4 tokoe:invalid" result="pass"/><test-case name="17944NISTXML-SV-II-list-decimal-minLength-4-5 tokoe:invalid" result="pass"/><test-case name="17945NISTSchema-SV-II-list-decimal-minLength-5 tokoe:valid" result="pass"/><test-case name="17946NISTXML-SV-II-list-decimal-minLength-5-1 tokoe:invalid" result="pass"/><test-case name="17947NISTXML-SV-II-list-decimal-minLength-5-2 tokoe:invalid" result="pass"/><test-case name="17948NISTXML-SV-II-list-decimal-minLength-5-3 tokoe:invalid" result="pass"/><test-case name="17949NISTXML-SV-II-list-decimal-minLength-5-4 tokoe:invalid" result="pass"/><test-case name="17950NISTXML-SV-II-list-decimal-minLength-5-5 tokoe:invalid" result="pass"/><test-case name="17951NISTSchema-SV-II-list-decimal-length-1 tokoe:valid" result="pass"/><test-case name="17952NISTXML-SV-II-list-decimal-length-1-1 tokoe:invalid" result="pass"/><test-case name="17953NISTXML-SV-II-list-decimal-length-1-2 tokoe:invalid" result="pass"/><test-case name="17954NISTXML-SV-II-list-decimal-length-1-3 tokoe:invalid" result="pass"/><test-case name="17955NISTXML-SV-II-list-decimal-length-1-4 tokoe:invalid" result="pass"/><test-case name="17956NISTXML-SV-II-list-decimal-length-1-5 tokoe:invalid" result="pass"/><test-case name="17957NISTSchema-SV-II-list-decimal-length-2 tokoe:valid" result="pass"/><test-case name="17958NISTXML-SV-II-list-decimal-length-2-1 tokoe:invalid" result="pass"/><test-case name="17959NISTXML-SV-II-list-decimal-length-2-2 tokoe:invalid" result="pass"/><test-case name="17960NISTXML-SV-II-list-decimal-length-2-3 tokoe:invalid" result="pass"/><test-case name="17961NISTXML-SV-II-list-decimal-length-2-4 tokoe:invalid" result="pass"/><test-case name="17962NISTXML-SV-II-list-decimal-length-2-5 tokoe:invalid" result="pass"/><test-case name="17963NISTSchema-SV-II-list-decimal-length-3 tokoe:valid" result="pass"/><test-case name="17964NISTXML-SV-II-list-decimal-length-3-1 tokoe:invalid" result="pass"/><test-case name="17965NISTXML-SV-II-list-decimal-length-3-2 tokoe:invalid" result="pass"/><test-case name="17966NISTXML-SV-II-list-decimal-length-3-3 tokoe:invalid" result="pass"/><test-case name="17967NISTXML-SV-II-list-decimal-length-3-4 tokoe:invalid" result="pass"/><test-case name="17968NISTXML-SV-II-list-decimal-length-3-5 tokoe:invalid" result="pass"/><test-case name="17969NISTSchema-SV-II-list-decimal-length-4 tokoe:valid" result="pass"/><test-case name="17970NISTXML-SV-II-list-decimal-length-4-1 tokoe:invalid" result="pass"/><test-case name="17971NISTXML-SV-II-list-decimal-length-4-2 tokoe:invalid" result="pass"/><test-case name="17972NISTXML-SV-II-list-decimal-length-4-3 tokoe:invalid" result="pass"/><test-case name="17973NISTXML-SV-II-list-decimal-length-4-4 tokoe:invalid" result="pass"/><test-case name="17974NISTXML-SV-II-list-decimal-length-4-5 tokoe:invalid" result="pass"/><test-case name="17975NISTSchema-SV-II-list-decimal-length-5 tokoe:valid" result="pass"/><test-case name="17976NISTXML-SV-II-list-decimal-length-5-1 tokoe:invalid" result="pass"/><test-case name="17977NISTXML-SV-II-list-decimal-length-5-2 tokoe:invalid" result="pass"/><test-case name="17978NISTXML-SV-II-list-decimal-length-5-3 tokoe:invalid" result="pass"/><test-case name="17979NISTXML-SV-II-list-decimal-length-5-4 tokoe:invalid" result="pass"/><test-case name="17980NISTXML-SV-II-list-decimal-length-5-5 tokoe:invalid" result="pass"/><test-case name="17981NISTSchema-SV-II-list-decimal-pattern-1 tokoe:valid" result="pass"/><test-case name="17982NISTXML-SV-II-list-decimal-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="17983NISTXML-SV-II-list-decimal-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="17984NISTXML-SV-II-list-decimal-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="17985NISTXML-SV-II-list-decimal-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="17986NISTXML-SV-II-list-decimal-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="17987NISTSchema-SV-II-list-decimal-pattern-2 tokoe:valid" result="pass"/><test-case name="17988NISTXML-SV-II-list-decimal-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="17989NISTXML-SV-II-list-decimal-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="17990NISTXML-SV-II-list-decimal-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="17991NISTXML-SV-II-list-decimal-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="17992NISTXML-SV-II-list-decimal-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="17993NISTSchema-SV-II-list-decimal-pattern-3 tokoe:valid" result="pass"/><test-case name="17994NISTXML-SV-II-list-decimal-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="17995NISTXML-SV-II-list-decimal-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="17996NISTXML-SV-II-list-decimal-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="17997NISTXML-SV-II-list-decimal-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="17998NISTXML-SV-II-list-decimal-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="17999NISTSchema-SV-II-list-decimal-pattern-4 tokoe:valid" result="pass"/><test-case name="18000NISTXML-SV-II-list-decimal-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="18001NISTXML-SV-II-list-decimal-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="18002NISTXML-SV-II-list-decimal-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="18003NISTXML-SV-II-list-decimal-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="18004NISTXML-SV-II-list-decimal-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="18005NISTSchema-SV-II-list-decimal-pattern-5 tokoe:valid" result="pass"/><test-case name="18006NISTXML-SV-II-list-decimal-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="18007NISTXML-SV-II-list-decimal-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="18008NISTXML-SV-II-list-decimal-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="18009NISTXML-SV-II-list-decimal-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="18010NISTXML-SV-II-list-decimal-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="18011NISTSchema-SV-II-list-decimal-enumeration-1 tokoe:valid" result="pass"/><test-case name="18012NISTXML-SV-II-list-decimal-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="18013NISTXML-SV-II-list-decimal-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="18014NISTXML-SV-II-list-decimal-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="18015NISTXML-SV-II-list-decimal-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="18016NISTXML-SV-II-list-decimal-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="18017NISTSchema-SV-II-list-decimal-enumeration-2 tokoe:valid" result="pass"/><test-case name="18018NISTXML-SV-II-list-decimal-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="18019NISTXML-SV-II-list-decimal-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="18020NISTXML-SV-II-list-decimal-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="18021NISTXML-SV-II-list-decimal-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="18022NISTXML-SV-II-list-decimal-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="18023NISTSchema-SV-II-list-decimal-enumeration-3 tokoe:valid" result="pass"/><test-case name="18024NISTXML-SV-II-list-decimal-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="18025NISTXML-SV-II-list-decimal-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="18026NISTXML-SV-II-list-decimal-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="18027NISTXML-SV-II-list-decimal-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="18028NISTXML-SV-II-list-decimal-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="18029NISTSchema-SV-II-list-decimal-enumeration-4 tokoe:valid" result="pass"/><test-case name="18030NISTXML-SV-II-list-decimal-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="18031NISTXML-SV-II-list-decimal-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="18032NISTXML-SV-II-list-decimal-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="18033NISTXML-SV-II-list-decimal-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="18034NISTXML-SV-II-list-decimal-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="18035NISTSchema-SV-II-list-decimal-enumeration-5 tokoe:valid" result="pass"/><test-case name="18036NISTXML-SV-II-list-decimal-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="18037NISTXML-SV-II-list-decimal-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="18038NISTXML-SV-II-list-decimal-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="18039NISTXML-SV-II-list-decimal-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="18040NISTXML-SV-II-list-decimal-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="18041NISTSchema-SV-II-list-integer-maxLength-1 tokoe:valid" result="pass"/><test-case name="18042NISTXML-SV-II-list-integer-maxLength-1-1 tokoe:invalid" result="pass"/><test-case name="18043NISTXML-SV-II-list-integer-maxLength-1-2 tokoe:invalid" result="pass"/><test-case name="18044NISTXML-SV-II-list-integer-maxLength-1-3 tokoe:invalid" result="pass"/><test-case name="18045NISTXML-SV-II-list-integer-maxLength-1-4 tokoe:invalid" result="pass"/><test-case name="18046NISTXML-SV-II-list-integer-maxLength-1-5 tokoe:invalid" result="pass"/><test-case name="18047NISTSchema-SV-II-list-integer-maxLength-2 tokoe:valid" result="pass"/><test-case name="18048NISTXML-SV-II-list-integer-maxLength-2-1 tokoe:invalid" result="pass"/><test-case name="18049NISTXML-SV-II-list-integer-maxLength-2-2 tokoe:invalid" result="pass"/><test-case name="18050NISTXML-SV-II-list-integer-maxLength-2-3 tokoe:invalid" result="pass"/><test-case name="18051NISTXML-SV-II-list-integer-maxLength-2-4 tokoe:invalid" result="pass"/><test-case name="18052NISTXML-SV-II-list-integer-maxLength-2-5 tokoe:invalid" result="pass"/><test-case name="18053NISTSchema-SV-II-list-integer-maxLength-3 tokoe:valid" result="pass"/><test-case name="18054NISTXML-SV-II-list-integer-maxLength-3-1 tokoe:invalid" result="pass"/><test-case name="18055NISTXML-SV-II-list-integer-maxLength-3-2 tokoe:invalid" result="pass"/><test-case name="18056NISTXML-SV-II-list-integer-maxLength-3-3 tokoe:invalid" result="pass"/><test-case name="18057NISTXML-SV-II-list-integer-maxLength-3-4 tokoe:invalid" result="pass"/><test-case name="18058NISTXML-SV-II-list-integer-maxLength-3-5 tokoe:invalid" result="pass"/><test-case name="18059NISTSchema-SV-II-list-integer-maxLength-4 tokoe:valid" result="pass"/><test-case name="18060NISTXML-SV-II-list-integer-maxLength-4-1 tokoe:invalid" result="pass"/><test-case name="18061NISTXML-SV-II-list-integer-maxLength-4-2 tokoe:invalid" result="pass"/><test-case name="18062NISTXML-SV-II-list-integer-maxLength-4-3 tokoe:invalid" result="pass"/><test-case name="18063NISTXML-SV-II-list-integer-maxLength-4-4 tokoe:invalid" result="pass"/><test-case name="18064NISTXML-SV-II-list-integer-maxLength-4-5 tokoe:invalid" result="pass"/><test-case name="18065NISTSchema-SV-II-list-integer-maxLength-5 tokoe:valid" result="pass"/><test-case name="18066NISTXML-SV-II-list-integer-maxLength-5-1 tokoe:invalid" result="pass"/><test-case name="18067NISTXML-SV-II-list-integer-maxLength-5-2 tokoe:invalid" result="pass"/><test-case name="18068NISTXML-SV-II-list-integer-maxLength-5-3 tokoe:invalid" result="pass"/><test-case name="18069NISTXML-SV-II-list-integer-maxLength-5-4 tokoe:invalid" result="pass"/><test-case name="18070NISTXML-SV-II-list-integer-maxLength-5-5 tokoe:invalid" result="pass"/><test-case name="18071NISTSchema-SV-II-list-integer-minLength-1 tokoe:valid" result="pass"/><test-case name="18072NISTXML-SV-II-list-integer-minLength-1-1 tokoe:invalid" result="pass"/><test-case name="18073NISTXML-SV-II-list-integer-minLength-1-2 tokoe:invalid" result="pass"/><test-case name="18074NISTXML-SV-II-list-integer-minLength-1-3 tokoe:invalid" result="pass"/><test-case name="18075NISTXML-SV-II-list-integer-minLength-1-4 tokoe:invalid" result="pass"/><test-case name="18076NISTXML-SV-II-list-integer-minLength-1-5 tokoe:invalid" result="pass"/><test-case name="18077NISTSchema-SV-II-list-integer-minLength-2 tokoe:valid" result="pass"/><test-case name="18078NISTXML-SV-II-list-integer-minLength-2-1 tokoe:invalid" result="pass"/><test-case name="18079NISTXML-SV-II-list-integer-minLength-2-2 tokoe:invalid" result="pass"/><test-case name="18080NISTXML-SV-II-list-integer-minLength-2-3 tokoe:invalid" result="pass"/><test-case name="18081NISTXML-SV-II-list-integer-minLength-2-4 tokoe:invalid" result="pass"/><test-case name="18082NISTXML-SV-II-list-integer-minLength-2-5 tokoe:invalid" result="pass"/><test-case name="18083NISTSchema-SV-II-list-integer-minLength-3 tokoe:valid" result="pass"/><test-case name="18084NISTXML-SV-II-list-integer-minLength-3-1 tokoe:invalid" result="pass"/><test-case name="18085NISTXML-SV-II-list-integer-minLength-3-2 tokoe:invalid" result="pass"/><test-case name="18086NISTXML-SV-II-list-integer-minLength-3-3 tokoe:invalid" result="pass"/><test-case name="18087NISTXML-SV-II-list-integer-minLength-3-4 tokoe:invalid" result="pass"/><test-case name="18088NISTXML-SV-II-list-integer-minLength-3-5 tokoe:invalid" result="pass"/><test-case name="18089NISTSchema-SV-II-list-integer-minLength-4 tokoe:valid" result="pass"/><test-case name="18090NISTXML-SV-II-list-integer-minLength-4-1 tokoe:invalid" result="pass"/><test-case name="18091NISTXML-SV-II-list-integer-minLength-4-2 tokoe:invalid" result="pass"/><test-case name="18092NISTXML-SV-II-list-integer-minLength-4-3 tokoe:invalid" result="pass"/><test-case name="18093NISTXML-SV-II-list-integer-minLength-4-4 tokoe:invalid" result="pass"/><test-case name="18094NISTXML-SV-II-list-integer-minLength-4-5 tokoe:invalid" result="pass"/><test-case name="18095NISTSchema-SV-II-list-integer-minLength-5 tokoe:valid" result="pass"/><test-case name="18096NISTXML-SV-II-list-integer-minLength-5-1 tokoe:invalid" result="pass"/><test-case name="18097NISTXML-SV-II-list-integer-minLength-5-2 tokoe:invalid" result="pass"/><test-case name="18098NISTXML-SV-II-list-integer-minLength-5-3 tokoe:invalid" result="pass"/><test-case name="18099NISTXML-SV-II-list-integer-minLength-5-4 tokoe:invalid" result="pass"/><test-case name="18100NISTXML-SV-II-list-integer-minLength-5-5 tokoe:invalid" result="pass"/><test-case name="18101NISTSchema-SV-II-list-integer-length-1 tokoe:valid" result="pass"/><test-case name="18102NISTXML-SV-II-list-integer-length-1-1 tokoe:invalid" result="pass"/><test-case name="18103NISTXML-SV-II-list-integer-length-1-2 tokoe:invalid" result="pass"/><test-case name="18104NISTXML-SV-II-list-integer-length-1-3 tokoe:invalid" result="pass"/><test-case name="18105NISTXML-SV-II-list-integer-length-1-4 tokoe:invalid" result="pass"/><test-case name="18106NISTXML-SV-II-list-integer-length-1-5 tokoe:invalid" result="pass"/><test-case name="18107NISTSchema-SV-II-list-integer-length-2 tokoe:valid" result="pass"/><test-case name="18108NISTXML-SV-II-list-integer-length-2-1 tokoe:invalid" result="pass"/><test-case name="18109NISTXML-SV-II-list-integer-length-2-2 tokoe:invalid" result="pass"/><test-case name="18110NISTXML-SV-II-list-integer-length-2-3 tokoe:invalid" result="pass"/><test-case name="18111NISTXML-SV-II-list-integer-length-2-4 tokoe:invalid" result="pass"/><test-case name="18112NISTXML-SV-II-list-integer-length-2-5 tokoe:invalid" result="pass"/><test-case name="18113NISTSchema-SV-II-list-integer-length-3 tokoe:valid" result="pass"/><test-case name="18114NISTXML-SV-II-list-integer-length-3-1 tokoe:invalid" result="pass"/><test-case name="18115NISTXML-SV-II-list-integer-length-3-2 tokoe:invalid" result="pass"/><test-case name="18116NISTXML-SV-II-list-integer-length-3-3 tokoe:invalid" result="pass"/><test-case name="18117NISTXML-SV-II-list-integer-length-3-4 tokoe:invalid" result="pass"/><test-case name="18118NISTXML-SV-II-list-integer-length-3-5 tokoe:invalid" result="pass"/><test-case name="18119NISTSchema-SV-II-list-integer-length-4 tokoe:valid" result="pass"/><test-case name="18120NISTXML-SV-II-list-integer-length-4-1 tokoe:invalid" result="pass"/><test-case name="18121NISTXML-SV-II-list-integer-length-4-2 tokoe:invalid" result="pass"/><test-case name="18122NISTXML-SV-II-list-integer-length-4-3 tokoe:invalid" result="pass"/><test-case name="18123NISTXML-SV-II-list-integer-length-4-4 tokoe:invalid" result="pass"/><test-case name="18124NISTXML-SV-II-list-integer-length-4-5 tokoe:invalid" result="pass"/><test-case name="18125NISTSchema-SV-II-list-integer-length-5 tokoe:valid" result="pass"/><test-case name="18126NISTXML-SV-II-list-integer-length-5-1 tokoe:invalid" result="pass"/><test-case name="18127NISTXML-SV-II-list-integer-length-5-2 tokoe:invalid" result="pass"/><test-case name="18128NISTXML-SV-II-list-integer-length-5-3 tokoe:invalid" result="pass"/><test-case name="18129NISTXML-SV-II-list-integer-length-5-4 tokoe:invalid" result="pass"/><test-case name="18130NISTXML-SV-II-list-integer-length-5-5 tokoe:invalid" result="pass"/><test-case name="18131NISTSchema-SV-II-list-integer-pattern-1 tokoe:valid" result="pass"/><test-case name="18132NISTXML-SV-II-list-integer-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="18133NISTXML-SV-II-list-integer-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="18134NISTXML-SV-II-list-integer-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="18135NISTXML-SV-II-list-integer-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="18136NISTXML-SV-II-list-integer-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="18137NISTSchema-SV-II-list-integer-pattern-2 tokoe:valid" result="pass"/><test-case name="18138NISTXML-SV-II-list-integer-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="18139NISTXML-SV-II-list-integer-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="18140NISTXML-SV-II-list-integer-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="18141NISTXML-SV-II-list-integer-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="18142NISTXML-SV-II-list-integer-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="18143NISTSchema-SV-II-list-integer-pattern-3 tokoe:valid" result="pass"/><test-case name="18144NISTXML-SV-II-list-integer-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="18145NISTXML-SV-II-list-integer-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="18146NISTXML-SV-II-list-integer-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="18147NISTXML-SV-II-list-integer-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="18148NISTXML-SV-II-list-integer-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="18149NISTSchema-SV-II-list-integer-pattern-4 tokoe:valid" result="pass"/><test-case name="18150NISTXML-SV-II-list-integer-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="18151NISTXML-SV-II-list-integer-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="18152NISTXML-SV-II-list-integer-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="18153NISTXML-SV-II-list-integer-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="18154NISTXML-SV-II-list-integer-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="18155NISTSchema-SV-II-list-integer-pattern-5 tokoe:valid" result="pass"/><test-case name="18156NISTXML-SV-II-list-integer-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="18157NISTXML-SV-II-list-integer-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="18158NISTXML-SV-II-list-integer-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="18159NISTXML-SV-II-list-integer-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="18160NISTXML-SV-II-list-integer-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="18161NISTSchema-SV-II-list-integer-enumeration-1 tokoe:valid" result="pass"/><test-case name="18162NISTXML-SV-II-list-integer-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="18163NISTXML-SV-II-list-integer-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="18164NISTXML-SV-II-list-integer-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="18165NISTXML-SV-II-list-integer-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="18166NISTXML-SV-II-list-integer-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="18167NISTSchema-SV-II-list-integer-enumeration-2 tokoe:valid" result="pass"/><test-case name="18168NISTXML-SV-II-list-integer-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="18169NISTXML-SV-II-list-integer-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="18170NISTXML-SV-II-list-integer-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="18171NISTXML-SV-II-list-integer-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="18172NISTXML-SV-II-list-integer-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="18173NISTSchema-SV-II-list-integer-enumeration-3 tokoe:valid" result="pass"/><test-case name="18174NISTXML-SV-II-list-integer-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="18175NISTXML-SV-II-list-integer-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="18176NISTXML-SV-II-list-integer-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="18177NISTXML-SV-II-list-integer-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="18178NISTXML-SV-II-list-integer-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="18179NISTSchema-SV-II-list-integer-enumeration-4 tokoe:valid" result="pass"/><test-case name="18180NISTXML-SV-II-list-integer-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="18181NISTXML-SV-II-list-integer-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="18182NISTXML-SV-II-list-integer-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="18183NISTXML-SV-II-list-integer-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="18184NISTXML-SV-II-list-integer-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="18185NISTSchema-SV-II-list-integer-enumeration-5 tokoe:valid" result="pass"/><test-case name="18186NISTXML-SV-II-list-integer-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="18187NISTXML-SV-II-list-integer-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="18188NISTXML-SV-II-list-integer-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="18189NISTXML-SV-II-list-integer-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="18190NISTXML-SV-II-list-integer-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="18191NISTSchema-SV-II-list-nonPositiveInteger-maxLength-1 tokoe:valid" result="pass"/><test-case name="18192NISTXML-SV-II-list-nonPositiveInteger-maxLength-1-1 tokoe:invalid" result="pass"/><test-case name="18193NISTXML-SV-II-list-nonPositiveInteger-maxLength-1-2 tokoe:invalid" result="pass"/><test-case name="18194NISTXML-SV-II-list-nonPositiveInteger-maxLength-1-3 tokoe:invalid" result="pass"/><test-case name="18195NISTXML-SV-II-list-nonPositiveInteger-maxLength-1-4 tokoe:invalid" result="pass"/><test-case name="18196NISTXML-SV-II-list-nonPositiveInteger-maxLength-1-5 tokoe:invalid" result="pass"/><test-case name="18197NISTSchema-SV-II-list-nonPositiveInteger-maxLength-2 tokoe:valid" result="pass"/><test-case name="18198NISTXML-SV-II-list-nonPositiveInteger-maxLength-2-1 tokoe:invalid" result="pass"/><test-case name="18199NISTXML-SV-II-list-nonPositiveInteger-maxLength-2-2 tokoe:invalid" result="pass"/><test-case name="18200NISTXML-SV-II-list-nonPositiveInteger-maxLength-2-3 tokoe:invalid" result="pass"/><test-case name="18201NISTXML-SV-II-list-nonPositiveInteger-maxLength-2-4 tokoe:invalid" result="pass"/><test-case name="18202NISTXML-SV-II-list-nonPositiveInteger-maxLength-2-5 tokoe:invalid" result="pass"/><test-case name="18203NISTSchema-SV-II-list-nonPositiveInteger-maxLength-3 tokoe:valid" result="pass"/><test-case name="18204NISTXML-SV-II-list-nonPositiveInteger-maxLength-3-1 tokoe:invalid" result="pass"/><test-case name="18205NISTXML-SV-II-list-nonPositiveInteger-maxLength-3-2 tokoe:invalid" result="pass"/><test-case name="18206NISTXML-SV-II-list-nonPositiveInteger-maxLength-3-3 tokoe:invalid" result="pass"/><test-case name="18207NISTXML-SV-II-list-nonPositiveInteger-maxLength-3-4 tokoe:invalid" result="pass"/><test-case name="18208NISTXML-SV-II-list-nonPositiveInteger-maxLength-3-5 tokoe:invalid" result="pass"/><test-case name="18209NISTSchema-SV-II-list-nonPositiveInteger-maxLength-4 tokoe:valid" result="pass"/><test-case name="18210NISTXML-SV-II-list-nonPositiveInteger-maxLength-4-1 tokoe:invalid" result="pass"/><test-case name="18211NISTXML-SV-II-list-nonPositiveInteger-maxLength-4-2 tokoe:invalid" result="pass"/><test-case name="18212NISTXML-SV-II-list-nonPositiveInteger-maxLength-4-3 tokoe:invalid" result="pass"/><test-case name="18213NISTXML-SV-II-list-nonPositiveInteger-maxLength-4-4 tokoe:invalid" result="pass"/><test-case name="18214NISTXML-SV-II-list-nonPositiveInteger-maxLength-4-5 tokoe:invalid" result="pass"/><test-case name="18215NISTSchema-SV-II-list-nonPositiveInteger-maxLength-5 tokoe:valid" result="pass"/><test-case name="18216NISTXML-SV-II-list-nonPositiveInteger-maxLength-5-1 tokoe:invalid" result="pass"/><test-case name="18217NISTXML-SV-II-list-nonPositiveInteger-maxLength-5-2 tokoe:invalid" result="pass"/><test-case name="18218NISTXML-SV-II-list-nonPositiveInteger-maxLength-5-3 tokoe:invalid" result="pass"/><test-case name="18219NISTXML-SV-II-list-nonPositiveInteger-maxLength-5-4 tokoe:invalid" result="pass"/><test-case name="18220NISTXML-SV-II-list-nonPositiveInteger-maxLength-5-5 tokoe:invalid" result="pass"/><test-case name="18221NISTSchema-SV-II-list-nonPositiveInteger-minLength-1 tokoe:valid" result="pass"/><test-case name="18222NISTXML-SV-II-list-nonPositiveInteger-minLength-1-1 tokoe:invalid" result="pass"/><test-case name="18223NISTXML-SV-II-list-nonPositiveInteger-minLength-1-2 tokoe:invalid" result="pass"/><test-case name="18224NISTXML-SV-II-list-nonPositiveInteger-minLength-1-3 tokoe:invalid" result="pass"/><test-case name="18225NISTXML-SV-II-list-nonPositiveInteger-minLength-1-4 tokoe:invalid" result="pass"/><test-case name="18226NISTXML-SV-II-list-nonPositiveInteger-minLength-1-5 tokoe:invalid" result="pass"/><test-case name="18227NISTSchema-SV-II-list-nonPositiveInteger-minLength-2 tokoe:valid" result="pass"/><test-case name="18228NISTXML-SV-II-list-nonPositiveInteger-minLength-2-1 tokoe:invalid" result="pass"/><test-case name="18229NISTXML-SV-II-list-nonPositiveInteger-minLength-2-2 tokoe:invalid" result="pass"/><test-case name="18230NISTXML-SV-II-list-nonPositiveInteger-minLength-2-3 tokoe:invalid" result="pass"/><test-case name="18231NISTXML-SV-II-list-nonPositiveInteger-minLength-2-4 tokoe:invalid" result="pass"/><test-case name="18232NISTXML-SV-II-list-nonPositiveInteger-minLength-2-5 tokoe:invalid" result="pass"/><test-case name="18233NISTSchema-SV-II-list-nonPositiveInteger-minLength-3 tokoe:valid" result="pass"/><test-case name="18234NISTXML-SV-II-list-nonPositiveInteger-minLength-3-1 tokoe:invalid" result="pass"/><test-case name="18235NISTXML-SV-II-list-nonPositiveInteger-minLength-3-2 tokoe:invalid" result="pass"/><test-case name="18236NISTXML-SV-II-list-nonPositiveInteger-minLength-3-3 tokoe:invalid" result="pass"/><test-case name="18237NISTXML-SV-II-list-nonPositiveInteger-minLength-3-4 tokoe:invalid" result="pass"/><test-case name="18238NISTXML-SV-II-list-nonPositiveInteger-minLength-3-5 tokoe:invalid" result="pass"/><test-case name="18239NISTSchema-SV-II-list-nonPositiveInteger-minLength-4 tokoe:valid" result="pass"/><test-case name="18240NISTXML-SV-II-list-nonPositiveInteger-minLength-4-1 tokoe:invalid" result="pass"/><test-case name="18241NISTXML-SV-II-list-nonPositiveInteger-minLength-4-2 tokoe:invalid" result="pass"/><test-case name="18242NISTXML-SV-II-list-nonPositiveInteger-minLength-4-3 tokoe:invalid" result="pass"/><test-case name="18243NISTXML-SV-II-list-nonPositiveInteger-minLength-4-4 tokoe:invalid" result="pass"/><test-case name="18244NISTXML-SV-II-list-nonPositiveInteger-minLength-4-5 tokoe:invalid" result="pass"/><test-case name="18245NISTSchema-SV-II-list-nonPositiveInteger-minLength-5 tokoe:valid" result="pass"/><test-case name="18246NISTXML-SV-II-list-nonPositiveInteger-minLength-5-1 tokoe:invalid" result="pass"/><test-case name="18247NISTXML-SV-II-list-nonPositiveInteger-minLength-5-2 tokoe:invalid" result="pass"/><test-case name="18248NISTXML-SV-II-list-nonPositiveInteger-minLength-5-3 tokoe:invalid" result="pass"/><test-case name="18249NISTXML-SV-II-list-nonPositiveInteger-minLength-5-4 tokoe:invalid" result="pass"/><test-case name="18250NISTXML-SV-II-list-nonPositiveInteger-minLength-5-5 tokoe:invalid" result="pass"/><test-case name="18251NISTSchema-SV-II-list-nonPositiveInteger-length-1 tokoe:valid" result="pass"/><test-case name="18252NISTXML-SV-II-list-nonPositiveInteger-length-1-1 tokoe:invalid" result="pass"/><test-case name="18253NISTXML-SV-II-list-nonPositiveInteger-length-1-2 tokoe:invalid" result="pass"/><test-case name="18254NISTXML-SV-II-list-nonPositiveInteger-length-1-3 tokoe:invalid" result="pass"/><test-case name="18255NISTXML-SV-II-list-nonPositiveInteger-length-1-4 tokoe:invalid" result="pass"/><test-case name="18256NISTXML-SV-II-list-nonPositiveInteger-length-1-5 tokoe:invalid" result="pass"/><test-case name="18257NISTSchema-SV-II-list-nonPositiveInteger-length-2 tokoe:valid" result="pass"/><test-case name="18258NISTXML-SV-II-list-nonPositiveInteger-length-2-1 tokoe:invalid" result="pass"/><test-case name="18259NISTXML-SV-II-list-nonPositiveInteger-length-2-2 tokoe:invalid" result="pass"/><test-case name="18260NISTXML-SV-II-list-nonPositiveInteger-length-2-3 tokoe:invalid" result="pass"/><test-case name="18261NISTXML-SV-II-list-nonPositiveInteger-length-2-4 tokoe:invalid" result="pass"/><test-case name="18262NISTXML-SV-II-list-nonPositiveInteger-length-2-5 tokoe:invalid" result="pass"/><test-case name="18263NISTSchema-SV-II-list-nonPositiveInteger-length-3 tokoe:valid" result="pass"/><test-case name="18264NISTXML-SV-II-list-nonPositiveInteger-length-3-1 tokoe:invalid" result="pass"/><test-case name="18265NISTXML-SV-II-list-nonPositiveInteger-length-3-2 tokoe:invalid" result="pass"/><test-case name="18266NISTXML-SV-II-list-nonPositiveInteger-length-3-3 tokoe:invalid" result="pass"/><test-case name="18267NISTXML-SV-II-list-nonPositiveInteger-length-3-4 tokoe:invalid" result="pass"/><test-case name="18268NISTXML-SV-II-list-nonPositiveInteger-length-3-5 tokoe:invalid" result="pass"/><test-case name="18269NISTSchema-SV-II-list-nonPositiveInteger-length-4 tokoe:valid" result="pass"/><test-case name="18270NISTXML-SV-II-list-nonPositiveInteger-length-4-1 tokoe:invalid" result="pass"/><test-case name="18271NISTXML-SV-II-list-nonPositiveInteger-length-4-2 tokoe:invalid" result="pass"/><test-case name="18272NISTXML-SV-II-list-nonPositiveInteger-length-4-3 tokoe:invalid" result="pass"/><test-case name="18273NISTXML-SV-II-list-nonPositiveInteger-length-4-4 tokoe:invalid" result="pass"/><test-case name="18274NISTXML-SV-II-list-nonPositiveInteger-length-4-5 tokoe:invalid" result="pass"/><test-case name="18275NISTSchema-SV-II-list-nonPositiveInteger-length-5 tokoe:valid" result="pass"/><test-case name="18276NISTXML-SV-II-list-nonPositiveInteger-length-5-1 tokoe:invalid" result="pass"/><test-case name="18277NISTXML-SV-II-list-nonPositiveInteger-length-5-2 tokoe:invalid" result="pass"/><test-case name="18278NISTXML-SV-II-list-nonPositiveInteger-length-5-3 tokoe:invalid" result="pass"/><test-case name="18279NISTXML-SV-II-list-nonPositiveInteger-length-5-4 tokoe:invalid" result="pass"/><test-case name="18280NISTXML-SV-II-list-nonPositiveInteger-length-5-5 tokoe:invalid" result="pass"/><test-case name="18281NISTSchema-SV-II-list-nonPositiveInteger-pattern-1 tokoe:valid" result="pass"/><test-case name="18282NISTXML-SV-II-list-nonPositiveInteger-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="18283NISTXML-SV-II-list-nonPositiveInteger-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="18284NISTXML-SV-II-list-nonPositiveInteger-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="18285NISTXML-SV-II-list-nonPositiveInteger-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="18286NISTXML-SV-II-list-nonPositiveInteger-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="18287NISTSchema-SV-II-list-nonPositiveInteger-pattern-2 tokoe:valid" result="pass"/><test-case name="18288NISTXML-SV-II-list-nonPositiveInteger-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="18289NISTXML-SV-II-list-nonPositiveInteger-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="18290NISTXML-SV-II-list-nonPositiveInteger-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="18291NISTXML-SV-II-list-nonPositiveInteger-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="18292NISTXML-SV-II-list-nonPositiveInteger-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="18293NISTSchema-SV-II-list-nonPositiveInteger-pattern-3 tokoe:valid" result="pass"/><test-case name="18294NISTXML-SV-II-list-nonPositiveInteger-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="18295NISTXML-SV-II-list-nonPositiveInteger-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="18296NISTXML-SV-II-list-nonPositiveInteger-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="18297NISTXML-SV-II-list-nonPositiveInteger-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="18298NISTXML-SV-II-list-nonPositiveInteger-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="18299NISTSchema-SV-II-list-nonPositiveInteger-pattern-4 tokoe:valid" result="pass"/><test-case name="18300NISTXML-SV-II-list-nonPositiveInteger-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="18301NISTXML-SV-II-list-nonPositiveInteger-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="18302NISTXML-SV-II-list-nonPositiveInteger-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="18303NISTXML-SV-II-list-nonPositiveInteger-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="18304NISTXML-SV-II-list-nonPositiveInteger-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="18305NISTSchema-SV-II-list-nonPositiveInteger-pattern-5 tokoe:valid" result="pass"/><test-case name="18306NISTXML-SV-II-list-nonPositiveInteger-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="18307NISTXML-SV-II-list-nonPositiveInteger-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="18308NISTXML-SV-II-list-nonPositiveInteger-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="18309NISTXML-SV-II-list-nonPositiveInteger-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="18310NISTXML-SV-II-list-nonPositiveInteger-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="18311NISTSchema-SV-II-list-nonPositiveInteger-enumeration-1 tokoe:valid" result="pass"/><test-case name="18312NISTXML-SV-II-list-nonPositiveInteger-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="18313NISTXML-SV-II-list-nonPositiveInteger-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="18314NISTXML-SV-II-list-nonPositiveInteger-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="18315NISTXML-SV-II-list-nonPositiveInteger-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="18316NISTXML-SV-II-list-nonPositiveInteger-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="18317NISTSchema-SV-II-list-nonPositiveInteger-enumeration-2 tokoe:valid" result="pass"/><test-case name="18318NISTXML-SV-II-list-nonPositiveInteger-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="18319NISTXML-SV-II-list-nonPositiveInteger-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="18320NISTXML-SV-II-list-nonPositiveInteger-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="18321NISTXML-SV-II-list-nonPositiveInteger-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="18322NISTXML-SV-II-list-nonPositiveInteger-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="18323NISTSchema-SV-II-list-nonPositiveInteger-enumeration-3 tokoe:valid" result="pass"/><test-case name="18324NISTXML-SV-II-list-nonPositiveInteger-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="18325NISTXML-SV-II-list-nonPositiveInteger-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="18326NISTXML-SV-II-list-nonPositiveInteger-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="18327NISTXML-SV-II-list-nonPositiveInteger-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="18328NISTXML-SV-II-list-nonPositiveInteger-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="18329NISTSchema-SV-II-list-nonPositiveInteger-enumeration-4 tokoe:valid" result="pass"/><test-case name="18330NISTXML-SV-II-list-nonPositiveInteger-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="18331NISTXML-SV-II-list-nonPositiveInteger-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="18332NISTXML-SV-II-list-nonPositiveInteger-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="18333NISTXML-SV-II-list-nonPositiveInteger-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="18334NISTXML-SV-II-list-nonPositiveInteger-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="18335NISTSchema-SV-II-list-nonPositiveInteger-enumeration-5 tokoe:valid" result="pass"/><test-case name="18336NISTXML-SV-II-list-nonPositiveInteger-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="18337NISTXML-SV-II-list-nonPositiveInteger-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="18338NISTXML-SV-II-list-nonPositiveInteger-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="18339NISTXML-SV-II-list-nonPositiveInteger-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="18340NISTXML-SV-II-list-nonPositiveInteger-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="18341NISTSchema-SV-II-list-negativeInteger-maxLength-1 tokoe:valid" result="pass"/><test-case name="18342NISTXML-SV-II-list-negativeInteger-maxLength-1-1 tokoe:invalid" result="pass"/><test-case name="18343NISTXML-SV-II-list-negativeInteger-maxLength-1-2 tokoe:invalid" result="pass"/><test-case name="18344NISTXML-SV-II-list-negativeInteger-maxLength-1-3 tokoe:invalid" result="pass"/><test-case name="18345NISTXML-SV-II-list-negativeInteger-maxLength-1-4 tokoe:invalid" result="pass"/><test-case name="18346NISTXML-SV-II-list-negativeInteger-maxLength-1-5 tokoe:invalid" result="pass"/><test-case name="18347NISTSchema-SV-II-list-negativeInteger-maxLength-2 tokoe:valid" result="pass"/><test-case name="18348NISTXML-SV-II-list-negativeInteger-maxLength-2-1 tokoe:invalid" result="pass"/><test-case name="18349NISTXML-SV-II-list-negativeInteger-maxLength-2-2 tokoe:invalid" result="pass"/><test-case name="18350NISTXML-SV-II-list-negativeInteger-maxLength-2-3 tokoe:invalid" result="pass"/><test-case name="18351NISTXML-SV-II-list-negativeInteger-maxLength-2-4 tokoe:invalid" result="pass"/><test-case name="18352NISTXML-SV-II-list-negativeInteger-maxLength-2-5 tokoe:invalid" result="pass"/><test-case name="18353NISTSchema-SV-II-list-negativeInteger-maxLength-3 tokoe:valid" result="pass"/><test-case name="18354NISTXML-SV-II-list-negativeInteger-maxLength-3-1 tokoe:invalid" result="pass"/><test-case name="18355NISTXML-SV-II-list-negativeInteger-maxLength-3-2 tokoe:invalid" result="pass"/><test-case name="18356NISTXML-SV-II-list-negativeInteger-maxLength-3-3 tokoe:invalid" result="pass"/><test-case name="18357NISTXML-SV-II-list-negativeInteger-maxLength-3-4 tokoe:invalid" result="pass"/><test-case name="18358NISTXML-SV-II-list-negativeInteger-maxLength-3-5 tokoe:invalid" result="pass"/><test-case name="18359NISTSchema-SV-II-list-negativeInteger-maxLength-4 tokoe:valid" result="pass"/><test-case name="18360NISTXML-SV-II-list-negativeInteger-maxLength-4-1 tokoe:invalid" result="pass"/><test-case name="18361NISTXML-SV-II-list-negativeInteger-maxLength-4-2 tokoe:invalid" result="pass"/><test-case name="18362NISTXML-SV-II-list-negativeInteger-maxLength-4-3 tokoe:invalid" result="pass"/><test-case name="18363NISTXML-SV-II-list-negativeInteger-maxLength-4-4 tokoe:invalid" result="pass"/><test-case name="18364NISTXML-SV-II-list-negativeInteger-maxLength-4-5 tokoe:invalid" result="pass"/><test-case name="18365NISTSchema-SV-II-list-negativeInteger-maxLength-5 tokoe:valid" result="pass"/><test-case name="18366NISTXML-SV-II-list-negativeInteger-maxLength-5-1 tokoe:invalid" result="pass"/><test-case name="18367NISTXML-SV-II-list-negativeInteger-maxLength-5-2 tokoe:invalid" result="pass"/><test-case name="18368NISTXML-SV-II-list-negativeInteger-maxLength-5-3 tokoe:invalid" result="pass"/><test-case name="18369NISTXML-SV-II-list-negativeInteger-maxLength-5-4 tokoe:invalid" result="pass"/><test-case name="18370NISTXML-SV-II-list-negativeInteger-maxLength-5-5 tokoe:invalid" result="pass"/><test-case name="18371NISTSchema-SV-II-list-negativeInteger-minLength-1 tokoe:valid" result="pass"/><test-case name="18372NISTXML-SV-II-list-negativeInteger-minLength-1-1 tokoe:invalid" result="pass"/><test-case name="18373NISTXML-SV-II-list-negativeInteger-minLength-1-2 tokoe:invalid" result="pass"/><test-case name="18374NISTXML-SV-II-list-negativeInteger-minLength-1-3 tokoe:invalid" result="pass"/><test-case name="18375NISTXML-SV-II-list-negativeInteger-minLength-1-4 tokoe:invalid" result="pass"/><test-case name="18376NISTXML-SV-II-list-negativeInteger-minLength-1-5 tokoe:invalid" result="pass"/><test-case name="18377NISTSchema-SV-II-list-negativeInteger-minLength-2 tokoe:valid" result="pass"/><test-case name="18378NISTXML-SV-II-list-negativeInteger-minLength-2-1 tokoe:invalid" result="pass"/><test-case name="18379NISTXML-SV-II-list-negativeInteger-minLength-2-2 tokoe:invalid" result="pass"/><test-case name="18380NISTXML-SV-II-list-negativeInteger-minLength-2-3 tokoe:invalid" result="pass"/><test-case name="18381NISTXML-SV-II-list-negativeInteger-minLength-2-4 tokoe:invalid" result="pass"/><test-case name="18382NISTXML-SV-II-list-negativeInteger-minLength-2-5 tokoe:invalid" result="pass"/><test-case name="18383NISTSchema-SV-II-list-negativeInteger-minLength-3 tokoe:valid" result="pass"/><test-case name="18384NISTXML-SV-II-list-negativeInteger-minLength-3-1 tokoe:invalid" result="pass"/><test-case name="18385NISTXML-SV-II-list-negativeInteger-minLength-3-2 tokoe:invalid" result="pass"/><test-case name="18386NISTXML-SV-II-list-negativeInteger-minLength-3-3 tokoe:invalid" result="pass"/><test-case name="18387NISTXML-SV-II-list-negativeInteger-minLength-3-4 tokoe:invalid" result="pass"/><test-case name="18388NISTXML-SV-II-list-negativeInteger-minLength-3-5 tokoe:invalid" result="pass"/><test-case name="18389NISTSchema-SV-II-list-negativeInteger-minLength-4 tokoe:valid" result="pass"/><test-case name="18390NISTXML-SV-II-list-negativeInteger-minLength-4-1 tokoe:invalid" result="pass"/><test-case name="18391NISTXML-SV-II-list-negativeInteger-minLength-4-2 tokoe:invalid" result="pass"/><test-case name="18392NISTXML-SV-II-list-negativeInteger-minLength-4-3 tokoe:invalid" result="pass"/><test-case name="18393NISTXML-SV-II-list-negativeInteger-minLength-4-4 tokoe:invalid" result="pass"/><test-case name="18394NISTXML-SV-II-list-negativeInteger-minLength-4-5 tokoe:invalid" result="pass"/><test-case name="18395NISTSchema-SV-II-list-negativeInteger-minLength-5 tokoe:valid" result="pass"/><test-case name="18396NISTXML-SV-II-list-negativeInteger-minLength-5-1 tokoe:invalid" result="pass"/><test-case name="18397NISTXML-SV-II-list-negativeInteger-minLength-5-2 tokoe:invalid" result="pass"/><test-case name="18398NISTXML-SV-II-list-negativeInteger-minLength-5-3 tokoe:invalid" result="pass"/><test-case name="18399NISTXML-SV-II-list-negativeInteger-minLength-5-4 tokoe:invalid" result="pass"/><test-case name="18400NISTXML-SV-II-list-negativeInteger-minLength-5-5 tokoe:invalid" result="pass"/><test-case name="18401NISTSchema-SV-II-list-negativeInteger-length-1 tokoe:valid" result="pass"/><test-case name="18402NISTXML-SV-II-list-negativeInteger-length-1-1 tokoe:invalid" result="pass"/><test-case name="18403NISTXML-SV-II-list-negativeInteger-length-1-2 tokoe:invalid" result="pass"/><test-case name="18404NISTXML-SV-II-list-negativeInteger-length-1-3 tokoe:invalid" result="pass"/><test-case name="18405NISTXML-SV-II-list-negativeInteger-length-1-4 tokoe:invalid" result="pass"/><test-case name="18406NISTXML-SV-II-list-negativeInteger-length-1-5 tokoe:invalid" result="pass"/><test-case name="18407NISTSchema-SV-II-list-negativeInteger-length-2 tokoe:valid" result="pass"/><test-case name="18408NISTXML-SV-II-list-negativeInteger-length-2-1 tokoe:invalid" result="pass"/><test-case name="18409NISTXML-SV-II-list-negativeInteger-length-2-2 tokoe:invalid" result="pass"/><test-case name="18410NISTXML-SV-II-list-negativeInteger-length-2-3 tokoe:invalid" result="pass"/><test-case name="18411NISTXML-SV-II-list-negativeInteger-length-2-4 tokoe:invalid" result="pass"/><test-case name="18412NISTXML-SV-II-list-negativeInteger-length-2-5 tokoe:invalid" result="pass"/><test-case name="18413NISTSchema-SV-II-list-negativeInteger-length-3 tokoe:valid" result="pass"/><test-case name="18414NISTXML-SV-II-list-negativeInteger-length-3-1 tokoe:invalid" result="pass"/><test-case name="18415NISTXML-SV-II-list-negativeInteger-length-3-2 tokoe:invalid" result="pass"/><test-case name="18416NISTXML-SV-II-list-negativeInteger-length-3-3 tokoe:invalid" result="pass"/><test-case name="18417NISTXML-SV-II-list-negativeInteger-length-3-4 tokoe:invalid" result="pass"/><test-case name="18418NISTXML-SV-II-list-negativeInteger-length-3-5 tokoe:invalid" result="pass"/><test-case name="18419NISTSchema-SV-II-list-negativeInteger-length-4 tokoe:valid" result="pass"/><test-case name="18420NISTXML-SV-II-list-negativeInteger-length-4-1 tokoe:invalid" result="pass"/><test-case name="18421NISTXML-SV-II-list-negativeInteger-length-4-2 tokoe:invalid" result="pass"/><test-case name="18422NISTXML-SV-II-list-negativeInteger-length-4-3 tokoe:invalid" result="pass"/><test-case name="18423NISTXML-SV-II-list-negativeInteger-length-4-4 tokoe:invalid" result="pass"/><test-case name="18424NISTXML-SV-II-list-negativeInteger-length-4-5 tokoe:invalid" result="pass"/><test-case name="18425NISTSchema-SV-II-list-negativeInteger-length-5 tokoe:valid" result="pass"/><test-case name="18426NISTXML-SV-II-list-negativeInteger-length-5-1 tokoe:invalid" result="pass"/><test-case name="18427NISTXML-SV-II-list-negativeInteger-length-5-2 tokoe:invalid" result="pass"/><test-case name="18428NISTXML-SV-II-list-negativeInteger-length-5-3 tokoe:invalid" result="pass"/><test-case name="18429NISTXML-SV-II-list-negativeInteger-length-5-4 tokoe:invalid" result="pass"/><test-case name="18430NISTXML-SV-II-list-negativeInteger-length-5-5 tokoe:invalid" result="pass"/><test-case name="18431NISTSchema-SV-II-list-negativeInteger-pattern-1 tokoe:valid" result="pass"/><test-case name="18432NISTXML-SV-II-list-negativeInteger-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="18433NISTXML-SV-II-list-negativeInteger-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="18434NISTXML-SV-II-list-negativeInteger-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="18435NISTXML-SV-II-list-negativeInteger-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="18436NISTXML-SV-II-list-negativeInteger-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="18437NISTSchema-SV-II-list-negativeInteger-pattern-2 tokoe:valid" result="pass"/><test-case name="18438NISTXML-SV-II-list-negativeInteger-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="18439NISTXML-SV-II-list-negativeInteger-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="18440NISTXML-SV-II-list-negativeInteger-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="18441NISTXML-SV-II-list-negativeInteger-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="18442NISTXML-SV-II-list-negativeInteger-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="18443NISTSchema-SV-II-list-negativeInteger-pattern-3 tokoe:valid" result="pass"/><test-case name="18444NISTXML-SV-II-list-negativeInteger-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="18445NISTXML-SV-II-list-negativeInteger-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="18446NISTXML-SV-II-list-negativeInteger-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="18447NISTXML-SV-II-list-negativeInteger-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="18448NISTXML-SV-II-list-negativeInteger-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="18449NISTSchema-SV-II-list-negativeInteger-pattern-4 tokoe:valid" result="pass"/><test-case name="18450NISTXML-SV-II-list-negativeInteger-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="18451NISTXML-SV-II-list-negativeInteger-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="18452NISTXML-SV-II-list-negativeInteger-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="18453NISTXML-SV-II-list-negativeInteger-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="18454NISTXML-SV-II-list-negativeInteger-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="18455NISTSchema-SV-II-list-negativeInteger-pattern-5 tokoe:valid" result="pass"/><test-case name="18456NISTXML-SV-II-list-negativeInteger-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="18457NISTXML-SV-II-list-negativeInteger-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="18458NISTXML-SV-II-list-negativeInteger-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="18459NISTXML-SV-II-list-negativeInteger-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="18460NISTXML-SV-II-list-negativeInteger-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="18461NISTSchema-SV-II-list-negativeInteger-enumeration-1 tokoe:valid" result="pass"/><test-case name="18462NISTXML-SV-II-list-negativeInteger-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="18463NISTXML-SV-II-list-negativeInteger-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="18464NISTXML-SV-II-list-negativeInteger-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="18465NISTXML-SV-II-list-negativeInteger-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="18466NISTXML-SV-II-list-negativeInteger-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="18467NISTSchema-SV-II-list-negativeInteger-enumeration-2 tokoe:valid" result="pass"/><test-case name="18468NISTXML-SV-II-list-negativeInteger-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="18469NISTXML-SV-II-list-negativeInteger-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="18470NISTXML-SV-II-list-negativeInteger-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="18471NISTXML-SV-II-list-negativeInteger-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="18472NISTXML-SV-II-list-negativeInteger-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="18473NISTSchema-SV-II-list-negativeInteger-enumeration-3 tokoe:valid" result="pass"/><test-case name="18474NISTXML-SV-II-list-negativeInteger-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="18475NISTXML-SV-II-list-negativeInteger-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="18476NISTXML-SV-II-list-negativeInteger-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="18477NISTXML-SV-II-list-negativeInteger-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="18478NISTXML-SV-II-list-negativeInteger-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="18479NISTSchema-SV-II-list-negativeInteger-enumeration-4 tokoe:valid" result="pass"/><test-case name="18480NISTXML-SV-II-list-negativeInteger-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="18481NISTXML-SV-II-list-negativeInteger-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="18482NISTXML-SV-II-list-negativeInteger-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="18483NISTXML-SV-II-list-negativeInteger-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="18484NISTXML-SV-II-list-negativeInteger-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="18485NISTSchema-SV-II-list-negativeInteger-enumeration-5 tokoe:valid" result="pass"/><test-case name="18486NISTXML-SV-II-list-negativeInteger-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="18487NISTXML-SV-II-list-negativeInteger-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="18488NISTXML-SV-II-list-negativeInteger-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="18489NISTXML-SV-II-list-negativeInteger-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="18490NISTXML-SV-II-list-negativeInteger-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="18491NISTSchema-SV-II-list-long-maxLength-1 tokoe:valid" result="pass"/><test-case name="18492NISTXML-SV-II-list-long-maxLength-1-1 tokoe:invalid" result="pass"/><test-case name="18493NISTXML-SV-II-list-long-maxLength-1-2 tokoe:invalid" result="pass"/><test-case name="18494NISTXML-SV-II-list-long-maxLength-1-3 tokoe:invalid" result="pass"/><test-case name="18495NISTXML-SV-II-list-long-maxLength-1-4 tokoe:invalid" result="pass"/><test-case name="18496NISTXML-SV-II-list-long-maxLength-1-5 tokoe:invalid" result="pass"/><test-case name="18497NISTSchema-SV-II-list-long-maxLength-2 tokoe:valid" result="pass"/><test-case name="18498NISTXML-SV-II-list-long-maxLength-2-1 tokoe:invalid" result="pass"/><test-case name="18499NISTXML-SV-II-list-long-maxLength-2-2 tokoe:invalid" result="pass"/><test-case name="18500NISTXML-SV-II-list-long-maxLength-2-3 tokoe:invalid" result="pass"/><test-case name="18501NISTXML-SV-II-list-long-maxLength-2-4 tokoe:invalid" result="pass"/><test-case name="18502NISTXML-SV-II-list-long-maxLength-2-5 tokoe:invalid" result="pass"/><test-case name="18503NISTSchema-SV-II-list-long-maxLength-3 tokoe:valid" result="pass"/><test-case name="18504NISTXML-SV-II-list-long-maxLength-3-1 tokoe:invalid" result="pass"/><test-case name="18505NISTXML-SV-II-list-long-maxLength-3-2 tokoe:invalid" result="pass"/><test-case name="18506NISTXML-SV-II-list-long-maxLength-3-3 tokoe:invalid" result="pass"/><test-case name="18507NISTXML-SV-II-list-long-maxLength-3-4 tokoe:invalid" result="pass"/><test-case name="18508NISTXML-SV-II-list-long-maxLength-3-5 tokoe:invalid" result="pass"/><test-case name="18509NISTSchema-SV-II-list-long-maxLength-4 tokoe:valid" result="pass"/><test-case name="18510NISTXML-SV-II-list-long-maxLength-4-1 tokoe:invalid" result="pass"/><test-case name="18511NISTXML-SV-II-list-long-maxLength-4-2 tokoe:invalid" result="pass"/><test-case name="18512NISTXML-SV-II-list-long-maxLength-4-3 tokoe:invalid" result="pass"/><test-case name="18513NISTXML-SV-II-list-long-maxLength-4-4 tokoe:invalid" result="pass"/><test-case name="18514NISTXML-SV-II-list-long-maxLength-4-5 tokoe:invalid" result="pass"/><test-case name="18515NISTSchema-SV-II-list-long-maxLength-5 tokoe:valid" result="pass"/><test-case name="18516NISTXML-SV-II-list-long-maxLength-5-1 tokoe:invalid" result="pass"/><test-case name="18517NISTXML-SV-II-list-long-maxLength-5-2 tokoe:invalid" result="pass"/><test-case name="18518NISTXML-SV-II-list-long-maxLength-5-3 tokoe:invalid" result="pass"/><test-case name="18519NISTXML-SV-II-list-long-maxLength-5-4 tokoe:invalid" result="pass"/><test-case name="18520NISTXML-SV-II-list-long-maxLength-5-5 tokoe:invalid" result="pass"/><test-case name="18521NISTSchema-SV-II-list-long-minLength-1 tokoe:valid" result="pass"/><test-case name="18522NISTXML-SV-II-list-long-minLength-1-1 tokoe:invalid" result="pass"/><test-case name="18523NISTXML-SV-II-list-long-minLength-1-2 tokoe:invalid" result="pass"/><test-case name="18524NISTXML-SV-II-list-long-minLength-1-3 tokoe:invalid" result="pass"/><test-case name="18525NISTXML-SV-II-list-long-minLength-1-4 tokoe:invalid" result="pass"/><test-case name="18526NISTXML-SV-II-list-long-minLength-1-5 tokoe:invalid" result="pass"/><test-case name="18527NISTSchema-SV-II-list-long-minLength-2 tokoe:valid" result="pass"/><test-case name="18528NISTXML-SV-II-list-long-minLength-2-1 tokoe:invalid" result="pass"/><test-case name="18529NISTXML-SV-II-list-long-minLength-2-2 tokoe:invalid" result="pass"/><test-case name="18530NISTXML-SV-II-list-long-minLength-2-3 tokoe:invalid" result="pass"/><test-case name="18531NISTXML-SV-II-list-long-minLength-2-4 tokoe:invalid" result="pass"/><test-case name="18532NISTXML-SV-II-list-long-minLength-2-5 tokoe:invalid" result="pass"/><test-case name="18533NISTSchema-SV-II-list-long-minLength-3 tokoe:valid" result="pass"/><test-case name="18534NISTXML-SV-II-list-long-minLength-3-1 tokoe:invalid" result="pass"/><test-case name="18535NISTXML-SV-II-list-long-minLength-3-2 tokoe:invalid" result="pass"/><test-case name="18536NISTXML-SV-II-list-long-minLength-3-3 tokoe:invalid" result="pass"/><test-case name="18537NISTXML-SV-II-list-long-minLength-3-4 tokoe:invalid" result="pass"/><test-case name="18538NISTXML-SV-II-list-long-minLength-3-5 tokoe:invalid" result="pass"/><test-case name="18539NISTSchema-SV-II-list-long-minLength-4 tokoe:valid" result="pass"/><test-case name="18540NISTXML-SV-II-list-long-minLength-4-1 tokoe:invalid" result="pass"/><test-case name="18541NISTXML-SV-II-list-long-minLength-4-2 tokoe:invalid" result="pass"/><test-case name="18542NISTXML-SV-II-list-long-minLength-4-3 tokoe:invalid" result="pass"/><test-case name="18543NISTXML-SV-II-list-long-minLength-4-4 tokoe:invalid" result="pass"/><test-case name="18544NISTXML-SV-II-list-long-minLength-4-5 tokoe:invalid" result="pass"/><test-case name="18545NISTSchema-SV-II-list-long-minLength-5 tokoe:valid" result="pass"/><test-case name="18546NISTXML-SV-II-list-long-minLength-5-1 tokoe:invalid" result="pass"/><test-case name="18547NISTXML-SV-II-list-long-minLength-5-2 tokoe:invalid" result="pass"/><test-case name="18548NISTXML-SV-II-list-long-minLength-5-3 tokoe:invalid" result="pass"/><test-case name="18549NISTXML-SV-II-list-long-minLength-5-4 tokoe:invalid" result="pass"/><test-case name="18550NISTXML-SV-II-list-long-minLength-5-5 tokoe:invalid" result="pass"/><test-case name="18551NISTSchema-SV-II-list-long-length-1 tokoe:valid" result="pass"/><test-case name="18552NISTXML-SV-II-list-long-length-1-1 tokoe:invalid" result="pass"/><test-case name="18553NISTXML-SV-II-list-long-length-1-2 tokoe:invalid" result="pass"/><test-case name="18554NISTXML-SV-II-list-long-length-1-3 tokoe:invalid" result="pass"/><test-case name="18555NISTXML-SV-II-list-long-length-1-4 tokoe:invalid" result="pass"/><test-case name="18556NISTXML-SV-II-list-long-length-1-5 tokoe:invalid" result="pass"/><test-case name="18557NISTSchema-SV-II-list-long-length-2 tokoe:valid" result="pass"/><test-case name="18558NISTXML-SV-II-list-long-length-2-1 tokoe:invalid" result="pass"/><test-case name="18559NISTXML-SV-II-list-long-length-2-2 tokoe:invalid" result="pass"/><test-case name="18560NISTXML-SV-II-list-long-length-2-3 tokoe:invalid" result="pass"/><test-case name="18561NISTXML-SV-II-list-long-length-2-4 tokoe:invalid" result="pass"/><test-case name="18562NISTXML-SV-II-list-long-length-2-5 tokoe:invalid" result="pass"/><test-case name="18563NISTSchema-SV-II-list-long-length-3 tokoe:valid" result="pass"/><test-case name="18564NISTXML-SV-II-list-long-length-3-1 tokoe:invalid" result="pass"/><test-case name="18565NISTXML-SV-II-list-long-length-3-2 tokoe:invalid" result="pass"/><test-case name="18566NISTXML-SV-II-list-long-length-3-3 tokoe:invalid" result="pass"/><test-case name="18567NISTXML-SV-II-list-long-length-3-4 tokoe:invalid" result="pass"/><test-case name="18568NISTXML-SV-II-list-long-length-3-5 tokoe:invalid" result="pass"/><test-case name="18569NISTSchema-SV-II-list-long-length-4 tokoe:valid" result="pass"/><test-case name="18570NISTXML-SV-II-list-long-length-4-1 tokoe:invalid" result="pass"/><test-case name="18571NISTXML-SV-II-list-long-length-4-2 tokoe:invalid" result="pass"/><test-case name="18572NISTXML-SV-II-list-long-length-4-3 tokoe:invalid" result="pass"/><test-case name="18573NISTXML-SV-II-list-long-length-4-4 tokoe:invalid" result="pass"/><test-case name="18574NISTXML-SV-II-list-long-length-4-5 tokoe:invalid" result="pass"/><test-case name="18575NISTSchema-SV-II-list-long-length-5 tokoe:valid" result="pass"/><test-case name="18576NISTXML-SV-II-list-long-length-5-1 tokoe:invalid" result="pass"/><test-case name="18577NISTXML-SV-II-list-long-length-5-2 tokoe:invalid" result="pass"/><test-case name="18578NISTXML-SV-II-list-long-length-5-3 tokoe:invalid" result="pass"/><test-case name="18579NISTXML-SV-II-list-long-length-5-4 tokoe:invalid" result="pass"/><test-case name="18580NISTXML-SV-II-list-long-length-5-5 tokoe:invalid" result="pass"/><test-case name="18581NISTSchema-SV-II-list-long-pattern-1 tokoe:valid" result="pass"/><test-case name="18582NISTXML-SV-II-list-long-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="18583NISTXML-SV-II-list-long-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="18584NISTXML-SV-II-list-long-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="18585NISTXML-SV-II-list-long-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="18586NISTXML-SV-II-list-long-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="18587NISTSchema-SV-II-list-long-pattern-2 tokoe:valid" result="pass"/><test-case name="18588NISTXML-SV-II-list-long-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="18589NISTXML-SV-II-list-long-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="18590NISTXML-SV-II-list-long-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="18591NISTXML-SV-II-list-long-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="18592NISTXML-SV-II-list-long-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="18593NISTSchema-SV-II-list-long-pattern-3 tokoe:valid" result="pass"/><test-case name="18594NISTXML-SV-II-list-long-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="18595NISTXML-SV-II-list-long-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="18596NISTXML-SV-II-list-long-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="18597NISTXML-SV-II-list-long-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="18598NISTXML-SV-II-list-long-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="18599NISTSchema-SV-II-list-long-pattern-4 tokoe:valid" result="pass"/><test-case name="18600NISTXML-SV-II-list-long-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="18601NISTXML-SV-II-list-long-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="18602NISTXML-SV-II-list-long-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="18603NISTXML-SV-II-list-long-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="18604NISTXML-SV-II-list-long-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="18605NISTSchema-SV-II-list-long-pattern-5 tokoe:valid" result="pass"/><test-case name="18606NISTXML-SV-II-list-long-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="18607NISTXML-SV-II-list-long-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="18608NISTXML-SV-II-list-long-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="18609NISTXML-SV-II-list-long-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="18610NISTXML-SV-II-list-long-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="18611NISTSchema-SV-II-list-long-enumeration-1 tokoe:valid" result="pass"/><test-case name="18612NISTXML-SV-II-list-long-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="18613NISTXML-SV-II-list-long-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="18614NISTXML-SV-II-list-long-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="18615NISTXML-SV-II-list-long-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="18616NISTXML-SV-II-list-long-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="18617NISTSchema-SV-II-list-long-enumeration-2 tokoe:valid" result="pass"/><test-case name="18618NISTXML-SV-II-list-long-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="18619NISTXML-SV-II-list-long-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="18620NISTXML-SV-II-list-long-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="18621NISTXML-SV-II-list-long-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="18622NISTXML-SV-II-list-long-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="18623NISTSchema-SV-II-list-long-enumeration-3 tokoe:valid" result="pass"/><test-case name="18624NISTXML-SV-II-list-long-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="18625NISTXML-SV-II-list-long-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="18626NISTXML-SV-II-list-long-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="18627NISTXML-SV-II-list-long-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="18628NISTXML-SV-II-list-long-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="18629NISTSchema-SV-II-list-long-enumeration-4 tokoe:valid" result="pass"/><test-case name="18630NISTXML-SV-II-list-long-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="18631NISTXML-SV-II-list-long-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="18632NISTXML-SV-II-list-long-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="18633NISTXML-SV-II-list-long-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="18634NISTXML-SV-II-list-long-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="18635NISTSchema-SV-II-list-long-enumeration-5 tokoe:valid" result="pass"/><test-case name="18636NISTXML-SV-II-list-long-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="18637NISTXML-SV-II-list-long-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="18638NISTXML-SV-II-list-long-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="18639NISTXML-SV-II-list-long-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="18640NISTXML-SV-II-list-long-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="18641NISTSchema-SV-II-list-int-maxLength-1 tokoe:valid" result="pass"/><test-case name="18642NISTXML-SV-II-list-int-maxLength-1-1 tokoe:invalid" result="pass"/><test-case name="18643NISTXML-SV-II-list-int-maxLength-1-2 tokoe:invalid" result="pass"/><test-case name="18644NISTXML-SV-II-list-int-maxLength-1-3 tokoe:invalid" result="pass"/><test-case name="18645NISTXML-SV-II-list-int-maxLength-1-4 tokoe:invalid" result="pass"/><test-case name="18646NISTXML-SV-II-list-int-maxLength-1-5 tokoe:invalid" result="pass"/><test-case name="18647NISTSchema-SV-II-list-int-maxLength-2 tokoe:valid" result="pass"/><test-case name="18648NISTXML-SV-II-list-int-maxLength-2-1 tokoe:invalid" result="pass"/><test-case name="18649NISTXML-SV-II-list-int-maxLength-2-2 tokoe:invalid" result="pass"/><test-case name="18650NISTXML-SV-II-list-int-maxLength-2-3 tokoe:invalid" result="pass"/><test-case name="18651NISTXML-SV-II-list-int-maxLength-2-4 tokoe:invalid" result="pass"/><test-case name="18652NISTXML-SV-II-list-int-maxLength-2-5 tokoe:invalid" result="pass"/><test-case name="18653NISTSchema-SV-II-list-int-maxLength-3 tokoe:valid" result="pass"/><test-case name="18654NISTXML-SV-II-list-int-maxLength-3-1 tokoe:invalid" result="pass"/><test-case name="18655NISTXML-SV-II-list-int-maxLength-3-2 tokoe:invalid" result="pass"/><test-case name="18656NISTXML-SV-II-list-int-maxLength-3-3 tokoe:invalid" result="pass"/><test-case name="18657NISTXML-SV-II-list-int-maxLength-3-4 tokoe:invalid" result="pass"/><test-case name="18658NISTXML-SV-II-list-int-maxLength-3-5 tokoe:invalid" result="pass"/><test-case name="18659NISTSchema-SV-II-list-int-maxLength-4 tokoe:valid" result="pass"/><test-case name="18660NISTXML-SV-II-list-int-maxLength-4-1 tokoe:invalid" result="pass"/><test-case name="18661NISTXML-SV-II-list-int-maxLength-4-2 tokoe:invalid" result="pass"/><test-case name="18662NISTXML-SV-II-list-int-maxLength-4-3 tokoe:invalid" result="pass"/><test-case name="18663NISTXML-SV-II-list-int-maxLength-4-4 tokoe:invalid" result="pass"/><test-case name="18664NISTXML-SV-II-list-int-maxLength-4-5 tokoe:invalid" result="pass"/><test-case name="18665NISTSchema-SV-II-list-int-maxLength-5 tokoe:valid" result="pass"/><test-case name="18666NISTXML-SV-II-list-int-maxLength-5-1 tokoe:invalid" result="pass"/><test-case name="18667NISTXML-SV-II-list-int-maxLength-5-2 tokoe:invalid" result="pass"/><test-case name="18668NISTXML-SV-II-list-int-maxLength-5-3 tokoe:invalid" result="pass"/><test-case name="18669NISTXML-SV-II-list-int-maxLength-5-4 tokoe:invalid" result="pass"/><test-case name="18670NISTXML-SV-II-list-int-maxLength-5-5 tokoe:invalid" result="pass"/><test-case name="18671NISTSchema-SV-II-list-int-minLength-1 tokoe:valid" result="pass"/><test-case name="18672NISTXML-SV-II-list-int-minLength-1-1 tokoe:invalid" result="pass"/><test-case name="18673NISTXML-SV-II-list-int-minLength-1-2 tokoe:invalid" result="pass"/><test-case name="18674NISTXML-SV-II-list-int-minLength-1-3 tokoe:invalid" result="pass"/><test-case name="18675NISTXML-SV-II-list-int-minLength-1-4 tokoe:invalid" result="pass"/><test-case name="18676NISTXML-SV-II-list-int-minLength-1-5 tokoe:invalid" result="pass"/><test-case name="18677NISTSchema-SV-II-list-int-minLength-2 tokoe:valid" result="pass"/><test-case name="18678NISTXML-SV-II-list-int-minLength-2-1 tokoe:invalid" result="pass"/><test-case name="18679NISTXML-SV-II-list-int-minLength-2-2 tokoe:invalid" result="pass"/><test-case name="18680NISTXML-SV-II-list-int-minLength-2-3 tokoe:invalid" result="pass"/><test-case name="18681NISTXML-SV-II-list-int-minLength-2-4 tokoe:invalid" result="pass"/><test-case name="18682NISTXML-SV-II-list-int-minLength-2-5 tokoe:invalid" result="pass"/><test-case name="18683NISTSchema-SV-II-list-int-minLength-3 tokoe:valid" result="pass"/><test-case name="18684NISTXML-SV-II-list-int-minLength-3-1 tokoe:invalid" result="pass"/><test-case name="18685NISTXML-SV-II-list-int-minLength-3-2 tokoe:invalid" result="pass"/><test-case name="18686NISTXML-SV-II-list-int-minLength-3-3 tokoe:invalid" result="pass"/><test-case name="18687NISTXML-SV-II-list-int-minLength-3-4 tokoe:invalid" result="pass"/><test-case name="18688NISTXML-SV-II-list-int-minLength-3-5 tokoe:invalid" result="pass"/><test-case name="18689NISTSchema-SV-II-list-int-minLength-4 tokoe:valid" result="pass"/><test-case name="18690NISTXML-SV-II-list-int-minLength-4-1 tokoe:invalid" result="pass"/><test-case name="18691NISTXML-SV-II-list-int-minLength-4-2 tokoe:invalid" result="pass"/><test-case name="18692NISTXML-SV-II-list-int-minLength-4-3 tokoe:invalid" result="pass"/><test-case name="18693NISTXML-SV-II-list-int-minLength-4-4 tokoe:invalid" result="pass"/><test-case name="18694NISTXML-SV-II-list-int-minLength-4-5 tokoe:invalid" result="pass"/><test-case name="18695NISTSchema-SV-II-list-int-minLength-5 tokoe:valid" result="pass"/><test-case name="18696NISTXML-SV-II-list-int-minLength-5-1 tokoe:invalid" result="pass"/><test-case name="18697NISTXML-SV-II-list-int-minLength-5-2 tokoe:invalid" result="pass"/><test-case name="18698NISTXML-SV-II-list-int-minLength-5-3 tokoe:invalid" result="pass"/><test-case name="18699NISTXML-SV-II-list-int-minLength-5-4 tokoe:invalid" result="pass"/><test-case name="18700NISTXML-SV-II-list-int-minLength-5-5 tokoe:invalid" result="pass"/><test-case name="18701NISTSchema-SV-II-list-int-length-1 tokoe:valid" result="pass"/><test-case name="18702NISTXML-SV-II-list-int-length-1-1 tokoe:invalid" result="pass"/><test-case name="18703NISTXML-SV-II-list-int-length-1-2 tokoe:invalid" result="pass"/><test-case name="18704NISTXML-SV-II-list-int-length-1-3 tokoe:invalid" result="pass"/><test-case name="18705NISTXML-SV-II-list-int-length-1-4 tokoe:invalid" result="pass"/><test-case name="18706NISTXML-SV-II-list-int-length-1-5 tokoe:invalid" result="pass"/><test-case name="18707NISTSchema-SV-II-list-int-length-2 tokoe:valid" result="pass"/><test-case name="18708NISTXML-SV-II-list-int-length-2-1 tokoe:invalid" result="pass"/><test-case name="18709NISTXML-SV-II-list-int-length-2-2 tokoe:invalid" result="pass"/><test-case name="18710NISTXML-SV-II-list-int-length-2-3 tokoe:invalid" result="pass"/><test-case name="18711NISTXML-SV-II-list-int-length-2-4 tokoe:invalid" result="pass"/><test-case name="18712NISTXML-SV-II-list-int-length-2-5 tokoe:invalid" result="pass"/><test-case name="18713NISTSchema-SV-II-list-int-length-3 tokoe:valid" result="pass"/><test-case name="18714NISTXML-SV-II-list-int-length-3-1 tokoe:invalid" result="pass"/><test-case name="18715NISTXML-SV-II-list-int-length-3-2 tokoe:invalid" result="pass"/><test-case name="18716NISTXML-SV-II-list-int-length-3-3 tokoe:invalid" result="pass"/><test-case name="18717NISTXML-SV-II-list-int-length-3-4 tokoe:invalid" result="pass"/><test-case name="18718NISTXML-SV-II-list-int-length-3-5 tokoe:invalid" result="pass"/><test-case name="18719NISTSchema-SV-II-list-int-length-4 tokoe:valid" result="pass"/><test-case name="18720NISTXML-SV-II-list-int-length-4-1 tokoe:invalid" result="pass"/><test-case name="18721NISTXML-SV-II-list-int-length-4-2 tokoe:invalid" result="pass"/><test-case name="18722NISTXML-SV-II-list-int-length-4-3 tokoe:invalid" result="pass"/><test-case name="18723NISTXML-SV-II-list-int-length-4-4 tokoe:invalid" result="pass"/><test-case name="18724NISTXML-SV-II-list-int-length-4-5 tokoe:invalid" result="pass"/><test-case name="18725NISTSchema-SV-II-list-int-length-5 tokoe:valid" result="pass"/><test-case name="18726NISTXML-SV-II-list-int-length-5-1 tokoe:invalid" result="pass"/><test-case name="18727NISTXML-SV-II-list-int-length-5-2 tokoe:invalid" result="pass"/><test-case name="18728NISTXML-SV-II-list-int-length-5-3 tokoe:invalid" result="pass"/><test-case name="18729NISTXML-SV-II-list-int-length-5-4 tokoe:invalid" result="pass"/><test-case name="18730NISTXML-SV-II-list-int-length-5-5 tokoe:invalid" result="pass"/><test-case name="18731NISTSchema-SV-II-list-int-pattern-1 tokoe:valid" result="pass"/><test-case name="18732NISTXML-SV-II-list-int-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="18733NISTXML-SV-II-list-int-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="18734NISTXML-SV-II-list-int-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="18735NISTXML-SV-II-list-int-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="18736NISTXML-SV-II-list-int-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="18737NISTSchema-SV-II-list-int-pattern-2 tokoe:valid" result="pass"/><test-case name="18738NISTXML-SV-II-list-int-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="18739NISTXML-SV-II-list-int-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="18740NISTXML-SV-II-list-int-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="18741NISTXML-SV-II-list-int-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="18742NISTXML-SV-II-list-int-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="18743NISTSchema-SV-II-list-int-pattern-3 tokoe:valid" result="pass"/><test-case name="18744NISTXML-SV-II-list-int-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="18745NISTXML-SV-II-list-int-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="18746NISTXML-SV-II-list-int-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="18747NISTXML-SV-II-list-int-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="18748NISTXML-SV-II-list-int-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="18749NISTSchema-SV-II-list-int-pattern-4 tokoe:valid" result="pass"/><test-case name="18750NISTXML-SV-II-list-int-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="18751NISTXML-SV-II-list-int-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="18752NISTXML-SV-II-list-int-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="18753NISTXML-SV-II-list-int-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="18754NISTXML-SV-II-list-int-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="18755NISTSchema-SV-II-list-int-pattern-5 tokoe:valid" result="pass"/><test-case name="18756NISTXML-SV-II-list-int-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="18757NISTXML-SV-II-list-int-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="18758NISTXML-SV-II-list-int-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="18759NISTXML-SV-II-list-int-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="18760NISTXML-SV-II-list-int-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="18761NISTSchema-SV-II-list-int-enumeration-1 tokoe:valid" result="pass"/><test-case name="18762NISTXML-SV-II-list-int-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="18763NISTXML-SV-II-list-int-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="18764NISTXML-SV-II-list-int-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="18765NISTXML-SV-II-list-int-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="18766NISTXML-SV-II-list-int-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="18767NISTSchema-SV-II-list-int-enumeration-2 tokoe:valid" result="pass"/><test-case name="18768NISTXML-SV-II-list-int-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="18769NISTXML-SV-II-list-int-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="18770NISTXML-SV-II-list-int-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="18771NISTXML-SV-II-list-int-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="18772NISTXML-SV-II-list-int-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="18773NISTSchema-SV-II-list-int-enumeration-3 tokoe:valid" result="pass"/><test-case name="18774NISTXML-SV-II-list-int-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="18775NISTXML-SV-II-list-int-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="18776NISTXML-SV-II-list-int-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="18777NISTXML-SV-II-list-int-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="18778NISTXML-SV-II-list-int-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="18779NISTSchema-SV-II-list-int-enumeration-4 tokoe:valid" result="pass"/><test-case name="18780NISTXML-SV-II-list-int-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="18781NISTXML-SV-II-list-int-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="18782NISTXML-SV-II-list-int-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="18783NISTXML-SV-II-list-int-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="18784NISTXML-SV-II-list-int-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="18785NISTSchema-SV-II-list-int-enumeration-5 tokoe:valid" result="pass"/><test-case name="18786NISTXML-SV-II-list-int-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="18787NISTXML-SV-II-list-int-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="18788NISTXML-SV-II-list-int-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="18789NISTXML-SV-II-list-int-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="18790NISTXML-SV-II-list-int-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="18791NISTSchema-SV-II-list-short-maxLength-1 tokoe:valid" result="pass"/><test-case name="18792NISTXML-SV-II-list-short-maxLength-1-1 tokoe:invalid" result="pass"/><test-case name="18793NISTXML-SV-II-list-short-maxLength-1-2 tokoe:invalid" result="pass"/><test-case name="18794NISTXML-SV-II-list-short-maxLength-1-3 tokoe:invalid" result="pass"/><test-case name="18795NISTXML-SV-II-list-short-maxLength-1-4 tokoe:invalid" result="pass"/><test-case name="18796NISTXML-SV-II-list-short-maxLength-1-5 tokoe:invalid" result="pass"/><test-case name="18797NISTSchema-SV-II-list-short-maxLength-2 tokoe:valid" result="pass"/><test-case name="18798NISTXML-SV-II-list-short-maxLength-2-1 tokoe:invalid" result="pass"/><test-case name="18799NISTXML-SV-II-list-short-maxLength-2-2 tokoe:invalid" result="pass"/><test-case name="18800NISTXML-SV-II-list-short-maxLength-2-3 tokoe:invalid" result="pass"/><test-case name="18801NISTXML-SV-II-list-short-maxLength-2-4 tokoe:invalid" result="pass"/><test-case name="18802NISTXML-SV-II-list-short-maxLength-2-5 tokoe:invalid" result="pass"/><test-case name="18803NISTSchema-SV-II-list-short-maxLength-3 tokoe:valid" result="pass"/><test-case name="18804NISTXML-SV-II-list-short-maxLength-3-1 tokoe:invalid" result="pass"/><test-case name="18805NISTXML-SV-II-list-short-maxLength-3-2 tokoe:invalid" result="pass"/><test-case name="18806NISTXML-SV-II-list-short-maxLength-3-3 tokoe:invalid" result="pass"/><test-case name="18807NISTXML-SV-II-list-short-maxLength-3-4 tokoe:invalid" result="pass"/><test-case name="18808NISTXML-SV-II-list-short-maxLength-3-5 tokoe:invalid" result="pass"/><test-case name="18809NISTSchema-SV-II-list-short-maxLength-4 tokoe:valid" result="pass"/><test-case name="18810NISTXML-SV-II-list-short-maxLength-4-1 tokoe:invalid" result="pass"/><test-case name="18811NISTXML-SV-II-list-short-maxLength-4-2 tokoe:invalid" result="pass"/><test-case name="18812NISTXML-SV-II-list-short-maxLength-4-3 tokoe:invalid" result="pass"/><test-case name="18813NISTXML-SV-II-list-short-maxLength-4-4 tokoe:invalid" result="pass"/><test-case name="18814NISTXML-SV-II-list-short-maxLength-4-5 tokoe:invalid" result="pass"/><test-case name="18815NISTSchema-SV-II-list-short-maxLength-5 tokoe:valid" result="pass"/><test-case name="18816NISTXML-SV-II-list-short-maxLength-5-1 tokoe:invalid" result="pass"/><test-case name="18817NISTXML-SV-II-list-short-maxLength-5-2 tokoe:invalid" result="pass"/><test-case name="18818NISTXML-SV-II-list-short-maxLength-5-3 tokoe:invalid" result="pass"/><test-case name="18819NISTXML-SV-II-list-short-maxLength-5-4 tokoe:invalid" result="pass"/><test-case name="18820NISTXML-SV-II-list-short-maxLength-5-5 tokoe:invalid" result="pass"/><test-case name="18821NISTSchema-SV-II-list-short-minLength-1 tokoe:valid" result="pass"/><test-case name="18822NISTXML-SV-II-list-short-minLength-1-1 tokoe:invalid" result="pass"/><test-case name="18823NISTXML-SV-II-list-short-minLength-1-2 tokoe:invalid" result="pass"/><test-case name="18824NISTXML-SV-II-list-short-minLength-1-3 tokoe:invalid" result="pass"/><test-case name="18825NISTXML-SV-II-list-short-minLength-1-4 tokoe:invalid" result="pass"/><test-case name="18826NISTXML-SV-II-list-short-minLength-1-5 tokoe:invalid" result="pass"/><test-case name="18827NISTSchema-SV-II-list-short-minLength-2 tokoe:valid" result="pass"/><test-case name="18828NISTXML-SV-II-list-short-minLength-2-1 tokoe:invalid" result="pass"/><test-case name="18829NISTXML-SV-II-list-short-minLength-2-2 tokoe:invalid" result="pass"/><test-case name="18830NISTXML-SV-II-list-short-minLength-2-3 tokoe:invalid" result="pass"/><test-case name="18831NISTXML-SV-II-list-short-minLength-2-4 tokoe:invalid" result="pass"/><test-case name="18832NISTXML-SV-II-list-short-minLength-2-5 tokoe:invalid" result="pass"/><test-case name="18833NISTSchema-SV-II-list-short-minLength-3 tokoe:valid" result="pass"/><test-case name="18834NISTXML-SV-II-list-short-minLength-3-1 tokoe:invalid" result="pass"/><test-case name="18835NISTXML-SV-II-list-short-minLength-3-2 tokoe:invalid" result="pass"/><test-case name="18836NISTXML-SV-II-list-short-minLength-3-3 tokoe:invalid" result="pass"/><test-case name="18837NISTXML-SV-II-list-short-minLength-3-4 tokoe:invalid" result="pass"/><test-case name="18838NISTXML-SV-II-list-short-minLength-3-5 tokoe:invalid" result="pass"/><test-case name="18839NISTSchema-SV-II-list-short-minLength-4 tokoe:valid" result="pass"/><test-case name="18840NISTXML-SV-II-list-short-minLength-4-1 tokoe:invalid" result="pass"/><test-case name="18841NISTXML-SV-II-list-short-minLength-4-2 tokoe:invalid" result="pass"/><test-case name="18842NISTXML-SV-II-list-short-minLength-4-3 tokoe:invalid" result="pass"/><test-case name="18843NISTXML-SV-II-list-short-minLength-4-4 tokoe:invalid" result="pass"/><test-case name="18844NISTXML-SV-II-list-short-minLength-4-5 tokoe:invalid" result="pass"/><test-case name="18845NISTSchema-SV-II-list-short-minLength-5 tokoe:valid" result="pass"/><test-case name="18846NISTXML-SV-II-list-short-minLength-5-1 tokoe:invalid" result="pass"/><test-case name="18847NISTXML-SV-II-list-short-minLength-5-2 tokoe:invalid" result="pass"/><test-case name="18848NISTXML-SV-II-list-short-minLength-5-3 tokoe:invalid" result="pass"/><test-case name="18849NISTXML-SV-II-list-short-minLength-5-4 tokoe:invalid" result="pass"/><test-case name="18850NISTXML-SV-II-list-short-minLength-5-5 tokoe:invalid" result="pass"/><test-case name="18851NISTSchema-SV-II-list-short-length-1 tokoe:valid" result="pass"/><test-case name="18852NISTXML-SV-II-list-short-length-1-1 tokoe:invalid" result="pass"/><test-case name="18853NISTXML-SV-II-list-short-length-1-2 tokoe:invalid" result="pass"/><test-case name="18854NISTXML-SV-II-list-short-length-1-3 tokoe:invalid" result="pass"/><test-case name="18855NISTXML-SV-II-list-short-length-1-4 tokoe:invalid" result="pass"/><test-case name="18856NISTXML-SV-II-list-short-length-1-5 tokoe:invalid" result="pass"/><test-case name="18857NISTSchema-SV-II-list-short-length-2 tokoe:valid" result="pass"/><test-case name="18858NISTXML-SV-II-list-short-length-2-1 tokoe:invalid" result="pass"/><test-case name="18859NISTXML-SV-II-list-short-length-2-2 tokoe:invalid" result="pass"/><test-case name="18860NISTXML-SV-II-list-short-length-2-3 tokoe:invalid" result="pass"/><test-case name="18861NISTXML-SV-II-list-short-length-2-4 tokoe:invalid" result="pass"/><test-case name="18862NISTXML-SV-II-list-short-length-2-5 tokoe:invalid" result="pass"/><test-case name="18863NISTSchema-SV-II-list-short-length-3 tokoe:valid" result="pass"/><test-case name="18864NISTXML-SV-II-list-short-length-3-1 tokoe:invalid" result="pass"/><test-case name="18865NISTXML-SV-II-list-short-length-3-2 tokoe:invalid" result="pass"/><test-case name="18866NISTXML-SV-II-list-short-length-3-3 tokoe:invalid" result="pass"/><test-case name="18867NISTXML-SV-II-list-short-length-3-4 tokoe:invalid" result="pass"/><test-case name="18868NISTXML-SV-II-list-short-length-3-5 tokoe:invalid" result="pass"/><test-case name="18869NISTSchema-SV-II-list-short-length-4 tokoe:valid" result="pass"/><test-case name="18870NISTXML-SV-II-list-short-length-4-1 tokoe:invalid" result="pass"/><test-case name="18871NISTXML-SV-II-list-short-length-4-2 tokoe:invalid" result="pass"/><test-case name="18872NISTXML-SV-II-list-short-length-4-3 tokoe:invalid" result="pass"/><test-case name="18873NISTXML-SV-II-list-short-length-4-4 tokoe:invalid" result="pass"/><test-case name="18874NISTXML-SV-II-list-short-length-4-5 tokoe:invalid" result="pass"/><test-case name="18875NISTSchema-SV-II-list-short-length-5 tokoe:valid" result="pass"/><test-case name="18876NISTXML-SV-II-list-short-length-5-1 tokoe:invalid" result="pass"/><test-case name="18877NISTXML-SV-II-list-short-length-5-2 tokoe:invalid" result="pass"/><test-case name="18878NISTXML-SV-II-list-short-length-5-3 tokoe:invalid" result="pass"/><test-case name="18879NISTXML-SV-II-list-short-length-5-4 tokoe:invalid" result="pass"/><test-case name="18880NISTXML-SV-II-list-short-length-5-5 tokoe:invalid" result="pass"/><test-case name="18881NISTSchema-SV-II-list-short-pattern-1 tokoe:valid" result="pass"/><test-case name="18882NISTXML-SV-II-list-short-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="18883NISTXML-SV-II-list-short-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="18884NISTXML-SV-II-list-short-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="18885NISTXML-SV-II-list-short-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="18886NISTXML-SV-II-list-short-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="18887NISTSchema-SV-II-list-short-pattern-2 tokoe:valid" result="pass"/><test-case name="18888NISTXML-SV-II-list-short-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="18889NISTXML-SV-II-list-short-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="18890NISTXML-SV-II-list-short-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="18891NISTXML-SV-II-list-short-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="18892NISTXML-SV-II-list-short-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="18893NISTSchema-SV-II-list-short-pattern-3 tokoe:valid" result="pass"/><test-case name="18894NISTXML-SV-II-list-short-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="18895NISTXML-SV-II-list-short-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="18896NISTXML-SV-II-list-short-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="18897NISTXML-SV-II-list-short-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="18898NISTXML-SV-II-list-short-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="18899NISTSchema-SV-II-list-short-pattern-4 tokoe:valid" result="pass"/><test-case name="18900NISTXML-SV-II-list-short-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="18901NISTXML-SV-II-list-short-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="18902NISTXML-SV-II-list-short-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="18903NISTXML-SV-II-list-short-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="18904NISTXML-SV-II-list-short-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="18905NISTSchema-SV-II-list-short-pattern-5 tokoe:valid" result="pass"/><test-case name="18906NISTXML-SV-II-list-short-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="18907NISTXML-SV-II-list-short-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="18908NISTXML-SV-II-list-short-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="18909NISTXML-SV-II-list-short-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="18910NISTXML-SV-II-list-short-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="18911NISTSchema-SV-II-list-short-enumeration-1 tokoe:valid" result="pass"/><test-case name="18912NISTXML-SV-II-list-short-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="18913NISTXML-SV-II-list-short-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="18914NISTXML-SV-II-list-short-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="18915NISTXML-SV-II-list-short-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="18916NISTXML-SV-II-list-short-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="18917NISTSchema-SV-II-list-short-enumeration-2 tokoe:valid" result="pass"/><test-case name="18918NISTXML-SV-II-list-short-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="18919NISTXML-SV-II-list-short-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="18920NISTXML-SV-II-list-short-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="18921NISTXML-SV-II-list-short-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="18922NISTXML-SV-II-list-short-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="18923NISTSchema-SV-II-list-short-enumeration-3 tokoe:valid" result="pass"/><test-case name="18924NISTXML-SV-II-list-short-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="18925NISTXML-SV-II-list-short-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="18926NISTXML-SV-II-list-short-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="18927NISTXML-SV-II-list-short-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="18928NISTXML-SV-II-list-short-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="18929NISTSchema-SV-II-list-short-enumeration-4 tokoe:valid" result="pass"/><test-case name="18930NISTXML-SV-II-list-short-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="18931NISTXML-SV-II-list-short-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="18932NISTXML-SV-II-list-short-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="18933NISTXML-SV-II-list-short-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="18934NISTXML-SV-II-list-short-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="18935NISTSchema-SV-II-list-short-enumeration-5 tokoe:valid" result="pass"/><test-case name="18936NISTXML-SV-II-list-short-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="18937NISTXML-SV-II-list-short-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="18938NISTXML-SV-II-list-short-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="18939NISTXML-SV-II-list-short-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="18940NISTXML-SV-II-list-short-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="18941NISTSchema-SV-II-list-byte-maxLength-1 tokoe:valid" result="pass"/><test-case name="18942NISTXML-SV-II-list-byte-maxLength-1-1 tokoe:invalid" result="pass"/><test-case name="18943NISTXML-SV-II-list-byte-maxLength-1-2 tokoe:invalid" result="pass"/><test-case name="18944NISTXML-SV-II-list-byte-maxLength-1-3 tokoe:invalid" result="pass"/><test-case name="18945NISTXML-SV-II-list-byte-maxLength-1-4 tokoe:invalid" result="pass"/><test-case name="18946NISTXML-SV-II-list-byte-maxLength-1-5 tokoe:invalid" result="pass"/><test-case name="18947NISTSchema-SV-II-list-byte-maxLength-2 tokoe:valid" result="pass"/><test-case name="18948NISTXML-SV-II-list-byte-maxLength-2-1 tokoe:invalid" result="pass"/><test-case name="18949NISTXML-SV-II-list-byte-maxLength-2-2 tokoe:invalid" result="pass"/><test-case name="18950NISTXML-SV-II-list-byte-maxLength-2-3 tokoe:invalid" result="pass"/><test-case name="18951NISTXML-SV-II-list-byte-maxLength-2-4 tokoe:invalid" result="pass"/><test-case name="18952NISTXML-SV-II-list-byte-maxLength-2-5 tokoe:invalid" result="pass"/><test-case name="18953NISTSchema-SV-II-list-byte-maxLength-3 tokoe:valid" result="pass"/><test-case name="18954NISTXML-SV-II-list-byte-maxLength-3-1 tokoe:invalid" result="pass"/><test-case name="18955NISTXML-SV-II-list-byte-maxLength-3-2 tokoe:invalid" result="pass"/><test-case name="18956NISTXML-SV-II-list-byte-maxLength-3-3 tokoe:invalid" result="pass"/><test-case name="18957NISTXML-SV-II-list-byte-maxLength-3-4 tokoe:invalid" result="pass"/><test-case name="18958NISTXML-SV-II-list-byte-maxLength-3-5 tokoe:invalid" result="pass"/><test-case name="18959NISTSchema-SV-II-list-byte-maxLength-4 tokoe:valid" result="pass"/><test-case name="18960NISTXML-SV-II-list-byte-maxLength-4-1 tokoe:invalid" result="pass"/><test-case name="18961NISTXML-SV-II-list-byte-maxLength-4-2 tokoe:invalid" result="pass"/><test-case name="18962NISTXML-SV-II-list-byte-maxLength-4-3 tokoe:invalid" result="pass"/><test-case name="18963NISTXML-SV-II-list-byte-maxLength-4-4 tokoe:invalid" result="pass"/><test-case name="18964NISTXML-SV-II-list-byte-maxLength-4-5 tokoe:invalid" result="pass"/><test-case name="18965NISTSchema-SV-II-list-byte-maxLength-5 tokoe:valid" result="pass"/><test-case name="18966NISTXML-SV-II-list-byte-maxLength-5-1 tokoe:invalid" result="pass"/><test-case name="18967NISTXML-SV-II-list-byte-maxLength-5-2 tokoe:invalid" result="pass"/><test-case name="18968NISTXML-SV-II-list-byte-maxLength-5-3 tokoe:invalid" result="pass"/><test-case name="18969NISTXML-SV-II-list-byte-maxLength-5-4 tokoe:invalid" result="pass"/><test-case name="18970NISTXML-SV-II-list-byte-maxLength-5-5 tokoe:invalid" result="pass"/><test-case name="18971NISTSchema-SV-II-list-byte-minLength-1 tokoe:valid" result="pass"/><test-case name="18972NISTXML-SV-II-list-byte-minLength-1-1 tokoe:invalid" result="pass"/><test-case name="18973NISTXML-SV-II-list-byte-minLength-1-2 tokoe:invalid" result="pass"/><test-case name="18974NISTXML-SV-II-list-byte-minLength-1-3 tokoe:invalid" result="pass"/><test-case name="18975NISTXML-SV-II-list-byte-minLength-1-4 tokoe:invalid" result="pass"/><test-case name="18976NISTXML-SV-II-list-byte-minLength-1-5 tokoe:invalid" result="pass"/><test-case name="18977NISTSchema-SV-II-list-byte-minLength-2 tokoe:valid" result="pass"/><test-case name="18978NISTXML-SV-II-list-byte-minLength-2-1 tokoe:invalid" result="pass"/><test-case name="18979NISTXML-SV-II-list-byte-minLength-2-2 tokoe:invalid" result="pass"/><test-case name="18980NISTXML-SV-II-list-byte-minLength-2-3 tokoe:invalid" result="pass"/><test-case name="18981NISTXML-SV-II-list-byte-minLength-2-4 tokoe:invalid" result="pass"/><test-case name="18982NISTXML-SV-II-list-byte-minLength-2-5 tokoe:invalid" result="pass"/><test-case name="18983NISTSchema-SV-II-list-byte-minLength-3 tokoe:valid" result="pass"/><test-case name="18984NISTXML-SV-II-list-byte-minLength-3-1 tokoe:invalid" result="pass"/><test-case name="18985NISTXML-SV-II-list-byte-minLength-3-2 tokoe:invalid" result="pass"/><test-case name="18986NISTXML-SV-II-list-byte-minLength-3-3 tokoe:invalid" result="pass"/><test-case name="18987NISTXML-SV-II-list-byte-minLength-3-4 tokoe:invalid" result="pass"/><test-case name="18988NISTXML-SV-II-list-byte-minLength-3-5 tokoe:invalid" result="pass"/><test-case name="18989NISTSchema-SV-II-list-byte-minLength-4 tokoe:valid" result="pass"/><test-case name="18990NISTXML-SV-II-list-byte-minLength-4-1 tokoe:invalid" result="pass"/><test-case name="18991NISTXML-SV-II-list-byte-minLength-4-2 tokoe:invalid" result="pass"/><test-case name="18992NISTXML-SV-II-list-byte-minLength-4-3 tokoe:invalid" result="pass"/><test-case name="18993NISTXML-SV-II-list-byte-minLength-4-4 tokoe:invalid" result="pass"/><test-case name="18994NISTXML-SV-II-list-byte-minLength-4-5 tokoe:invalid" result="pass"/><test-case name="18995NISTSchema-SV-II-list-byte-minLength-5 tokoe:valid" result="pass"/><test-case name="18996NISTXML-SV-II-list-byte-minLength-5-1 tokoe:invalid" result="pass"/><test-case name="18997NISTXML-SV-II-list-byte-minLength-5-2 tokoe:invalid" result="pass"/><test-case name="18998NISTXML-SV-II-list-byte-minLength-5-3 tokoe:invalid" result="pass"/><test-case name="18999NISTXML-SV-II-list-byte-minLength-5-4 tokoe:invalid" result="pass"/><test-case name="19000NISTXML-SV-II-list-byte-minLength-5-5 tokoe:invalid" result="pass"/><test-case name="19001NISTSchema-SV-II-list-byte-length-1 tokoe:valid" result="pass"/><test-case name="19002NISTXML-SV-II-list-byte-length-1-1 tokoe:invalid" result="pass"/><test-case name="19003NISTXML-SV-II-list-byte-length-1-2 tokoe:invalid" result="pass"/><test-case name="19004NISTXML-SV-II-list-byte-length-1-3 tokoe:invalid" result="pass"/><test-case name="19005NISTXML-SV-II-list-byte-length-1-4 tokoe:invalid" result="pass"/><test-case name="19006NISTXML-SV-II-list-byte-length-1-5 tokoe:invalid" result="pass"/><test-case name="19007NISTSchema-SV-II-list-byte-length-2 tokoe:valid" result="pass"/><test-case name="19008NISTXML-SV-II-list-byte-length-2-1 tokoe:invalid" result="pass"/><test-case name="19009NISTXML-SV-II-list-byte-length-2-2 tokoe:invalid" result="pass"/><test-case name="19010NISTXML-SV-II-list-byte-length-2-3 tokoe:invalid" result="pass"/><test-case name="19011NISTXML-SV-II-list-byte-length-2-4 tokoe:invalid" result="pass"/><test-case name="19012NISTXML-SV-II-list-byte-length-2-5 tokoe:invalid" result="pass"/><test-case name="19013NISTSchema-SV-II-list-byte-length-3 tokoe:valid" result="pass"/><test-case name="19014NISTXML-SV-II-list-byte-length-3-1 tokoe:invalid" result="pass"/><test-case name="19015NISTXML-SV-II-list-byte-length-3-2 tokoe:invalid" result="pass"/><test-case name="19016NISTXML-SV-II-list-byte-length-3-3 tokoe:invalid" result="pass"/><test-case name="19017NISTXML-SV-II-list-byte-length-3-4 tokoe:invalid" result="pass"/><test-case name="19018NISTXML-SV-II-list-byte-length-3-5 tokoe:invalid" result="pass"/><test-case name="19019NISTSchema-SV-II-list-byte-length-4 tokoe:valid" result="pass"/><test-case name="19020NISTXML-SV-II-list-byte-length-4-1 tokoe:invalid" result="pass"/><test-case name="19021NISTXML-SV-II-list-byte-length-4-2 tokoe:invalid" result="pass"/><test-case name="19022NISTXML-SV-II-list-byte-length-4-3 tokoe:invalid" result="pass"/><test-case name="19023NISTXML-SV-II-list-byte-length-4-4 tokoe:invalid" result="pass"/><test-case name="19024NISTXML-SV-II-list-byte-length-4-5 tokoe:invalid" result="pass"/><test-case name="19025NISTSchema-SV-II-list-byte-length-5 tokoe:valid" result="pass"/><test-case name="19026NISTXML-SV-II-list-byte-length-5-1 tokoe:invalid" result="pass"/><test-case name="19027NISTXML-SV-II-list-byte-length-5-2 tokoe:invalid" result="pass"/><test-case name="19028NISTXML-SV-II-list-byte-length-5-3 tokoe:invalid" result="pass"/><test-case name="19029NISTXML-SV-II-list-byte-length-5-4 tokoe:invalid" result="pass"/><test-case name="19030NISTXML-SV-II-list-byte-length-5-5 tokoe:invalid" result="pass"/><test-case name="19031NISTSchema-SV-II-list-byte-pattern-1 tokoe:valid" result="pass"/><test-case name="19032NISTXML-SV-II-list-byte-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="19033NISTXML-SV-II-list-byte-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="19034NISTXML-SV-II-list-byte-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="19035NISTXML-SV-II-list-byte-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="19036NISTXML-SV-II-list-byte-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="19037NISTSchema-SV-II-list-byte-pattern-2 tokoe:valid" result="pass"/><test-case name="19038NISTXML-SV-II-list-byte-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="19039NISTXML-SV-II-list-byte-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="19040NISTXML-SV-II-list-byte-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="19041NISTXML-SV-II-list-byte-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="19042NISTXML-SV-II-list-byte-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="19043NISTSchema-SV-II-list-byte-pattern-3 tokoe:valid" result="pass"/><test-case name="19044NISTXML-SV-II-list-byte-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="19045NISTXML-SV-II-list-byte-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="19046NISTXML-SV-II-list-byte-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="19047NISTXML-SV-II-list-byte-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="19048NISTXML-SV-II-list-byte-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="19049NISTSchema-SV-II-list-byte-pattern-4 tokoe:valid" result="pass"/><test-case name="19050NISTXML-SV-II-list-byte-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="19051NISTXML-SV-II-list-byte-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="19052NISTXML-SV-II-list-byte-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="19053NISTXML-SV-II-list-byte-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="19054NISTXML-SV-II-list-byte-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="19055NISTSchema-SV-II-list-byte-pattern-5 tokoe:valid" result="pass"/><test-case name="19056NISTXML-SV-II-list-byte-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="19057NISTXML-SV-II-list-byte-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="19058NISTXML-SV-II-list-byte-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="19059NISTXML-SV-II-list-byte-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="19060NISTXML-SV-II-list-byte-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="19061NISTSchema-SV-II-list-byte-enumeration-1 tokoe:valid" result="pass"/><test-case name="19062NISTXML-SV-II-list-byte-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="19063NISTXML-SV-II-list-byte-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="19064NISTXML-SV-II-list-byte-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="19065NISTXML-SV-II-list-byte-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="19066NISTXML-SV-II-list-byte-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="19067NISTSchema-SV-II-list-byte-enumeration-2 tokoe:valid" result="pass"/><test-case name="19068NISTXML-SV-II-list-byte-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="19069NISTXML-SV-II-list-byte-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="19070NISTXML-SV-II-list-byte-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="19071NISTXML-SV-II-list-byte-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="19072NISTXML-SV-II-list-byte-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="19073NISTSchema-SV-II-list-byte-enumeration-3 tokoe:valid" result="pass"/><test-case name="19074NISTXML-SV-II-list-byte-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="19075NISTXML-SV-II-list-byte-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="19076NISTXML-SV-II-list-byte-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="19077NISTXML-SV-II-list-byte-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="19078NISTXML-SV-II-list-byte-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="19079NISTSchema-SV-II-list-byte-enumeration-4 tokoe:valid" result="pass"/><test-case name="19080NISTXML-SV-II-list-byte-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="19081NISTXML-SV-II-list-byte-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="19082NISTXML-SV-II-list-byte-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="19083NISTXML-SV-II-list-byte-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="19084NISTXML-SV-II-list-byte-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="19085NISTSchema-SV-II-list-byte-enumeration-5 tokoe:valid" result="pass"/><test-case name="19086NISTXML-SV-II-list-byte-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="19087NISTXML-SV-II-list-byte-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="19088NISTXML-SV-II-list-byte-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="19089NISTXML-SV-II-list-byte-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="19090NISTXML-SV-II-list-byte-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="19091NISTSchema-SV-II-list-nonNegativeInteger-maxLength-1 tokoe:valid" result="pass"/><test-case name="19092NISTXML-SV-II-list-nonNegativeInteger-maxLength-1-1 tokoe:invalid" result="pass"/><test-case name="19093NISTXML-SV-II-list-nonNegativeInteger-maxLength-1-2 tokoe:invalid" result="pass"/><test-case name="19094NISTXML-SV-II-list-nonNegativeInteger-maxLength-1-3 tokoe:invalid" result="pass"/><test-case name="19095NISTXML-SV-II-list-nonNegativeInteger-maxLength-1-4 tokoe:invalid" result="pass"/><test-case name="19096NISTXML-SV-II-list-nonNegativeInteger-maxLength-1-5 tokoe:invalid" result="pass"/><test-case name="19097NISTSchema-SV-II-list-nonNegativeInteger-maxLength-2 tokoe:valid" result="pass"/><test-case name="19098NISTXML-SV-II-list-nonNegativeInteger-maxLength-2-1 tokoe:invalid" result="pass"/><test-case name="19099NISTXML-SV-II-list-nonNegativeInteger-maxLength-2-2 tokoe:invalid" result="pass"/><test-case name="19100NISTXML-SV-II-list-nonNegativeInteger-maxLength-2-3 tokoe:invalid" result="pass"/><test-case name="19101NISTXML-SV-II-list-nonNegativeInteger-maxLength-2-4 tokoe:invalid" result="pass"/><test-case name="19102NISTXML-SV-II-list-nonNegativeInteger-maxLength-2-5 tokoe:invalid" result="pass"/><test-case name="19103NISTSchema-SV-II-list-nonNegativeInteger-maxLength-3 tokoe:valid" result="pass"/><test-case name="19104NISTXML-SV-II-list-nonNegativeInteger-maxLength-3-1 tokoe:invalid" result="pass"/><test-case name="19105NISTXML-SV-II-list-nonNegativeInteger-maxLength-3-2 tokoe:invalid" result="pass"/><test-case name="19106NISTXML-SV-II-list-nonNegativeInteger-maxLength-3-3 tokoe:invalid" result="pass"/><test-case name="19107NISTXML-SV-II-list-nonNegativeInteger-maxLength-3-4 tokoe:invalid" result="pass"/><test-case name="19108NISTXML-SV-II-list-nonNegativeInteger-maxLength-3-5 tokoe:invalid" result="pass"/><test-case name="19109NISTSchema-SV-II-list-nonNegativeInteger-maxLength-4 tokoe:valid" result="pass"/><test-case name="19110NISTXML-SV-II-list-nonNegativeInteger-maxLength-4-1 tokoe:invalid" result="pass"/><test-case name="19111NISTXML-SV-II-list-nonNegativeInteger-maxLength-4-2 tokoe:invalid" result="pass"/><test-case name="19112NISTXML-SV-II-list-nonNegativeInteger-maxLength-4-3 tokoe:invalid" result="pass"/><test-case name="19113NISTXML-SV-II-list-nonNegativeInteger-maxLength-4-4 tokoe:invalid" result="pass"/><test-case name="19114NISTXML-SV-II-list-nonNegativeInteger-maxLength-4-5 tokoe:invalid" result="pass"/><test-case name="19115NISTSchema-SV-II-list-nonNegativeInteger-maxLength-5 tokoe:valid" result="pass"/><test-case name="19116NISTXML-SV-II-list-nonNegativeInteger-maxLength-5-1 tokoe:invalid" result="pass"/><test-case name="19117NISTXML-SV-II-list-nonNegativeInteger-maxLength-5-2 tokoe:invalid" result="pass"/><test-case name="19118NISTXML-SV-II-list-nonNegativeInteger-maxLength-5-3 tokoe:invalid" result="pass"/><test-case name="19119NISTXML-SV-II-list-nonNegativeInteger-maxLength-5-4 tokoe:invalid" result="pass"/><test-case name="19120NISTXML-SV-II-list-nonNegativeInteger-maxLength-5-5 tokoe:invalid" result="pass"/><test-case name="19121NISTSchema-SV-II-list-nonNegativeInteger-minLength-1 tokoe:valid" result="pass"/><test-case name="19122NISTXML-SV-II-list-nonNegativeInteger-minLength-1-1 tokoe:invalid" result="pass"/><test-case name="19123NISTXML-SV-II-list-nonNegativeInteger-minLength-1-2 tokoe:invalid" result="pass"/><test-case name="19124NISTXML-SV-II-list-nonNegativeInteger-minLength-1-3 tokoe:invalid" result="pass"/><test-case name="19125NISTXML-SV-II-list-nonNegativeInteger-minLength-1-4 tokoe:invalid" result="pass"/><test-case name="19126NISTXML-SV-II-list-nonNegativeInteger-minLength-1-5 tokoe:invalid" result="pass"/><test-case name="19127NISTSchema-SV-II-list-nonNegativeInteger-minLength-2 tokoe:valid" result="pass"/><test-case name="19128NISTXML-SV-II-list-nonNegativeInteger-minLength-2-1 tokoe:invalid" result="pass"/><test-case name="19129NISTXML-SV-II-list-nonNegativeInteger-minLength-2-2 tokoe:invalid" result="pass"/><test-case name="19130NISTXML-SV-II-list-nonNegativeInteger-minLength-2-3 tokoe:invalid" result="pass"/><test-case name="19131NISTXML-SV-II-list-nonNegativeInteger-minLength-2-4 tokoe:invalid" result="pass"/><test-case name="19132NISTXML-SV-II-list-nonNegativeInteger-minLength-2-5 tokoe:invalid" result="pass"/><test-case name="19133NISTSchema-SV-II-list-nonNegativeInteger-minLength-3 tokoe:valid" result="pass"/><test-case name="19134NISTXML-SV-II-list-nonNegativeInteger-minLength-3-1 tokoe:invalid" result="pass"/><test-case name="19135NISTXML-SV-II-list-nonNegativeInteger-minLength-3-2 tokoe:invalid" result="pass"/><test-case name="19136NISTXML-SV-II-list-nonNegativeInteger-minLength-3-3 tokoe:invalid" result="pass"/><test-case name="19137NISTXML-SV-II-list-nonNegativeInteger-minLength-3-4 tokoe:invalid" result="pass"/><test-case name="19138NISTXML-SV-II-list-nonNegativeInteger-minLength-3-5 tokoe:invalid" result="pass"/><test-case name="19139NISTSchema-SV-II-list-nonNegativeInteger-minLength-4 tokoe:valid" result="pass"/><test-case name="19140NISTXML-SV-II-list-nonNegativeInteger-minLength-4-1 tokoe:invalid" result="pass"/><test-case name="19141NISTXML-SV-II-list-nonNegativeInteger-minLength-4-2 tokoe:invalid" result="pass"/><test-case name="19142NISTXML-SV-II-list-nonNegativeInteger-minLength-4-3 tokoe:invalid" result="pass"/><test-case name="19143NISTXML-SV-II-list-nonNegativeInteger-minLength-4-4 tokoe:invalid" result="pass"/><test-case name="19144NISTXML-SV-II-list-nonNegativeInteger-minLength-4-5 tokoe:invalid" result="pass"/><test-case name="19145NISTSchema-SV-II-list-nonNegativeInteger-minLength-5 tokoe:valid" result="pass"/><test-case name="19146NISTXML-SV-II-list-nonNegativeInteger-minLength-5-1 tokoe:invalid" result="pass"/><test-case name="19147NISTXML-SV-II-list-nonNegativeInteger-minLength-5-2 tokoe:invalid" result="pass"/><test-case name="19148NISTXML-SV-II-list-nonNegativeInteger-minLength-5-3 tokoe:invalid" result="pass"/><test-case name="19149NISTXML-SV-II-list-nonNegativeInteger-minLength-5-4 tokoe:invalid" result="pass"/><test-case name="19150NISTXML-SV-II-list-nonNegativeInteger-minLength-5-5 tokoe:invalid" result="pass"/><test-case name="19151NISTSchema-SV-II-list-nonNegativeInteger-length-1 tokoe:valid" result="pass"/><test-case name="19152NISTXML-SV-II-list-nonNegativeInteger-length-1-1 tokoe:invalid" result="pass"/><test-case name="19153NISTXML-SV-II-list-nonNegativeInteger-length-1-2 tokoe:invalid" result="pass"/><test-case name="19154NISTXML-SV-II-list-nonNegativeInteger-length-1-3 tokoe:invalid" result="pass"/><test-case name="19155NISTXML-SV-II-list-nonNegativeInteger-length-1-4 tokoe:invalid" result="pass"/><test-case name="19156NISTXML-SV-II-list-nonNegativeInteger-length-1-5 tokoe:invalid" result="pass"/><test-case name="19157NISTSchema-SV-II-list-nonNegativeInteger-length-2 tokoe:valid" result="pass"/><test-case name="19158NISTXML-SV-II-list-nonNegativeInteger-length-2-1 tokoe:invalid" result="pass"/><test-case name="19159NISTXML-SV-II-list-nonNegativeInteger-length-2-2 tokoe:invalid" result="pass"/><test-case name="19160NISTXML-SV-II-list-nonNegativeInteger-length-2-3 tokoe:invalid" result="pass"/><test-case name="19161NISTXML-SV-II-list-nonNegativeInteger-length-2-4 tokoe:invalid" result="pass"/><test-case name="19162NISTXML-SV-II-list-nonNegativeInteger-length-2-5 tokoe:invalid" result="pass"/><test-case name="19163NISTSchema-SV-II-list-nonNegativeInteger-length-3 tokoe:valid" result="pass"/><test-case name="19164NISTXML-SV-II-list-nonNegativeInteger-length-3-1 tokoe:invalid" result="pass"/><test-case name="19165NISTXML-SV-II-list-nonNegativeInteger-length-3-2 tokoe:invalid" result="pass"/><test-case name="19166NISTXML-SV-II-list-nonNegativeInteger-length-3-3 tokoe:invalid" result="pass"/><test-case name="19167NISTXML-SV-II-list-nonNegativeInteger-length-3-4 tokoe:invalid" result="pass"/><test-case name="19168NISTXML-SV-II-list-nonNegativeInteger-length-3-5 tokoe:invalid" result="pass"/><test-case name="19169NISTSchema-SV-II-list-nonNegativeInteger-length-4 tokoe:valid" result="pass"/><test-case name="19170NISTXML-SV-II-list-nonNegativeInteger-length-4-1 tokoe:invalid" result="pass"/><test-case name="19171NISTXML-SV-II-list-nonNegativeInteger-length-4-2 tokoe:invalid" result="pass"/><test-case name="19172NISTXML-SV-II-list-nonNegativeInteger-length-4-3 tokoe:invalid" result="pass"/><test-case name="19173NISTXML-SV-II-list-nonNegativeInteger-length-4-4 tokoe:invalid" result="pass"/><test-case name="19174NISTXML-SV-II-list-nonNegativeInteger-length-4-5 tokoe:invalid" result="pass"/><test-case name="19175NISTSchema-SV-II-list-nonNegativeInteger-length-5 tokoe:valid" result="pass"/><test-case name="19176NISTXML-SV-II-list-nonNegativeInteger-length-5-1 tokoe:invalid" result="pass"/><test-case name="19177NISTXML-SV-II-list-nonNegativeInteger-length-5-2 tokoe:invalid" result="pass"/><test-case name="19178NISTXML-SV-II-list-nonNegativeInteger-length-5-3 tokoe:invalid" result="pass"/><test-case name="19179NISTXML-SV-II-list-nonNegativeInteger-length-5-4 tokoe:invalid" result="pass"/><test-case name="19180NISTXML-SV-II-list-nonNegativeInteger-length-5-5 tokoe:invalid" result="pass"/><test-case name="19181NISTSchema-SV-II-list-nonNegativeInteger-pattern-1 tokoe:valid" result="pass"/><test-case name="19182NISTXML-SV-II-list-nonNegativeInteger-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="19183NISTXML-SV-II-list-nonNegativeInteger-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="19184NISTXML-SV-II-list-nonNegativeInteger-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="19185NISTXML-SV-II-list-nonNegativeInteger-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="19186NISTXML-SV-II-list-nonNegativeInteger-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="19187NISTSchema-SV-II-list-nonNegativeInteger-pattern-2 tokoe:valid" result="pass"/><test-case name="19188NISTXML-SV-II-list-nonNegativeInteger-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="19189NISTXML-SV-II-list-nonNegativeInteger-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="19190NISTXML-SV-II-list-nonNegativeInteger-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="19191NISTXML-SV-II-list-nonNegativeInteger-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="19192NISTXML-SV-II-list-nonNegativeInteger-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="19193NISTSchema-SV-II-list-nonNegativeInteger-pattern-3 tokoe:valid" result="pass"/><test-case name="19194NISTXML-SV-II-list-nonNegativeInteger-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="19195NISTXML-SV-II-list-nonNegativeInteger-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="19196NISTXML-SV-II-list-nonNegativeInteger-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="19197NISTXML-SV-II-list-nonNegativeInteger-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="19198NISTXML-SV-II-list-nonNegativeInteger-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="19199NISTSchema-SV-II-list-nonNegativeInteger-pattern-4 tokoe:valid" result="pass"/><test-case name="19200NISTXML-SV-II-list-nonNegativeInteger-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="19201NISTXML-SV-II-list-nonNegativeInteger-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="19202NISTXML-SV-II-list-nonNegativeInteger-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="19203NISTXML-SV-II-list-nonNegativeInteger-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="19204NISTXML-SV-II-list-nonNegativeInteger-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="19205NISTSchema-SV-II-list-nonNegativeInteger-pattern-5 tokoe:valid" result="pass"/><test-case name="19206NISTXML-SV-II-list-nonNegativeInteger-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="19207NISTXML-SV-II-list-nonNegativeInteger-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="19208NISTXML-SV-II-list-nonNegativeInteger-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="19209NISTXML-SV-II-list-nonNegativeInteger-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="19210NISTXML-SV-II-list-nonNegativeInteger-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="19211NISTSchema-SV-II-list-nonNegativeInteger-enumeration-1 tokoe:valid" result="pass"/><test-case name="19212NISTXML-SV-II-list-nonNegativeInteger-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="19213NISTXML-SV-II-list-nonNegativeInteger-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="19214NISTXML-SV-II-list-nonNegativeInteger-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="19215NISTXML-SV-II-list-nonNegativeInteger-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="19216NISTXML-SV-II-list-nonNegativeInteger-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="19217NISTSchema-SV-II-list-nonNegativeInteger-enumeration-2 tokoe:valid" result="pass"/><test-case name="19218NISTXML-SV-II-list-nonNegativeInteger-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="19219NISTXML-SV-II-list-nonNegativeInteger-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="19220NISTXML-SV-II-list-nonNegativeInteger-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="19221NISTXML-SV-II-list-nonNegativeInteger-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="19222NISTXML-SV-II-list-nonNegativeInteger-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="19223NISTSchema-SV-II-list-nonNegativeInteger-enumeration-3 tokoe:valid" result="pass"/><test-case name="19224NISTXML-SV-II-list-nonNegativeInteger-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="19225NISTXML-SV-II-list-nonNegativeInteger-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="19226NISTXML-SV-II-list-nonNegativeInteger-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="19227NISTXML-SV-II-list-nonNegativeInteger-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="19228NISTXML-SV-II-list-nonNegativeInteger-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="19229NISTSchema-SV-II-list-nonNegativeInteger-enumeration-4 tokoe:valid" result="pass"/><test-case name="19230NISTXML-SV-II-list-nonNegativeInteger-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="19231NISTXML-SV-II-list-nonNegativeInteger-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="19232NISTXML-SV-II-list-nonNegativeInteger-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="19233NISTXML-SV-II-list-nonNegativeInteger-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="19234NISTXML-SV-II-list-nonNegativeInteger-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="19235NISTSchema-SV-II-list-nonNegativeInteger-enumeration-5 tokoe:valid" result="pass"/><test-case name="19236NISTXML-SV-II-list-nonNegativeInteger-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="19237NISTXML-SV-II-list-nonNegativeInteger-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="19238NISTXML-SV-II-list-nonNegativeInteger-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="19239NISTXML-SV-II-list-nonNegativeInteger-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="19240NISTXML-SV-II-list-nonNegativeInteger-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="19241NISTSchema-SV-II-list-unsignedLong-maxLength-1 tokoe:valid" result="pass"/><test-case name="19242NISTXML-SV-II-list-unsignedLong-maxLength-1-1 tokoe:invalid" result="pass"/><test-case name="19243NISTXML-SV-II-list-unsignedLong-maxLength-1-2 tokoe:invalid" result="pass"/><test-case name="19244NISTXML-SV-II-list-unsignedLong-maxLength-1-3 tokoe:invalid" result="pass"/><test-case name="19245NISTXML-SV-II-list-unsignedLong-maxLength-1-4 tokoe:invalid" result="pass"/><test-case name="19246NISTXML-SV-II-list-unsignedLong-maxLength-1-5 tokoe:invalid" result="pass"/><test-case name="19247NISTSchema-SV-II-list-unsignedLong-maxLength-2 tokoe:valid" result="pass"/><test-case name="19248NISTXML-SV-II-list-unsignedLong-maxLength-2-1 tokoe:invalid" result="pass"/><test-case name="19249NISTXML-SV-II-list-unsignedLong-maxLength-2-2 tokoe:invalid" result="pass"/><test-case name="19250NISTXML-SV-II-list-unsignedLong-maxLength-2-3 tokoe:invalid" result="pass"/><test-case name="19251NISTXML-SV-II-list-unsignedLong-maxLength-2-4 tokoe:invalid" result="pass"/><test-case name="19252NISTXML-SV-II-list-unsignedLong-maxLength-2-5 tokoe:invalid" result="pass"/><test-case name="19253NISTSchema-SV-II-list-unsignedLong-maxLength-3 tokoe:valid" result="pass"/><test-case name="19254NISTXML-SV-II-list-unsignedLong-maxLength-3-1 tokoe:invalid" result="pass"/><test-case name="19255NISTXML-SV-II-list-unsignedLong-maxLength-3-2 tokoe:invalid" result="pass"/><test-case name="19256NISTXML-SV-II-list-unsignedLong-maxLength-3-3 tokoe:invalid" result="pass"/><test-case name="19257NISTXML-SV-II-list-unsignedLong-maxLength-3-4 tokoe:invalid" result="pass"/><test-case name="19258NISTXML-SV-II-list-unsignedLong-maxLength-3-5 tokoe:invalid" result="pass"/><test-case name="19259NISTSchema-SV-II-list-unsignedLong-maxLength-4 tokoe:valid" result="pass"/><test-case name="19260NISTXML-SV-II-list-unsignedLong-maxLength-4-1 tokoe:invalid" result="pass"/><test-case name="19261NISTXML-SV-II-list-unsignedLong-maxLength-4-2 tokoe:invalid" result="pass"/><test-case name="19262NISTXML-SV-II-list-unsignedLong-maxLength-4-3 tokoe:invalid" result="pass"/><test-case name="19263NISTXML-SV-II-list-unsignedLong-maxLength-4-4 tokoe:invalid" result="pass"/><test-case name="19264NISTXML-SV-II-list-unsignedLong-maxLength-4-5 tokoe:invalid" result="pass"/><test-case name="19265NISTSchema-SV-II-list-unsignedLong-maxLength-5 tokoe:valid" result="pass"/><test-case name="19266NISTXML-SV-II-list-unsignedLong-maxLength-5-1 tokoe:invalid" result="pass"/><test-case name="19267NISTXML-SV-II-list-unsignedLong-maxLength-5-2 tokoe:invalid" result="pass"/><test-case name="19268NISTXML-SV-II-list-unsignedLong-maxLength-5-3 tokoe:invalid" result="pass"/><test-case name="19269NISTXML-SV-II-list-unsignedLong-maxLength-5-4 tokoe:invalid" result="pass"/><test-case name="19270NISTXML-SV-II-list-unsignedLong-maxLength-5-5 tokoe:invalid" result="pass"/><test-case name="19271NISTSchema-SV-II-list-unsignedLong-minLength-1 tokoe:valid" result="pass"/><test-case name="19272NISTXML-SV-II-list-unsignedLong-minLength-1-1 tokoe:invalid" result="pass"/><test-case name="19273NISTXML-SV-II-list-unsignedLong-minLength-1-2 tokoe:invalid" result="pass"/><test-case name="19274NISTXML-SV-II-list-unsignedLong-minLength-1-3 tokoe:invalid" result="pass"/><test-case name="19275NISTXML-SV-II-list-unsignedLong-minLength-1-4 tokoe:invalid" result="pass"/><test-case name="19276NISTXML-SV-II-list-unsignedLong-minLength-1-5 tokoe:invalid" result="pass"/><test-case name="19277NISTSchema-SV-II-list-unsignedLong-minLength-2 tokoe:valid" result="pass"/><test-case name="19278NISTXML-SV-II-list-unsignedLong-minLength-2-1 tokoe:invalid" result="pass"/><test-case name="19279NISTXML-SV-II-list-unsignedLong-minLength-2-2 tokoe:invalid" result="pass"/><test-case name="19280NISTXML-SV-II-list-unsignedLong-minLength-2-3 tokoe:invalid" result="pass"/><test-case name="19281NISTXML-SV-II-list-unsignedLong-minLength-2-4 tokoe:invalid" result="pass"/><test-case name="19282NISTXML-SV-II-list-unsignedLong-minLength-2-5 tokoe:invalid" result="pass"/><test-case name="19283NISTSchema-SV-II-list-unsignedLong-minLength-3 tokoe:valid" result="pass"/><test-case name="19284NISTXML-SV-II-list-unsignedLong-minLength-3-1 tokoe:invalid" result="pass"/><test-case name="19285NISTXML-SV-II-list-unsignedLong-minLength-3-2 tokoe:invalid" result="pass"/><test-case name="19286NISTXML-SV-II-list-unsignedLong-minLength-3-3 tokoe:invalid" result="pass"/><test-case name="19287NISTXML-SV-II-list-unsignedLong-minLength-3-4 tokoe:invalid" result="pass"/><test-case name="19288NISTXML-SV-II-list-unsignedLong-minLength-3-5 tokoe:invalid" result="pass"/><test-case name="19289NISTSchema-SV-II-list-unsignedLong-minLength-4 tokoe:valid" result="pass"/><test-case name="19290NISTXML-SV-II-list-unsignedLong-minLength-4-1 tokoe:invalid" result="pass"/><test-case name="19291NISTXML-SV-II-list-unsignedLong-minLength-4-2 tokoe:invalid" result="pass"/><test-case name="19292NISTXML-SV-II-list-unsignedLong-minLength-4-3 tokoe:invalid" result="pass"/><test-case name="19293NISTXML-SV-II-list-unsignedLong-minLength-4-4 tokoe:invalid" result="pass"/><test-case name="19294NISTXML-SV-II-list-unsignedLong-minLength-4-5 tokoe:invalid" result="pass"/><test-case name="19295NISTSchema-SV-II-list-unsignedLong-minLength-5 tokoe:valid" result="pass"/><test-case name="19296NISTXML-SV-II-list-unsignedLong-minLength-5-1 tokoe:invalid" result="pass"/><test-case name="19297NISTXML-SV-II-list-unsignedLong-minLength-5-2 tokoe:invalid" result="pass"/><test-case name="19298NISTXML-SV-II-list-unsignedLong-minLength-5-3 tokoe:invalid" result="pass"/><test-case name="19299NISTXML-SV-II-list-unsignedLong-minLength-5-4 tokoe:invalid" result="pass"/><test-case name="19300NISTXML-SV-II-list-unsignedLong-minLength-5-5 tokoe:invalid" result="pass"/><test-case name="19301NISTSchema-SV-II-list-unsignedLong-length-1 tokoe:valid" result="pass"/><test-case name="19302NISTXML-SV-II-list-unsignedLong-length-1-1 tokoe:invalid" result="pass"/><test-case name="19303NISTXML-SV-II-list-unsignedLong-length-1-2 tokoe:invalid" result="pass"/><test-case name="19304NISTXML-SV-II-list-unsignedLong-length-1-3 tokoe:invalid" result="pass"/><test-case name="19305NISTXML-SV-II-list-unsignedLong-length-1-4 tokoe:invalid" result="pass"/><test-case name="19306NISTXML-SV-II-list-unsignedLong-length-1-5 tokoe:invalid" result="pass"/><test-case name="19307NISTSchema-SV-II-list-unsignedLong-length-2 tokoe:valid" result="pass"/><test-case name="19308NISTXML-SV-II-list-unsignedLong-length-2-1 tokoe:invalid" result="pass"/><test-case name="19309NISTXML-SV-II-list-unsignedLong-length-2-2 tokoe:invalid" result="pass"/><test-case name="19310NISTXML-SV-II-list-unsignedLong-length-2-3 tokoe:invalid" result="pass"/><test-case name="19311NISTXML-SV-II-list-unsignedLong-length-2-4 tokoe:invalid" result="pass"/><test-case name="19312NISTXML-SV-II-list-unsignedLong-length-2-5 tokoe:invalid" result="pass"/><test-case name="19313NISTSchema-SV-II-list-unsignedLong-length-3 tokoe:valid" result="pass"/><test-case name="19314NISTXML-SV-II-list-unsignedLong-length-3-1 tokoe:invalid" result="pass"/><test-case name="19315NISTXML-SV-II-list-unsignedLong-length-3-2 tokoe:invalid" result="pass"/><test-case name="19316NISTXML-SV-II-list-unsignedLong-length-3-3 tokoe:invalid" result="pass"/><test-case name="19317NISTXML-SV-II-list-unsignedLong-length-3-4 tokoe:invalid" result="pass"/><test-case name="19318NISTXML-SV-II-list-unsignedLong-length-3-5 tokoe:invalid" result="pass"/><test-case name="19319NISTSchema-SV-II-list-unsignedLong-length-4 tokoe:valid" result="pass"/><test-case name="19320NISTXML-SV-II-list-unsignedLong-length-4-1 tokoe:invalid" result="pass"/><test-case name="19321NISTXML-SV-II-list-unsignedLong-length-4-2 tokoe:invalid" result="pass"/><test-case name="19322NISTXML-SV-II-list-unsignedLong-length-4-3 tokoe:invalid" result="pass"/><test-case name="19323NISTXML-SV-II-list-unsignedLong-length-4-4 tokoe:invalid" result="pass"/><test-case name="19324NISTXML-SV-II-list-unsignedLong-length-4-5 tokoe:invalid" result="pass"/><test-case name="19325NISTSchema-SV-II-list-unsignedLong-length-5 tokoe:valid" result="pass"/><test-case name="19326NISTXML-SV-II-list-unsignedLong-length-5-1 tokoe:invalid" result="pass"/><test-case name="19327NISTXML-SV-II-list-unsignedLong-length-5-2 tokoe:invalid" result="pass"/><test-case name="19328NISTXML-SV-II-list-unsignedLong-length-5-3 tokoe:invalid" result="pass"/><test-case name="19329NISTXML-SV-II-list-unsignedLong-length-5-4 tokoe:invalid" result="pass"/><test-case name="19330NISTXML-SV-II-list-unsignedLong-length-5-5 tokoe:invalid" result="pass"/><test-case name="19331NISTSchema-SV-II-list-unsignedLong-pattern-1 tokoe:valid" result="pass"/><test-case name="19332NISTXML-SV-II-list-unsignedLong-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="19333NISTXML-SV-II-list-unsignedLong-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="19334NISTXML-SV-II-list-unsignedLong-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="19335NISTXML-SV-II-list-unsignedLong-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="19336NISTXML-SV-II-list-unsignedLong-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="19337NISTSchema-SV-II-list-unsignedLong-pattern-2 tokoe:valid" result="pass"/><test-case name="19338NISTXML-SV-II-list-unsignedLong-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="19339NISTXML-SV-II-list-unsignedLong-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="19340NISTXML-SV-II-list-unsignedLong-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="19341NISTXML-SV-II-list-unsignedLong-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="19342NISTXML-SV-II-list-unsignedLong-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="19343NISTSchema-SV-II-list-unsignedLong-pattern-3 tokoe:valid" result="pass"/><test-case name="19344NISTXML-SV-II-list-unsignedLong-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="19345NISTXML-SV-II-list-unsignedLong-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="19346NISTXML-SV-II-list-unsignedLong-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="19347NISTXML-SV-II-list-unsignedLong-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="19348NISTXML-SV-II-list-unsignedLong-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="19349NISTSchema-SV-II-list-unsignedLong-pattern-4 tokoe:valid" result="pass"/><test-case name="19350NISTXML-SV-II-list-unsignedLong-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="19351NISTXML-SV-II-list-unsignedLong-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="19352NISTXML-SV-II-list-unsignedLong-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="19353NISTXML-SV-II-list-unsignedLong-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="19354NISTXML-SV-II-list-unsignedLong-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="19355NISTSchema-SV-II-list-unsignedLong-pattern-5 tokoe:valid" result="pass"/><test-case name="19356NISTXML-SV-II-list-unsignedLong-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="19357NISTXML-SV-II-list-unsignedLong-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="19358NISTXML-SV-II-list-unsignedLong-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="19359NISTXML-SV-II-list-unsignedLong-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="19360NISTXML-SV-II-list-unsignedLong-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="19361NISTSchema-SV-II-list-unsignedLong-enumeration-1 tokoe:valid" result="pass"/><test-case name="19362NISTXML-SV-II-list-unsignedLong-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="19363NISTXML-SV-II-list-unsignedLong-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="19364NISTXML-SV-II-list-unsignedLong-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="19365NISTXML-SV-II-list-unsignedLong-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="19366NISTXML-SV-II-list-unsignedLong-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="19367NISTSchema-SV-II-list-unsignedLong-enumeration-2 tokoe:valid" result="pass"/><test-case name="19368NISTXML-SV-II-list-unsignedLong-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="19369NISTXML-SV-II-list-unsignedLong-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="19370NISTXML-SV-II-list-unsignedLong-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="19371NISTXML-SV-II-list-unsignedLong-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="19372NISTXML-SV-II-list-unsignedLong-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="19373NISTSchema-SV-II-list-unsignedLong-enumeration-3 tokoe:valid" result="pass"/><test-case name="19374NISTXML-SV-II-list-unsignedLong-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="19375NISTXML-SV-II-list-unsignedLong-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="19376NISTXML-SV-II-list-unsignedLong-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="19377NISTXML-SV-II-list-unsignedLong-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="19378NISTXML-SV-II-list-unsignedLong-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="19379NISTSchema-SV-II-list-unsignedLong-enumeration-4 tokoe:valid" result="pass"/><test-case name="19380NISTXML-SV-II-list-unsignedLong-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="19381NISTXML-SV-II-list-unsignedLong-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="19382NISTXML-SV-II-list-unsignedLong-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="19383NISTXML-SV-II-list-unsignedLong-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="19384NISTXML-SV-II-list-unsignedLong-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="19385NISTSchema-SV-II-list-unsignedLong-enumeration-5 tokoe:valid" result="pass"/><test-case name="19386NISTXML-SV-II-list-unsignedLong-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="19387NISTXML-SV-II-list-unsignedLong-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="19388NISTXML-SV-II-list-unsignedLong-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="19389NISTXML-SV-II-list-unsignedLong-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="19390NISTXML-SV-II-list-unsignedLong-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="19391NISTSchema-SV-II-list-unsignedInt-maxLength-1 tokoe:valid" result="pass"/><test-case name="19392NISTXML-SV-II-list-unsignedInt-maxLength-1-1 tokoe:invalid" result="pass"/><test-case name="19393NISTXML-SV-II-list-unsignedInt-maxLength-1-2 tokoe:invalid" result="pass"/><test-case name="19394NISTXML-SV-II-list-unsignedInt-maxLength-1-3 tokoe:invalid" result="pass"/><test-case name="19395NISTXML-SV-II-list-unsignedInt-maxLength-1-4 tokoe:invalid" result="pass"/><test-case name="19396NISTXML-SV-II-list-unsignedInt-maxLength-1-5 tokoe:invalid" result="pass"/><test-case name="19397NISTSchema-SV-II-list-unsignedInt-maxLength-2 tokoe:valid" result="pass"/><test-case name="19398NISTXML-SV-II-list-unsignedInt-maxLength-2-1 tokoe:invalid" result="pass"/><test-case name="19399NISTXML-SV-II-list-unsignedInt-maxLength-2-2 tokoe:invalid" result="pass"/><test-case name="19400NISTXML-SV-II-list-unsignedInt-maxLength-2-3 tokoe:invalid" result="pass"/><test-case name="19401NISTXML-SV-II-list-unsignedInt-maxLength-2-4 tokoe:invalid" result="pass"/><test-case name="19402NISTXML-SV-II-list-unsignedInt-maxLength-2-5 tokoe:invalid" result="pass"/><test-case name="19403NISTSchema-SV-II-list-unsignedInt-maxLength-3 tokoe:valid" result="pass"/><test-case name="19404NISTXML-SV-II-list-unsignedInt-maxLength-3-1 tokoe:invalid" result="pass"/><test-case name="19405NISTXML-SV-II-list-unsignedInt-maxLength-3-2 tokoe:invalid" result="pass"/><test-case name="19406NISTXML-SV-II-list-unsignedInt-maxLength-3-3 tokoe:invalid" result="pass"/><test-case name="19407NISTXML-SV-II-list-unsignedInt-maxLength-3-4 tokoe:invalid" result="pass"/><test-case name="19408NISTXML-SV-II-list-unsignedInt-maxLength-3-5 tokoe:invalid" result="pass"/><test-case name="19409NISTSchema-SV-II-list-unsignedInt-maxLength-4 tokoe:valid" result="pass"/><test-case name="19410NISTXML-SV-II-list-unsignedInt-maxLength-4-1 tokoe:invalid" result="pass"/><test-case name="19411NISTXML-SV-II-list-unsignedInt-maxLength-4-2 tokoe:invalid" result="pass"/><test-case name="19412NISTXML-SV-II-list-unsignedInt-maxLength-4-3 tokoe:invalid" result="pass"/><test-case name="19413NISTXML-SV-II-list-unsignedInt-maxLength-4-4 tokoe:invalid" result="pass"/><test-case name="19414NISTXML-SV-II-list-unsignedInt-maxLength-4-5 tokoe:invalid" result="pass"/><test-case name="19415NISTSchema-SV-II-list-unsignedInt-maxLength-5 tokoe:valid" result="pass"/><test-case name="19416NISTXML-SV-II-list-unsignedInt-maxLength-5-1 tokoe:invalid" result="pass"/><test-case name="19417NISTXML-SV-II-list-unsignedInt-maxLength-5-2 tokoe:invalid" result="pass"/><test-case name="19418NISTXML-SV-II-list-unsignedInt-maxLength-5-3 tokoe:invalid" result="pass"/><test-case name="19419NISTXML-SV-II-list-unsignedInt-maxLength-5-4 tokoe:invalid" result="pass"/><test-case name="19420NISTXML-SV-II-list-unsignedInt-maxLength-5-5 tokoe:invalid" result="pass"/><test-case name="19421NISTSchema-SV-II-list-unsignedInt-minLength-1 tokoe:valid" result="pass"/><test-case name="19422NISTXML-SV-II-list-unsignedInt-minLength-1-1 tokoe:invalid" result="pass"/><test-case name="19423NISTXML-SV-II-list-unsignedInt-minLength-1-2 tokoe:invalid" result="pass"/><test-case name="19424NISTXML-SV-II-list-unsignedInt-minLength-1-3 tokoe:invalid" result="pass"/><test-case name="19425NISTXML-SV-II-list-unsignedInt-minLength-1-4 tokoe:invalid" result="pass"/><test-case name="19426NISTXML-SV-II-list-unsignedInt-minLength-1-5 tokoe:invalid" result="pass"/><test-case name="19427NISTSchema-SV-II-list-unsignedInt-minLength-2 tokoe:valid" result="pass"/><test-case name="19428NISTXML-SV-II-list-unsignedInt-minLength-2-1 tokoe:invalid" result="pass"/><test-case name="19429NISTXML-SV-II-list-unsignedInt-minLength-2-2 tokoe:invalid" result="pass"/><test-case name="19430NISTXML-SV-II-list-unsignedInt-minLength-2-3 tokoe:invalid" result="pass"/><test-case name="19431NISTXML-SV-II-list-unsignedInt-minLength-2-4 tokoe:invalid" result="pass"/><test-case name="19432NISTXML-SV-II-list-unsignedInt-minLength-2-5 tokoe:invalid" result="pass"/><test-case name="19433NISTSchema-SV-II-list-unsignedInt-minLength-3 tokoe:valid" result="pass"/><test-case name="19434NISTXML-SV-II-list-unsignedInt-minLength-3-1 tokoe:invalid" result="pass"/><test-case name="19435NISTXML-SV-II-list-unsignedInt-minLength-3-2 tokoe:invalid" result="pass"/><test-case name="19436NISTXML-SV-II-list-unsignedInt-minLength-3-3 tokoe:invalid" result="pass"/><test-case name="19437NISTXML-SV-II-list-unsignedInt-minLength-3-4 tokoe:invalid" result="pass"/><test-case name="19438NISTXML-SV-II-list-unsignedInt-minLength-3-5 tokoe:invalid" result="pass"/><test-case name="19439NISTSchema-SV-II-list-unsignedInt-minLength-4 tokoe:valid" result="pass"/><test-case name="19440NISTXML-SV-II-list-unsignedInt-minLength-4-1 tokoe:invalid" result="pass"/><test-case name="19441NISTXML-SV-II-list-unsignedInt-minLength-4-2 tokoe:invalid" result="pass"/><test-case name="19442NISTXML-SV-II-list-unsignedInt-minLength-4-3 tokoe:invalid" result="pass"/><test-case name="19443NISTXML-SV-II-list-unsignedInt-minLength-4-4 tokoe:invalid" result="pass"/><test-case name="19444NISTXML-SV-II-list-unsignedInt-minLength-4-5 tokoe:invalid" result="pass"/><test-case name="19445NISTSchema-SV-II-list-unsignedInt-minLength-5 tokoe:valid" result="pass"/><test-case name="19446NISTXML-SV-II-list-unsignedInt-minLength-5-1 tokoe:invalid" result="pass"/><test-case name="19447NISTXML-SV-II-list-unsignedInt-minLength-5-2 tokoe:invalid" result="pass"/><test-case name="19448NISTXML-SV-II-list-unsignedInt-minLength-5-3 tokoe:invalid" result="pass"/><test-case name="19449NISTXML-SV-II-list-unsignedInt-minLength-5-4 tokoe:invalid" result="pass"/><test-case name="19450NISTXML-SV-II-list-unsignedInt-minLength-5-5 tokoe:invalid" result="pass"/><test-case name="19451NISTSchema-SV-II-list-unsignedInt-length-1 tokoe:valid" result="pass"/><test-case name="19452NISTXML-SV-II-list-unsignedInt-length-1-1 tokoe:invalid" result="pass"/><test-case name="19453NISTXML-SV-II-list-unsignedInt-length-1-2 tokoe:invalid" result="pass"/><test-case name="19454NISTXML-SV-II-list-unsignedInt-length-1-3 tokoe:invalid" result="pass"/><test-case name="19455NISTXML-SV-II-list-unsignedInt-length-1-4 tokoe:invalid" result="pass"/><test-case name="19456NISTXML-SV-II-list-unsignedInt-length-1-5 tokoe:invalid" result="pass"/><test-case name="19457NISTSchema-SV-II-list-unsignedInt-length-2 tokoe:valid" result="pass"/><test-case name="19458NISTXML-SV-II-list-unsignedInt-length-2-1 tokoe:invalid" result="pass"/><test-case name="19459NISTXML-SV-II-list-unsignedInt-length-2-2 tokoe:invalid" result="pass"/><test-case name="19460NISTXML-SV-II-list-unsignedInt-length-2-3 tokoe:invalid" result="pass"/><test-case name="19461NISTXML-SV-II-list-unsignedInt-length-2-4 tokoe:invalid" result="pass"/><test-case name="19462NISTXML-SV-II-list-unsignedInt-length-2-5 tokoe:invalid" result="pass"/><test-case name="19463NISTSchema-SV-II-list-unsignedInt-length-3 tokoe:valid" result="pass"/><test-case name="19464NISTXML-SV-II-list-unsignedInt-length-3-1 tokoe:invalid" result="pass"/><test-case name="19465NISTXML-SV-II-list-unsignedInt-length-3-2 tokoe:invalid" result="pass"/><test-case name="19466NISTXML-SV-II-list-unsignedInt-length-3-3 tokoe:invalid" result="pass"/><test-case name="19467NISTXML-SV-II-list-unsignedInt-length-3-4 tokoe:invalid" result="pass"/><test-case name="19468NISTXML-SV-II-list-unsignedInt-length-3-5 tokoe:invalid" result="pass"/><test-case name="19469NISTSchema-SV-II-list-unsignedInt-length-4 tokoe:valid" result="pass"/><test-case name="19470NISTXML-SV-II-list-unsignedInt-length-4-1 tokoe:invalid" result="pass"/><test-case name="19471NISTXML-SV-II-list-unsignedInt-length-4-2 tokoe:invalid" result="pass"/><test-case name="19472NISTXML-SV-II-list-unsignedInt-length-4-3 tokoe:invalid" result="pass"/><test-case name="19473NISTXML-SV-II-list-unsignedInt-length-4-4 tokoe:invalid" result="pass"/><test-case name="19474NISTXML-SV-II-list-unsignedInt-length-4-5 tokoe:invalid" result="pass"/><test-case name="19475NISTSchema-SV-II-list-unsignedInt-length-5 tokoe:valid" result="pass"/><test-case name="19476NISTXML-SV-II-list-unsignedInt-length-5-1 tokoe:invalid" result="pass"/><test-case name="19477NISTXML-SV-II-list-unsignedInt-length-5-2 tokoe:invalid" result="pass"/><test-case name="19478NISTXML-SV-II-list-unsignedInt-length-5-3 tokoe:invalid" result="pass"/><test-case name="19479NISTXML-SV-II-list-unsignedInt-length-5-4 tokoe:invalid" result="pass"/><test-case name="19480NISTXML-SV-II-list-unsignedInt-length-5-5 tokoe:invalid" result="pass"/><test-case name="19481NISTSchema-SV-II-list-unsignedInt-pattern-1 tokoe:valid" result="pass"/><test-case name="19482NISTXML-SV-II-list-unsignedInt-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="19483NISTXML-SV-II-list-unsignedInt-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="19484NISTXML-SV-II-list-unsignedInt-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="19485NISTXML-SV-II-list-unsignedInt-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="19486NISTXML-SV-II-list-unsignedInt-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="19487NISTSchema-SV-II-list-unsignedInt-pattern-2 tokoe:valid" result="pass"/><test-case name="19488NISTXML-SV-II-list-unsignedInt-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="19489NISTXML-SV-II-list-unsignedInt-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="19490NISTXML-SV-II-list-unsignedInt-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="19491NISTXML-SV-II-list-unsignedInt-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="19492NISTXML-SV-II-list-unsignedInt-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="19493NISTSchema-SV-II-list-unsignedInt-pattern-3 tokoe:valid" result="pass"/><test-case name="19494NISTXML-SV-II-list-unsignedInt-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="19495NISTXML-SV-II-list-unsignedInt-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="19496NISTXML-SV-II-list-unsignedInt-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="19497NISTXML-SV-II-list-unsignedInt-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="19498NISTXML-SV-II-list-unsignedInt-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="19499NISTSchema-SV-II-list-unsignedInt-pattern-4 tokoe:valid" result="pass"/><test-case name="19500NISTXML-SV-II-list-unsignedInt-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="19501NISTXML-SV-II-list-unsignedInt-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="19502NISTXML-SV-II-list-unsignedInt-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="19503NISTXML-SV-II-list-unsignedInt-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="19504NISTXML-SV-II-list-unsignedInt-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="19505NISTSchema-SV-II-list-unsignedInt-pattern-5 tokoe:valid" result="pass"/><test-case name="19506NISTXML-SV-II-list-unsignedInt-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="19507NISTXML-SV-II-list-unsignedInt-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="19508NISTXML-SV-II-list-unsignedInt-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="19509NISTXML-SV-II-list-unsignedInt-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="19510NISTXML-SV-II-list-unsignedInt-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="19511NISTSchema-SV-II-list-unsignedInt-enumeration-1 tokoe:valid" result="pass"/><test-case name="19512NISTXML-SV-II-list-unsignedInt-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="19513NISTXML-SV-II-list-unsignedInt-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="19514NISTXML-SV-II-list-unsignedInt-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="19515NISTXML-SV-II-list-unsignedInt-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="19516NISTXML-SV-II-list-unsignedInt-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="19517NISTSchema-SV-II-list-unsignedInt-enumeration-2 tokoe:valid" result="pass"/><test-case name="19518NISTXML-SV-II-list-unsignedInt-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="19519NISTXML-SV-II-list-unsignedInt-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="19520NISTXML-SV-II-list-unsignedInt-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="19521NISTXML-SV-II-list-unsignedInt-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="19522NISTXML-SV-II-list-unsignedInt-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="19523NISTSchema-SV-II-list-unsignedInt-enumeration-3 tokoe:valid" result="pass"/><test-case name="19524NISTXML-SV-II-list-unsignedInt-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="19525NISTXML-SV-II-list-unsignedInt-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="19526NISTXML-SV-II-list-unsignedInt-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="19527NISTXML-SV-II-list-unsignedInt-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="19528NISTXML-SV-II-list-unsignedInt-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="19529NISTSchema-SV-II-list-unsignedInt-enumeration-4 tokoe:valid" result="pass"/><test-case name="19530NISTXML-SV-II-list-unsignedInt-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="19531NISTXML-SV-II-list-unsignedInt-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="19532NISTXML-SV-II-list-unsignedInt-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="19533NISTXML-SV-II-list-unsignedInt-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="19534NISTXML-SV-II-list-unsignedInt-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="19535NISTSchema-SV-II-list-unsignedInt-enumeration-5 tokoe:valid" result="pass"/><test-case name="19536NISTXML-SV-II-list-unsignedInt-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="19537NISTXML-SV-II-list-unsignedInt-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="19538NISTXML-SV-II-list-unsignedInt-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="19539NISTXML-SV-II-list-unsignedInt-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="19540NISTXML-SV-II-list-unsignedInt-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="19541NISTSchema-SV-II-list-unsignedShort-maxLength-1 tokoe:valid" result="pass"/><test-case name="19542NISTXML-SV-II-list-unsignedShort-maxLength-1-1 tokoe:invalid" result="pass"/><test-case name="19543NISTXML-SV-II-list-unsignedShort-maxLength-1-2 tokoe:invalid" result="pass"/><test-case name="19544NISTXML-SV-II-list-unsignedShort-maxLength-1-3 tokoe:invalid" result="pass"/><test-case name="19545NISTXML-SV-II-list-unsignedShort-maxLength-1-4 tokoe:invalid" result="pass"/><test-case name="19546NISTXML-SV-II-list-unsignedShort-maxLength-1-5 tokoe:invalid" result="pass"/><test-case name="19547NISTSchema-SV-II-list-unsignedShort-maxLength-2 tokoe:valid" result="pass"/><test-case name="19548NISTXML-SV-II-list-unsignedShort-maxLength-2-1 tokoe:invalid" result="pass"/><test-case name="19549NISTXML-SV-II-list-unsignedShort-maxLength-2-2 tokoe:invalid" result="pass"/><test-case name="19550NISTXML-SV-II-list-unsignedShort-maxLength-2-3 tokoe:invalid" result="pass"/><test-case name="19551NISTXML-SV-II-list-unsignedShort-maxLength-2-4 tokoe:invalid" result="pass"/><test-case name="19552NISTXML-SV-II-list-unsignedShort-maxLength-2-5 tokoe:invalid" result="pass"/><test-case name="19553NISTSchema-SV-II-list-unsignedShort-maxLength-3 tokoe:valid" result="pass"/><test-case name="19554NISTXML-SV-II-list-unsignedShort-maxLength-3-1 tokoe:invalid" result="pass"/><test-case name="19555NISTXML-SV-II-list-unsignedShort-maxLength-3-2 tokoe:invalid" result="pass"/><test-case name="19556NISTXML-SV-II-list-unsignedShort-maxLength-3-3 tokoe:invalid" result="pass"/><test-case name="19557NISTXML-SV-II-list-unsignedShort-maxLength-3-4 tokoe:invalid" result="pass"/><test-case name="19558NISTXML-SV-II-list-unsignedShort-maxLength-3-5 tokoe:invalid" result="pass"/><test-case name="19559NISTSchema-SV-II-list-unsignedShort-maxLength-4 tokoe:valid" result="pass"/><test-case name="19560NISTXML-SV-II-list-unsignedShort-maxLength-4-1 tokoe:invalid" result="pass"/><test-case name="19561NISTXML-SV-II-list-unsignedShort-maxLength-4-2 tokoe:invalid" result="pass"/><test-case name="19562NISTXML-SV-II-list-unsignedShort-maxLength-4-3 tokoe:invalid" result="pass"/><test-case name="19563NISTXML-SV-II-list-unsignedShort-maxLength-4-4 tokoe:invalid" result="pass"/><test-case name="19564NISTXML-SV-II-list-unsignedShort-maxLength-4-5 tokoe:invalid" result="pass"/><test-case name="19565NISTSchema-SV-II-list-unsignedShort-maxLength-5 tokoe:valid" result="pass"/><test-case name="19566NISTXML-SV-II-list-unsignedShort-maxLength-5-1 tokoe:invalid" result="pass"/><test-case name="19567NISTXML-SV-II-list-unsignedShort-maxLength-5-2 tokoe:invalid" result="pass"/><test-case name="19568NISTXML-SV-II-list-unsignedShort-maxLength-5-3 tokoe:invalid" result="pass"/><test-case name="19569NISTXML-SV-II-list-unsignedShort-maxLength-5-4 tokoe:invalid" result="pass"/><test-case name="19570NISTXML-SV-II-list-unsignedShort-maxLength-5-5 tokoe:invalid" result="pass"/><test-case name="19571NISTSchema-SV-II-list-unsignedShort-minLength-1 tokoe:valid" result="pass"/><test-case name="19572NISTXML-SV-II-list-unsignedShort-minLength-1-1 tokoe:invalid" result="pass"/><test-case name="19573NISTXML-SV-II-list-unsignedShort-minLength-1-2 tokoe:invalid" result="pass"/><test-case name="19574NISTXML-SV-II-list-unsignedShort-minLength-1-3 tokoe:invalid" result="pass"/><test-case name="19575NISTXML-SV-II-list-unsignedShort-minLength-1-4 tokoe:invalid" result="pass"/><test-case name="19576NISTXML-SV-II-list-unsignedShort-minLength-1-5 tokoe:invalid" result="pass"/><test-case name="19577NISTSchema-SV-II-list-unsignedShort-minLength-2 tokoe:valid" result="pass"/><test-case name="19578NISTXML-SV-II-list-unsignedShort-minLength-2-1 tokoe:invalid" result="pass"/><test-case name="19579NISTXML-SV-II-list-unsignedShort-minLength-2-2 tokoe:invalid" result="pass"/><test-case name="19580NISTXML-SV-II-list-unsignedShort-minLength-2-3 tokoe:invalid" result="pass"/><test-case name="19581NISTXML-SV-II-list-unsignedShort-minLength-2-4 tokoe:invalid" result="pass"/><test-case name="19582NISTXML-SV-II-list-unsignedShort-minLength-2-5 tokoe:invalid" result="pass"/><test-case name="19583NISTSchema-SV-II-list-unsignedShort-minLength-3 tokoe:valid" result="pass"/><test-case name="19584NISTXML-SV-II-list-unsignedShort-minLength-3-1 tokoe:invalid" result="pass"/><test-case name="19585NISTXML-SV-II-list-unsignedShort-minLength-3-2 tokoe:invalid" result="pass"/><test-case name="19586NISTXML-SV-II-list-unsignedShort-minLength-3-3 tokoe:invalid" result="pass"/><test-case name="19587NISTXML-SV-II-list-unsignedShort-minLength-3-4 tokoe:invalid" result="pass"/><test-case name="19588NISTXML-SV-II-list-unsignedShort-minLength-3-5 tokoe:invalid" result="pass"/><test-case name="19589NISTSchema-SV-II-list-unsignedShort-minLength-4 tokoe:valid" result="pass"/><test-case name="19590NISTXML-SV-II-list-unsignedShort-minLength-4-1 tokoe:invalid" result="pass"/><test-case name="19591NISTXML-SV-II-list-unsignedShort-minLength-4-2 tokoe:invalid" result="pass"/><test-case name="19592NISTXML-SV-II-list-unsignedShort-minLength-4-3 tokoe:invalid" result="pass"/><test-case name="19593NISTXML-SV-II-list-unsignedShort-minLength-4-4 tokoe:invalid" result="pass"/><test-case name="19594NISTXML-SV-II-list-unsignedShort-minLength-4-5 tokoe:invalid" result="pass"/><test-case name="19595NISTSchema-SV-II-list-unsignedShort-minLength-5 tokoe:valid" result="pass"/><test-case name="19596NISTXML-SV-II-list-unsignedShort-minLength-5-1 tokoe:invalid" result="pass"/><test-case name="19597NISTXML-SV-II-list-unsignedShort-minLength-5-2 tokoe:invalid" result="pass"/><test-case name="19598NISTXML-SV-II-list-unsignedShort-minLength-5-3 tokoe:invalid" result="pass"/><test-case name="19599NISTXML-SV-II-list-unsignedShort-minLength-5-4 tokoe:invalid" result="pass"/><test-case name="19600NISTXML-SV-II-list-unsignedShort-minLength-5-5 tokoe:invalid" result="pass"/><test-case name="19601NISTSchema-SV-II-list-unsignedShort-length-1 tokoe:valid" result="pass"/><test-case name="19602NISTXML-SV-II-list-unsignedShort-length-1-1 tokoe:invalid" result="pass"/><test-case name="19603NISTXML-SV-II-list-unsignedShort-length-1-2 tokoe:invalid" result="pass"/><test-case name="19604NISTXML-SV-II-list-unsignedShort-length-1-3 tokoe:invalid" result="pass"/><test-case name="19605NISTXML-SV-II-list-unsignedShort-length-1-4 tokoe:invalid" result="pass"/><test-case name="19606NISTXML-SV-II-list-unsignedShort-length-1-5 tokoe:invalid" result="pass"/><test-case name="19607NISTSchema-SV-II-list-unsignedShort-length-2 tokoe:valid" result="pass"/><test-case name="19608NISTXML-SV-II-list-unsignedShort-length-2-1 tokoe:invalid" result="pass"/><test-case name="19609NISTXML-SV-II-list-unsignedShort-length-2-2 tokoe:invalid" result="pass"/><test-case name="19610NISTXML-SV-II-list-unsignedShort-length-2-3 tokoe:invalid" result="pass"/><test-case name="19611NISTXML-SV-II-list-unsignedShort-length-2-4 tokoe:invalid" result="pass"/><test-case name="19612NISTXML-SV-II-list-unsignedShort-length-2-5 tokoe:invalid" result="pass"/><test-case name="19613NISTSchema-SV-II-list-unsignedShort-length-3 tokoe:valid" result="pass"/><test-case name="19614NISTXML-SV-II-list-unsignedShort-length-3-1 tokoe:invalid" result="pass"/><test-case name="19615NISTXML-SV-II-list-unsignedShort-length-3-2 tokoe:invalid" result="pass"/><test-case name="19616NISTXML-SV-II-list-unsignedShort-length-3-3 tokoe:invalid" result="pass"/><test-case name="19617NISTXML-SV-II-list-unsignedShort-length-3-4 tokoe:invalid" result="pass"/><test-case name="19618NISTXML-SV-II-list-unsignedShort-length-3-5 tokoe:invalid" result="pass"/><test-case name="19619NISTSchema-SV-II-list-unsignedShort-length-4 tokoe:valid" result="pass"/><test-case name="19620NISTXML-SV-II-list-unsignedShort-length-4-1 tokoe:invalid" result="pass"/><test-case name="19621NISTXML-SV-II-list-unsignedShort-length-4-2 tokoe:invalid" result="pass"/><test-case name="19622NISTXML-SV-II-list-unsignedShort-length-4-3 tokoe:invalid" result="pass"/><test-case name="19623NISTXML-SV-II-list-unsignedShort-length-4-4 tokoe:invalid" result="pass"/><test-case name="19624NISTXML-SV-II-list-unsignedShort-length-4-5 tokoe:invalid" result="pass"/><test-case name="19625NISTSchema-SV-II-list-unsignedShort-length-5 tokoe:valid" result="pass"/><test-case name="19626NISTXML-SV-II-list-unsignedShort-length-5-1 tokoe:invalid" result="pass"/><test-case name="19627NISTXML-SV-II-list-unsignedShort-length-5-2 tokoe:invalid" result="pass"/><test-case name="19628NISTXML-SV-II-list-unsignedShort-length-5-3 tokoe:invalid" result="pass"/><test-case name="19629NISTXML-SV-II-list-unsignedShort-length-5-4 tokoe:invalid" result="pass"/><test-case name="19630NISTXML-SV-II-list-unsignedShort-length-5-5 tokoe:invalid" result="pass"/><test-case name="19631NISTSchema-SV-II-list-unsignedShort-pattern-1 tokoe:valid" result="pass"/><test-case name="19632NISTXML-SV-II-list-unsignedShort-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="19633NISTXML-SV-II-list-unsignedShort-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="19634NISTXML-SV-II-list-unsignedShort-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="19635NISTXML-SV-II-list-unsignedShort-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="19636NISTXML-SV-II-list-unsignedShort-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="19637NISTSchema-SV-II-list-unsignedShort-pattern-2 tokoe:valid" result="pass"/><test-case name="19638NISTXML-SV-II-list-unsignedShort-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="19639NISTXML-SV-II-list-unsignedShort-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="19640NISTXML-SV-II-list-unsignedShort-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="19641NISTXML-SV-II-list-unsignedShort-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="19642NISTXML-SV-II-list-unsignedShort-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="19643NISTSchema-SV-II-list-unsignedShort-pattern-3 tokoe:valid" result="pass"/><test-case name="19644NISTXML-SV-II-list-unsignedShort-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="19645NISTXML-SV-II-list-unsignedShort-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="19646NISTXML-SV-II-list-unsignedShort-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="19647NISTXML-SV-II-list-unsignedShort-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="19648NISTXML-SV-II-list-unsignedShort-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="19649NISTSchema-SV-II-list-unsignedShort-pattern-4 tokoe:valid" result="pass"/><test-case name="19650NISTXML-SV-II-list-unsignedShort-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="19651NISTXML-SV-II-list-unsignedShort-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="19652NISTXML-SV-II-list-unsignedShort-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="19653NISTXML-SV-II-list-unsignedShort-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="19654NISTXML-SV-II-list-unsignedShort-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="19655NISTSchema-SV-II-list-unsignedShort-pattern-5 tokoe:valid" result="pass"/><test-case name="19656NISTXML-SV-II-list-unsignedShort-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="19657NISTXML-SV-II-list-unsignedShort-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="19658NISTXML-SV-II-list-unsignedShort-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="19659NISTXML-SV-II-list-unsignedShort-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="19660NISTXML-SV-II-list-unsignedShort-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="19661NISTSchema-SV-II-list-unsignedShort-enumeration-1 tokoe:valid" result="pass"/><test-case name="19662NISTXML-SV-II-list-unsignedShort-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="19663NISTXML-SV-II-list-unsignedShort-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="19664NISTXML-SV-II-list-unsignedShort-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="19665NISTXML-SV-II-list-unsignedShort-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="19666NISTXML-SV-II-list-unsignedShort-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="19667NISTSchema-SV-II-list-unsignedShort-enumeration-2 tokoe:valid" result="pass"/><test-case name="19668NISTXML-SV-II-list-unsignedShort-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="19669NISTXML-SV-II-list-unsignedShort-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="19670NISTXML-SV-II-list-unsignedShort-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="19671NISTXML-SV-II-list-unsignedShort-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="19672NISTXML-SV-II-list-unsignedShort-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="19673NISTSchema-SV-II-list-unsignedShort-enumeration-3 tokoe:valid" result="pass"/><test-case name="19674NISTXML-SV-II-list-unsignedShort-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="19675NISTXML-SV-II-list-unsignedShort-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="19676NISTXML-SV-II-list-unsignedShort-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="19677NISTXML-SV-II-list-unsignedShort-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="19678NISTXML-SV-II-list-unsignedShort-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="19679NISTSchema-SV-II-list-unsignedShort-enumeration-4 tokoe:valid" result="pass"/><test-case name="19680NISTXML-SV-II-list-unsignedShort-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="19681NISTXML-SV-II-list-unsignedShort-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="19682NISTXML-SV-II-list-unsignedShort-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="19683NISTXML-SV-II-list-unsignedShort-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="19684NISTXML-SV-II-list-unsignedShort-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="19685NISTSchema-SV-II-list-unsignedShort-enumeration-5 tokoe:valid" result="pass"/><test-case name="19686NISTXML-SV-II-list-unsignedShort-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="19687NISTXML-SV-II-list-unsignedShort-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="19688NISTXML-SV-II-list-unsignedShort-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="19689NISTXML-SV-II-list-unsignedShort-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="19690NISTXML-SV-II-list-unsignedShort-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="19691NISTSchema-SV-II-list-unsignedByte-maxLength-1 tokoe:valid" result="pass"/><test-case name="19692NISTXML-SV-II-list-unsignedByte-maxLength-1-1 tokoe:invalid" result="pass"/><test-case name="19693NISTXML-SV-II-list-unsignedByte-maxLength-1-2 tokoe:invalid" result="pass"/><test-case name="19694NISTXML-SV-II-list-unsignedByte-maxLength-1-3 tokoe:invalid" result="pass"/><test-case name="19695NISTXML-SV-II-list-unsignedByte-maxLength-1-4 tokoe:invalid" result="pass"/><test-case name="19696NISTXML-SV-II-list-unsignedByte-maxLength-1-5 tokoe:invalid" result="pass"/><test-case name="19697NISTSchema-SV-II-list-unsignedByte-maxLength-2 tokoe:valid" result="pass"/><test-case name="19698NISTXML-SV-II-list-unsignedByte-maxLength-2-1 tokoe:invalid" result="pass"/><test-case name="19699NISTXML-SV-II-list-unsignedByte-maxLength-2-2 tokoe:invalid" result="pass"/><test-case name="19700NISTXML-SV-II-list-unsignedByte-maxLength-2-3 tokoe:invalid" result="pass"/><test-case name="19701NISTXML-SV-II-list-unsignedByte-maxLength-2-4 tokoe:invalid" result="pass"/><test-case name="19702NISTXML-SV-II-list-unsignedByte-maxLength-2-5 tokoe:invalid" result="pass"/><test-case name="19703NISTSchema-SV-II-list-unsignedByte-maxLength-3 tokoe:valid" result="pass"/><test-case name="19704NISTXML-SV-II-list-unsignedByte-maxLength-3-1 tokoe:invalid" result="pass"/><test-case name="19705NISTXML-SV-II-list-unsignedByte-maxLength-3-2 tokoe:invalid" result="pass"/><test-case name="19706NISTXML-SV-II-list-unsignedByte-maxLength-3-3 tokoe:invalid" result="pass"/><test-case name="19707NISTXML-SV-II-list-unsignedByte-maxLength-3-4 tokoe:invalid" result="pass"/><test-case name="19708NISTXML-SV-II-list-unsignedByte-maxLength-3-5 tokoe:invalid" result="pass"/><test-case name="19709NISTSchema-SV-II-list-unsignedByte-maxLength-4 tokoe:valid" result="pass"/><test-case name="19710NISTXML-SV-II-list-unsignedByte-maxLength-4-1 tokoe:invalid" result="pass"/><test-case name="19711NISTXML-SV-II-list-unsignedByte-maxLength-4-2 tokoe:invalid" result="pass"/><test-case name="19712NISTXML-SV-II-list-unsignedByte-maxLength-4-3 tokoe:invalid" result="pass"/><test-case name="19713NISTXML-SV-II-list-unsignedByte-maxLength-4-4 tokoe:invalid" result="pass"/><test-case name="19714NISTXML-SV-II-list-unsignedByte-maxLength-4-5 tokoe:invalid" result="pass"/><test-case name="19715NISTSchema-SV-II-list-unsignedByte-maxLength-5 tokoe:valid" result="pass"/><test-case name="19716NISTXML-SV-II-list-unsignedByte-maxLength-5-1 tokoe:invalid" result="pass"/><test-case name="19717NISTXML-SV-II-list-unsignedByte-maxLength-5-2 tokoe:invalid" result="pass"/><test-case name="19718NISTXML-SV-II-list-unsignedByte-maxLength-5-3 tokoe:invalid" result="pass"/><test-case name="19719NISTXML-SV-II-list-unsignedByte-maxLength-5-4 tokoe:invalid" result="pass"/><test-case name="19720NISTXML-SV-II-list-unsignedByte-maxLength-5-5 tokoe:invalid" result="pass"/><test-case name="19721NISTSchema-SV-II-list-unsignedByte-minLength-1 tokoe:valid" result="pass"/><test-case name="19722NISTXML-SV-II-list-unsignedByte-minLength-1-1 tokoe:invalid" result="pass"/><test-case name="19723NISTXML-SV-II-list-unsignedByte-minLength-1-2 tokoe:invalid" result="pass"/><test-case name="19724NISTXML-SV-II-list-unsignedByte-minLength-1-3 tokoe:invalid" result="pass"/><test-case name="19725NISTXML-SV-II-list-unsignedByte-minLength-1-4 tokoe:invalid" result="pass"/><test-case name="19726NISTXML-SV-II-list-unsignedByte-minLength-1-5 tokoe:invalid" result="pass"/><test-case name="19727NISTSchema-SV-II-list-unsignedByte-minLength-2 tokoe:valid" result="pass"/><test-case name="19728NISTXML-SV-II-list-unsignedByte-minLength-2-1 tokoe:invalid" result="pass"/><test-case name="19729NISTXML-SV-II-list-unsignedByte-minLength-2-2 tokoe:invalid" result="pass"/><test-case name="19730NISTXML-SV-II-list-unsignedByte-minLength-2-3 tokoe:invalid" result="pass"/><test-case name="19731NISTXML-SV-II-list-unsignedByte-minLength-2-4 tokoe:invalid" result="pass"/><test-case name="19732NISTXML-SV-II-list-unsignedByte-minLength-2-5 tokoe:invalid" result="pass"/><test-case name="19733NISTSchema-SV-II-list-unsignedByte-minLength-3 tokoe:valid" result="pass"/><test-case name="19734NISTXML-SV-II-list-unsignedByte-minLength-3-1 tokoe:invalid" result="pass"/><test-case name="19735NISTXML-SV-II-list-unsignedByte-minLength-3-2 tokoe:invalid" result="pass"/><test-case name="19736NISTXML-SV-II-list-unsignedByte-minLength-3-3 tokoe:invalid" result="pass"/><test-case name="19737NISTXML-SV-II-list-unsignedByte-minLength-3-4 tokoe:invalid" result="pass"/><test-case name="19738NISTXML-SV-II-list-unsignedByte-minLength-3-5 tokoe:invalid" result="pass"/><test-case name="19739NISTSchema-SV-II-list-unsignedByte-minLength-4 tokoe:valid" result="pass"/><test-case name="19740NISTXML-SV-II-list-unsignedByte-minLength-4-1 tokoe:invalid" result="pass"/><test-case name="19741NISTXML-SV-II-list-unsignedByte-minLength-4-2 tokoe:invalid" result="pass"/><test-case name="19742NISTXML-SV-II-list-unsignedByte-minLength-4-3 tokoe:invalid" result="pass"/><test-case name="19743NISTXML-SV-II-list-unsignedByte-minLength-4-4 tokoe:invalid" result="pass"/><test-case name="19744NISTXML-SV-II-list-unsignedByte-minLength-4-5 tokoe:invalid" result="pass"/><test-case name="19745NISTSchema-SV-II-list-unsignedByte-minLength-5 tokoe:valid" result="pass"/><test-case name="19746NISTXML-SV-II-list-unsignedByte-minLength-5-1 tokoe:invalid" result="pass"/><test-case name="19747NISTXML-SV-II-list-unsignedByte-minLength-5-2 tokoe:invalid" result="pass"/><test-case name="19748NISTXML-SV-II-list-unsignedByte-minLength-5-3 tokoe:invalid" result="pass"/><test-case name="19749NISTXML-SV-II-list-unsignedByte-minLength-5-4 tokoe:invalid" result="pass"/><test-case name="19750NISTXML-SV-II-list-unsignedByte-minLength-5-5 tokoe:invalid" result="pass"/><test-case name="19751NISTSchema-SV-II-list-unsignedByte-length-1 tokoe:valid" result="pass"/><test-case name="19752NISTXML-SV-II-list-unsignedByte-length-1-1 tokoe:invalid" result="pass"/><test-case name="19753NISTXML-SV-II-list-unsignedByte-length-1-2 tokoe:invalid" result="pass"/><test-case name="19754NISTXML-SV-II-list-unsignedByte-length-1-3 tokoe:invalid" result="pass"/><test-case name="19755NISTXML-SV-II-list-unsignedByte-length-1-4 tokoe:invalid" result="pass"/><test-case name="19756NISTXML-SV-II-list-unsignedByte-length-1-5 tokoe:invalid" result="pass"/><test-case name="19757NISTSchema-SV-II-list-unsignedByte-length-2 tokoe:valid" result="pass"/><test-case name="19758NISTXML-SV-II-list-unsignedByte-length-2-1 tokoe:invalid" result="pass"/><test-case name="19759NISTXML-SV-II-list-unsignedByte-length-2-2 tokoe:invalid" result="pass"/><test-case name="19760NISTXML-SV-II-list-unsignedByte-length-2-3 tokoe:invalid" result="pass"/><test-case name="19761NISTXML-SV-II-list-unsignedByte-length-2-4 tokoe:invalid" result="pass"/><test-case name="19762NISTXML-SV-II-list-unsignedByte-length-2-5 tokoe:invalid" result="pass"/><test-case name="19763NISTSchema-SV-II-list-unsignedByte-length-3 tokoe:valid" result="pass"/><test-case name="19764NISTXML-SV-II-list-unsignedByte-length-3-1 tokoe:invalid" result="pass"/><test-case name="19765NISTXML-SV-II-list-unsignedByte-length-3-2 tokoe:invalid" result="pass"/><test-case name="19766NISTXML-SV-II-list-unsignedByte-length-3-3 tokoe:invalid" result="pass"/><test-case name="19767NISTXML-SV-II-list-unsignedByte-length-3-4 tokoe:invalid" result="pass"/><test-case name="19768NISTXML-SV-II-list-unsignedByte-length-3-5 tokoe:invalid" result="pass"/><test-case name="19769NISTSchema-SV-II-list-unsignedByte-length-4 tokoe:valid" result="pass"/><test-case name="19770NISTXML-SV-II-list-unsignedByte-length-4-1 tokoe:invalid" result="pass"/><test-case name="19771NISTXML-SV-II-list-unsignedByte-length-4-2 tokoe:invalid" result="pass"/><test-case name="19772NISTXML-SV-II-list-unsignedByte-length-4-3 tokoe:invalid" result="pass"/><test-case name="19773NISTXML-SV-II-list-unsignedByte-length-4-4 tokoe:invalid" result="pass"/><test-case name="19774NISTXML-SV-II-list-unsignedByte-length-4-5 tokoe:invalid" result="pass"/><test-case name="19775NISTSchema-SV-II-list-unsignedByte-length-5 tokoe:valid" result="pass"/><test-case name="19776NISTXML-SV-II-list-unsignedByte-length-5-1 tokoe:invalid" result="pass"/><test-case name="19777NISTXML-SV-II-list-unsignedByte-length-5-2 tokoe:invalid" result="pass"/><test-case name="19778NISTXML-SV-II-list-unsignedByte-length-5-3 tokoe:invalid" result="pass"/><test-case name="19779NISTXML-SV-II-list-unsignedByte-length-5-4 tokoe:invalid" result="pass"/><test-case name="19780NISTXML-SV-II-list-unsignedByte-length-5-5 tokoe:invalid" result="pass"/><test-case name="19781NISTSchema-SV-II-list-unsignedByte-pattern-1 tokoe:valid" result="pass"/><test-case name="19782NISTXML-SV-II-list-unsignedByte-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="19783NISTXML-SV-II-list-unsignedByte-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="19784NISTXML-SV-II-list-unsignedByte-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="19785NISTXML-SV-II-list-unsignedByte-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="19786NISTXML-SV-II-list-unsignedByte-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="19787NISTSchema-SV-II-list-unsignedByte-pattern-2 tokoe:valid" result="pass"/><test-case name="19788NISTXML-SV-II-list-unsignedByte-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="19789NISTXML-SV-II-list-unsignedByte-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="19790NISTXML-SV-II-list-unsignedByte-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="19791NISTXML-SV-II-list-unsignedByte-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="19792NISTXML-SV-II-list-unsignedByte-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="19793NISTSchema-SV-II-list-unsignedByte-pattern-3 tokoe:valid" result="pass"/><test-case name="19794NISTXML-SV-II-list-unsignedByte-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="19795NISTXML-SV-II-list-unsignedByte-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="19796NISTXML-SV-II-list-unsignedByte-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="19797NISTXML-SV-II-list-unsignedByte-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="19798NISTXML-SV-II-list-unsignedByte-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="19799NISTSchema-SV-II-list-unsignedByte-pattern-4 tokoe:valid" result="pass"/><test-case name="19800NISTXML-SV-II-list-unsignedByte-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="19801NISTXML-SV-II-list-unsignedByte-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="19802NISTXML-SV-II-list-unsignedByte-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="19803NISTXML-SV-II-list-unsignedByte-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="19804NISTXML-SV-II-list-unsignedByte-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="19805NISTSchema-SV-II-list-unsignedByte-pattern-5 tokoe:valid" result="pass"/><test-case name="19806NISTXML-SV-II-list-unsignedByte-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="19807NISTXML-SV-II-list-unsignedByte-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="19808NISTXML-SV-II-list-unsignedByte-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="19809NISTXML-SV-II-list-unsignedByte-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="19810NISTXML-SV-II-list-unsignedByte-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="19811NISTSchema-SV-II-list-unsignedByte-enumeration-1 tokoe:valid" result="pass"/><test-case name="19812NISTXML-SV-II-list-unsignedByte-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="19813NISTXML-SV-II-list-unsignedByte-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="19814NISTXML-SV-II-list-unsignedByte-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="19815NISTXML-SV-II-list-unsignedByte-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="19816NISTXML-SV-II-list-unsignedByte-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="19817NISTSchema-SV-II-list-unsignedByte-enumeration-2 tokoe:valid" result="pass"/><test-case name="19818NISTXML-SV-II-list-unsignedByte-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="19819NISTXML-SV-II-list-unsignedByte-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="19820NISTXML-SV-II-list-unsignedByte-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="19821NISTXML-SV-II-list-unsignedByte-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="19822NISTXML-SV-II-list-unsignedByte-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="19823NISTSchema-SV-II-list-unsignedByte-enumeration-3 tokoe:valid" result="pass"/><test-case name="19824NISTXML-SV-II-list-unsignedByte-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="19825NISTXML-SV-II-list-unsignedByte-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="19826NISTXML-SV-II-list-unsignedByte-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="19827NISTXML-SV-II-list-unsignedByte-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="19828NISTXML-SV-II-list-unsignedByte-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="19829NISTSchema-SV-II-list-unsignedByte-enumeration-4 tokoe:valid" result="pass"/><test-case name="19830NISTXML-SV-II-list-unsignedByte-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="19831NISTXML-SV-II-list-unsignedByte-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="19832NISTXML-SV-II-list-unsignedByte-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="19833NISTXML-SV-II-list-unsignedByte-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="19834NISTXML-SV-II-list-unsignedByte-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="19835NISTSchema-SV-II-list-unsignedByte-enumeration-5 tokoe:valid" result="pass"/><test-case name="19836NISTXML-SV-II-list-unsignedByte-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="19837NISTXML-SV-II-list-unsignedByte-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="19838NISTXML-SV-II-list-unsignedByte-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="19839NISTXML-SV-II-list-unsignedByte-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="19840NISTXML-SV-II-list-unsignedByte-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="19841NISTSchema-SV-II-list-positiveInteger-maxLength-1 tokoe:valid" result="pass"/><test-case name="19842NISTXML-SV-II-list-positiveInteger-maxLength-1-1 tokoe:invalid" result="pass"/><test-case name="19843NISTXML-SV-II-list-positiveInteger-maxLength-1-2 tokoe:invalid" result="pass"/><test-case name="19844NISTXML-SV-II-list-positiveInteger-maxLength-1-3 tokoe:invalid" result="pass"/><test-case name="19845NISTXML-SV-II-list-positiveInteger-maxLength-1-4 tokoe:invalid" result="pass"/><test-case name="19846NISTXML-SV-II-list-positiveInteger-maxLength-1-5 tokoe:invalid" result="pass"/><test-case name="19847NISTSchema-SV-II-list-positiveInteger-maxLength-2 tokoe:valid" result="pass"/><test-case name="19848NISTXML-SV-II-list-positiveInteger-maxLength-2-1 tokoe:invalid" result="pass"/><test-case name="19849NISTXML-SV-II-list-positiveInteger-maxLength-2-2 tokoe:invalid" result="pass"/><test-case name="19850NISTXML-SV-II-list-positiveInteger-maxLength-2-3 tokoe:invalid" result="pass"/><test-case name="19851NISTXML-SV-II-list-positiveInteger-maxLength-2-4 tokoe:invalid" result="pass"/><test-case name="19852NISTXML-SV-II-list-positiveInteger-maxLength-2-5 tokoe:invalid" result="pass"/><test-case name="19853NISTSchema-SV-II-list-positiveInteger-maxLength-3 tokoe:valid" result="pass"/><test-case name="19854NISTXML-SV-II-list-positiveInteger-maxLength-3-1 tokoe:invalid" result="pass"/><test-case name="19855NISTXML-SV-II-list-positiveInteger-maxLength-3-2 tokoe:invalid" result="pass"/><test-case name="19856NISTXML-SV-II-list-positiveInteger-maxLength-3-3 tokoe:invalid" result="pass"/><test-case name="19857NISTXML-SV-II-list-positiveInteger-maxLength-3-4 tokoe:invalid" result="pass"/><test-case name="19858NISTXML-SV-II-list-positiveInteger-maxLength-3-5 tokoe:invalid" result="pass"/><test-case name="19859NISTSchema-SV-II-list-positiveInteger-maxLength-4 tokoe:valid" result="pass"/><test-case name="19860NISTXML-SV-II-list-positiveInteger-maxLength-4-1 tokoe:invalid" result="pass"/><test-case name="19861NISTXML-SV-II-list-positiveInteger-maxLength-4-2 tokoe:invalid" result="pass"/><test-case name="19862NISTXML-SV-II-list-positiveInteger-maxLength-4-3 tokoe:invalid" result="pass"/><test-case name="19863NISTXML-SV-II-list-positiveInteger-maxLength-4-4 tokoe:invalid" result="pass"/><test-case name="19864NISTXML-SV-II-list-positiveInteger-maxLength-4-5 tokoe:invalid" result="pass"/><test-case name="19865NISTSchema-SV-II-list-positiveInteger-maxLength-5 tokoe:valid" result="pass"/><test-case name="19866NISTXML-SV-II-list-positiveInteger-maxLength-5-1 tokoe:invalid" result="pass"/><test-case name="19867NISTXML-SV-II-list-positiveInteger-maxLength-5-2 tokoe:invalid" result="pass"/><test-case name="19868NISTXML-SV-II-list-positiveInteger-maxLength-5-3 tokoe:invalid" result="pass"/><test-case name="19869NISTXML-SV-II-list-positiveInteger-maxLength-5-4 tokoe:invalid" result="pass"/><test-case name="19870NISTXML-SV-II-list-positiveInteger-maxLength-5-5 tokoe:invalid" result="pass"/><test-case name="19871NISTSchema-SV-II-list-positiveInteger-minLength-1 tokoe:valid" result="pass"/><test-case name="19872NISTXML-SV-II-list-positiveInteger-minLength-1-1 tokoe:invalid" result="pass"/><test-case name="19873NISTXML-SV-II-list-positiveInteger-minLength-1-2 tokoe:invalid" result="pass"/><test-case name="19874NISTXML-SV-II-list-positiveInteger-minLength-1-3 tokoe:invalid" result="pass"/><test-case name="19875NISTXML-SV-II-list-positiveInteger-minLength-1-4 tokoe:invalid" result="pass"/><test-case name="19876NISTXML-SV-II-list-positiveInteger-minLength-1-5 tokoe:invalid" result="pass"/><test-case name="19877NISTSchema-SV-II-list-positiveInteger-minLength-2 tokoe:valid" result="pass"/><test-case name="19878NISTXML-SV-II-list-positiveInteger-minLength-2-1 tokoe:invalid" result="pass"/><test-case name="19879NISTXML-SV-II-list-positiveInteger-minLength-2-2 tokoe:invalid" result="pass"/><test-case name="19880NISTXML-SV-II-list-positiveInteger-minLength-2-3 tokoe:invalid" result="pass"/><test-case name="19881NISTXML-SV-II-list-positiveInteger-minLength-2-4 tokoe:invalid" result="pass"/><test-case name="19882NISTXML-SV-II-list-positiveInteger-minLength-2-5 tokoe:invalid" result="pass"/><test-case name="19883NISTSchema-SV-II-list-positiveInteger-minLength-3 tokoe:valid" result="pass"/><test-case name="19884NISTXML-SV-II-list-positiveInteger-minLength-3-1 tokoe:invalid" result="pass"/><test-case name="19885NISTXML-SV-II-list-positiveInteger-minLength-3-2 tokoe:invalid" result="pass"/><test-case name="19886NISTXML-SV-II-list-positiveInteger-minLength-3-3 tokoe:invalid" result="pass"/><test-case name="19887NISTXML-SV-II-list-positiveInteger-minLength-3-4 tokoe:invalid" result="pass"/><test-case name="19888NISTXML-SV-II-list-positiveInteger-minLength-3-5 tokoe:invalid" result="pass"/><test-case name="19889NISTSchema-SV-II-list-positiveInteger-minLength-4 tokoe:valid" result="pass"/><test-case name="19890NISTXML-SV-II-list-positiveInteger-minLength-4-1 tokoe:invalid" result="pass"/><test-case name="19891NISTXML-SV-II-list-positiveInteger-minLength-4-2 tokoe:invalid" result="pass"/><test-case name="19892NISTXML-SV-II-list-positiveInteger-minLength-4-3 tokoe:invalid" result="pass"/><test-case name="19893NISTXML-SV-II-list-positiveInteger-minLength-4-4 tokoe:invalid" result="pass"/><test-case name="19894NISTXML-SV-II-list-positiveInteger-minLength-4-5 tokoe:invalid" result="pass"/><test-case name="19895NISTSchema-SV-II-list-positiveInteger-minLength-5 tokoe:valid" result="pass"/><test-case name="19896NISTXML-SV-II-list-positiveInteger-minLength-5-1 tokoe:invalid" result="pass"/><test-case name="19897NISTXML-SV-II-list-positiveInteger-minLength-5-2 tokoe:invalid" result="pass"/><test-case name="19898NISTXML-SV-II-list-positiveInteger-minLength-5-3 tokoe:invalid" result="pass"/><test-case name="19899NISTXML-SV-II-list-positiveInteger-minLength-5-4 tokoe:invalid" result="pass"/><test-case name="19900NISTXML-SV-II-list-positiveInteger-minLength-5-5 tokoe:invalid" result="pass"/><test-case name="19901NISTSchema-SV-II-list-positiveInteger-length-1 tokoe:valid" result="pass"/><test-case name="19902NISTXML-SV-II-list-positiveInteger-length-1-1 tokoe:invalid" result="pass"/><test-case name="19903NISTXML-SV-II-list-positiveInteger-length-1-2 tokoe:invalid" result="pass"/><test-case name="19904NISTXML-SV-II-list-positiveInteger-length-1-3 tokoe:invalid" result="pass"/><test-case name="19905NISTXML-SV-II-list-positiveInteger-length-1-4 tokoe:invalid" result="pass"/><test-case name="19906NISTXML-SV-II-list-positiveInteger-length-1-5 tokoe:invalid" result="pass"/><test-case name="19907NISTSchema-SV-II-list-positiveInteger-length-2 tokoe:valid" result="pass"/><test-case name="19908NISTXML-SV-II-list-positiveInteger-length-2-1 tokoe:invalid" result="pass"/><test-case name="19909NISTXML-SV-II-list-positiveInteger-length-2-2 tokoe:invalid" result="pass"/><test-case name="19910NISTXML-SV-II-list-positiveInteger-length-2-3 tokoe:invalid" result="pass"/><test-case name="19911NISTXML-SV-II-list-positiveInteger-length-2-4 tokoe:invalid" result="pass"/><test-case name="19912NISTXML-SV-II-list-positiveInteger-length-2-5 tokoe:invalid" result="pass"/><test-case name="19913NISTSchema-SV-II-list-positiveInteger-length-3 tokoe:valid" result="pass"/><test-case name="19914NISTXML-SV-II-list-positiveInteger-length-3-1 tokoe:invalid" result="pass"/><test-case name="19915NISTXML-SV-II-list-positiveInteger-length-3-2 tokoe:invalid" result="pass"/><test-case name="19916NISTXML-SV-II-list-positiveInteger-length-3-3 tokoe:invalid" result="pass"/><test-case name="19917NISTXML-SV-II-list-positiveInteger-length-3-4 tokoe:invalid" result="pass"/><test-case name="19918NISTXML-SV-II-list-positiveInteger-length-3-5 tokoe:invalid" result="pass"/><test-case name="19919NISTSchema-SV-II-list-positiveInteger-length-4 tokoe:valid" result="pass"/><test-case name="19920NISTXML-SV-II-list-positiveInteger-length-4-1 tokoe:invalid" result="pass"/><test-case name="19921NISTXML-SV-II-list-positiveInteger-length-4-2 tokoe:invalid" result="pass"/><test-case name="19922NISTXML-SV-II-list-positiveInteger-length-4-3 tokoe:invalid" result="pass"/><test-case name="19923NISTXML-SV-II-list-positiveInteger-length-4-4 tokoe:invalid" result="pass"/><test-case name="19924NISTXML-SV-II-list-positiveInteger-length-4-5 tokoe:invalid" result="pass"/><test-case name="19925NISTSchema-SV-II-list-positiveInteger-length-5 tokoe:valid" result="pass"/><test-case name="19926NISTXML-SV-II-list-positiveInteger-length-5-1 tokoe:invalid" result="pass"/><test-case name="19927NISTXML-SV-II-list-positiveInteger-length-5-2 tokoe:invalid" result="pass"/><test-case name="19928NISTXML-SV-II-list-positiveInteger-length-5-3 tokoe:invalid" result="pass"/><test-case name="19929NISTXML-SV-II-list-positiveInteger-length-5-4 tokoe:invalid" result="pass"/><test-case name="19930NISTXML-SV-II-list-positiveInteger-length-5-5 tokoe:invalid" result="pass"/><test-case name="19931NISTSchema-SV-II-list-positiveInteger-pattern-1 tokoe:valid" result="pass"/><test-case name="19932NISTXML-SV-II-list-positiveInteger-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="19933NISTXML-SV-II-list-positiveInteger-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="19934NISTXML-SV-II-list-positiveInteger-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="19935NISTXML-SV-II-list-positiveInteger-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="19936NISTXML-SV-II-list-positiveInteger-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="19937NISTSchema-SV-II-list-positiveInteger-pattern-2 tokoe:valid" result="pass"/><test-case name="19938NISTXML-SV-II-list-positiveInteger-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="19939NISTXML-SV-II-list-positiveInteger-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="19940NISTXML-SV-II-list-positiveInteger-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="19941NISTXML-SV-II-list-positiveInteger-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="19942NISTXML-SV-II-list-positiveInteger-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="19943NISTSchema-SV-II-list-positiveInteger-pattern-3 tokoe:valid" result="pass"/><test-case name="19944NISTXML-SV-II-list-positiveInteger-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="19945NISTXML-SV-II-list-positiveInteger-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="19946NISTXML-SV-II-list-positiveInteger-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="19947NISTXML-SV-II-list-positiveInteger-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="19948NISTXML-SV-II-list-positiveInteger-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="19949NISTSchema-SV-II-list-positiveInteger-pattern-4 tokoe:valid" result="pass"/><test-case name="19950NISTXML-SV-II-list-positiveInteger-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="19951NISTXML-SV-II-list-positiveInteger-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="19952NISTXML-SV-II-list-positiveInteger-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="19953NISTXML-SV-II-list-positiveInteger-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="19954NISTXML-SV-II-list-positiveInteger-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="19955NISTSchema-SV-II-list-positiveInteger-pattern-5 tokoe:valid" result="pass"/><test-case name="19956NISTXML-SV-II-list-positiveInteger-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="19957NISTXML-SV-II-list-positiveInteger-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="19958NISTXML-SV-II-list-positiveInteger-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="19959NISTXML-SV-II-list-positiveInteger-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="19960NISTXML-SV-II-list-positiveInteger-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="19961NISTSchema-SV-II-list-positiveInteger-enumeration-1 tokoe:valid" result="pass"/><test-case name="19962NISTXML-SV-II-list-positiveInteger-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="19963NISTXML-SV-II-list-positiveInteger-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="19964NISTXML-SV-II-list-positiveInteger-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="19965NISTXML-SV-II-list-positiveInteger-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="19966NISTXML-SV-II-list-positiveInteger-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="19967NISTSchema-SV-II-list-positiveInteger-enumeration-2 tokoe:valid" result="pass"/><test-case name="19968NISTXML-SV-II-list-positiveInteger-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="19969NISTXML-SV-II-list-positiveInteger-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="19970NISTXML-SV-II-list-positiveInteger-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="19971NISTXML-SV-II-list-positiveInteger-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="19972NISTXML-SV-II-list-positiveInteger-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="19973NISTSchema-SV-II-list-positiveInteger-enumeration-3 tokoe:valid" result="pass"/><test-case name="19974NISTXML-SV-II-list-positiveInteger-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="19975NISTXML-SV-II-list-positiveInteger-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="19976NISTXML-SV-II-list-positiveInteger-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="19977NISTXML-SV-II-list-positiveInteger-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="19978NISTXML-SV-II-list-positiveInteger-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="19979NISTSchema-SV-II-list-positiveInteger-enumeration-4 tokoe:valid" result="pass"/><test-case name="19980NISTXML-SV-II-list-positiveInteger-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="19981NISTXML-SV-II-list-positiveInteger-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="19982NISTXML-SV-II-list-positiveInteger-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="19983NISTXML-SV-II-list-positiveInteger-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="19984NISTXML-SV-II-list-positiveInteger-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="19985NISTSchema-SV-II-list-positiveInteger-enumeration-5 tokoe:valid" result="pass"/><test-case name="19986NISTXML-SV-II-list-positiveInteger-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="19987NISTXML-SV-II-list-positiveInteger-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="19988NISTXML-SV-II-list-positiveInteger-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="19989NISTXML-SV-II-list-positiveInteger-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="19990NISTXML-SV-II-list-positiveInteger-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="19991NISTSchema-SV-II-list-double-maxLength-1 tokoe:valid" result="pass"/><test-case name="19992NISTXML-SV-II-list-double-maxLength-1-1 tokoe:invalid" result="pass"/><test-case name="19993NISTXML-SV-II-list-double-maxLength-1-2 tokoe:invalid" result="pass"/><test-case name="19994NISTXML-SV-II-list-double-maxLength-1-3 tokoe:invalid" result="pass"/><test-case name="19995NISTXML-SV-II-list-double-maxLength-1-4 tokoe:invalid" result="pass"/><test-case name="19996NISTXML-SV-II-list-double-maxLength-1-5 tokoe:invalid" result="pass"/><test-case name="19997NISTSchema-SV-II-list-double-maxLength-2 tokoe:valid" result="pass"/><test-case name="19998NISTXML-SV-II-list-double-maxLength-2-1 tokoe:invalid" result="pass"/><test-case name="19999NISTXML-SV-II-list-double-maxLength-2-2 tokoe:invalid" result="pass"/><test-case name="20000NISTXML-SV-II-list-double-maxLength-2-3 tokoe:invalid" result="pass"/><test-case name="20001NISTXML-SV-II-list-double-maxLength-2-4 tokoe:invalid" result="pass"/><test-case name="20002NISTXML-SV-II-list-double-maxLength-2-5 tokoe:invalid" result="pass"/><test-case name="20003NISTSchema-SV-II-list-double-maxLength-3 tokoe:valid" result="pass"/><test-case name="20004NISTXML-SV-II-list-double-maxLength-3-1 tokoe:invalid" result="pass"/><test-case name="20005NISTXML-SV-II-list-double-maxLength-3-2 tokoe:invalid" result="pass"/><test-case name="20006NISTXML-SV-II-list-double-maxLength-3-3 tokoe:invalid" result="pass"/><test-case name="20007NISTXML-SV-II-list-double-maxLength-3-4 tokoe:invalid" result="pass"/><test-case name="20008NISTXML-SV-II-list-double-maxLength-3-5 tokoe:invalid" result="pass"/><test-case name="20009NISTSchema-SV-II-list-double-maxLength-4 tokoe:valid" result="pass"/><test-case name="20010NISTXML-SV-II-list-double-maxLength-4-1 tokoe:invalid" result="pass"/><test-case name="20011NISTXML-SV-II-list-double-maxLength-4-2 tokoe:invalid" result="pass"/><test-case name="20012NISTXML-SV-II-list-double-maxLength-4-3 tokoe:invalid" result="pass"/><test-case name="20013NISTXML-SV-II-list-double-maxLength-4-4 tokoe:invalid" result="pass"/><test-case name="20014NISTXML-SV-II-list-double-maxLength-4-5 tokoe:invalid" result="pass"/><test-case name="20015NISTSchema-SV-II-list-double-maxLength-5 tokoe:valid" result="pass"/><test-case name="20016NISTXML-SV-II-list-double-maxLength-5-1 tokoe:invalid" result="pass"/><test-case name="20017NISTXML-SV-II-list-double-maxLength-5-2 tokoe:invalid" result="pass"/><test-case name="20018NISTXML-SV-II-list-double-maxLength-5-3 tokoe:invalid" result="pass"/><test-case name="20019NISTXML-SV-II-list-double-maxLength-5-4 tokoe:invalid" result="pass"/><test-case name="20020NISTXML-SV-II-list-double-maxLength-5-5 tokoe:invalid" result="pass"/><test-case name="20021NISTSchema-SV-II-list-double-minLength-1 tokoe:valid" result="pass"/><test-case name="20022NISTXML-SV-II-list-double-minLength-1-1 tokoe:invalid" result="pass"/><test-case name="20023NISTXML-SV-II-list-double-minLength-1-2 tokoe:invalid" result="pass"/><test-case name="20024NISTXML-SV-II-list-double-minLength-1-3 tokoe:invalid" result="pass"/><test-case name="20025NISTXML-SV-II-list-double-minLength-1-4 tokoe:invalid" result="pass"/><test-case name="20026NISTXML-SV-II-list-double-minLength-1-5 tokoe:invalid" result="pass"/><test-case name="20027NISTSchema-SV-II-list-double-minLength-2 tokoe:valid" result="pass"/><test-case name="20028NISTXML-SV-II-list-double-minLength-2-1 tokoe:invalid" result="pass"/><test-case name="20029NISTXML-SV-II-list-double-minLength-2-2 tokoe:invalid" result="pass"/><test-case name="20030NISTXML-SV-II-list-double-minLength-2-3 tokoe:invalid" result="pass"/><test-case name="20031NISTXML-SV-II-list-double-minLength-2-4 tokoe:invalid" result="pass"/><test-case name="20032NISTXML-SV-II-list-double-minLength-2-5 tokoe:invalid" result="pass"/><test-case name="20033NISTSchema-SV-II-list-double-minLength-3 tokoe:valid" result="pass"/><test-case name="20034NISTXML-SV-II-list-double-minLength-3-1 tokoe:invalid" result="pass"/><test-case name="20035NISTXML-SV-II-list-double-minLength-3-2 tokoe:invalid" result="pass"/><test-case name="20036NISTXML-SV-II-list-double-minLength-3-3 tokoe:invalid" result="pass"/><test-case name="20037NISTXML-SV-II-list-double-minLength-3-4 tokoe:invalid" result="pass"/><test-case name="20038NISTXML-SV-II-list-double-minLength-3-5 tokoe:invalid" result="pass"/><test-case name="20039NISTSchema-SV-II-list-double-minLength-4 tokoe:valid" result="pass"/><test-case name="20040NISTXML-SV-II-list-double-minLength-4-1 tokoe:invalid" result="pass"/><test-case name="20041NISTXML-SV-II-list-double-minLength-4-2 tokoe:invalid" result="pass"/><test-case name="20042NISTXML-SV-II-list-double-minLength-4-3 tokoe:invalid" result="pass"/><test-case name="20043NISTXML-SV-II-list-double-minLength-4-4 tokoe:invalid" result="pass"/><test-case name="20044NISTXML-SV-II-list-double-minLength-4-5 tokoe:invalid" result="pass"/><test-case name="20045NISTSchema-SV-II-list-double-minLength-5 tokoe:valid" result="pass"/><test-case name="20046NISTXML-SV-II-list-double-minLength-5-1 tokoe:invalid" result="pass"/><test-case name="20047NISTXML-SV-II-list-double-minLength-5-2 tokoe:invalid" result="pass"/><test-case name="20048NISTXML-SV-II-list-double-minLength-5-3 tokoe:invalid" result="pass"/><test-case name="20049NISTXML-SV-II-list-double-minLength-5-4 tokoe:invalid" result="pass"/><test-case name="20050NISTXML-SV-II-list-double-minLength-5-5 tokoe:invalid" result="pass"/><test-case name="20051NISTSchema-SV-II-list-double-length-1 tokoe:valid" result="pass"/><test-case name="20052NISTXML-SV-II-list-double-length-1-1 tokoe:invalid" result="pass"/><test-case name="20053NISTXML-SV-II-list-double-length-1-2 tokoe:invalid" result="pass"/><test-case name="20054NISTXML-SV-II-list-double-length-1-3 tokoe:invalid" result="pass"/><test-case name="20055NISTXML-SV-II-list-double-length-1-4 tokoe:invalid" result="pass"/><test-case name="20056NISTXML-SV-II-list-double-length-1-5 tokoe:invalid" result="pass"/><test-case name="20057NISTSchema-SV-II-list-double-length-2 tokoe:valid" result="pass"/><test-case name="20058NISTXML-SV-II-list-double-length-2-1 tokoe:invalid" result="pass"/><test-case name="20059NISTXML-SV-II-list-double-length-2-2 tokoe:invalid" result="pass"/><test-case name="20060NISTXML-SV-II-list-double-length-2-3 tokoe:invalid" result="pass"/><test-case name="20061NISTXML-SV-II-list-double-length-2-4 tokoe:invalid" result="pass"/><test-case name="20062NISTXML-SV-II-list-double-length-2-5 tokoe:invalid" result="pass"/><test-case name="20063NISTSchema-SV-II-list-double-length-3 tokoe:valid" result="pass"/><test-case name="20064NISTXML-SV-II-list-double-length-3-1 tokoe:invalid" result="pass"/><test-case name="20065NISTXML-SV-II-list-double-length-3-2 tokoe:invalid" result="pass"/><test-case name="20066NISTXML-SV-II-list-double-length-3-3 tokoe:invalid" result="pass"/><test-case name="20067NISTXML-SV-II-list-double-length-3-4 tokoe:invalid" result="pass"/><test-case name="20068NISTXML-SV-II-list-double-length-3-5 tokoe:invalid" result="pass"/><test-case name="20069NISTSchema-SV-II-list-double-length-4 tokoe:valid" result="pass"/><test-case name="20070NISTXML-SV-II-list-double-length-4-1 tokoe:invalid" result="pass"/><test-case name="20071NISTXML-SV-II-list-double-length-4-2 tokoe:invalid" result="pass"/><test-case name="20072NISTXML-SV-II-list-double-length-4-3 tokoe:invalid" result="pass"/><test-case name="20073NISTXML-SV-II-list-double-length-4-4 tokoe:invalid" result="pass"/><test-case name="20074NISTXML-SV-II-list-double-length-4-5 tokoe:invalid" result="pass"/><test-case name="20075NISTSchema-SV-II-list-double-length-5 tokoe:valid" result="pass"/><test-case name="20076NISTXML-SV-II-list-double-length-5-1 tokoe:invalid" result="pass"/><test-case name="20077NISTXML-SV-II-list-double-length-5-2 tokoe:invalid" result="pass"/><test-case name="20078NISTXML-SV-II-list-double-length-5-3 tokoe:invalid" result="pass"/><test-case name="20079NISTXML-SV-II-list-double-length-5-4 tokoe:invalid" result="pass"/><test-case name="20080NISTXML-SV-II-list-double-length-5-5 tokoe:invalid" result="pass"/><test-case name="20081NISTSchema-SV-II-list-double-pattern-1 tokoe:valid" result="pass"/><test-case name="20082NISTXML-SV-II-list-double-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="20083NISTXML-SV-II-list-double-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="20084NISTXML-SV-II-list-double-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="20085NISTXML-SV-II-list-double-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="20086NISTXML-SV-II-list-double-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="20087NISTSchema-SV-II-list-double-pattern-2 tokoe:valid" result="pass"/><test-case name="20088NISTXML-SV-II-list-double-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="20089NISTXML-SV-II-list-double-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="20090NISTXML-SV-II-list-double-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="20091NISTXML-SV-II-list-double-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="20092NISTXML-SV-II-list-double-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="20093NISTSchema-SV-II-list-double-pattern-3 tokoe:valid" result="pass"/><test-case name="20094NISTXML-SV-II-list-double-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="20095NISTXML-SV-II-list-double-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="20096NISTXML-SV-II-list-double-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="20097NISTXML-SV-II-list-double-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="20098NISTXML-SV-II-list-double-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="20099NISTSchema-SV-II-list-double-pattern-4 tokoe:valid" result="pass"/><test-case name="20100NISTXML-SV-II-list-double-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="20101NISTXML-SV-II-list-double-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="20102NISTXML-SV-II-list-double-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="20103NISTXML-SV-II-list-double-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="20104NISTXML-SV-II-list-double-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="20105NISTSchema-SV-II-list-double-pattern-5 tokoe:valid" result="pass"/><test-case name="20106NISTXML-SV-II-list-double-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="20107NISTXML-SV-II-list-double-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="20108NISTXML-SV-II-list-double-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="20109NISTXML-SV-II-list-double-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="20110NISTXML-SV-II-list-double-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="20111NISTSchema-SV-II-list-double-enumeration-1 tokoe:valid" result="pass"/><test-case name="20112NISTXML-SV-II-list-double-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="20113NISTXML-SV-II-list-double-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="20114NISTXML-SV-II-list-double-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="20115NISTXML-SV-II-list-double-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="20116NISTXML-SV-II-list-double-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="20117NISTSchema-SV-II-list-double-enumeration-2 tokoe:valid" result="pass"/><test-case name="20118NISTXML-SV-II-list-double-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="20119NISTXML-SV-II-list-double-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="20120NISTXML-SV-II-list-double-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="20121NISTXML-SV-II-list-double-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="20122NISTXML-SV-II-list-double-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="20123NISTSchema-SV-II-list-double-enumeration-3 tokoe:valid" result="pass"/><test-case name="20124NISTXML-SV-II-list-double-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="20125NISTXML-SV-II-list-double-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="20126NISTXML-SV-II-list-double-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="20127NISTXML-SV-II-list-double-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="20128NISTXML-SV-II-list-double-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="20129NISTSchema-SV-II-list-double-enumeration-4 tokoe:valid" result="pass"/><test-case name="20130NISTXML-SV-II-list-double-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="20131NISTXML-SV-II-list-double-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="20132NISTXML-SV-II-list-double-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="20133NISTXML-SV-II-list-double-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="20134NISTXML-SV-II-list-double-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="20135NISTSchema-SV-II-list-double-enumeration-5 tokoe:valid" result="pass"/><test-case name="20136NISTXML-SV-II-list-double-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="20137NISTXML-SV-II-list-double-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="20138NISTXML-SV-II-list-double-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="20139NISTXML-SV-II-list-double-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="20140NISTXML-SV-II-list-double-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="20141NISTSchema-SV-II-list-float-maxLength-1 tokoe:valid" result="pass"/><test-case name="20142NISTXML-SV-II-list-float-maxLength-1-1 tokoe:invalid" result="pass"/><test-case name="20143NISTXML-SV-II-list-float-maxLength-1-2 tokoe:invalid" result="pass"/><test-case name="20144NISTXML-SV-II-list-float-maxLength-1-3 tokoe:invalid" result="pass"/><test-case name="20145NISTXML-SV-II-list-float-maxLength-1-4 tokoe:invalid" result="pass"/><test-case name="20146NISTXML-SV-II-list-float-maxLength-1-5 tokoe:invalid" result="pass"/><test-case name="20147NISTSchema-SV-II-list-float-maxLength-2 tokoe:valid" result="pass"/><test-case name="20148NISTXML-SV-II-list-float-maxLength-2-1 tokoe:invalid" result="pass"/><test-case name="20149NISTXML-SV-II-list-float-maxLength-2-2 tokoe:invalid" result="pass"/><test-case name="20150NISTXML-SV-II-list-float-maxLength-2-3 tokoe:invalid" result="pass"/><test-case name="20151NISTXML-SV-II-list-float-maxLength-2-4 tokoe:invalid" result="pass"/><test-case name="20152NISTXML-SV-II-list-float-maxLength-2-5 tokoe:invalid" result="pass"/><test-case name="20153NISTSchema-SV-II-list-float-maxLength-3 tokoe:valid" result="pass"/><test-case name="20154NISTXML-SV-II-list-float-maxLength-3-1 tokoe:invalid" result="pass"/><test-case name="20155NISTXML-SV-II-list-float-maxLength-3-2 tokoe:invalid" result="pass"/><test-case name="20156NISTXML-SV-II-list-float-maxLength-3-3 tokoe:invalid" result="pass"/><test-case name="20157NISTXML-SV-II-list-float-maxLength-3-4 tokoe:invalid" result="pass"/><test-case name="20158NISTXML-SV-II-list-float-maxLength-3-5 tokoe:invalid" result="pass"/><test-case name="20159NISTSchema-SV-II-list-float-maxLength-4 tokoe:valid" result="pass"/><test-case name="20160NISTXML-SV-II-list-float-maxLength-4-1 tokoe:invalid" result="pass"/><test-case name="20161NISTXML-SV-II-list-float-maxLength-4-2 tokoe:invalid" result="pass"/><test-case name="20162NISTXML-SV-II-list-float-maxLength-4-3 tokoe:invalid" result="pass"/><test-case name="20163NISTXML-SV-II-list-float-maxLength-4-4 tokoe:invalid" result="pass"/><test-case name="20164NISTXML-SV-II-list-float-maxLength-4-5 tokoe:invalid" result="pass"/><test-case name="20165NISTSchema-SV-II-list-float-maxLength-5 tokoe:valid" result="pass"/><test-case name="20166NISTXML-SV-II-list-float-maxLength-5-1 tokoe:invalid" result="pass"/><test-case name="20167NISTXML-SV-II-list-float-maxLength-5-2 tokoe:invalid" result="pass"/><test-case name="20168NISTXML-SV-II-list-float-maxLength-5-3 tokoe:invalid" result="pass"/><test-case name="20169NISTXML-SV-II-list-float-maxLength-5-4 tokoe:invalid" result="pass"/><test-case name="20170NISTXML-SV-II-list-float-maxLength-5-5 tokoe:invalid" result="pass"/><test-case name="20171NISTSchema-SV-II-list-float-minLength-1 tokoe:valid" result="pass"/><test-case name="20172NISTXML-SV-II-list-float-minLength-1-1 tokoe:invalid" result="pass"/><test-case name="20173NISTXML-SV-II-list-float-minLength-1-2 tokoe:invalid" result="pass"/><test-case name="20174NISTXML-SV-II-list-float-minLength-1-3 tokoe:invalid" result="pass"/><test-case name="20175NISTXML-SV-II-list-float-minLength-1-4 tokoe:invalid" result="pass"/><test-case name="20176NISTXML-SV-II-list-float-minLength-1-5 tokoe:invalid" result="pass"/><test-case name="20177NISTSchema-SV-II-list-float-minLength-2 tokoe:valid" result="pass"/><test-case name="20178NISTXML-SV-II-list-float-minLength-2-1 tokoe:invalid" result="pass"/><test-case name="20179NISTXML-SV-II-list-float-minLength-2-2 tokoe:invalid" result="pass"/><test-case name="20180NISTXML-SV-II-list-float-minLength-2-3 tokoe:invalid" result="pass"/><test-case name="20181NISTXML-SV-II-list-float-minLength-2-4 tokoe:invalid" result="pass"/><test-case name="20182NISTXML-SV-II-list-float-minLength-2-5 tokoe:invalid" result="pass"/><test-case name="20183NISTSchema-SV-II-list-float-minLength-3 tokoe:valid" result="pass"/><test-case name="20184NISTXML-SV-II-list-float-minLength-3-1 tokoe:invalid" result="pass"/><test-case name="20185NISTXML-SV-II-list-float-minLength-3-2 tokoe:invalid" result="pass"/><test-case name="20186NISTXML-SV-II-list-float-minLength-3-3 tokoe:invalid" result="pass"/><test-case name="20187NISTXML-SV-II-list-float-minLength-3-4 tokoe:invalid" result="pass"/><test-case name="20188NISTXML-SV-II-list-float-minLength-3-5 tokoe:invalid" result="pass"/><test-case name="20189NISTSchema-SV-II-list-float-minLength-4 tokoe:valid" result="pass"/><test-case name="20190NISTXML-SV-II-list-float-minLength-4-1 tokoe:invalid" result="pass"/><test-case name="20191NISTXML-SV-II-list-float-minLength-4-2 tokoe:invalid" result="pass"/><test-case name="20192NISTXML-SV-II-list-float-minLength-4-3 tokoe:invalid" result="pass"/><test-case name="20193NISTXML-SV-II-list-float-minLength-4-4 tokoe:invalid" result="pass"/><test-case name="20194NISTXML-SV-II-list-float-minLength-4-5 tokoe:invalid" result="pass"/><test-case name="20195NISTSchema-SV-II-list-float-minLength-5 tokoe:valid" result="pass"/><test-case name="20196NISTXML-SV-II-list-float-minLength-5-1 tokoe:invalid" result="pass"/><test-case name="20197NISTXML-SV-II-list-float-minLength-5-2 tokoe:invalid" result="pass"/><test-case name="20198NISTXML-SV-II-list-float-minLength-5-3 tokoe:invalid" result="pass"/><test-case name="20199NISTXML-SV-II-list-float-minLength-5-4 tokoe:invalid" result="pass"/><test-case name="20200NISTXML-SV-II-list-float-minLength-5-5 tokoe:invalid" result="pass"/><test-case name="20201NISTSchema-SV-II-list-float-length-1 tokoe:valid" result="pass"/><test-case name="20202NISTXML-SV-II-list-float-length-1-1 tokoe:invalid" result="pass"/><test-case name="20203NISTXML-SV-II-list-float-length-1-2 tokoe:invalid" result="pass"/><test-case name="20204NISTXML-SV-II-list-float-length-1-3 tokoe:invalid" result="pass"/><test-case name="20205NISTXML-SV-II-list-float-length-1-4 tokoe:invalid" result="pass"/><test-case name="20206NISTXML-SV-II-list-float-length-1-5 tokoe:invalid" result="pass"/><test-case name="20207NISTSchema-SV-II-list-float-length-2 tokoe:valid" result="pass"/><test-case name="20208NISTXML-SV-II-list-float-length-2-1 tokoe:invalid" result="pass"/><test-case name="20209NISTXML-SV-II-list-float-length-2-2 tokoe:invalid" result="pass"/><test-case name="20210NISTXML-SV-II-list-float-length-2-3 tokoe:invalid" result="pass"/><test-case name="20211NISTXML-SV-II-list-float-length-2-4 tokoe:invalid" result="pass"/><test-case name="20212NISTXML-SV-II-list-float-length-2-5 tokoe:invalid" result="pass"/><test-case name="20213NISTSchema-SV-II-list-float-length-3 tokoe:valid" result="pass"/><test-case name="20214NISTXML-SV-II-list-float-length-3-1 tokoe:invalid" result="pass"/><test-case name="20215NISTXML-SV-II-list-float-length-3-2 tokoe:invalid" result="pass"/><test-case name="20216NISTXML-SV-II-list-float-length-3-3 tokoe:invalid" result="pass"/><test-case name="20217NISTXML-SV-II-list-float-length-3-4 tokoe:invalid" result="pass"/><test-case name="20218NISTXML-SV-II-list-float-length-3-5 tokoe:invalid" result="pass"/><test-case name="20219NISTSchema-SV-II-list-float-length-4 tokoe:valid" result="pass"/><test-case name="20220NISTXML-SV-II-list-float-length-4-1 tokoe:invalid" result="pass"/><test-case name="20221NISTXML-SV-II-list-float-length-4-2 tokoe:invalid" result="pass"/><test-case name="20222NISTXML-SV-II-list-float-length-4-3 tokoe:invalid" result="pass"/><test-case name="20223NISTXML-SV-II-list-float-length-4-4 tokoe:invalid" result="pass"/><test-case name="20224NISTXML-SV-II-list-float-length-4-5 tokoe:invalid" result="pass"/><test-case name="20225NISTSchema-SV-II-list-float-length-5 tokoe:valid" result="pass"/><test-case name="20226NISTXML-SV-II-list-float-length-5-1 tokoe:invalid" result="pass"/><test-case name="20227NISTXML-SV-II-list-float-length-5-2 tokoe:invalid" result="pass"/><test-case name="20228NISTXML-SV-II-list-float-length-5-3 tokoe:invalid" result="pass"/><test-case name="20229NISTXML-SV-II-list-float-length-5-4 tokoe:invalid" result="pass"/><test-case name="20230NISTXML-SV-II-list-float-length-5-5 tokoe:invalid" result="pass"/><test-case name="20231NISTSchema-SV-II-list-float-pattern-1 tokoe:valid" result="pass"/><test-case name="20232NISTXML-SV-II-list-float-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="20233NISTXML-SV-II-list-float-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="20234NISTXML-SV-II-list-float-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="20235NISTXML-SV-II-list-float-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="20236NISTXML-SV-II-list-float-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="20237NISTSchema-SV-II-list-float-pattern-2 tokoe:valid" result="pass"/><test-case name="20238NISTXML-SV-II-list-float-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="20239NISTXML-SV-II-list-float-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="20240NISTXML-SV-II-list-float-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="20241NISTXML-SV-II-list-float-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="20242NISTXML-SV-II-list-float-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="20243NISTSchema-SV-II-list-float-pattern-3 tokoe:valid" result="pass"/><test-case name="20244NISTXML-SV-II-list-float-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="20245NISTXML-SV-II-list-float-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="20246NISTXML-SV-II-list-float-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="20247NISTXML-SV-II-list-float-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="20248NISTXML-SV-II-list-float-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="20249NISTSchema-SV-II-list-float-pattern-4 tokoe:valid" result="pass"/><test-case name="20250NISTXML-SV-II-list-float-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="20251NISTXML-SV-II-list-float-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="20252NISTXML-SV-II-list-float-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="20253NISTXML-SV-II-list-float-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="20254NISTXML-SV-II-list-float-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="20255NISTSchema-SV-II-list-float-pattern-5 tokoe:valid" result="pass"/><test-case name="20256NISTXML-SV-II-list-float-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="20257NISTXML-SV-II-list-float-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="20258NISTXML-SV-II-list-float-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="20259NISTXML-SV-II-list-float-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="20260NISTXML-SV-II-list-float-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="20261NISTSchema-SV-II-list-float-enumeration-1 tokoe:valid" result="pass"/><test-case name="20262NISTXML-SV-II-list-float-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="20263NISTXML-SV-II-list-float-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="20264NISTXML-SV-II-list-float-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="20265NISTXML-SV-II-list-float-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="20266NISTXML-SV-II-list-float-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="20267NISTSchema-SV-II-list-float-enumeration-2 tokoe:valid" result="pass"/><test-case name="20268NISTXML-SV-II-list-float-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="20269NISTXML-SV-II-list-float-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="20270NISTXML-SV-II-list-float-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="20271NISTXML-SV-II-list-float-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="20272NISTXML-SV-II-list-float-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="20273NISTSchema-SV-II-list-float-enumeration-3 tokoe:valid" result="pass"/><test-case name="20274NISTXML-SV-II-list-float-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="20275NISTXML-SV-II-list-float-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="20276NISTXML-SV-II-list-float-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="20277NISTXML-SV-II-list-float-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="20278NISTXML-SV-II-list-float-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="20279NISTSchema-SV-II-list-float-enumeration-4 tokoe:valid" result="pass"/><test-case name="20280NISTXML-SV-II-list-float-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="20281NISTXML-SV-II-list-float-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="20282NISTXML-SV-II-list-float-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="20283NISTXML-SV-II-list-float-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="20284NISTXML-SV-II-list-float-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="20285NISTSchema-SV-II-list-float-enumeration-5 tokoe:valid" result="pass"/><test-case name="20286NISTXML-SV-II-list-float-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="20287NISTXML-SV-II-list-float-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="20288NISTXML-SV-II-list-float-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="20289NISTXML-SV-II-list-float-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="20290NISTXML-SV-II-list-float-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="20291NISTSchema-SV-II-list-duration-maxLength-1 tokoe:valid" result="pass"/><test-case name="20292NISTXML-SV-II-list-duration-maxLength-1-1 tokoe:invalid" result="pass"/><test-case name="20293NISTXML-SV-II-list-duration-maxLength-1-2 tokoe:invalid" result="pass"/><test-case name="20294NISTXML-SV-II-list-duration-maxLength-1-3 tokoe:invalid" result="pass"/><test-case name="20295NISTXML-SV-II-list-duration-maxLength-1-4 tokoe:invalid" result="pass"/><test-case name="20296NISTXML-SV-II-list-duration-maxLength-1-5 tokoe:invalid" result="pass"/><test-case name="20297NISTSchema-SV-II-list-duration-maxLength-2 tokoe:valid" result="pass"/><test-case name="20298NISTXML-SV-II-list-duration-maxLength-2-1 tokoe:invalid" result="pass"/><test-case name="20299NISTXML-SV-II-list-duration-maxLength-2-2 tokoe:invalid" result="pass"/><test-case name="20300NISTXML-SV-II-list-duration-maxLength-2-3 tokoe:invalid" result="pass"/><test-case name="20301NISTXML-SV-II-list-duration-maxLength-2-4 tokoe:invalid" result="pass"/><test-case name="20302NISTXML-SV-II-list-duration-maxLength-2-5 tokoe:invalid" result="pass"/><test-case name="20303NISTSchema-SV-II-list-duration-maxLength-3 tokoe:valid" result="pass"/><test-case name="20304NISTXML-SV-II-list-duration-maxLength-3-1 tokoe:invalid" result="pass"/><test-case name="20305NISTXML-SV-II-list-duration-maxLength-3-2 tokoe:invalid" result="pass"/><test-case name="20306NISTXML-SV-II-list-duration-maxLength-3-3 tokoe:invalid" result="pass"/><test-case name="20307NISTXML-SV-II-list-duration-maxLength-3-4 tokoe:invalid" result="pass"/><test-case name="20308NISTXML-SV-II-list-duration-maxLength-3-5 tokoe:invalid" result="pass"/><test-case name="20309NISTSchema-SV-II-list-duration-maxLength-4 tokoe:valid" result="pass"/><test-case name="20310NISTXML-SV-II-list-duration-maxLength-4-1 tokoe:invalid" result="pass"/><test-case name="20311NISTXML-SV-II-list-duration-maxLength-4-2 tokoe:invalid" result="pass"/><test-case name="20312NISTXML-SV-II-list-duration-maxLength-4-3 tokoe:invalid" result="pass"/><test-case name="20313NISTXML-SV-II-list-duration-maxLength-4-4 tokoe:invalid" result="pass"/><test-case name="20314NISTXML-SV-II-list-duration-maxLength-4-5 tokoe:invalid" result="pass"/><test-case name="20315NISTSchema-SV-II-list-duration-maxLength-5 tokoe:valid" result="pass"/><test-case name="20316NISTXML-SV-II-list-duration-maxLength-5-1 tokoe:invalid" result="pass"/><test-case name="20317NISTXML-SV-II-list-duration-maxLength-5-2 tokoe:invalid" result="pass"/><test-case name="20318NISTXML-SV-II-list-duration-maxLength-5-3 tokoe:invalid" result="pass"/><test-case name="20319NISTXML-SV-II-list-duration-maxLength-5-4 tokoe:invalid" result="pass"/><test-case name="20320NISTXML-SV-II-list-duration-maxLength-5-5 tokoe:invalid" result="pass"/><test-case name="20321NISTSchema-SV-II-list-duration-minLength-1 tokoe:valid" result="pass"/><test-case name="20322NISTXML-SV-II-list-duration-minLength-1-1 tokoe:invalid" result="pass"/><test-case name="20323NISTXML-SV-II-list-duration-minLength-1-2 tokoe:invalid" result="pass"/><test-case name="20324NISTXML-SV-II-list-duration-minLength-1-3 tokoe:invalid" result="pass"/><test-case name="20325NISTXML-SV-II-list-duration-minLength-1-4 tokoe:invalid" result="pass"/><test-case name="20326NISTXML-SV-II-list-duration-minLength-1-5 tokoe:invalid" result="pass"/><test-case name="20327NISTSchema-SV-II-list-duration-minLength-2 tokoe:valid" result="pass"/><test-case name="20328NISTXML-SV-II-list-duration-minLength-2-1 tokoe:invalid" result="pass"/><test-case name="20329NISTXML-SV-II-list-duration-minLength-2-2 tokoe:invalid" result="pass"/><test-case name="20330NISTXML-SV-II-list-duration-minLength-2-3 tokoe:invalid" result="pass"/><test-case name="20331NISTXML-SV-II-list-duration-minLength-2-4 tokoe:invalid" result="pass"/><test-case name="20332NISTXML-SV-II-list-duration-minLength-2-5 tokoe:invalid" result="pass"/><test-case name="20333NISTSchema-SV-II-list-duration-minLength-3 tokoe:valid" result="pass"/><test-case name="20334NISTXML-SV-II-list-duration-minLength-3-1 tokoe:invalid" result="pass"/><test-case name="20335NISTXML-SV-II-list-duration-minLength-3-2 tokoe:invalid" result="pass"/><test-case name="20336NISTXML-SV-II-list-duration-minLength-3-3 tokoe:invalid" result="pass"/><test-case name="20337NISTXML-SV-II-list-duration-minLength-3-4 tokoe:invalid" result="pass"/><test-case name="20338NISTXML-SV-II-list-duration-minLength-3-5 tokoe:invalid" result="pass"/><test-case name="20339NISTSchema-SV-II-list-duration-minLength-4 tokoe:valid" result="pass"/><test-case name="20340NISTXML-SV-II-list-duration-minLength-4-1 tokoe:invalid" result="pass"/><test-case name="20341NISTXML-SV-II-list-duration-minLength-4-2 tokoe:invalid" result="pass"/><test-case name="20342NISTXML-SV-II-list-duration-minLength-4-3 tokoe:invalid" result="pass"/><test-case name="20343NISTXML-SV-II-list-duration-minLength-4-4 tokoe:invalid" result="pass"/><test-case name="20344NISTXML-SV-II-list-duration-minLength-4-5 tokoe:invalid" result="pass"/><test-case name="20345NISTSchema-SV-II-list-duration-minLength-5 tokoe:valid" result="pass"/><test-case name="20346NISTXML-SV-II-list-duration-minLength-5-1 tokoe:invalid" result="pass"/><test-case name="20347NISTXML-SV-II-list-duration-minLength-5-2 tokoe:invalid" result="pass"/><test-case name="20348NISTXML-SV-II-list-duration-minLength-5-3 tokoe:invalid" result="pass"/><test-case name="20349NISTXML-SV-II-list-duration-minLength-5-4 tokoe:invalid" result="pass"/><test-case name="20350NISTXML-SV-II-list-duration-minLength-5-5 tokoe:invalid" result="pass"/><test-case name="20351NISTSchema-SV-II-list-duration-length-1 tokoe:valid" result="pass"/><test-case name="20352NISTXML-SV-II-list-duration-length-1-1 tokoe:invalid" result="pass"/><test-case name="20353NISTXML-SV-II-list-duration-length-1-2 tokoe:invalid" result="pass"/><test-case name="20354NISTXML-SV-II-list-duration-length-1-3 tokoe:invalid" result="pass"/><test-case name="20355NISTXML-SV-II-list-duration-length-1-4 tokoe:invalid" result="pass"/><test-case name="20356NISTXML-SV-II-list-duration-length-1-5 tokoe:invalid" result="pass"/><test-case name="20357NISTSchema-SV-II-list-duration-length-2 tokoe:valid" result="pass"/><test-case name="20358NISTXML-SV-II-list-duration-length-2-1 tokoe:invalid" result="pass"/><test-case name="20359NISTXML-SV-II-list-duration-length-2-2 tokoe:invalid" result="pass"/><test-case name="20360NISTXML-SV-II-list-duration-length-2-3 tokoe:invalid" result="pass"/><test-case name="20361NISTXML-SV-II-list-duration-length-2-4 tokoe:invalid" result="pass"/><test-case name="20362NISTXML-SV-II-list-duration-length-2-5 tokoe:invalid" result="pass"/><test-case name="20363NISTSchema-SV-II-list-duration-length-3 tokoe:valid" result="pass"/><test-case name="20364NISTXML-SV-II-list-duration-length-3-1 tokoe:invalid" result="pass"/><test-case name="20365NISTXML-SV-II-list-duration-length-3-2 tokoe:invalid" result="pass"/><test-case name="20366NISTXML-SV-II-list-duration-length-3-3 tokoe:invalid" result="pass"/><test-case name="20367NISTXML-SV-II-list-duration-length-3-4 tokoe:invalid" result="pass"/><test-case name="20368NISTXML-SV-II-list-duration-length-3-5 tokoe:invalid" result="pass"/><test-case name="20369NISTSchema-SV-II-list-duration-length-4 tokoe:valid" result="pass"/><test-case name="20370NISTXML-SV-II-list-duration-length-4-1 tokoe:invalid" result="pass"/><test-case name="20371NISTXML-SV-II-list-duration-length-4-2 tokoe:invalid" result="pass"/><test-case name="20372NISTXML-SV-II-list-duration-length-4-3 tokoe:invalid" result="pass"/><test-case name="20373NISTXML-SV-II-list-duration-length-4-4 tokoe:invalid" result="pass"/><test-case name="20374NISTXML-SV-II-list-duration-length-4-5 tokoe:invalid" result="pass"/><test-case name="20375NISTSchema-SV-II-list-duration-length-5 tokoe:valid" result="pass"/><test-case name="20376NISTXML-SV-II-list-duration-length-5-1 tokoe:invalid" result="pass"/><test-case name="20377NISTXML-SV-II-list-duration-length-5-2 tokoe:invalid" result="pass"/><test-case name="20378NISTXML-SV-II-list-duration-length-5-3 tokoe:invalid" result="pass"/><test-case name="20379NISTXML-SV-II-list-duration-length-5-4 tokoe:invalid" result="pass"/><test-case name="20380NISTXML-SV-II-list-duration-length-5-5 tokoe:invalid" result="pass"/><test-case name="20381NISTSchema-SV-II-list-duration-pattern-1 tokoe:valid" result="pass"/><test-case name="20382NISTXML-SV-II-list-duration-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="20383NISTXML-SV-II-list-duration-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="20384NISTXML-SV-II-list-duration-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="20385NISTXML-SV-II-list-duration-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="20386NISTXML-SV-II-list-duration-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="20387NISTSchema-SV-II-list-duration-pattern-2 tokoe:valid" result="pass"/><test-case name="20388NISTXML-SV-II-list-duration-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="20389NISTXML-SV-II-list-duration-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="20390NISTXML-SV-II-list-duration-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="20391NISTXML-SV-II-list-duration-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="20392NISTXML-SV-II-list-duration-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="20393NISTSchema-SV-II-list-duration-pattern-3 tokoe:valid" result="pass"/><test-case name="20394NISTXML-SV-II-list-duration-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="20395NISTXML-SV-II-list-duration-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="20396NISTXML-SV-II-list-duration-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="20397NISTXML-SV-II-list-duration-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="20398NISTXML-SV-II-list-duration-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="20399NISTSchema-SV-II-list-duration-pattern-4 tokoe:valid" result="pass"/><test-case name="20400NISTXML-SV-II-list-duration-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="20401NISTXML-SV-II-list-duration-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="20402NISTXML-SV-II-list-duration-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="20403NISTXML-SV-II-list-duration-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="20404NISTXML-SV-II-list-duration-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="20405NISTSchema-SV-II-list-duration-pattern-5 tokoe:valid" result="pass"/><test-case name="20406NISTXML-SV-II-list-duration-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="20407NISTXML-SV-II-list-duration-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="20408NISTXML-SV-II-list-duration-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="20409NISTXML-SV-II-list-duration-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="20410NISTXML-SV-II-list-duration-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="20411NISTSchema-SV-II-list-duration-enumeration-1 tokoe:valid" result="pass"/><test-case name="20412NISTXML-SV-II-list-duration-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="20413NISTXML-SV-II-list-duration-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="20414NISTXML-SV-II-list-duration-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="20415NISTXML-SV-II-list-duration-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="20416NISTXML-SV-II-list-duration-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="20417NISTSchema-SV-II-list-duration-enumeration-2 tokoe:valid" result="pass"/><test-case name="20418NISTXML-SV-II-list-duration-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="20419NISTXML-SV-II-list-duration-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="20420NISTXML-SV-II-list-duration-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="20421NISTXML-SV-II-list-duration-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="20422NISTXML-SV-II-list-duration-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="20423NISTSchema-SV-II-list-duration-enumeration-3 tokoe:valid" result="pass"/><test-case name="20424NISTXML-SV-II-list-duration-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="20425NISTXML-SV-II-list-duration-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="20426NISTXML-SV-II-list-duration-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="20427NISTXML-SV-II-list-duration-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="20428NISTXML-SV-II-list-duration-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="20429NISTSchema-SV-II-list-duration-enumeration-4 tokoe:valid" result="pass"/><test-case name="20430NISTXML-SV-II-list-duration-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="20431NISTXML-SV-II-list-duration-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="20432NISTXML-SV-II-list-duration-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="20433NISTXML-SV-II-list-duration-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="20434NISTXML-SV-II-list-duration-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="20435NISTSchema-SV-II-list-duration-enumeration-5 tokoe:valid" result="pass"/><test-case name="20436NISTXML-SV-II-list-duration-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="20437NISTXML-SV-II-list-duration-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="20438NISTXML-SV-II-list-duration-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="20439NISTXML-SV-II-list-duration-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="20440NISTXML-SV-II-list-duration-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="20441NISTSchema-SV-II-list-dateTime-maxLength-1 tokoe:valid" result="pass"/><test-case name="20442NISTXML-SV-II-list-dateTime-maxLength-1-1 tokoe:invalid" result="pass"/><test-case name="20443NISTXML-SV-II-list-dateTime-maxLength-1-2 tokoe:invalid" result="pass"/><test-case name="20444NISTXML-SV-II-list-dateTime-maxLength-1-3 tokoe:invalid" result="pass"/><test-case name="20445NISTXML-SV-II-list-dateTime-maxLength-1-4 tokoe:invalid" result="pass"/><test-case name="20446NISTXML-SV-II-list-dateTime-maxLength-1-5 tokoe:invalid" result="pass"/><test-case name="20447NISTSchema-SV-II-list-dateTime-maxLength-2 tokoe:valid" result="pass"/><test-case name="20448NISTXML-SV-II-list-dateTime-maxLength-2-1 tokoe:invalid" result="pass"/><test-case name="20449NISTXML-SV-II-list-dateTime-maxLength-2-2 tokoe:invalid" result="pass"/><test-case name="20450NISTXML-SV-II-list-dateTime-maxLength-2-3 tokoe:invalid" result="pass"/><test-case name="20451NISTXML-SV-II-list-dateTime-maxLength-2-4 tokoe:invalid" result="pass"/><test-case name="20452NISTXML-SV-II-list-dateTime-maxLength-2-5 tokoe:invalid" result="pass"/><test-case name="20453NISTSchema-SV-II-list-dateTime-maxLength-3 tokoe:valid" result="pass"/><test-case name="20454NISTXML-SV-II-list-dateTime-maxLength-3-1 tokoe:invalid" result="pass"/><test-case name="20455NISTXML-SV-II-list-dateTime-maxLength-3-2 tokoe:invalid" result="pass"/><test-case name="20456NISTXML-SV-II-list-dateTime-maxLength-3-3 tokoe:invalid" result="pass"/><test-case name="20457NISTXML-SV-II-list-dateTime-maxLength-3-4 tokoe:invalid" result="pass"/><test-case name="20458NISTXML-SV-II-list-dateTime-maxLength-3-5 tokoe:invalid" result="pass"/><test-case name="20459NISTSchema-SV-II-list-dateTime-maxLength-4 tokoe:valid" result="pass"/><test-case name="20460NISTXML-SV-II-list-dateTime-maxLength-4-1 tokoe:invalid" result="pass"/><test-case name="20461NISTXML-SV-II-list-dateTime-maxLength-4-2 tokoe:invalid" result="pass"/><test-case name="20462NISTXML-SV-II-list-dateTime-maxLength-4-3 tokoe:invalid" result="pass"/><test-case name="20463NISTXML-SV-II-list-dateTime-maxLength-4-4 tokoe:invalid" result="pass"/><test-case name="20464NISTXML-SV-II-list-dateTime-maxLength-4-5 tokoe:invalid" result="pass"/><test-case name="20465NISTSchema-SV-II-list-dateTime-maxLength-5 tokoe:valid" result="pass"/><test-case name="20466NISTXML-SV-II-list-dateTime-maxLength-5-1 tokoe:invalid" result="pass"/><test-case name="20467NISTXML-SV-II-list-dateTime-maxLength-5-2 tokoe:invalid" result="pass"/><test-case name="20468NISTXML-SV-II-list-dateTime-maxLength-5-3 tokoe:invalid" result="pass"/><test-case name="20469NISTXML-SV-II-list-dateTime-maxLength-5-4 tokoe:invalid" result="pass"/><test-case name="20470NISTXML-SV-II-list-dateTime-maxLength-5-5 tokoe:invalid" result="pass"/><test-case name="20471NISTSchema-SV-II-list-dateTime-minLength-1 tokoe:valid" result="pass"/><test-case name="20472NISTXML-SV-II-list-dateTime-minLength-1-1 tokoe:invalid" result="pass"/><test-case name="20473NISTXML-SV-II-list-dateTime-minLength-1-2 tokoe:invalid" result="pass"/><test-case name="20474NISTXML-SV-II-list-dateTime-minLength-1-3 tokoe:invalid" result="pass"/><test-case name="20475NISTXML-SV-II-list-dateTime-minLength-1-4 tokoe:invalid" result="pass"/><test-case name="20476NISTXML-SV-II-list-dateTime-minLength-1-5 tokoe:invalid" result="pass"/><test-case name="20477NISTSchema-SV-II-list-dateTime-minLength-2 tokoe:valid" result="pass"/><test-case name="20478NISTXML-SV-II-list-dateTime-minLength-2-1 tokoe:invalid" result="pass"/><test-case name="20479NISTXML-SV-II-list-dateTime-minLength-2-2 tokoe:invalid" result="pass"/><test-case name="20480NISTXML-SV-II-list-dateTime-minLength-2-3 tokoe:invalid" result="pass"/><test-case name="20481NISTXML-SV-II-list-dateTime-minLength-2-4 tokoe:invalid" result="pass"/><test-case name="20482NISTXML-SV-II-list-dateTime-minLength-2-5 tokoe:invalid" result="pass"/><test-case name="20483NISTSchema-SV-II-list-dateTime-minLength-3 tokoe:valid" result="pass"/><test-case name="20484NISTXML-SV-II-list-dateTime-minLength-3-1 tokoe:invalid" result="pass"/><test-case name="20485NISTXML-SV-II-list-dateTime-minLength-3-2 tokoe:invalid" result="pass"/><test-case name="20486NISTXML-SV-II-list-dateTime-minLength-3-3 tokoe:invalid" result="pass"/><test-case name="20487NISTXML-SV-II-list-dateTime-minLength-3-4 tokoe:invalid" result="pass"/><test-case name="20488NISTXML-SV-II-list-dateTime-minLength-3-5 tokoe:invalid" result="pass"/><test-case name="20489NISTSchema-SV-II-list-dateTime-minLength-4 tokoe:valid" result="pass"/><test-case name="20490NISTXML-SV-II-list-dateTime-minLength-4-1 tokoe:invalid" result="pass"/><test-case name="20491NISTXML-SV-II-list-dateTime-minLength-4-2 tokoe:invalid" result="pass"/><test-case name="20492NISTXML-SV-II-list-dateTime-minLength-4-3 tokoe:invalid" result="pass"/><test-case name="20493NISTXML-SV-II-list-dateTime-minLength-4-4 tokoe:invalid" result="pass"/><test-case name="20494NISTXML-SV-II-list-dateTime-minLength-4-5 tokoe:invalid" result="pass"/><test-case name="20495NISTSchema-SV-II-list-dateTime-minLength-5 tokoe:valid" result="pass"/><test-case name="20496NISTXML-SV-II-list-dateTime-minLength-5-1 tokoe:invalid" result="pass"/><test-case name="20497NISTXML-SV-II-list-dateTime-minLength-5-2 tokoe:invalid" result="pass"/><test-case name="20498NISTXML-SV-II-list-dateTime-minLength-5-3 tokoe:invalid" result="pass"/><test-case name="20499NISTXML-SV-II-list-dateTime-minLength-5-4 tokoe:invalid" result="pass"/><test-case name="20500NISTXML-SV-II-list-dateTime-minLength-5-5 tokoe:invalid" result="pass"/><test-case name="20501NISTSchema-SV-II-list-dateTime-length-1 tokoe:valid" result="pass"/><test-case name="20502NISTXML-SV-II-list-dateTime-length-1-1 tokoe:invalid" result="pass"/><test-case name="20503NISTXML-SV-II-list-dateTime-length-1-2 tokoe:invalid" result="pass"/><test-case name="20504NISTXML-SV-II-list-dateTime-length-1-3 tokoe:invalid" result="pass"/><test-case name="20505NISTXML-SV-II-list-dateTime-length-1-4 tokoe:invalid" result="pass"/><test-case name="20506NISTXML-SV-II-list-dateTime-length-1-5 tokoe:invalid" result="pass"/><test-case name="20507NISTSchema-SV-II-list-dateTime-length-2 tokoe:valid" result="pass"/><test-case name="20508NISTXML-SV-II-list-dateTime-length-2-1 tokoe:invalid" result="pass"/><test-case name="20509NISTXML-SV-II-list-dateTime-length-2-2 tokoe:invalid" result="pass"/><test-case name="20510NISTXML-SV-II-list-dateTime-length-2-3 tokoe:invalid" result="pass"/><test-case name="20511NISTXML-SV-II-list-dateTime-length-2-4 tokoe:invalid" result="pass"/><test-case name="20512NISTXML-SV-II-list-dateTime-length-2-5 tokoe:invalid" result="pass"/><test-case name="20513NISTSchema-SV-II-list-dateTime-length-3 tokoe:valid" result="pass"/><test-case name="20514NISTXML-SV-II-list-dateTime-length-3-1 tokoe:invalid" result="pass"/><test-case name="20515NISTXML-SV-II-list-dateTime-length-3-2 tokoe:invalid" result="pass"/><test-case name="20516NISTXML-SV-II-list-dateTime-length-3-3 tokoe:invalid" result="pass"/><test-case name="20517NISTXML-SV-II-list-dateTime-length-3-4 tokoe:invalid" result="pass"/><test-case name="20518NISTXML-SV-II-list-dateTime-length-3-5 tokoe:invalid" result="pass"/><test-case name="20519NISTSchema-SV-II-list-dateTime-length-4 tokoe:valid" result="pass"/><test-case name="20520NISTXML-SV-II-list-dateTime-length-4-1 tokoe:invalid" result="pass"/><test-case name="20521NISTXML-SV-II-list-dateTime-length-4-2 tokoe:invalid" result="pass"/><test-case name="20522NISTXML-SV-II-list-dateTime-length-4-3 tokoe:invalid" result="pass"/><test-case name="20523NISTXML-SV-II-list-dateTime-length-4-4 tokoe:invalid" result="pass"/><test-case name="20524NISTXML-SV-II-list-dateTime-length-4-5 tokoe:invalid" result="pass"/><test-case name="20525NISTSchema-SV-II-list-dateTime-length-5 tokoe:valid" result="pass"/><test-case name="20526NISTXML-SV-II-list-dateTime-length-5-1 tokoe:invalid" result="pass"/><test-case name="20527NISTXML-SV-II-list-dateTime-length-5-2 tokoe:invalid" result="pass"/><test-case name="20528NISTXML-SV-II-list-dateTime-length-5-3 tokoe:invalid" result="pass"/><test-case name="20529NISTXML-SV-II-list-dateTime-length-5-4 tokoe:invalid" result="pass"/><test-case name="20530NISTXML-SV-II-list-dateTime-length-5-5 tokoe:invalid" result="pass"/><test-case name="20531NISTSchema-SV-II-list-dateTime-pattern-1 tokoe:valid" result="pass"/><test-case name="20532NISTXML-SV-II-list-dateTime-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="20533NISTXML-SV-II-list-dateTime-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="20534NISTXML-SV-II-list-dateTime-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="20535NISTXML-SV-II-list-dateTime-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="20536NISTXML-SV-II-list-dateTime-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="20537NISTSchema-SV-II-list-dateTime-pattern-2 tokoe:valid" result="pass"/><test-case name="20538NISTXML-SV-II-list-dateTime-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="20539NISTXML-SV-II-list-dateTime-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="20540NISTXML-SV-II-list-dateTime-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="20541NISTXML-SV-II-list-dateTime-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="20542NISTXML-SV-II-list-dateTime-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="20543NISTSchema-SV-II-list-dateTime-pattern-3 tokoe:valid" result="pass"/><test-case name="20544NISTXML-SV-II-list-dateTime-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="20545NISTXML-SV-II-list-dateTime-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="20546NISTXML-SV-II-list-dateTime-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="20547NISTXML-SV-II-list-dateTime-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="20548NISTXML-SV-II-list-dateTime-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="20549NISTSchema-SV-II-list-dateTime-pattern-4 tokoe:valid" result="pass"/><test-case name="20550NISTXML-SV-II-list-dateTime-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="20551NISTXML-SV-II-list-dateTime-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="20552NISTXML-SV-II-list-dateTime-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="20553NISTXML-SV-II-list-dateTime-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="20554NISTXML-SV-II-list-dateTime-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="20555NISTSchema-SV-II-list-dateTime-pattern-5 tokoe:valid" result="pass"/><test-case name="20556NISTXML-SV-II-list-dateTime-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="20557NISTXML-SV-II-list-dateTime-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="20558NISTXML-SV-II-list-dateTime-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="20559NISTXML-SV-II-list-dateTime-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="20560NISTXML-SV-II-list-dateTime-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="20561NISTSchema-SV-II-list-dateTime-enumeration-1 tokoe:valid" result="pass"/><test-case name="20562NISTXML-SV-II-list-dateTime-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="20563NISTXML-SV-II-list-dateTime-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="20564NISTXML-SV-II-list-dateTime-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="20565NISTXML-SV-II-list-dateTime-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="20566NISTXML-SV-II-list-dateTime-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="20567NISTSchema-SV-II-list-dateTime-enumeration-2 tokoe:valid" result="pass"/><test-case name="20568NISTXML-SV-II-list-dateTime-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="20569NISTXML-SV-II-list-dateTime-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="20570NISTXML-SV-II-list-dateTime-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="20571NISTXML-SV-II-list-dateTime-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="20572NISTXML-SV-II-list-dateTime-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="20573NISTSchema-SV-II-list-dateTime-enumeration-3 tokoe:valid" result="pass"/><test-case name="20574NISTXML-SV-II-list-dateTime-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="20575NISTXML-SV-II-list-dateTime-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="20576NISTXML-SV-II-list-dateTime-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="20577NISTXML-SV-II-list-dateTime-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="20578NISTXML-SV-II-list-dateTime-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="20579NISTSchema-SV-II-list-dateTime-enumeration-4 tokoe:valid" result="pass"/><test-case name="20580NISTXML-SV-II-list-dateTime-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="20581NISTXML-SV-II-list-dateTime-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="20582NISTXML-SV-II-list-dateTime-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="20583NISTXML-SV-II-list-dateTime-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="20584NISTXML-SV-II-list-dateTime-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="20585NISTSchema-SV-II-list-dateTime-enumeration-5 tokoe:valid" result="pass"/><test-case name="20586NISTXML-SV-II-list-dateTime-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="20587NISTXML-SV-II-list-dateTime-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="20588NISTXML-SV-II-list-dateTime-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="20589NISTXML-SV-II-list-dateTime-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="20590NISTXML-SV-II-list-dateTime-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="20591NISTSchema-SV-II-list-time-maxLength-1 tokoe:valid" result="pass"/><test-case name="20592NISTXML-SV-II-list-time-maxLength-1-1 tokoe:invalid" result="pass"/><test-case name="20593NISTXML-SV-II-list-time-maxLength-1-2 tokoe:invalid" result="pass"/><test-case name="20594NISTXML-SV-II-list-time-maxLength-1-3 tokoe:invalid" result="pass"/><test-case name="20595NISTXML-SV-II-list-time-maxLength-1-4 tokoe:invalid" result="pass"/><test-case name="20596NISTXML-SV-II-list-time-maxLength-1-5 tokoe:invalid" result="pass"/><test-case name="20597NISTSchema-SV-II-list-time-maxLength-2 tokoe:valid" result="pass"/><test-case name="20598NISTXML-SV-II-list-time-maxLength-2-1 tokoe:invalid" result="pass"/><test-case name="20599NISTXML-SV-II-list-time-maxLength-2-2 tokoe:invalid" result="pass"/><test-case name="20600NISTXML-SV-II-list-time-maxLength-2-3 tokoe:invalid" result="pass"/><test-case name="20601NISTXML-SV-II-list-time-maxLength-2-4 tokoe:invalid" result="pass"/><test-case name="20602NISTXML-SV-II-list-time-maxLength-2-5 tokoe:invalid" result="pass"/><test-case name="20603NISTSchema-SV-II-list-time-maxLength-3 tokoe:valid" result="pass"/><test-case name="20604NISTXML-SV-II-list-time-maxLength-3-1 tokoe:invalid" result="pass"/><test-case name="20605NISTXML-SV-II-list-time-maxLength-3-2 tokoe:invalid" result="pass"/><test-case name="20606NISTXML-SV-II-list-time-maxLength-3-3 tokoe:invalid" result="pass"/><test-case name="20607NISTXML-SV-II-list-time-maxLength-3-4 tokoe:invalid" result="pass"/><test-case name="20608NISTXML-SV-II-list-time-maxLength-3-5 tokoe:invalid" result="pass"/><test-case name="20609NISTSchema-SV-II-list-time-maxLength-4 tokoe:valid" result="pass"/><test-case name="20610NISTXML-SV-II-list-time-maxLength-4-1 tokoe:invalid" result="pass"/><test-case name="20611NISTXML-SV-II-list-time-maxLength-4-2 tokoe:invalid" result="pass"/><test-case name="20612NISTXML-SV-II-list-time-maxLength-4-3 tokoe:invalid" result="pass"/><test-case name="20613NISTXML-SV-II-list-time-maxLength-4-4 tokoe:invalid" result="pass"/><test-case name="20614NISTXML-SV-II-list-time-maxLength-4-5 tokoe:invalid" result="pass"/><test-case name="20615NISTSchema-SV-II-list-time-maxLength-5 tokoe:valid" result="pass"/><test-case name="20616NISTXML-SV-II-list-time-maxLength-5-1 tokoe:invalid" result="pass"/><test-case name="20617NISTXML-SV-II-list-time-maxLength-5-2 tokoe:invalid" result="pass"/><test-case name="20618NISTXML-SV-II-list-time-maxLength-5-3 tokoe:invalid" result="pass"/><test-case name="20619NISTXML-SV-II-list-time-maxLength-5-4 tokoe:invalid" result="pass"/><test-case name="20620NISTXML-SV-II-list-time-maxLength-5-5 tokoe:invalid" result="pass"/><test-case name="20621NISTSchema-SV-II-list-time-minLength-1 tokoe:valid" result="pass"/><test-case name="20622NISTXML-SV-II-list-time-minLength-1-1 tokoe:invalid" result="pass"/><test-case name="20623NISTXML-SV-II-list-time-minLength-1-2 tokoe:invalid" result="pass"/><test-case name="20624NISTXML-SV-II-list-time-minLength-1-3 tokoe:invalid" result="pass"/><test-case name="20625NISTXML-SV-II-list-time-minLength-1-4 tokoe:invalid" result="pass"/><test-case name="20626NISTXML-SV-II-list-time-minLength-1-5 tokoe:invalid" result="pass"/><test-case name="20627NISTSchema-SV-II-list-time-minLength-2 tokoe:valid" result="pass"/><test-case name="20628NISTXML-SV-II-list-time-minLength-2-1 tokoe:invalid" result="pass"/><test-case name="20629NISTXML-SV-II-list-time-minLength-2-2 tokoe:invalid" result="pass"/><test-case name="20630NISTXML-SV-II-list-time-minLength-2-3 tokoe:invalid" result="pass"/><test-case name="20631NISTXML-SV-II-list-time-minLength-2-4 tokoe:invalid" result="pass"/><test-case name="20632NISTXML-SV-II-list-time-minLength-2-5 tokoe:invalid" result="pass"/><test-case name="20633NISTSchema-SV-II-list-time-minLength-3 tokoe:valid" result="pass"/><test-case name="20634NISTXML-SV-II-list-time-minLength-3-1 tokoe:invalid" result="pass"/><test-case name="20635NISTXML-SV-II-list-time-minLength-3-2 tokoe:invalid" result="pass"/><test-case name="20636NISTXML-SV-II-list-time-minLength-3-3 tokoe:invalid" result="pass"/><test-case name="20637NISTXML-SV-II-list-time-minLength-3-4 tokoe:invalid" result="pass"/><test-case name="20638NISTXML-SV-II-list-time-minLength-3-5 tokoe:invalid" result="pass"/><test-case name="20639NISTSchema-SV-II-list-time-minLength-4 tokoe:valid" result="pass"/><test-case name="20640NISTXML-SV-II-list-time-minLength-4-1 tokoe:invalid" result="pass"/><test-case name="20641NISTXML-SV-II-list-time-minLength-4-2 tokoe:invalid" result="pass"/><test-case name="20642NISTXML-SV-II-list-time-minLength-4-3 tokoe:invalid" result="pass"/><test-case name="20643NISTXML-SV-II-list-time-minLength-4-4 tokoe:invalid" result="pass"/><test-case name="20644NISTXML-SV-II-list-time-minLength-4-5 tokoe:invalid" result="pass"/><test-case name="20645NISTSchema-SV-II-list-time-minLength-5 tokoe:valid" result="pass"/><test-case name="20646NISTXML-SV-II-list-time-minLength-5-1 tokoe:invalid" result="pass"/><test-case name="20647NISTXML-SV-II-list-time-minLength-5-2 tokoe:invalid" result="pass"/><test-case name="20648NISTXML-SV-II-list-time-minLength-5-3 tokoe:invalid" result="pass"/><test-case name="20649NISTXML-SV-II-list-time-minLength-5-4 tokoe:invalid" result="pass"/><test-case name="20650NISTXML-SV-II-list-time-minLength-5-5 tokoe:invalid" result="pass"/><test-case name="20651NISTSchema-SV-II-list-time-length-1 tokoe:valid" result="pass"/><test-case name="20652NISTXML-SV-II-list-time-length-1-1 tokoe:invalid" result="pass"/><test-case name="20653NISTXML-SV-II-list-time-length-1-2 tokoe:invalid" result="pass"/><test-case name="20654NISTXML-SV-II-list-time-length-1-3 tokoe:invalid" result="pass"/><test-case name="20655NISTXML-SV-II-list-time-length-1-4 tokoe:invalid" result="pass"/><test-case name="20656NISTXML-SV-II-list-time-length-1-5 tokoe:invalid" result="pass"/><test-case name="20657NISTSchema-SV-II-list-time-length-2 tokoe:valid" result="pass"/><test-case name="20658NISTXML-SV-II-list-time-length-2-1 tokoe:invalid" result="pass"/><test-case name="20659NISTXML-SV-II-list-time-length-2-2 tokoe:invalid" result="pass"/><test-case name="20660NISTXML-SV-II-list-time-length-2-3 tokoe:invalid" result="pass"/><test-case name="20661NISTXML-SV-II-list-time-length-2-4 tokoe:invalid" result="pass"/><test-case name="20662NISTXML-SV-II-list-time-length-2-5 tokoe:invalid" result="pass"/><test-case name="20663NISTSchema-SV-II-list-time-length-3 tokoe:valid" result="pass"/><test-case name="20664NISTXML-SV-II-list-time-length-3-1 tokoe:invalid" result="pass"/><test-case name="20665NISTXML-SV-II-list-time-length-3-2 tokoe:invalid" result="pass"/><test-case name="20666NISTXML-SV-II-list-time-length-3-3 tokoe:invalid" result="pass"/><test-case name="20667NISTXML-SV-II-list-time-length-3-4 tokoe:invalid" result="pass"/><test-case name="20668NISTXML-SV-II-list-time-length-3-5 tokoe:invalid" result="pass"/><test-case name="20669NISTSchema-SV-II-list-time-length-4 tokoe:valid" result="pass"/><test-case name="20670NISTXML-SV-II-list-time-length-4-1 tokoe:invalid" result="pass"/><test-case name="20671NISTXML-SV-II-list-time-length-4-2 tokoe:invalid" result="pass"/><test-case name="20672NISTXML-SV-II-list-time-length-4-3 tokoe:invalid" result="pass"/><test-case name="20673NISTXML-SV-II-list-time-length-4-4 tokoe:invalid" result="pass"/><test-case name="20674NISTXML-SV-II-list-time-length-4-5 tokoe:invalid" result="pass"/><test-case name="20675NISTSchema-SV-II-list-time-length-5 tokoe:valid" result="pass"/><test-case name="20676NISTXML-SV-II-list-time-length-5-1 tokoe:invalid" result="pass"/><test-case name="20677NISTXML-SV-II-list-time-length-5-2 tokoe:invalid" result="pass"/><test-case name="20678NISTXML-SV-II-list-time-length-5-3 tokoe:invalid" result="pass"/><test-case name="20679NISTXML-SV-II-list-time-length-5-4 tokoe:invalid" result="pass"/><test-case name="20680NISTXML-SV-II-list-time-length-5-5 tokoe:invalid" result="pass"/><test-case name="20681NISTSchema-SV-II-list-time-pattern-1 tokoe:valid" result="pass"/><test-case name="20682NISTXML-SV-II-list-time-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="20683NISTXML-SV-II-list-time-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="20684NISTXML-SV-II-list-time-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="20685NISTXML-SV-II-list-time-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="20686NISTXML-SV-II-list-time-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="20687NISTSchema-SV-II-list-time-pattern-2 tokoe:valid" result="pass"/><test-case name="20688NISTXML-SV-II-list-time-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="20689NISTXML-SV-II-list-time-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="20690NISTXML-SV-II-list-time-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="20691NISTXML-SV-II-list-time-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="20692NISTXML-SV-II-list-time-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="20693NISTSchema-SV-II-list-time-pattern-3 tokoe:valid" result="pass"/><test-case name="20694NISTXML-SV-II-list-time-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="20695NISTXML-SV-II-list-time-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="20696NISTXML-SV-II-list-time-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="20697NISTXML-SV-II-list-time-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="20698NISTXML-SV-II-list-time-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="20699NISTSchema-SV-II-list-time-pattern-4 tokoe:valid" result="pass"/><test-case name="20700NISTXML-SV-II-list-time-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="20701NISTXML-SV-II-list-time-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="20702NISTXML-SV-II-list-time-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="20703NISTXML-SV-II-list-time-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="20704NISTXML-SV-II-list-time-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="20705NISTSchema-SV-II-list-time-pattern-5 tokoe:valid" result="pass"/><test-case name="20706NISTXML-SV-II-list-time-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="20707NISTXML-SV-II-list-time-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="20708NISTXML-SV-II-list-time-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="20709NISTXML-SV-II-list-time-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="20710NISTXML-SV-II-list-time-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="20711NISTSchema-SV-II-list-time-enumeration-1 tokoe:valid" result="pass"/><test-case name="20712NISTXML-SV-II-list-time-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="20713NISTXML-SV-II-list-time-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="20714NISTXML-SV-II-list-time-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="20715NISTXML-SV-II-list-time-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="20716NISTXML-SV-II-list-time-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="20717NISTSchema-SV-II-list-time-enumeration-2 tokoe:valid" result="pass"/><test-case name="20718NISTXML-SV-II-list-time-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="20719NISTXML-SV-II-list-time-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="20720NISTXML-SV-II-list-time-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="20721NISTXML-SV-II-list-time-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="20722NISTXML-SV-II-list-time-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="20723NISTSchema-SV-II-list-time-enumeration-3 tokoe:valid" result="pass"/><test-case name="20724NISTXML-SV-II-list-time-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="20725NISTXML-SV-II-list-time-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="20726NISTXML-SV-II-list-time-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="20727NISTXML-SV-II-list-time-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="20728NISTXML-SV-II-list-time-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="20729NISTSchema-SV-II-list-time-enumeration-4 tokoe:valid" result="pass"/><test-case name="20730NISTXML-SV-II-list-time-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="20731NISTXML-SV-II-list-time-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="20732NISTXML-SV-II-list-time-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="20733NISTXML-SV-II-list-time-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="20734NISTXML-SV-II-list-time-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="20735NISTSchema-SV-II-list-time-enumeration-5 tokoe:valid" result="pass"/><test-case name="20736NISTXML-SV-II-list-time-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="20737NISTXML-SV-II-list-time-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="20738NISTXML-SV-II-list-time-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="20739NISTXML-SV-II-list-time-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="20740NISTXML-SV-II-list-time-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="20741NISTSchema-SV-II-list-date-maxLength-1 tokoe:valid" result="pass"/><test-case name="20742NISTXML-SV-II-list-date-maxLength-1-1 tokoe:invalid" result="pass"/><test-case name="20743NISTXML-SV-II-list-date-maxLength-1-2 tokoe:invalid" result="pass"/><test-case name="20744NISTXML-SV-II-list-date-maxLength-1-3 tokoe:invalid" result="pass"/><test-case name="20745NISTXML-SV-II-list-date-maxLength-1-4 tokoe:invalid" result="pass"/><test-case name="20746NISTXML-SV-II-list-date-maxLength-1-5 tokoe:invalid" result="pass"/><test-case name="20747NISTSchema-SV-II-list-date-maxLength-2 tokoe:valid" result="pass"/><test-case name="20748NISTXML-SV-II-list-date-maxLength-2-1 tokoe:invalid" result="pass"/><test-case name="20749NISTXML-SV-II-list-date-maxLength-2-2 tokoe:invalid" result="pass"/><test-case name="20750NISTXML-SV-II-list-date-maxLength-2-3 tokoe:invalid" result="pass"/><test-case name="20751NISTXML-SV-II-list-date-maxLength-2-4 tokoe:invalid" result="pass"/><test-case name="20752NISTXML-SV-II-list-date-maxLength-2-5 tokoe:invalid" result="pass"/><test-case name="20753NISTSchema-SV-II-list-date-maxLength-3 tokoe:valid" result="pass"/><test-case name="20754NISTXML-SV-II-list-date-maxLength-3-1 tokoe:invalid" result="pass"/><test-case name="20755NISTXML-SV-II-list-date-maxLength-3-2 tokoe:invalid" result="pass"/><test-case name="20756NISTXML-SV-II-list-date-maxLength-3-3 tokoe:invalid" result="pass"/><test-case name="20757NISTXML-SV-II-list-date-maxLength-3-4 tokoe:invalid" result="pass"/><test-case name="20758NISTXML-SV-II-list-date-maxLength-3-5 tokoe:invalid" result="pass"/><test-case name="20759NISTSchema-SV-II-list-date-maxLength-4 tokoe:valid" result="pass"/><test-case name="20760NISTXML-SV-II-list-date-maxLength-4-1 tokoe:invalid" result="pass"/><test-case name="20761NISTXML-SV-II-list-date-maxLength-4-2 tokoe:invalid" result="pass"/><test-case name="20762NISTXML-SV-II-list-date-maxLength-4-3 tokoe:invalid" result="pass"/><test-case name="20763NISTXML-SV-II-list-date-maxLength-4-4 tokoe:invalid" result="pass"/><test-case name="20764NISTXML-SV-II-list-date-maxLength-4-5 tokoe:invalid" result="pass"/><test-case name="20765NISTSchema-SV-II-list-date-maxLength-5 tokoe:valid" result="pass"/><test-case name="20766NISTXML-SV-II-list-date-maxLength-5-1 tokoe:invalid" result="pass"/><test-case name="20767NISTXML-SV-II-list-date-maxLength-5-2 tokoe:invalid" result="pass"/><test-case name="20768NISTXML-SV-II-list-date-maxLength-5-3 tokoe:invalid" result="pass"/><test-case name="20769NISTXML-SV-II-list-date-maxLength-5-4 tokoe:invalid" result="pass"/><test-case name="20770NISTXML-SV-II-list-date-maxLength-5-5 tokoe:invalid" result="pass"/><test-case name="20771NISTSchema-SV-II-list-date-minLength-1 tokoe:valid" result="pass"/><test-case name="20772NISTXML-SV-II-list-date-minLength-1-1 tokoe:invalid" result="pass"/><test-case name="20773NISTXML-SV-II-list-date-minLength-1-2 tokoe:invalid" result="pass"/><test-case name="20774NISTXML-SV-II-list-date-minLength-1-3 tokoe:invalid" result="pass"/><test-case name="20775NISTXML-SV-II-list-date-minLength-1-4 tokoe:invalid" result="pass"/><test-case name="20776NISTXML-SV-II-list-date-minLength-1-5 tokoe:invalid" result="pass"/><test-case name="20777NISTSchema-SV-II-list-date-minLength-2 tokoe:valid" result="pass"/><test-case name="20778NISTXML-SV-II-list-date-minLength-2-1 tokoe:invalid" result="pass"/><test-case name="20779NISTXML-SV-II-list-date-minLength-2-2 tokoe:invalid" result="pass"/><test-case name="20780NISTXML-SV-II-list-date-minLength-2-3 tokoe:invalid" result="pass"/><test-case name="20781NISTXML-SV-II-list-date-minLength-2-4 tokoe:invalid" result="pass"/><test-case name="20782NISTXML-SV-II-list-date-minLength-2-5 tokoe:invalid" result="pass"/><test-case name="20783NISTSchema-SV-II-list-date-minLength-3 tokoe:valid" result="pass"/><test-case name="20784NISTXML-SV-II-list-date-minLength-3-1 tokoe:invalid" result="pass"/><test-case name="20785NISTXML-SV-II-list-date-minLength-3-2 tokoe:invalid" result="pass"/><test-case name="20786NISTXML-SV-II-list-date-minLength-3-3 tokoe:invalid" result="pass"/><test-case name="20787NISTXML-SV-II-list-date-minLength-3-4 tokoe:invalid" result="pass"/><test-case name="20788NISTXML-SV-II-list-date-minLength-3-5 tokoe:invalid" result="pass"/><test-case name="20789NISTSchema-SV-II-list-date-minLength-4 tokoe:valid" result="pass"/><test-case name="20790NISTXML-SV-II-list-date-minLength-4-1 tokoe:invalid" result="pass"/><test-case name="20791NISTXML-SV-II-list-date-minLength-4-2 tokoe:invalid" result="pass"/><test-case name="20792NISTXML-SV-II-list-date-minLength-4-3 tokoe:invalid" result="pass"/><test-case name="20793NISTXML-SV-II-list-date-minLength-4-4 tokoe:invalid" result="pass"/><test-case name="20794NISTXML-SV-II-list-date-minLength-4-5 tokoe:invalid" result="pass"/><test-case name="20795NISTSchema-SV-II-list-date-minLength-5 tokoe:valid" result="pass"/><test-case name="20796NISTXML-SV-II-list-date-minLength-5-1 tokoe:invalid" result="pass"/><test-case name="20797NISTXML-SV-II-list-date-minLength-5-2 tokoe:invalid" result="pass"/><test-case name="20798NISTXML-SV-II-list-date-minLength-5-3 tokoe:invalid" result="pass"/><test-case name="20799NISTXML-SV-II-list-date-minLength-5-4 tokoe:invalid" result="pass"/><test-case name="20800NISTXML-SV-II-list-date-minLength-5-5 tokoe:invalid" result="pass"/><test-case name="20801NISTSchema-SV-II-list-date-length-1 tokoe:valid" result="pass"/><test-case name="20802NISTXML-SV-II-list-date-length-1-1 tokoe:invalid" result="pass"/><test-case name="20803NISTXML-SV-II-list-date-length-1-2 tokoe:invalid" result="pass"/><test-case name="20804NISTXML-SV-II-list-date-length-1-3 tokoe:invalid" result="pass"/><test-case name="20805NISTXML-SV-II-list-date-length-1-4 tokoe:invalid" result="pass"/><test-case name="20806NISTXML-SV-II-list-date-length-1-5 tokoe:invalid" result="pass"/><test-case name="20807NISTSchema-SV-II-list-date-length-2 tokoe:valid" result="pass"/><test-case name="20808NISTXML-SV-II-list-date-length-2-1 tokoe:invalid" result="pass"/><test-case name="20809NISTXML-SV-II-list-date-length-2-2 tokoe:invalid" result="pass"/><test-case name="20810NISTXML-SV-II-list-date-length-2-3 tokoe:invalid" result="pass"/><test-case name="20811NISTXML-SV-II-list-date-length-2-4 tokoe:invalid" result="pass"/><test-case name="20812NISTXML-SV-II-list-date-length-2-5 tokoe:invalid" result="pass"/><test-case name="20813NISTSchema-SV-II-list-date-length-3 tokoe:valid" result="pass"/><test-case name="20814NISTXML-SV-II-list-date-length-3-1 tokoe:invalid" result="pass"/><test-case name="20815NISTXML-SV-II-list-date-length-3-2 tokoe:invalid" result="pass"/><test-case name="20816NISTXML-SV-II-list-date-length-3-3 tokoe:invalid" result="pass"/><test-case name="20817NISTXML-SV-II-list-date-length-3-4 tokoe:invalid" result="pass"/><test-case name="20818NISTXML-SV-II-list-date-length-3-5 tokoe:invalid" result="pass"/><test-case name="20819NISTSchema-SV-II-list-date-length-4 tokoe:valid" result="pass"/><test-case name="20820NISTXML-SV-II-list-date-length-4-1 tokoe:invalid" result="pass"/><test-case name="20821NISTXML-SV-II-list-date-length-4-2 tokoe:invalid" result="pass"/><test-case name="20822NISTXML-SV-II-list-date-length-4-3 tokoe:invalid" result="pass"/><test-case name="20823NISTXML-SV-II-list-date-length-4-4 tokoe:invalid" result="pass"/><test-case name="20824NISTXML-SV-II-list-date-length-4-5 tokoe:invalid" result="pass"/><test-case name="20825NISTSchema-SV-II-list-date-length-5 tokoe:valid" result="pass"/><test-case name="20826NISTXML-SV-II-list-date-length-5-1 tokoe:invalid" result="pass"/><test-case name="20827NISTXML-SV-II-list-date-length-5-2 tokoe:invalid" result="pass"/><test-case name="20828NISTXML-SV-II-list-date-length-5-3 tokoe:invalid" result="pass"/><test-case name="20829NISTXML-SV-II-list-date-length-5-4 tokoe:invalid" result="pass"/><test-case name="20830NISTXML-SV-II-list-date-length-5-5 tokoe:invalid" result="pass"/><test-case name="20831NISTSchema-SV-II-list-date-pattern-1 tokoe:valid" result="pass"/><test-case name="20832NISTXML-SV-II-list-date-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="20833NISTXML-SV-II-list-date-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="20834NISTXML-SV-II-list-date-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="20835NISTXML-SV-II-list-date-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="20836NISTXML-SV-II-list-date-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="20837NISTSchema-SV-II-list-date-pattern-2 tokoe:valid" result="pass"/><test-case name="20838NISTXML-SV-II-list-date-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="20839NISTXML-SV-II-list-date-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="20840NISTXML-SV-II-list-date-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="20841NISTXML-SV-II-list-date-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="20842NISTXML-SV-II-list-date-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="20843NISTSchema-SV-II-list-date-pattern-3 tokoe:valid" result="pass"/><test-case name="20844NISTXML-SV-II-list-date-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="20845NISTXML-SV-II-list-date-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="20846NISTXML-SV-II-list-date-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="20847NISTXML-SV-II-list-date-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="20848NISTXML-SV-II-list-date-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="20849NISTSchema-SV-II-list-date-pattern-4 tokoe:valid" result="pass"/><test-case name="20850NISTXML-SV-II-list-date-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="20851NISTXML-SV-II-list-date-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="20852NISTXML-SV-II-list-date-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="20853NISTXML-SV-II-list-date-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="20854NISTXML-SV-II-list-date-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="20855NISTSchema-SV-II-list-date-pattern-5 tokoe:valid" result="pass"/><test-case name="20856NISTXML-SV-II-list-date-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="20857NISTXML-SV-II-list-date-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="20858NISTXML-SV-II-list-date-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="20859NISTXML-SV-II-list-date-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="20860NISTXML-SV-II-list-date-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="20861NISTSchema-SV-II-list-date-enumeration-1 tokoe:valid" result="pass"/><test-case name="20862NISTXML-SV-II-list-date-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="20863NISTXML-SV-II-list-date-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="20864NISTXML-SV-II-list-date-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="20865NISTXML-SV-II-list-date-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="20866NISTXML-SV-II-list-date-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="20867NISTSchema-SV-II-list-date-enumeration-2 tokoe:valid" result="pass"/><test-case name="20868NISTXML-SV-II-list-date-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="20869NISTXML-SV-II-list-date-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="20870NISTXML-SV-II-list-date-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="20871NISTXML-SV-II-list-date-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="20872NISTXML-SV-II-list-date-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="20873NISTSchema-SV-II-list-date-enumeration-3 tokoe:valid" result="pass"/><test-case name="20874NISTXML-SV-II-list-date-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="20875NISTXML-SV-II-list-date-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="20876NISTXML-SV-II-list-date-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="20877NISTXML-SV-II-list-date-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="20878NISTXML-SV-II-list-date-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="20879NISTSchema-SV-II-list-date-enumeration-4 tokoe:valid" result="pass"/><test-case name="20880NISTXML-SV-II-list-date-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="20881NISTXML-SV-II-list-date-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="20882NISTXML-SV-II-list-date-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="20883NISTXML-SV-II-list-date-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="20884NISTXML-SV-II-list-date-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="20885NISTSchema-SV-II-list-date-enumeration-5 tokoe:valid" result="pass"/><test-case name="20886NISTXML-SV-II-list-date-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="20887NISTXML-SV-II-list-date-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="20888NISTXML-SV-II-list-date-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="20889NISTXML-SV-II-list-date-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="20890NISTXML-SV-II-list-date-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="20891NISTSchema-SV-II-list-gYearMonth-maxLength-1 tokoe:valid" result="pass"/><test-case name="20892NISTXML-SV-II-list-gYearMonth-maxLength-1-1 tokoe:invalid" result="pass"/><test-case name="20893NISTXML-SV-II-list-gYearMonth-maxLength-1-2 tokoe:invalid" result="pass"/><test-case name="20894NISTXML-SV-II-list-gYearMonth-maxLength-1-3 tokoe:invalid" result="pass"/><test-case name="20895NISTXML-SV-II-list-gYearMonth-maxLength-1-4 tokoe:invalid" result="pass"/><test-case name="20896NISTXML-SV-II-list-gYearMonth-maxLength-1-5 tokoe:invalid" result="pass"/><test-case name="20897NISTSchema-SV-II-list-gYearMonth-maxLength-2 tokoe:valid" result="pass"/><test-case name="20898NISTXML-SV-II-list-gYearMonth-maxLength-2-1 tokoe:invalid" result="pass"/><test-case name="20899NISTXML-SV-II-list-gYearMonth-maxLength-2-2 tokoe:invalid" result="pass"/><test-case name="20900NISTXML-SV-II-list-gYearMonth-maxLength-2-3 tokoe:invalid" result="pass"/><test-case name="20901NISTXML-SV-II-list-gYearMonth-maxLength-2-4 tokoe:invalid" result="pass"/><test-case name="20902NISTXML-SV-II-list-gYearMonth-maxLength-2-5 tokoe:invalid" result="pass"/><test-case name="20903NISTSchema-SV-II-list-gYearMonth-maxLength-3 tokoe:valid" result="pass"/><test-case name="20904NISTXML-SV-II-list-gYearMonth-maxLength-3-1 tokoe:invalid" result="pass"/><test-case name="20905NISTXML-SV-II-list-gYearMonth-maxLength-3-2 tokoe:invalid" result="pass"/><test-case name="20906NISTXML-SV-II-list-gYearMonth-maxLength-3-3 tokoe:invalid" result="pass"/><test-case name="20907NISTXML-SV-II-list-gYearMonth-maxLength-3-4 tokoe:invalid" result="pass"/><test-case name="20908NISTXML-SV-II-list-gYearMonth-maxLength-3-5 tokoe:invalid" result="pass"/><test-case name="20909NISTSchema-SV-II-list-gYearMonth-maxLength-4 tokoe:valid" result="pass"/><test-case name="20910NISTXML-SV-II-list-gYearMonth-maxLength-4-1 tokoe:invalid" result="pass"/><test-case name="20911NISTXML-SV-II-list-gYearMonth-maxLength-4-2 tokoe:invalid" result="pass"/><test-case name="20912NISTXML-SV-II-list-gYearMonth-maxLength-4-3 tokoe:invalid" result="pass"/><test-case name="20913NISTXML-SV-II-list-gYearMonth-maxLength-4-4 tokoe:invalid" result="pass"/><test-case name="20914NISTXML-SV-II-list-gYearMonth-maxLength-4-5 tokoe:invalid" result="pass"/><test-case name="20915NISTSchema-SV-II-list-gYearMonth-maxLength-5 tokoe:valid" result="pass"/><test-case name="20916NISTXML-SV-II-list-gYearMonth-maxLength-5-1 tokoe:invalid" result="pass"/><test-case name="20917NISTXML-SV-II-list-gYearMonth-maxLength-5-2 tokoe:invalid" result="pass"/><test-case name="20918NISTXML-SV-II-list-gYearMonth-maxLength-5-3 tokoe:invalid" result="pass"/><test-case name="20919NISTXML-SV-II-list-gYearMonth-maxLength-5-4 tokoe:invalid" result="pass"/><test-case name="20920NISTXML-SV-II-list-gYearMonth-maxLength-5-5 tokoe:invalid" result="pass"/><test-case name="20921NISTSchema-SV-II-list-gYearMonth-minLength-1 tokoe:valid" result="pass"/><test-case name="20922NISTXML-SV-II-list-gYearMonth-minLength-1-1 tokoe:invalid" result="pass"/><test-case name="20923NISTXML-SV-II-list-gYearMonth-minLength-1-2 tokoe:invalid" result="pass"/><test-case name="20924NISTXML-SV-II-list-gYearMonth-minLength-1-3 tokoe:invalid" result="pass"/><test-case name="20925NISTXML-SV-II-list-gYearMonth-minLength-1-4 tokoe:invalid" result="pass"/><test-case name="20926NISTXML-SV-II-list-gYearMonth-minLength-1-5 tokoe:invalid" result="pass"/><test-case name="20927NISTSchema-SV-II-list-gYearMonth-minLength-2 tokoe:valid" result="pass"/><test-case name="20928NISTXML-SV-II-list-gYearMonth-minLength-2-1 tokoe:invalid" result="pass"/><test-case name="20929NISTXML-SV-II-list-gYearMonth-minLength-2-2 tokoe:invalid" result="pass"/><test-case name="20930NISTXML-SV-II-list-gYearMonth-minLength-2-3 tokoe:invalid" result="pass"/><test-case name="20931NISTXML-SV-II-list-gYearMonth-minLength-2-4 tokoe:invalid" result="pass"/><test-case name="20932NISTXML-SV-II-list-gYearMonth-minLength-2-5 tokoe:invalid" result="pass"/><test-case name="20933NISTSchema-SV-II-list-gYearMonth-minLength-3 tokoe:valid" result="pass"/><test-case name="20934NISTXML-SV-II-list-gYearMonth-minLength-3-1 tokoe:invalid" result="pass"/><test-case name="20935NISTXML-SV-II-list-gYearMonth-minLength-3-2 tokoe:invalid" result="pass"/><test-case name="20936NISTXML-SV-II-list-gYearMonth-minLength-3-3 tokoe:invalid" result="pass"/><test-case name="20937NISTXML-SV-II-list-gYearMonth-minLength-3-4 tokoe:invalid" result="pass"/><test-case name="20938NISTXML-SV-II-list-gYearMonth-minLength-3-5 tokoe:invalid" result="pass"/><test-case name="20939NISTSchema-SV-II-list-gYearMonth-minLength-4 tokoe:valid" result="pass"/><test-case name="20940NISTXML-SV-II-list-gYearMonth-minLength-4-1 tokoe:invalid" result="pass"/><test-case name="20941NISTXML-SV-II-list-gYearMonth-minLength-4-2 tokoe:invalid" result="pass"/><test-case name="20942NISTXML-SV-II-list-gYearMonth-minLength-4-3 tokoe:invalid" result="pass"/><test-case name="20943NISTXML-SV-II-list-gYearMonth-minLength-4-4 tokoe:invalid" result="pass"/><test-case name="20944NISTXML-SV-II-list-gYearMonth-minLength-4-5 tokoe:invalid" result="pass"/><test-case name="20945NISTSchema-SV-II-list-gYearMonth-minLength-5 tokoe:valid" result="pass"/><test-case name="20946NISTXML-SV-II-list-gYearMonth-minLength-5-1 tokoe:invalid" result="pass"/><test-case name="20947NISTXML-SV-II-list-gYearMonth-minLength-5-2 tokoe:invalid" result="pass"/><test-case name="20948NISTXML-SV-II-list-gYearMonth-minLength-5-3 tokoe:invalid" result="pass"/><test-case name="20949NISTXML-SV-II-list-gYearMonth-minLength-5-4 tokoe:invalid" result="pass"/><test-case name="20950NISTXML-SV-II-list-gYearMonth-minLength-5-5 tokoe:invalid" result="pass"/><test-case name="20951NISTSchema-SV-II-list-gYearMonth-length-1 tokoe:valid" result="pass"/><test-case name="20952NISTXML-SV-II-list-gYearMonth-length-1-1 tokoe:invalid" result="pass"/><test-case name="20953NISTXML-SV-II-list-gYearMonth-length-1-2 tokoe:invalid" result="pass"/><test-case name="20954NISTXML-SV-II-list-gYearMonth-length-1-3 tokoe:invalid" result="pass"/><test-case name="20955NISTXML-SV-II-list-gYearMonth-length-1-4 tokoe:invalid" result="pass"/><test-case name="20956NISTXML-SV-II-list-gYearMonth-length-1-5 tokoe:invalid" result="pass"/><test-case name="20957NISTSchema-SV-II-list-gYearMonth-length-2 tokoe:valid" result="pass"/><test-case name="20958NISTXML-SV-II-list-gYearMonth-length-2-1 tokoe:invalid" result="pass"/><test-case name="20959NISTXML-SV-II-list-gYearMonth-length-2-2 tokoe:invalid" result="pass"/><test-case name="20960NISTXML-SV-II-list-gYearMonth-length-2-3 tokoe:invalid" result="pass"/><test-case name="20961NISTXML-SV-II-list-gYearMonth-length-2-4 tokoe:invalid" result="pass"/><test-case name="20962NISTXML-SV-II-list-gYearMonth-length-2-5 tokoe:invalid" result="pass"/><test-case name="20963NISTSchema-SV-II-list-gYearMonth-length-3 tokoe:valid" result="pass"/><test-case name="20964NISTXML-SV-II-list-gYearMonth-length-3-1 tokoe:invalid" result="pass"/><test-case name="20965NISTXML-SV-II-list-gYearMonth-length-3-2 tokoe:invalid" result="pass"/><test-case name="20966NISTXML-SV-II-list-gYearMonth-length-3-3 tokoe:invalid" result="pass"/><test-case name="20967NISTXML-SV-II-list-gYearMonth-length-3-4 tokoe:invalid" result="pass"/><test-case name="20968NISTXML-SV-II-list-gYearMonth-length-3-5 tokoe:invalid" result="pass"/><test-case name="20969NISTSchema-SV-II-list-gYearMonth-length-4 tokoe:valid" result="pass"/><test-case name="20970NISTXML-SV-II-list-gYearMonth-length-4-1 tokoe:invalid" result="pass"/><test-case name="20971NISTXML-SV-II-list-gYearMonth-length-4-2 tokoe:invalid" result="pass"/><test-case name="20972NISTXML-SV-II-list-gYearMonth-length-4-3 tokoe:invalid" result="pass"/><test-case name="20973NISTXML-SV-II-list-gYearMonth-length-4-4 tokoe:invalid" result="pass"/><test-case name="20974NISTXML-SV-II-list-gYearMonth-length-4-5 tokoe:invalid" result="pass"/><test-case name="20975NISTSchema-SV-II-list-gYearMonth-length-5 tokoe:valid" result="pass"/><test-case name="20976NISTXML-SV-II-list-gYearMonth-length-5-1 tokoe:invalid" result="pass"/><test-case name="20977NISTXML-SV-II-list-gYearMonth-length-5-2 tokoe:invalid" result="pass"/><test-case name="20978NISTXML-SV-II-list-gYearMonth-length-5-3 tokoe:invalid" result="pass"/><test-case name="20979NISTXML-SV-II-list-gYearMonth-length-5-4 tokoe:invalid" result="pass"/><test-case name="20980NISTXML-SV-II-list-gYearMonth-length-5-5 tokoe:invalid" result="pass"/><test-case name="20981NISTSchema-SV-II-list-gYearMonth-pattern-1 tokoe:valid" result="pass"/><test-case name="20982NISTXML-SV-II-list-gYearMonth-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="20983NISTXML-SV-II-list-gYearMonth-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="20984NISTXML-SV-II-list-gYearMonth-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="20985NISTXML-SV-II-list-gYearMonth-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="20986NISTXML-SV-II-list-gYearMonth-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="20987NISTSchema-SV-II-list-gYearMonth-pattern-2 tokoe:valid" result="pass"/><test-case name="20988NISTXML-SV-II-list-gYearMonth-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="20989NISTXML-SV-II-list-gYearMonth-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="20990NISTXML-SV-II-list-gYearMonth-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="20991NISTXML-SV-II-list-gYearMonth-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="20992NISTXML-SV-II-list-gYearMonth-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="20993NISTSchema-SV-II-list-gYearMonth-pattern-3 tokoe:valid" result="pass"/><test-case name="20994NISTXML-SV-II-list-gYearMonth-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="20995NISTXML-SV-II-list-gYearMonth-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="20996NISTXML-SV-II-list-gYearMonth-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="20997NISTXML-SV-II-list-gYearMonth-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="20998NISTXML-SV-II-list-gYearMonth-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="20999NISTSchema-SV-II-list-gYearMonth-pattern-4 tokoe:valid" result="pass"/><test-case name="21000NISTXML-SV-II-list-gYearMonth-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="21001NISTXML-SV-II-list-gYearMonth-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="21002NISTXML-SV-II-list-gYearMonth-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="21003NISTXML-SV-II-list-gYearMonth-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="21004NISTXML-SV-II-list-gYearMonth-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="21005NISTSchema-SV-II-list-gYearMonth-pattern-5 tokoe:valid" result="pass"/><test-case name="21006NISTXML-SV-II-list-gYearMonth-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="21007NISTXML-SV-II-list-gYearMonth-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="21008NISTXML-SV-II-list-gYearMonth-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="21009NISTXML-SV-II-list-gYearMonth-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="21010NISTXML-SV-II-list-gYearMonth-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="21011NISTSchema-SV-II-list-gYearMonth-enumeration-1 tokoe:valid" result="pass"/><test-case name="21012NISTXML-SV-II-list-gYearMonth-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="21013NISTXML-SV-II-list-gYearMonth-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="21014NISTXML-SV-II-list-gYearMonth-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="21015NISTXML-SV-II-list-gYearMonth-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="21016NISTXML-SV-II-list-gYearMonth-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="21017NISTSchema-SV-II-list-gYearMonth-enumeration-2 tokoe:valid" result="pass"/><test-case name="21018NISTXML-SV-II-list-gYearMonth-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="21019NISTXML-SV-II-list-gYearMonth-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="21020NISTXML-SV-II-list-gYearMonth-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="21021NISTXML-SV-II-list-gYearMonth-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="21022NISTXML-SV-II-list-gYearMonth-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="21023NISTSchema-SV-II-list-gYearMonth-enumeration-3 tokoe:valid" result="pass"/><test-case name="21024NISTXML-SV-II-list-gYearMonth-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="21025NISTXML-SV-II-list-gYearMonth-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="21026NISTXML-SV-II-list-gYearMonth-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="21027NISTXML-SV-II-list-gYearMonth-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="21028NISTXML-SV-II-list-gYearMonth-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="21029NISTSchema-SV-II-list-gYearMonth-enumeration-4 tokoe:valid" result="pass"/><test-case name="21030NISTXML-SV-II-list-gYearMonth-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="21031NISTXML-SV-II-list-gYearMonth-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="21032NISTXML-SV-II-list-gYearMonth-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="21033NISTXML-SV-II-list-gYearMonth-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="21034NISTXML-SV-II-list-gYearMonth-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="21035NISTSchema-SV-II-list-gYearMonth-enumeration-5 tokoe:valid" result="pass"/><test-case name="21036NISTXML-SV-II-list-gYearMonth-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="21037NISTXML-SV-II-list-gYearMonth-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="21038NISTXML-SV-II-list-gYearMonth-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="21039NISTXML-SV-II-list-gYearMonth-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="21040NISTXML-SV-II-list-gYearMonth-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="21041NISTSchema-SV-II-list-gYear-maxLength-1 tokoe:valid" result="pass"/><test-case name="21042NISTXML-SV-II-list-gYear-maxLength-1-1 tokoe:invalid" result="pass"/><test-case name="21043NISTXML-SV-II-list-gYear-maxLength-1-2 tokoe:invalid" result="pass"/><test-case name="21044NISTXML-SV-II-list-gYear-maxLength-1-3 tokoe:invalid" result="pass"/><test-case name="21045NISTXML-SV-II-list-gYear-maxLength-1-4 tokoe:invalid" result="pass"/><test-case name="21046NISTXML-SV-II-list-gYear-maxLength-1-5 tokoe:invalid" result="pass"/><test-case name="21047NISTSchema-SV-II-list-gYear-maxLength-2 tokoe:valid" result="pass"/><test-case name="21048NISTXML-SV-II-list-gYear-maxLength-2-1 tokoe:invalid" result="pass"/><test-case name="21049NISTXML-SV-II-list-gYear-maxLength-2-2 tokoe:invalid" result="pass"/><test-case name="21050NISTXML-SV-II-list-gYear-maxLength-2-3 tokoe:invalid" result="pass"/><test-case name="21051NISTXML-SV-II-list-gYear-maxLength-2-4 tokoe:invalid" result="pass"/><test-case name="21052NISTXML-SV-II-list-gYear-maxLength-2-5 tokoe:invalid" result="pass"/><test-case name="21053NISTSchema-SV-II-list-gYear-maxLength-3 tokoe:valid" result="pass"/><test-case name="21054NISTXML-SV-II-list-gYear-maxLength-3-1 tokoe:invalid" result="pass"/><test-case name="21055NISTXML-SV-II-list-gYear-maxLength-3-2 tokoe:invalid" result="pass"/><test-case name="21056NISTXML-SV-II-list-gYear-maxLength-3-3 tokoe:invalid" result="pass"/><test-case name="21057NISTXML-SV-II-list-gYear-maxLength-3-4 tokoe:invalid" result="pass"/><test-case name="21058NISTXML-SV-II-list-gYear-maxLength-3-5 tokoe:invalid" result="pass"/><test-case name="21059NISTSchema-SV-II-list-gYear-maxLength-4 tokoe:valid" result="pass"/><test-case name="21060NISTXML-SV-II-list-gYear-maxLength-4-1 tokoe:invalid" result="pass"/><test-case name="21061NISTXML-SV-II-list-gYear-maxLength-4-2 tokoe:invalid" result="pass"/><test-case name="21062NISTXML-SV-II-list-gYear-maxLength-4-3 tokoe:invalid" result="pass"/><test-case name="21063NISTXML-SV-II-list-gYear-maxLength-4-4 tokoe:invalid" result="pass"/><test-case name="21064NISTXML-SV-II-list-gYear-maxLength-4-5 tokoe:invalid" result="pass"/><test-case name="21065NISTSchema-SV-II-list-gYear-maxLength-5 tokoe:valid" result="pass"/><test-case name="21066NISTXML-SV-II-list-gYear-maxLength-5-1 tokoe:invalid" result="pass"/><test-case name="21067NISTXML-SV-II-list-gYear-maxLength-5-2 tokoe:invalid" result="pass"/><test-case name="21068NISTXML-SV-II-list-gYear-maxLength-5-3 tokoe:invalid" result="pass"/><test-case name="21069NISTXML-SV-II-list-gYear-maxLength-5-4 tokoe:invalid" result="pass"/><test-case name="21070NISTXML-SV-II-list-gYear-maxLength-5-5 tokoe:invalid" result="pass"/><test-case name="21071NISTSchema-SV-II-list-gYear-minLength-1 tokoe:valid" result="pass"/><test-case name="21072NISTXML-SV-II-list-gYear-minLength-1-1 tokoe:invalid" result="pass"/><test-case name="21073NISTXML-SV-II-list-gYear-minLength-1-2 tokoe:invalid" result="pass"/><test-case name="21074NISTXML-SV-II-list-gYear-minLength-1-3 tokoe:invalid" result="pass"/><test-case name="21075NISTXML-SV-II-list-gYear-minLength-1-4 tokoe:invalid" result="pass"/><test-case name="21076NISTXML-SV-II-list-gYear-minLength-1-5 tokoe:invalid" result="pass"/><test-case name="21077NISTSchema-SV-II-list-gYear-minLength-2 tokoe:valid" result="pass"/><test-case name="21078NISTXML-SV-II-list-gYear-minLength-2-1 tokoe:invalid" result="pass"/><test-case name="21079NISTXML-SV-II-list-gYear-minLength-2-2 tokoe:invalid" result="pass"/><test-case name="21080NISTXML-SV-II-list-gYear-minLength-2-3 tokoe:invalid" result="pass"/><test-case name="21081NISTXML-SV-II-list-gYear-minLength-2-4 tokoe:invalid" result="pass"/><test-case name="21082NISTXML-SV-II-list-gYear-minLength-2-5 tokoe:invalid" result="pass"/><test-case name="21083NISTSchema-SV-II-list-gYear-minLength-3 tokoe:valid" result="pass"/><test-case name="21084NISTXML-SV-II-list-gYear-minLength-3-1 tokoe:invalid" result="pass"/><test-case name="21085NISTXML-SV-II-list-gYear-minLength-3-2 tokoe:invalid" result="pass"/><test-case name="21086NISTXML-SV-II-list-gYear-minLength-3-3 tokoe:invalid" result="pass"/><test-case name="21087NISTXML-SV-II-list-gYear-minLength-3-4 tokoe:invalid" result="pass"/><test-case name="21088NISTXML-SV-II-list-gYear-minLength-3-5 tokoe:invalid" result="pass"/><test-case name="21089NISTSchema-SV-II-list-gYear-minLength-4 tokoe:valid" result="pass"/><test-case name="21090NISTXML-SV-II-list-gYear-minLength-4-1 tokoe:invalid" result="pass"/><test-case name="21091NISTXML-SV-II-list-gYear-minLength-4-2 tokoe:invalid" result="pass"/><test-case name="21092NISTXML-SV-II-list-gYear-minLength-4-3 tokoe:invalid" result="pass"/><test-case name="21093NISTXML-SV-II-list-gYear-minLength-4-4 tokoe:invalid" result="pass"/><test-case name="21094NISTXML-SV-II-list-gYear-minLength-4-5 tokoe:invalid" result="pass"/><test-case name="21095NISTSchema-SV-II-list-gYear-minLength-5 tokoe:valid" result="pass"/><test-case name="21096NISTXML-SV-II-list-gYear-minLength-5-1 tokoe:invalid" result="pass"/><test-case name="21097NISTXML-SV-II-list-gYear-minLength-5-2 tokoe:invalid" result="pass"/><test-case name="21098NISTXML-SV-II-list-gYear-minLength-5-3 tokoe:invalid" result="pass"/><test-case name="21099NISTXML-SV-II-list-gYear-minLength-5-4 tokoe:invalid" result="pass"/><test-case name="21100NISTXML-SV-II-list-gYear-minLength-5-5 tokoe:invalid" result="pass"/><test-case name="21101NISTSchema-SV-II-list-gYear-length-1 tokoe:valid" result="pass"/><test-case name="21102NISTXML-SV-II-list-gYear-length-1-1 tokoe:invalid" result="pass"/><test-case name="21103NISTXML-SV-II-list-gYear-length-1-2 tokoe:invalid" result="pass"/><test-case name="21104NISTXML-SV-II-list-gYear-length-1-3 tokoe:invalid" result="pass"/><test-case name="21105NISTXML-SV-II-list-gYear-length-1-4 tokoe:invalid" result="pass"/><test-case name="21106NISTXML-SV-II-list-gYear-length-1-5 tokoe:invalid" result="pass"/><test-case name="21107NISTSchema-SV-II-list-gYear-length-2 tokoe:valid" result="pass"/><test-case name="21108NISTXML-SV-II-list-gYear-length-2-1 tokoe:invalid" result="pass"/><test-case name="21109NISTXML-SV-II-list-gYear-length-2-2 tokoe:invalid" result="pass"/><test-case name="21110NISTXML-SV-II-list-gYear-length-2-3 tokoe:invalid" result="pass"/><test-case name="21111NISTXML-SV-II-list-gYear-length-2-4 tokoe:invalid" result="pass"/><test-case name="21112NISTXML-SV-II-list-gYear-length-2-5 tokoe:invalid" result="pass"/><test-case name="21113NISTSchema-SV-II-list-gYear-length-3 tokoe:valid" result="pass"/><test-case name="21114NISTXML-SV-II-list-gYear-length-3-1 tokoe:invalid" result="pass"/><test-case name="21115NISTXML-SV-II-list-gYear-length-3-2 tokoe:invalid" result="pass"/><test-case name="21116NISTXML-SV-II-list-gYear-length-3-3 tokoe:invalid" result="pass"/><test-case name="21117NISTXML-SV-II-list-gYear-length-3-4 tokoe:invalid" result="pass"/><test-case name="21118NISTXML-SV-II-list-gYear-length-3-5 tokoe:invalid" result="pass"/><test-case name="21119NISTSchema-SV-II-list-gYear-length-4 tokoe:valid" result="pass"/><test-case name="21120NISTXML-SV-II-list-gYear-length-4-1 tokoe:invalid" result="pass"/><test-case name="21121NISTXML-SV-II-list-gYear-length-4-2 tokoe:invalid" result="pass"/><test-case name="21122NISTXML-SV-II-list-gYear-length-4-3 tokoe:invalid" result="pass"/><test-case name="21123NISTXML-SV-II-list-gYear-length-4-4 tokoe:invalid" result="pass"/><test-case name="21124NISTXML-SV-II-list-gYear-length-4-5 tokoe:invalid" result="pass"/><test-case name="21125NISTSchema-SV-II-list-gYear-length-5 tokoe:valid" result="pass"/><test-case name="21126NISTXML-SV-II-list-gYear-length-5-1 tokoe:invalid" result="pass"/><test-case name="21127NISTXML-SV-II-list-gYear-length-5-2 tokoe:invalid" result="pass"/><test-case name="21128NISTXML-SV-II-list-gYear-length-5-3 tokoe:invalid" result="pass"/><test-case name="21129NISTXML-SV-II-list-gYear-length-5-4 tokoe:invalid" result="pass"/><test-case name="21130NISTXML-SV-II-list-gYear-length-5-5 tokoe:invalid" result="pass"/><test-case name="21131NISTSchema-SV-II-list-gYear-pattern-1 tokoe:valid" result="pass"/><test-case name="21132NISTXML-SV-II-list-gYear-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="21133NISTXML-SV-II-list-gYear-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="21134NISTXML-SV-II-list-gYear-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="21135NISTXML-SV-II-list-gYear-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="21136NISTXML-SV-II-list-gYear-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="21137NISTSchema-SV-II-list-gYear-pattern-2 tokoe:valid" result="pass"/><test-case name="21138NISTXML-SV-II-list-gYear-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="21139NISTXML-SV-II-list-gYear-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="21140NISTXML-SV-II-list-gYear-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="21141NISTXML-SV-II-list-gYear-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="21142NISTXML-SV-II-list-gYear-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="21143NISTSchema-SV-II-list-gYear-pattern-3 tokoe:valid" result="pass"/><test-case name="21144NISTXML-SV-II-list-gYear-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="21145NISTXML-SV-II-list-gYear-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="21146NISTXML-SV-II-list-gYear-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="21147NISTXML-SV-II-list-gYear-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="21148NISTXML-SV-II-list-gYear-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="21149NISTSchema-SV-II-list-gYear-pattern-4 tokoe:valid" result="pass"/><test-case name="21150NISTXML-SV-II-list-gYear-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="21151NISTXML-SV-II-list-gYear-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="21152NISTXML-SV-II-list-gYear-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="21153NISTXML-SV-II-list-gYear-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="21154NISTXML-SV-II-list-gYear-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="21155NISTSchema-SV-II-list-gYear-pattern-5 tokoe:valid" result="pass"/><test-case name="21156NISTXML-SV-II-list-gYear-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="21157NISTXML-SV-II-list-gYear-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="21158NISTXML-SV-II-list-gYear-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="21159NISTXML-SV-II-list-gYear-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="21160NISTXML-SV-II-list-gYear-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="21161NISTSchema-SV-II-list-gYear-enumeration-1 tokoe:valid" result="pass"/><test-case name="21162NISTXML-SV-II-list-gYear-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="21163NISTXML-SV-II-list-gYear-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="21164NISTXML-SV-II-list-gYear-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="21165NISTXML-SV-II-list-gYear-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="21166NISTXML-SV-II-list-gYear-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="21167NISTSchema-SV-II-list-gYear-enumeration-2 tokoe:valid" result="pass"/><test-case name="21168NISTXML-SV-II-list-gYear-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="21169NISTXML-SV-II-list-gYear-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="21170NISTXML-SV-II-list-gYear-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="21171NISTXML-SV-II-list-gYear-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="21172NISTXML-SV-II-list-gYear-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="21173NISTSchema-SV-II-list-gYear-enumeration-3 tokoe:valid" result="pass"/><test-case name="21174NISTXML-SV-II-list-gYear-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="21175NISTXML-SV-II-list-gYear-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="21176NISTXML-SV-II-list-gYear-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="21177NISTXML-SV-II-list-gYear-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="21178NISTXML-SV-II-list-gYear-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="21179NISTSchema-SV-II-list-gYear-enumeration-4 tokoe:valid" result="pass"/><test-case name="21180NISTXML-SV-II-list-gYear-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="21181NISTXML-SV-II-list-gYear-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="21182NISTXML-SV-II-list-gYear-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="21183NISTXML-SV-II-list-gYear-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="21184NISTXML-SV-II-list-gYear-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="21185NISTSchema-SV-II-list-gYear-enumeration-5 tokoe:valid" result="pass"/><test-case name="21186NISTXML-SV-II-list-gYear-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="21187NISTXML-SV-II-list-gYear-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="21188NISTXML-SV-II-list-gYear-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="21189NISTXML-SV-II-list-gYear-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="21190NISTXML-SV-II-list-gYear-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="21191NISTSchema-SV-II-list-gMonthDay-maxLength-1 tokoe:valid" result="pass"/><test-case name="21192NISTXML-SV-II-list-gMonthDay-maxLength-1-1 tokoe:invalid" result="pass"/><test-case name="21193NISTXML-SV-II-list-gMonthDay-maxLength-1-2 tokoe:invalid" result="pass"/><test-case name="21194NISTXML-SV-II-list-gMonthDay-maxLength-1-3 tokoe:invalid" result="pass"/><test-case name="21195NISTXML-SV-II-list-gMonthDay-maxLength-1-4 tokoe:invalid" result="pass"/><test-case name="21196NISTXML-SV-II-list-gMonthDay-maxLength-1-5 tokoe:invalid" result="pass"/><test-case name="21197NISTSchema-SV-II-list-gMonthDay-maxLength-2 tokoe:valid" result="pass"/><test-case name="21198NISTXML-SV-II-list-gMonthDay-maxLength-2-1 tokoe:invalid" result="pass"/><test-case name="21199NISTXML-SV-II-list-gMonthDay-maxLength-2-2 tokoe:invalid" result="pass"/><test-case name="21200NISTXML-SV-II-list-gMonthDay-maxLength-2-3 tokoe:invalid" result="pass"/><test-case name="21201NISTXML-SV-II-list-gMonthDay-maxLength-2-4 tokoe:invalid" result="pass"/><test-case name="21202NISTXML-SV-II-list-gMonthDay-maxLength-2-5 tokoe:invalid" result="pass"/><test-case name="21203NISTSchema-SV-II-list-gMonthDay-maxLength-3 tokoe:valid" result="pass"/><test-case name="21204NISTXML-SV-II-list-gMonthDay-maxLength-3-1 tokoe:invalid" result="pass"/><test-case name="21205NISTXML-SV-II-list-gMonthDay-maxLength-3-2 tokoe:invalid" result="pass"/><test-case name="21206NISTXML-SV-II-list-gMonthDay-maxLength-3-3 tokoe:invalid" result="pass"/><test-case name="21207NISTXML-SV-II-list-gMonthDay-maxLength-3-4 tokoe:invalid" result="pass"/><test-case name="21208NISTXML-SV-II-list-gMonthDay-maxLength-3-5 tokoe:invalid" result="pass"/><test-case name="21209NISTSchema-SV-II-list-gMonthDay-maxLength-4 tokoe:valid" result="pass"/><test-case name="21210NISTXML-SV-II-list-gMonthDay-maxLength-4-1 tokoe:invalid" result="pass"/><test-case name="21211NISTXML-SV-II-list-gMonthDay-maxLength-4-2 tokoe:invalid" result="pass"/><test-case name="21212NISTXML-SV-II-list-gMonthDay-maxLength-4-3 tokoe:invalid" result="pass"/><test-case name="21213NISTXML-SV-II-list-gMonthDay-maxLength-4-4 tokoe:invalid" result="pass"/><test-case name="21214NISTXML-SV-II-list-gMonthDay-maxLength-4-5 tokoe:invalid" result="pass"/><test-case name="21215NISTSchema-SV-II-list-gMonthDay-maxLength-5 tokoe:valid" result="pass"/><test-case name="21216NISTXML-SV-II-list-gMonthDay-maxLength-5-1 tokoe:invalid" result="pass"/><test-case name="21217NISTXML-SV-II-list-gMonthDay-maxLength-5-2 tokoe:invalid" result="pass"/><test-case name="21218NISTXML-SV-II-list-gMonthDay-maxLength-5-3 tokoe:invalid" result="pass"/><test-case name="21219NISTXML-SV-II-list-gMonthDay-maxLength-5-4 tokoe:invalid" result="pass"/><test-case name="21220NISTXML-SV-II-list-gMonthDay-maxLength-5-5 tokoe:invalid" result="pass"/><test-case name="21221NISTSchema-SV-II-list-gMonthDay-minLength-1 tokoe:valid" result="pass"/><test-case name="21222NISTXML-SV-II-list-gMonthDay-minLength-1-1 tokoe:invalid" result="pass"/><test-case name="21223NISTXML-SV-II-list-gMonthDay-minLength-1-2 tokoe:invalid" result="pass"/><test-case name="21224NISTXML-SV-II-list-gMonthDay-minLength-1-3 tokoe:invalid" result="pass"/><test-case name="21225NISTXML-SV-II-list-gMonthDay-minLength-1-4 tokoe:invalid" result="pass"/><test-case name="21226NISTXML-SV-II-list-gMonthDay-minLength-1-5 tokoe:invalid" result="pass"/><test-case name="21227NISTSchema-SV-II-list-gMonthDay-minLength-2 tokoe:valid" result="pass"/><test-case name="21228NISTXML-SV-II-list-gMonthDay-minLength-2-1 tokoe:invalid" result="pass"/><test-case name="21229NISTXML-SV-II-list-gMonthDay-minLength-2-2 tokoe:invalid" result="pass"/><test-case name="21230NISTXML-SV-II-list-gMonthDay-minLength-2-3 tokoe:invalid" result="pass"/><test-case name="21231NISTXML-SV-II-list-gMonthDay-minLength-2-4 tokoe:invalid" result="pass"/><test-case name="21232NISTXML-SV-II-list-gMonthDay-minLength-2-5 tokoe:invalid" result="pass"/><test-case name="21233NISTSchema-SV-II-list-gMonthDay-minLength-3 tokoe:valid" result="pass"/><test-case name="21234NISTXML-SV-II-list-gMonthDay-minLength-3-1 tokoe:invalid" result="pass"/><test-case name="21235NISTXML-SV-II-list-gMonthDay-minLength-3-2 tokoe:invalid" result="pass"/><test-case name="21236NISTXML-SV-II-list-gMonthDay-minLength-3-3 tokoe:invalid" result="pass"/><test-case name="21237NISTXML-SV-II-list-gMonthDay-minLength-3-4 tokoe:invalid" result="pass"/><test-case name="21238NISTXML-SV-II-list-gMonthDay-minLength-3-5 tokoe:invalid" result="pass"/><test-case name="21239NISTSchema-SV-II-list-gMonthDay-minLength-4 tokoe:valid" result="pass"/><test-case name="21240NISTXML-SV-II-list-gMonthDay-minLength-4-1 tokoe:invalid" result="pass"/><test-case name="21241NISTXML-SV-II-list-gMonthDay-minLength-4-2 tokoe:invalid" result="pass"/><test-case name="21242NISTXML-SV-II-list-gMonthDay-minLength-4-3 tokoe:invalid" result="pass"/><test-case name="21243NISTXML-SV-II-list-gMonthDay-minLength-4-4 tokoe:invalid" result="pass"/><test-case name="21244NISTXML-SV-II-list-gMonthDay-minLength-4-5 tokoe:invalid" result="pass"/><test-case name="21245NISTSchema-SV-II-list-gMonthDay-minLength-5 tokoe:valid" result="pass"/><test-case name="21246NISTXML-SV-II-list-gMonthDay-minLength-5-1 tokoe:invalid" result="pass"/><test-case name="21247NISTXML-SV-II-list-gMonthDay-minLength-5-2 tokoe:invalid" result="pass"/><test-case name="21248NISTXML-SV-II-list-gMonthDay-minLength-5-3 tokoe:invalid" result="pass"/><test-case name="21249NISTXML-SV-II-list-gMonthDay-minLength-5-4 tokoe:invalid" result="pass"/><test-case name="21250NISTXML-SV-II-list-gMonthDay-minLength-5-5 tokoe:invalid" result="pass"/><test-case name="21251NISTSchema-SV-II-list-gMonthDay-length-1 tokoe:valid" result="pass"/><test-case name="21252NISTXML-SV-II-list-gMonthDay-length-1-1 tokoe:invalid" result="pass"/><test-case name="21253NISTXML-SV-II-list-gMonthDay-length-1-2 tokoe:invalid" result="pass"/><test-case name="21254NISTXML-SV-II-list-gMonthDay-length-1-3 tokoe:invalid" result="pass"/><test-case name="21255NISTXML-SV-II-list-gMonthDay-length-1-4 tokoe:invalid" result="pass"/><test-case name="21256NISTXML-SV-II-list-gMonthDay-length-1-5 tokoe:invalid" result="pass"/><test-case name="21257NISTSchema-SV-II-list-gMonthDay-length-2 tokoe:valid" result="pass"/><test-case name="21258NISTXML-SV-II-list-gMonthDay-length-2-1 tokoe:invalid" result="pass"/><test-case name="21259NISTXML-SV-II-list-gMonthDay-length-2-2 tokoe:invalid" result="pass"/><test-case name="21260NISTXML-SV-II-list-gMonthDay-length-2-3 tokoe:invalid" result="pass"/><test-case name="21261NISTXML-SV-II-list-gMonthDay-length-2-4 tokoe:invalid" result="pass"/><test-case name="21262NISTXML-SV-II-list-gMonthDay-length-2-5 tokoe:invalid" result="pass"/><test-case name="21263NISTSchema-SV-II-list-gMonthDay-length-3 tokoe:valid" result="pass"/><test-case name="21264NISTXML-SV-II-list-gMonthDay-length-3-1 tokoe:invalid" result="pass"/><test-case name="21265NISTXML-SV-II-list-gMonthDay-length-3-2 tokoe:invalid" result="pass"/><test-case name="21266NISTXML-SV-II-list-gMonthDay-length-3-3 tokoe:invalid" result="pass"/><test-case name="21267NISTXML-SV-II-list-gMonthDay-length-3-4 tokoe:invalid" result="pass"/><test-case name="21268NISTXML-SV-II-list-gMonthDay-length-3-5 tokoe:invalid" result="pass"/><test-case name="21269NISTSchema-SV-II-list-gMonthDay-length-4 tokoe:valid" result="pass"/><test-case name="21270NISTXML-SV-II-list-gMonthDay-length-4-1 tokoe:invalid" result="pass"/><test-case name="21271NISTXML-SV-II-list-gMonthDay-length-4-2 tokoe:invalid" result="pass"/><test-case name="21272NISTXML-SV-II-list-gMonthDay-length-4-3 tokoe:invalid" result="pass"/><test-case name="21273NISTXML-SV-II-list-gMonthDay-length-4-4 tokoe:invalid" result="pass"/><test-case name="21274NISTXML-SV-II-list-gMonthDay-length-4-5 tokoe:invalid" result="pass"/><test-case name="21275NISTSchema-SV-II-list-gMonthDay-length-5 tokoe:valid" result="pass"/><test-case name="21276NISTXML-SV-II-list-gMonthDay-length-5-1 tokoe:invalid" result="pass"/><test-case name="21277NISTXML-SV-II-list-gMonthDay-length-5-2 tokoe:invalid" result="pass"/><test-case name="21278NISTXML-SV-II-list-gMonthDay-length-5-3 tokoe:invalid" result="pass"/><test-case name="21279NISTXML-SV-II-list-gMonthDay-length-5-4 tokoe:invalid" result="pass"/><test-case name="21280NISTXML-SV-II-list-gMonthDay-length-5-5 tokoe:invalid" result="pass"/><test-case name="21281NISTSchema-SV-II-list-gMonthDay-pattern-1 tokoe:valid" result="pass"/><test-case name="21282NISTXML-SV-II-list-gMonthDay-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="21283NISTXML-SV-II-list-gMonthDay-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="21284NISTXML-SV-II-list-gMonthDay-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="21285NISTXML-SV-II-list-gMonthDay-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="21286NISTXML-SV-II-list-gMonthDay-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="21287NISTSchema-SV-II-list-gMonthDay-pattern-2 tokoe:valid" result="pass"/><test-case name="21288NISTXML-SV-II-list-gMonthDay-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="21289NISTXML-SV-II-list-gMonthDay-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="21290NISTXML-SV-II-list-gMonthDay-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="21291NISTXML-SV-II-list-gMonthDay-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="21292NISTXML-SV-II-list-gMonthDay-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="21293NISTSchema-SV-II-list-gMonthDay-pattern-3 tokoe:valid" result="pass"/><test-case name="21294NISTXML-SV-II-list-gMonthDay-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="21295NISTXML-SV-II-list-gMonthDay-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="21296NISTXML-SV-II-list-gMonthDay-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="21297NISTXML-SV-II-list-gMonthDay-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="21298NISTXML-SV-II-list-gMonthDay-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="21299NISTSchema-SV-II-list-gMonthDay-pattern-4 tokoe:valid" result="pass"/><test-case name="21300NISTXML-SV-II-list-gMonthDay-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="21301NISTXML-SV-II-list-gMonthDay-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="21302NISTXML-SV-II-list-gMonthDay-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="21303NISTXML-SV-II-list-gMonthDay-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="21304NISTXML-SV-II-list-gMonthDay-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="21305NISTSchema-SV-II-list-gMonthDay-pattern-5 tokoe:valid" result="pass"/><test-case name="21306NISTXML-SV-II-list-gMonthDay-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="21307NISTXML-SV-II-list-gMonthDay-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="21308NISTXML-SV-II-list-gMonthDay-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="21309NISTXML-SV-II-list-gMonthDay-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="21310NISTXML-SV-II-list-gMonthDay-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="21311NISTSchema-SV-II-list-gMonthDay-enumeration-1 tokoe:valid" result="pass"/><test-case name="21312NISTXML-SV-II-list-gMonthDay-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="21313NISTXML-SV-II-list-gMonthDay-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="21314NISTXML-SV-II-list-gMonthDay-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="21315NISTXML-SV-II-list-gMonthDay-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="21316NISTXML-SV-II-list-gMonthDay-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="21317NISTSchema-SV-II-list-gMonthDay-enumeration-2 tokoe:valid" result="pass"/><test-case name="21318NISTXML-SV-II-list-gMonthDay-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="21319NISTXML-SV-II-list-gMonthDay-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="21320NISTXML-SV-II-list-gMonthDay-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="21321NISTXML-SV-II-list-gMonthDay-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="21322NISTXML-SV-II-list-gMonthDay-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="21323NISTSchema-SV-II-list-gMonthDay-enumeration-3 tokoe:valid" result="pass"/><test-case name="21324NISTXML-SV-II-list-gMonthDay-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="21325NISTXML-SV-II-list-gMonthDay-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="21326NISTXML-SV-II-list-gMonthDay-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="21327NISTXML-SV-II-list-gMonthDay-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="21328NISTXML-SV-II-list-gMonthDay-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="21329NISTSchema-SV-II-list-gMonthDay-enumeration-4 tokoe:valid" result="pass"/><test-case name="21330NISTXML-SV-II-list-gMonthDay-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="21331NISTXML-SV-II-list-gMonthDay-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="21332NISTXML-SV-II-list-gMonthDay-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="21333NISTXML-SV-II-list-gMonthDay-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="21334NISTXML-SV-II-list-gMonthDay-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="21335NISTSchema-SV-II-list-gMonthDay-enumeration-5 tokoe:valid" result="pass"/><test-case name="21336NISTXML-SV-II-list-gMonthDay-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="21337NISTXML-SV-II-list-gMonthDay-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="21338NISTXML-SV-II-list-gMonthDay-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="21339NISTXML-SV-II-list-gMonthDay-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="21340NISTXML-SV-II-list-gMonthDay-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="21341NISTSchema-SV-II-list-gDay-maxLength-1 tokoe:valid" result="pass"/><test-case name="21342NISTXML-SV-II-list-gDay-maxLength-1-1 tokoe:invalid" result="pass"/><test-case name="21343NISTXML-SV-II-list-gDay-maxLength-1-2 tokoe:invalid" result="pass"/><test-case name="21344NISTXML-SV-II-list-gDay-maxLength-1-3 tokoe:invalid" result="pass"/><test-case name="21345NISTXML-SV-II-list-gDay-maxLength-1-4 tokoe:invalid" result="pass"/><test-case name="21346NISTXML-SV-II-list-gDay-maxLength-1-5 tokoe:invalid" result="pass"/><test-case name="21347NISTSchema-SV-II-list-gDay-maxLength-2 tokoe:valid" result="pass"/><test-case name="21348NISTXML-SV-II-list-gDay-maxLength-2-1 tokoe:invalid" result="pass"/><test-case name="21349NISTXML-SV-II-list-gDay-maxLength-2-2 tokoe:invalid" result="pass"/><test-case name="21350NISTXML-SV-II-list-gDay-maxLength-2-3 tokoe:invalid" result="pass"/><test-case name="21351NISTXML-SV-II-list-gDay-maxLength-2-4 tokoe:invalid" result="pass"/><test-case name="21352NISTXML-SV-II-list-gDay-maxLength-2-5 tokoe:invalid" result="pass"/><test-case name="21353NISTSchema-SV-II-list-gDay-maxLength-3 tokoe:valid" result="pass"/><test-case name="21354NISTXML-SV-II-list-gDay-maxLength-3-1 tokoe:invalid" result="pass"/><test-case name="21355NISTXML-SV-II-list-gDay-maxLength-3-2 tokoe:invalid" result="pass"/><test-case name="21356NISTXML-SV-II-list-gDay-maxLength-3-3 tokoe:invalid" result="pass"/><test-case name="21357NISTXML-SV-II-list-gDay-maxLength-3-4 tokoe:invalid" result="pass"/><test-case name="21358NISTXML-SV-II-list-gDay-maxLength-3-5 tokoe:invalid" result="pass"/><test-case name="21359NISTSchema-SV-II-list-gDay-maxLength-4 tokoe:valid" result="pass"/><test-case name="21360NISTXML-SV-II-list-gDay-maxLength-4-1 tokoe:invalid" result="pass"/><test-case name="21361NISTXML-SV-II-list-gDay-maxLength-4-2 tokoe:invalid" result="pass"/><test-case name="21362NISTXML-SV-II-list-gDay-maxLength-4-3 tokoe:invalid" result="pass"/><test-case name="21363NISTXML-SV-II-list-gDay-maxLength-4-4 tokoe:invalid" result="pass"/><test-case name="21364NISTXML-SV-II-list-gDay-maxLength-4-5 tokoe:invalid" result="pass"/><test-case name="21365NISTSchema-SV-II-list-gDay-maxLength-5 tokoe:valid" result="pass"/><test-case name="21366NISTXML-SV-II-list-gDay-maxLength-5-1 tokoe:invalid" result="pass"/><test-case name="21367NISTXML-SV-II-list-gDay-maxLength-5-2 tokoe:invalid" result="pass"/><test-case name="21368NISTXML-SV-II-list-gDay-maxLength-5-3 tokoe:invalid" result="pass"/><test-case name="21369NISTXML-SV-II-list-gDay-maxLength-5-4 tokoe:invalid" result="pass"/><test-case name="21370NISTXML-SV-II-list-gDay-maxLength-5-5 tokoe:invalid" result="pass"/><test-case name="21371NISTSchema-SV-II-list-gDay-minLength-1 tokoe:valid" result="pass"/><test-case name="21372NISTXML-SV-II-list-gDay-minLength-1-1 tokoe:invalid" result="pass"/><test-case name="21373NISTXML-SV-II-list-gDay-minLength-1-2 tokoe:invalid" result="pass"/><test-case name="21374NISTXML-SV-II-list-gDay-minLength-1-3 tokoe:invalid" result="pass"/><test-case name="21375NISTXML-SV-II-list-gDay-minLength-1-4 tokoe:invalid" result="pass"/><test-case name="21376NISTXML-SV-II-list-gDay-minLength-1-5 tokoe:invalid" result="pass"/><test-case name="21377NISTSchema-SV-II-list-gDay-minLength-2 tokoe:valid" result="pass"/><test-case name="21378NISTXML-SV-II-list-gDay-minLength-2-1 tokoe:invalid" result="pass"/><test-case name="21379NISTXML-SV-II-list-gDay-minLength-2-2 tokoe:invalid" result="pass"/><test-case name="21380NISTXML-SV-II-list-gDay-minLength-2-3 tokoe:invalid" result="pass"/><test-case name="21381NISTXML-SV-II-list-gDay-minLength-2-4 tokoe:invalid" result="pass"/><test-case name="21382NISTXML-SV-II-list-gDay-minLength-2-5 tokoe:invalid" result="pass"/><test-case name="21383NISTSchema-SV-II-list-gDay-minLength-3 tokoe:valid" result="pass"/><test-case name="21384NISTXML-SV-II-list-gDay-minLength-3-1 tokoe:invalid" result="pass"/><test-case name="21385NISTXML-SV-II-list-gDay-minLength-3-2 tokoe:invalid" result="pass"/><test-case name="21386NISTXML-SV-II-list-gDay-minLength-3-3 tokoe:invalid" result="pass"/><test-case name="21387NISTXML-SV-II-list-gDay-minLength-3-4 tokoe:invalid" result="pass"/><test-case name="21388NISTXML-SV-II-list-gDay-minLength-3-5 tokoe:invalid" result="pass"/><test-case name="21389NISTSchema-SV-II-list-gDay-minLength-4 tokoe:valid" result="pass"/><test-case name="21390NISTXML-SV-II-list-gDay-minLength-4-1 tokoe:invalid" result="pass"/><test-case name="21391NISTXML-SV-II-list-gDay-minLength-4-2 tokoe:invalid" result="pass"/><test-case name="21392NISTXML-SV-II-list-gDay-minLength-4-3 tokoe:invalid" result="pass"/><test-case name="21393NISTXML-SV-II-list-gDay-minLength-4-4 tokoe:invalid" result="pass"/><test-case name="21394NISTXML-SV-II-list-gDay-minLength-4-5 tokoe:invalid" result="pass"/><test-case name="21395NISTSchema-SV-II-list-gDay-minLength-5 tokoe:valid" result="pass"/><test-case name="21396NISTXML-SV-II-list-gDay-minLength-5-1 tokoe:invalid" result="pass"/><test-case name="21397NISTXML-SV-II-list-gDay-minLength-5-2 tokoe:invalid" result="pass"/><test-case name="21398NISTXML-SV-II-list-gDay-minLength-5-3 tokoe:invalid" result="pass"/><test-case name="21399NISTXML-SV-II-list-gDay-minLength-5-4 tokoe:invalid" result="pass"/><test-case name="21400NISTXML-SV-II-list-gDay-minLength-5-5 tokoe:invalid" result="pass"/><test-case name="21401NISTSchema-SV-II-list-gDay-length-1 tokoe:valid" result="pass"/><test-case name="21402NISTXML-SV-II-list-gDay-length-1-1 tokoe:invalid" result="pass"/><test-case name="21403NISTXML-SV-II-list-gDay-length-1-2 tokoe:invalid" result="pass"/><test-case name="21404NISTXML-SV-II-list-gDay-length-1-3 tokoe:invalid" result="pass"/><test-case name="21405NISTXML-SV-II-list-gDay-length-1-4 tokoe:invalid" result="pass"/><test-case name="21406NISTXML-SV-II-list-gDay-length-1-5 tokoe:invalid" result="pass"/><test-case name="21407NISTSchema-SV-II-list-gDay-length-2 tokoe:valid" result="pass"/><test-case name="21408NISTXML-SV-II-list-gDay-length-2-1 tokoe:invalid" result="pass"/><test-case name="21409NISTXML-SV-II-list-gDay-length-2-2 tokoe:invalid" result="pass"/><test-case name="21410NISTXML-SV-II-list-gDay-length-2-3 tokoe:invalid" result="pass"/><test-case name="21411NISTXML-SV-II-list-gDay-length-2-4 tokoe:invalid" result="pass"/><test-case name="21412NISTXML-SV-II-list-gDay-length-2-5 tokoe:invalid" result="pass"/><test-case name="21413NISTSchema-SV-II-list-gDay-length-3 tokoe:valid" result="pass"/><test-case name="21414NISTXML-SV-II-list-gDay-length-3-1 tokoe:invalid" result="pass"/><test-case name="21415NISTXML-SV-II-list-gDay-length-3-2 tokoe:invalid" result="pass"/><test-case name="21416NISTXML-SV-II-list-gDay-length-3-3 tokoe:invalid" result="pass"/><test-case name="21417NISTXML-SV-II-list-gDay-length-3-4 tokoe:invalid" result="pass"/><test-case name="21418NISTXML-SV-II-list-gDay-length-3-5 tokoe:invalid" result="pass"/><test-case name="21419NISTSchema-SV-II-list-gDay-length-4 tokoe:valid" result="pass"/><test-case name="21420NISTXML-SV-II-list-gDay-length-4-1 tokoe:invalid" result="pass"/><test-case name="21421NISTXML-SV-II-list-gDay-length-4-2 tokoe:invalid" result="pass"/><test-case name="21422NISTXML-SV-II-list-gDay-length-4-3 tokoe:invalid" result="pass"/><test-case name="21423NISTXML-SV-II-list-gDay-length-4-4 tokoe:invalid" result="pass"/><test-case name="21424NISTXML-SV-II-list-gDay-length-4-5 tokoe:invalid" result="pass"/><test-case name="21425NISTSchema-SV-II-list-gDay-length-5 tokoe:valid" result="pass"/><test-case name="21426NISTXML-SV-II-list-gDay-length-5-1 tokoe:invalid" result="pass"/><test-case name="21427NISTXML-SV-II-list-gDay-length-5-2 tokoe:invalid" result="pass"/><test-case name="21428NISTXML-SV-II-list-gDay-length-5-3 tokoe:invalid" result="pass"/><test-case name="21429NISTXML-SV-II-list-gDay-length-5-4 tokoe:invalid" result="pass"/><test-case name="21430NISTXML-SV-II-list-gDay-length-5-5 tokoe:invalid" result="pass"/><test-case name="21431NISTSchema-SV-II-list-gDay-pattern-1 tokoe:valid" result="pass"/><test-case name="21432NISTXML-SV-II-list-gDay-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="21433NISTXML-SV-II-list-gDay-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="21434NISTXML-SV-II-list-gDay-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="21435NISTXML-SV-II-list-gDay-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="21436NISTXML-SV-II-list-gDay-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="21437NISTSchema-SV-II-list-gDay-pattern-2 tokoe:valid" result="pass"/><test-case name="21438NISTXML-SV-II-list-gDay-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="21439NISTXML-SV-II-list-gDay-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="21440NISTXML-SV-II-list-gDay-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="21441NISTXML-SV-II-list-gDay-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="21442NISTXML-SV-II-list-gDay-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="21443NISTSchema-SV-II-list-gDay-pattern-3 tokoe:valid" result="pass"/><test-case name="21444NISTXML-SV-II-list-gDay-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="21445NISTXML-SV-II-list-gDay-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="21446NISTXML-SV-II-list-gDay-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="21447NISTXML-SV-II-list-gDay-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="21448NISTXML-SV-II-list-gDay-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="21449NISTSchema-SV-II-list-gDay-pattern-4 tokoe:valid" result="pass"/><test-case name="21450NISTXML-SV-II-list-gDay-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="21451NISTXML-SV-II-list-gDay-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="21452NISTXML-SV-II-list-gDay-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="21453NISTXML-SV-II-list-gDay-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="21454NISTXML-SV-II-list-gDay-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="21455NISTSchema-SV-II-list-gDay-pattern-5 tokoe:valid" result="pass"/><test-case name="21456NISTXML-SV-II-list-gDay-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="21457NISTXML-SV-II-list-gDay-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="21458NISTXML-SV-II-list-gDay-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="21459NISTXML-SV-II-list-gDay-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="21460NISTXML-SV-II-list-gDay-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="21461NISTSchema-SV-II-list-gDay-enumeration-1 tokoe:valid" result="pass"/><test-case name="21462NISTXML-SV-II-list-gDay-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="21463NISTXML-SV-II-list-gDay-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="21464NISTXML-SV-II-list-gDay-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="21465NISTXML-SV-II-list-gDay-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="21466NISTXML-SV-II-list-gDay-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="21467NISTSchema-SV-II-list-gDay-enumeration-2 tokoe:valid" result="pass"/><test-case name="21468NISTXML-SV-II-list-gDay-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="21469NISTXML-SV-II-list-gDay-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="21470NISTXML-SV-II-list-gDay-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="21471NISTXML-SV-II-list-gDay-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="21472NISTXML-SV-II-list-gDay-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="21473NISTSchema-SV-II-list-gDay-enumeration-3 tokoe:valid" result="pass"/><test-case name="21474NISTXML-SV-II-list-gDay-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="21475NISTXML-SV-II-list-gDay-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="21476NISTXML-SV-II-list-gDay-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="21477NISTXML-SV-II-list-gDay-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="21478NISTXML-SV-II-list-gDay-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="21479NISTSchema-SV-II-list-gDay-enumeration-4 tokoe:valid" result="pass"/><test-case name="21480NISTXML-SV-II-list-gDay-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="21481NISTXML-SV-II-list-gDay-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="21482NISTXML-SV-II-list-gDay-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="21483NISTXML-SV-II-list-gDay-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="21484NISTXML-SV-II-list-gDay-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="21485NISTSchema-SV-II-list-gDay-enumeration-5 tokoe:valid" result="pass"/><test-case name="21486NISTXML-SV-II-list-gDay-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="21487NISTXML-SV-II-list-gDay-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="21488NISTXML-SV-II-list-gDay-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="21489NISTXML-SV-II-list-gDay-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="21490NISTXML-SV-II-list-gDay-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="21491NISTSchema-SV-II-list-gMonth-maxLength-1 tokoe:valid" result="pass"/><test-case name="21492NISTXML-SV-II-list-gMonth-maxLength-1-1 tokoe:invalid" result="pass"/><test-case name="21493NISTXML-SV-II-list-gMonth-maxLength-1-2 tokoe:invalid" result="pass"/><test-case name="21494NISTXML-SV-II-list-gMonth-maxLength-1-3 tokoe:invalid" result="pass"/><test-case name="21495NISTXML-SV-II-list-gMonth-maxLength-1-4 tokoe:invalid" result="pass"/><test-case name="21496NISTXML-SV-II-list-gMonth-maxLength-1-5 tokoe:invalid" result="pass"/><test-case name="21497NISTSchema-SV-II-list-gMonth-maxLength-2 tokoe:valid" result="pass"/><test-case name="21498NISTXML-SV-II-list-gMonth-maxLength-2-1 tokoe:invalid" result="pass"/><test-case name="21499NISTXML-SV-II-list-gMonth-maxLength-2-2 tokoe:invalid" result="pass"/><test-case name="21500NISTXML-SV-II-list-gMonth-maxLength-2-3 tokoe:invalid" result="pass"/><test-case name="21501NISTXML-SV-II-list-gMonth-maxLength-2-4 tokoe:invalid" result="pass"/><test-case name="21502NISTXML-SV-II-list-gMonth-maxLength-2-5 tokoe:invalid" result="pass"/><test-case name="21503NISTSchema-SV-II-list-gMonth-maxLength-3 tokoe:valid" result="pass"/><test-case name="21504NISTXML-SV-II-list-gMonth-maxLength-3-1 tokoe:invalid" result="pass"/><test-case name="21505NISTXML-SV-II-list-gMonth-maxLength-3-2 tokoe:invalid" result="pass"/><test-case name="21506NISTXML-SV-II-list-gMonth-maxLength-3-3 tokoe:invalid" result="pass"/><test-case name="21507NISTXML-SV-II-list-gMonth-maxLength-3-4 tokoe:invalid" result="pass"/><test-case name="21508NISTXML-SV-II-list-gMonth-maxLength-3-5 tokoe:invalid" result="pass"/><test-case name="21509NISTSchema-SV-II-list-gMonth-maxLength-4 tokoe:valid" result="pass"/><test-case name="21510NISTXML-SV-II-list-gMonth-maxLength-4-1 tokoe:invalid" result="pass"/><test-case name="21511NISTXML-SV-II-list-gMonth-maxLength-4-2 tokoe:invalid" result="pass"/><test-case name="21512NISTXML-SV-II-list-gMonth-maxLength-4-3 tokoe:invalid" result="pass"/><test-case name="21513NISTXML-SV-II-list-gMonth-maxLength-4-4 tokoe:invalid" result="pass"/><test-case name="21514NISTXML-SV-II-list-gMonth-maxLength-4-5 tokoe:invalid" result="pass"/><test-case name="21515NISTSchema-SV-II-list-gMonth-maxLength-5 tokoe:valid" result="pass"/><test-case name="21516NISTXML-SV-II-list-gMonth-maxLength-5-1 tokoe:invalid" result="pass"/><test-case name="21517NISTXML-SV-II-list-gMonth-maxLength-5-2 tokoe:invalid" result="pass"/><test-case name="21518NISTXML-SV-II-list-gMonth-maxLength-5-3 tokoe:invalid" result="pass"/><test-case name="21519NISTXML-SV-II-list-gMonth-maxLength-5-4 tokoe:invalid" result="pass"/><test-case name="21520NISTXML-SV-II-list-gMonth-maxLength-5-5 tokoe:invalid" result="pass"/><test-case name="21521NISTSchema-SV-II-list-gMonth-minLength-1 tokoe:valid" result="pass"/><test-case name="21522NISTXML-SV-II-list-gMonth-minLength-1-1 tokoe:invalid" result="pass"/><test-case name="21523NISTXML-SV-II-list-gMonth-minLength-1-2 tokoe:invalid" result="pass"/><test-case name="21524NISTXML-SV-II-list-gMonth-minLength-1-3 tokoe:invalid" result="pass"/><test-case name="21525NISTXML-SV-II-list-gMonth-minLength-1-4 tokoe:invalid" result="pass"/><test-case name="21526NISTXML-SV-II-list-gMonth-minLength-1-5 tokoe:invalid" result="pass"/><test-case name="21527NISTSchema-SV-II-list-gMonth-minLength-2 tokoe:valid" result="pass"/><test-case name="21528NISTXML-SV-II-list-gMonth-minLength-2-1 tokoe:invalid" result="pass"/><test-case name="21529NISTXML-SV-II-list-gMonth-minLength-2-2 tokoe:invalid" result="pass"/><test-case name="21530NISTXML-SV-II-list-gMonth-minLength-2-3 tokoe:invalid" result="pass"/><test-case name="21531NISTXML-SV-II-list-gMonth-minLength-2-4 tokoe:invalid" result="pass"/><test-case name="21532NISTXML-SV-II-list-gMonth-minLength-2-5 tokoe:invalid" result="pass"/><test-case name="21533NISTSchema-SV-II-list-gMonth-minLength-3 tokoe:valid" result="pass"/><test-case name="21534NISTXML-SV-II-list-gMonth-minLength-3-1 tokoe:invalid" result="pass"/><test-case name="21535NISTXML-SV-II-list-gMonth-minLength-3-2 tokoe:invalid" result="pass"/><test-case name="21536NISTXML-SV-II-list-gMonth-minLength-3-3 tokoe:invalid" result="pass"/><test-case name="21537NISTXML-SV-II-list-gMonth-minLength-3-4 tokoe:invalid" result="pass"/><test-case name="21538NISTXML-SV-II-list-gMonth-minLength-3-5 tokoe:invalid" result="pass"/><test-case name="21539NISTSchema-SV-II-list-gMonth-minLength-4 tokoe:valid" result="pass"/><test-case name="21540NISTXML-SV-II-list-gMonth-minLength-4-1 tokoe:invalid" result="pass"/><test-case name="21541NISTXML-SV-II-list-gMonth-minLength-4-2 tokoe:invalid" result="pass"/><test-case name="21542NISTXML-SV-II-list-gMonth-minLength-4-3 tokoe:invalid" result="pass"/><test-case name="21543NISTXML-SV-II-list-gMonth-minLength-4-4 tokoe:invalid" result="pass"/><test-case name="21544NISTXML-SV-II-list-gMonth-minLength-4-5 tokoe:invalid" result="pass"/><test-case name="21545NISTSchema-SV-II-list-gMonth-minLength-5 tokoe:valid" result="pass"/><test-case name="21546NISTXML-SV-II-list-gMonth-minLength-5-1 tokoe:invalid" result="pass"/><test-case name="21547NISTXML-SV-II-list-gMonth-minLength-5-2 tokoe:invalid" result="pass"/><test-case name="21548NISTXML-SV-II-list-gMonth-minLength-5-3 tokoe:invalid" result="pass"/><test-case name="21549NISTXML-SV-II-list-gMonth-minLength-5-4 tokoe:invalid" result="pass"/><test-case name="21550NISTXML-SV-II-list-gMonth-minLength-5-5 tokoe:invalid" result="pass"/><test-case name="21551NISTSchema-SV-II-list-gMonth-length-1 tokoe:valid" result="pass"/><test-case name="21552NISTXML-SV-II-list-gMonth-length-1-1 tokoe:invalid" result="pass"/><test-case name="21553NISTXML-SV-II-list-gMonth-length-1-2 tokoe:invalid" result="pass"/><test-case name="21554NISTXML-SV-II-list-gMonth-length-1-3 tokoe:invalid" result="pass"/><test-case name="21555NISTXML-SV-II-list-gMonth-length-1-4 tokoe:invalid" result="pass"/><test-case name="21556NISTXML-SV-II-list-gMonth-length-1-5 tokoe:invalid" result="pass"/><test-case name="21557NISTSchema-SV-II-list-gMonth-length-2 tokoe:valid" result="pass"/><test-case name="21558NISTXML-SV-II-list-gMonth-length-2-1 tokoe:invalid" result="pass"/><test-case name="21559NISTXML-SV-II-list-gMonth-length-2-2 tokoe:invalid" result="pass"/><test-case name="21560NISTXML-SV-II-list-gMonth-length-2-3 tokoe:invalid" result="pass"/><test-case name="21561NISTXML-SV-II-list-gMonth-length-2-4 tokoe:invalid" result="pass"/><test-case name="21562NISTXML-SV-II-list-gMonth-length-2-5 tokoe:invalid" result="pass"/><test-case name="21563NISTSchema-SV-II-list-gMonth-length-3 tokoe:valid" result="pass"/><test-case name="21564NISTXML-SV-II-list-gMonth-length-3-1 tokoe:invalid" result="pass"/><test-case name="21565NISTXML-SV-II-list-gMonth-length-3-2 tokoe:invalid" result="pass"/><test-case name="21566NISTXML-SV-II-list-gMonth-length-3-3 tokoe:invalid" result="pass"/><test-case name="21567NISTXML-SV-II-list-gMonth-length-3-4 tokoe:invalid" result="pass"/><test-case name="21568NISTXML-SV-II-list-gMonth-length-3-5 tokoe:invalid" result="pass"/><test-case name="21569NISTSchema-SV-II-list-gMonth-length-4 tokoe:valid" result="pass"/><test-case name="21570NISTXML-SV-II-list-gMonth-length-4-1 tokoe:invalid" result="pass"/><test-case name="21571NISTXML-SV-II-list-gMonth-length-4-2 tokoe:invalid" result="pass"/><test-case name="21572NISTXML-SV-II-list-gMonth-length-4-3 tokoe:invalid" result="pass"/><test-case name="21573NISTXML-SV-II-list-gMonth-length-4-4 tokoe:invalid" result="pass"/><test-case name="21574NISTXML-SV-II-list-gMonth-length-4-5 tokoe:invalid" result="pass"/><test-case name="21575NISTSchema-SV-II-list-gMonth-length-5 tokoe:valid" result="pass"/><test-case name="21576NISTXML-SV-II-list-gMonth-length-5-1 tokoe:invalid" result="pass"/><test-case name="21577NISTXML-SV-II-list-gMonth-length-5-2 tokoe:invalid" result="pass"/><test-case name="21578NISTXML-SV-II-list-gMonth-length-5-3 tokoe:invalid" result="pass"/><test-case name="21579NISTXML-SV-II-list-gMonth-length-5-4 tokoe:invalid" result="pass"/><test-case name="21580NISTXML-SV-II-list-gMonth-length-5-5 tokoe:invalid" result="pass"/><test-case name="21581NISTSchema-SV-II-list-gMonth-pattern-1 tokoe:valid" result="pass"/><test-case name="21582NISTXML-SV-II-list-gMonth-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="21583NISTXML-SV-II-list-gMonth-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="21584NISTXML-SV-II-list-gMonth-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="21585NISTXML-SV-II-list-gMonth-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="21586NISTXML-SV-II-list-gMonth-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="21587NISTSchema-SV-II-list-gMonth-pattern-2 tokoe:valid" result="pass"/><test-case name="21588NISTXML-SV-II-list-gMonth-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="21589NISTXML-SV-II-list-gMonth-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="21590NISTXML-SV-II-list-gMonth-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="21591NISTXML-SV-II-list-gMonth-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="21592NISTXML-SV-II-list-gMonth-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="21593NISTSchema-SV-II-list-gMonth-pattern-3 tokoe:valid" result="pass"/><test-case name="21594NISTXML-SV-II-list-gMonth-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="21595NISTXML-SV-II-list-gMonth-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="21596NISTXML-SV-II-list-gMonth-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="21597NISTXML-SV-II-list-gMonth-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="21598NISTXML-SV-II-list-gMonth-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="21599NISTSchema-SV-II-list-gMonth-pattern-4 tokoe:valid" result="pass"/><test-case name="21600NISTXML-SV-II-list-gMonth-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="21601NISTXML-SV-II-list-gMonth-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="21602NISTXML-SV-II-list-gMonth-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="21603NISTXML-SV-II-list-gMonth-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="21604NISTXML-SV-II-list-gMonth-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="21605NISTSchema-SV-II-list-gMonth-pattern-5 tokoe:valid" result="pass"/><test-case name="21606NISTXML-SV-II-list-gMonth-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="21607NISTXML-SV-II-list-gMonth-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="21608NISTXML-SV-II-list-gMonth-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="21609NISTXML-SV-II-list-gMonth-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="21610NISTXML-SV-II-list-gMonth-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="21611NISTSchema-SV-II-list-gMonth-enumeration-1 tokoe:valid" result="pass"/><test-case name="21612NISTXML-SV-II-list-gMonth-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="21613NISTXML-SV-II-list-gMonth-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="21614NISTXML-SV-II-list-gMonth-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="21615NISTXML-SV-II-list-gMonth-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="21616NISTXML-SV-II-list-gMonth-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="21617NISTSchema-SV-II-list-gMonth-enumeration-2 tokoe:valid" result="pass"/><test-case name="21618NISTXML-SV-II-list-gMonth-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="21619NISTXML-SV-II-list-gMonth-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="21620NISTXML-SV-II-list-gMonth-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="21621NISTXML-SV-II-list-gMonth-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="21622NISTXML-SV-II-list-gMonth-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="21623NISTSchema-SV-II-list-gMonth-enumeration-3 tokoe:valid" result="pass"/><test-case name="21624NISTXML-SV-II-list-gMonth-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="21625NISTXML-SV-II-list-gMonth-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="21626NISTXML-SV-II-list-gMonth-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="21627NISTXML-SV-II-list-gMonth-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="21628NISTXML-SV-II-list-gMonth-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="21629NISTSchema-SV-II-list-gMonth-enumeration-4 tokoe:valid" result="pass"/><test-case name="21630NISTXML-SV-II-list-gMonth-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="21631NISTXML-SV-II-list-gMonth-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="21632NISTXML-SV-II-list-gMonth-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="21633NISTXML-SV-II-list-gMonth-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="21634NISTXML-SV-II-list-gMonth-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="21635NISTSchema-SV-II-list-gMonth-enumeration-5 tokoe:valid" result="pass"/><test-case name="21636NISTXML-SV-II-list-gMonth-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="21637NISTXML-SV-II-list-gMonth-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="21638NISTXML-SV-II-list-gMonth-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="21639NISTXML-SV-II-list-gMonth-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="21640NISTXML-SV-II-list-gMonth-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="21641NISTSchema-SV-II-list-anyURI-maxLength-1 tokoe:valid" result="pass"/><test-case name="21642NISTXML-SV-II-list-anyURI-maxLength-1-1 tokoe:invalid" result="pass"/><test-case name="21643NISTXML-SV-II-list-anyURI-maxLength-1-2 tokoe:invalid" result="pass"/><test-case name="21644NISTXML-SV-II-list-anyURI-maxLength-1-3 tokoe:invalid" result="pass"/><test-case name="21645NISTXML-SV-II-list-anyURI-maxLength-1-4 tokoe:invalid" result="pass"/><test-case name="21646NISTXML-SV-II-list-anyURI-maxLength-1-5 tokoe:invalid" result="pass"/><test-case name="21647NISTSchema-SV-II-list-anyURI-maxLength-2 tokoe:valid" result="pass"/><test-case name="21648NISTXML-SV-II-list-anyURI-maxLength-2-1 tokoe:invalid" result="pass"/><test-case name="21649NISTXML-SV-II-list-anyURI-maxLength-2-2 tokoe:invalid" result="pass"/><test-case name="21650NISTXML-SV-II-list-anyURI-maxLength-2-3 tokoe:invalid" result="pass"/><test-case name="21651NISTXML-SV-II-list-anyURI-maxLength-2-4 tokoe:invalid" result="pass"/><test-case name="21652NISTXML-SV-II-list-anyURI-maxLength-2-5 tokoe:invalid" result="pass"/><test-case name="21653NISTSchema-SV-II-list-anyURI-maxLength-3 tokoe:valid" result="pass"/><test-case name="21654NISTXML-SV-II-list-anyURI-maxLength-3-1 tokoe:invalid" result="pass"/><test-case name="21655NISTXML-SV-II-list-anyURI-maxLength-3-2 tokoe:invalid" result="pass"/><test-case name="21656NISTXML-SV-II-list-anyURI-maxLength-3-3 tokoe:invalid" result="pass"/><test-case name="21657NISTXML-SV-II-list-anyURI-maxLength-3-4 tokoe:invalid" result="pass"/><test-case name="21658NISTXML-SV-II-list-anyURI-maxLength-3-5 tokoe:invalid" result="pass"/><test-case name="21659NISTSchema-SV-II-list-anyURI-maxLength-4 tokoe:valid" result="pass"/><test-case name="21660NISTXML-SV-II-list-anyURI-maxLength-4-1 tokoe:invalid" result="pass"/><test-case name="21661NISTXML-SV-II-list-anyURI-maxLength-4-2 tokoe:invalid" result="pass"/><test-case name="21662NISTXML-SV-II-list-anyURI-maxLength-4-3 tokoe:invalid" result="pass"/><test-case name="21663NISTXML-SV-II-list-anyURI-maxLength-4-4 tokoe:invalid" result="pass"/><test-case name="21664NISTXML-SV-II-list-anyURI-maxLength-4-5 tokoe:invalid" result="pass"/><test-case name="21665NISTSchema-SV-II-list-anyURI-maxLength-5 tokoe:valid" result="pass"/><test-case name="21666NISTXML-SV-II-list-anyURI-maxLength-5-1 tokoe:invalid" result="pass"/><test-case name="21667NISTXML-SV-II-list-anyURI-maxLength-5-2 tokoe:invalid" result="pass"/><test-case name="21668NISTXML-SV-II-list-anyURI-maxLength-5-3 tokoe:invalid" result="pass"/><test-case name="21669NISTXML-SV-II-list-anyURI-maxLength-5-4 tokoe:invalid" result="pass"/><test-case name="21670NISTXML-SV-II-list-anyURI-maxLength-5-5 tokoe:invalid" result="pass"/><test-case name="21671NISTSchema-SV-II-list-anyURI-minLength-1 tokoe:valid" result="pass"/><test-case name="21672NISTXML-SV-II-list-anyURI-minLength-1-1 tokoe:invalid" result="pass"/><test-case name="21673NISTXML-SV-II-list-anyURI-minLength-1-2 tokoe:invalid" result="pass"/><test-case name="21674NISTXML-SV-II-list-anyURI-minLength-1-3 tokoe:invalid" result="pass"/><test-case name="21675NISTXML-SV-II-list-anyURI-minLength-1-4 tokoe:invalid" result="pass"/><test-case name="21676NISTXML-SV-II-list-anyURI-minLength-1-5 tokoe:invalid" result="pass"/><test-case name="21677NISTSchema-SV-II-list-anyURI-minLength-2 tokoe:valid" result="pass"/><test-case name="21678NISTXML-SV-II-list-anyURI-minLength-2-1 tokoe:invalid" result="pass"/><test-case name="21679NISTXML-SV-II-list-anyURI-minLength-2-2 tokoe:invalid" result="pass"/><test-case name="21680NISTXML-SV-II-list-anyURI-minLength-2-3 tokoe:invalid" result="pass"/><test-case name="21681NISTXML-SV-II-list-anyURI-minLength-2-4 tokoe:invalid" result="pass"/><test-case name="21682NISTXML-SV-II-list-anyURI-minLength-2-5 tokoe:invalid" result="pass"/><test-case name="21683NISTSchema-SV-II-list-anyURI-minLength-3 tokoe:valid" result="pass"/><test-case name="21684NISTXML-SV-II-list-anyURI-minLength-3-1 tokoe:invalid" result="pass"/><test-case name="21685NISTXML-SV-II-list-anyURI-minLength-3-2 tokoe:invalid" result="pass"/><test-case name="21686NISTXML-SV-II-list-anyURI-minLength-3-3 tokoe:invalid" result="pass"/><test-case name="21687NISTXML-SV-II-list-anyURI-minLength-3-4 tokoe:invalid" result="pass"/><test-case name="21688NISTXML-SV-II-list-anyURI-minLength-3-5 tokoe:invalid" result="pass"/><test-case name="21689NISTSchema-SV-II-list-anyURI-minLength-4 tokoe:valid" result="pass"/><test-case name="21690NISTXML-SV-II-list-anyURI-minLength-4-1 tokoe:invalid" result="pass"/><test-case name="21691NISTXML-SV-II-list-anyURI-minLength-4-2 tokoe:invalid" result="pass"/><test-case name="21692NISTXML-SV-II-list-anyURI-minLength-4-3 tokoe:invalid" result="pass"/><test-case name="21693NISTXML-SV-II-list-anyURI-minLength-4-4 tokoe:invalid" result="pass"/><test-case name="21694NISTXML-SV-II-list-anyURI-minLength-4-5 tokoe:invalid" result="pass"/><test-case name="21695NISTSchema-SV-II-list-anyURI-minLength-5 tokoe:valid" result="pass"/><test-case name="21696NISTXML-SV-II-list-anyURI-minLength-5-1 tokoe:invalid" result="pass"/><test-case name="21697NISTXML-SV-II-list-anyURI-minLength-5-2 tokoe:invalid" result="pass"/><test-case name="21698NISTXML-SV-II-list-anyURI-minLength-5-3 tokoe:invalid" result="pass"/><test-case name="21699NISTXML-SV-II-list-anyURI-minLength-5-4 tokoe:invalid" result="pass"/><test-case name="21700NISTXML-SV-II-list-anyURI-minLength-5-5 tokoe:invalid" result="pass"/><test-case name="21701NISTSchema-SV-II-list-anyURI-length-1 tokoe:valid" result="pass"/><test-case name="21702NISTXML-SV-II-list-anyURI-length-1-1 tokoe:invalid" result="pass"/><test-case name="21703NISTXML-SV-II-list-anyURI-length-1-2 tokoe:invalid" result="pass"/><test-case name="21704NISTXML-SV-II-list-anyURI-length-1-3 tokoe:invalid" result="pass"/><test-case name="21705NISTXML-SV-II-list-anyURI-length-1-4 tokoe:invalid" result="pass"/><test-case name="21706NISTXML-SV-II-list-anyURI-length-1-5 tokoe:invalid" result="pass"/><test-case name="21707NISTSchema-SV-II-list-anyURI-length-2 tokoe:valid" result="pass"/><test-case name="21708NISTXML-SV-II-list-anyURI-length-2-1 tokoe:invalid" result="pass"/><test-case name="21709NISTXML-SV-II-list-anyURI-length-2-2 tokoe:invalid" result="pass"/><test-case name="21710NISTXML-SV-II-list-anyURI-length-2-3 tokoe:invalid" result="pass"/><test-case name="21711NISTXML-SV-II-list-anyURI-length-2-4 tokoe:invalid" result="pass"/><test-case name="21712NISTXML-SV-II-list-anyURI-length-2-5 tokoe:invalid" result="pass"/><test-case name="21713NISTSchema-SV-II-list-anyURI-length-3 tokoe:valid" result="pass"/><test-case name="21714NISTXML-SV-II-list-anyURI-length-3-1 tokoe:invalid" result="pass"/><test-case name="21715NISTXML-SV-II-list-anyURI-length-3-2 tokoe:invalid" result="pass"/><test-case name="21716NISTXML-SV-II-list-anyURI-length-3-3 tokoe:invalid" result="pass"/><test-case name="21717NISTXML-SV-II-list-anyURI-length-3-4 tokoe:invalid" result="pass"/><test-case name="21718NISTXML-SV-II-list-anyURI-length-3-5 tokoe:invalid" result="pass"/><test-case name="21719NISTSchema-SV-II-list-anyURI-length-4 tokoe:valid" result="pass"/><test-case name="21720NISTXML-SV-II-list-anyURI-length-4-1 tokoe:invalid" result="pass"/><test-case name="21721NISTXML-SV-II-list-anyURI-length-4-2 tokoe:invalid" result="pass"/><test-case name="21722NISTXML-SV-II-list-anyURI-length-4-3 tokoe:invalid" result="pass"/><test-case name="21723NISTXML-SV-II-list-anyURI-length-4-4 tokoe:invalid" result="pass"/><test-case name="21724NISTXML-SV-II-list-anyURI-length-4-5 tokoe:invalid" result="pass"/><test-case name="21725NISTSchema-SV-II-list-anyURI-length-5 tokoe:valid" result="pass"/><test-case name="21726NISTXML-SV-II-list-anyURI-length-5-1 tokoe:invalid" result="pass"/><test-case name="21727NISTXML-SV-II-list-anyURI-length-5-2 tokoe:invalid" result="pass"/><test-case name="21728NISTXML-SV-II-list-anyURI-length-5-3 tokoe:invalid" result="pass"/><test-case name="21729NISTXML-SV-II-list-anyURI-length-5-4 tokoe:invalid" result="pass"/><test-case name="21730NISTXML-SV-II-list-anyURI-length-5-5 tokoe:invalid" result="pass"/><test-case name="21731NISTSchema-SV-II-list-anyURI-pattern-1 tokoe:valid" result="pass"/><test-case name="21732NISTXML-SV-II-list-anyURI-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="21733NISTXML-SV-II-list-anyURI-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="21734NISTXML-SV-II-list-anyURI-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="21735NISTXML-SV-II-list-anyURI-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="21736NISTXML-SV-II-list-anyURI-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="21737NISTSchema-SV-II-list-anyURI-pattern-2 tokoe:valid" result="pass"/><test-case name="21738NISTXML-SV-II-list-anyURI-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="21739NISTXML-SV-II-list-anyURI-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="21740NISTXML-SV-II-list-anyURI-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="21741NISTXML-SV-II-list-anyURI-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="21742NISTXML-SV-II-list-anyURI-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="21743NISTSchema-SV-II-list-anyURI-pattern-3 tokoe:valid" result="pass"/><test-case name="21744NISTXML-SV-II-list-anyURI-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="21745NISTXML-SV-II-list-anyURI-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="21746NISTXML-SV-II-list-anyURI-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="21747NISTXML-SV-II-list-anyURI-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="21748NISTXML-SV-II-list-anyURI-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="21749NISTSchema-SV-II-list-anyURI-pattern-4 tokoe:valid" result="pass"/><test-case name="21750NISTXML-SV-II-list-anyURI-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="21751NISTXML-SV-II-list-anyURI-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="21752NISTXML-SV-II-list-anyURI-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="21753NISTXML-SV-II-list-anyURI-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="21754NISTXML-SV-II-list-anyURI-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="21755NISTSchema-SV-II-list-anyURI-pattern-5 tokoe:valid" result="pass"/><test-case name="21756NISTXML-SV-II-list-anyURI-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="21757NISTXML-SV-II-list-anyURI-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="21758NISTXML-SV-II-list-anyURI-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="21759NISTXML-SV-II-list-anyURI-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="21760NISTXML-SV-II-list-anyURI-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="21761NISTSchema-SV-II-list-anyURI-enumeration-1 tokoe:valid" result="pass"/><test-case name="21762NISTXML-SV-II-list-anyURI-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="21763NISTXML-SV-II-list-anyURI-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="21764NISTXML-SV-II-list-anyURI-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="21765NISTXML-SV-II-list-anyURI-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="21766NISTXML-SV-II-list-anyURI-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="21767NISTSchema-SV-II-list-anyURI-enumeration-2 tokoe:valid" result="pass"/><test-case name="21768NISTXML-SV-II-list-anyURI-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="21769NISTXML-SV-II-list-anyURI-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="21770NISTXML-SV-II-list-anyURI-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="21771NISTXML-SV-II-list-anyURI-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="21772NISTXML-SV-II-list-anyURI-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="21773NISTSchema-SV-II-list-anyURI-enumeration-3 tokoe:valid" result="pass"/><test-case name="21774NISTXML-SV-II-list-anyURI-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="21775NISTXML-SV-II-list-anyURI-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="21776NISTXML-SV-II-list-anyURI-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="21777NISTXML-SV-II-list-anyURI-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="21778NISTXML-SV-II-list-anyURI-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="21779NISTSchema-SV-II-list-anyURI-enumeration-4 tokoe:valid" result="pass"/><test-case name="21780NISTXML-SV-II-list-anyURI-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="21781NISTXML-SV-II-list-anyURI-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="21782NISTXML-SV-II-list-anyURI-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="21783NISTXML-SV-II-list-anyURI-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="21784NISTXML-SV-II-list-anyURI-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="21785NISTSchema-SV-II-list-anyURI-enumeration-5 tokoe:valid" result="pass"/><test-case name="21786NISTXML-SV-II-list-anyURI-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="21787NISTXML-SV-II-list-anyURI-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="21788NISTXML-SV-II-list-anyURI-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="21789NISTXML-SV-II-list-anyURI-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="21790NISTXML-SV-II-list-anyURI-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="21791NISTSchema-SV-II-list-string-maxLength-1 tokoe:valid" result="pass"/><test-case name="21792NISTXML-SV-II-list-string-maxLength-1-1 tokoe:invalid" result="pass"/><test-case name="21793NISTXML-SV-II-list-string-maxLength-1-2 tokoe:invalid" result="pass"/><test-case name="21794NISTXML-SV-II-list-string-maxLength-1-3 tokoe:invalid" result="pass"/><test-case name="21795NISTXML-SV-II-list-string-maxLength-1-4 tokoe:invalid" result="pass"/><test-case name="21796NISTXML-SV-II-list-string-maxLength-1-5 tokoe:invalid" result="pass"/><test-case name="21797NISTSchema-SV-II-list-string-maxLength-2 tokoe:valid" result="pass"/><test-case name="21798NISTXML-SV-II-list-string-maxLength-2-1 tokoe:invalid" result="pass"/><test-case name="21799NISTXML-SV-II-list-string-maxLength-2-2 tokoe:invalid" result="pass"/><test-case name="21800NISTXML-SV-II-list-string-maxLength-2-3 tokoe:invalid" result="pass"/><test-case name="21801NISTXML-SV-II-list-string-maxLength-2-4 tokoe:invalid" result="pass"/><test-case name="21802NISTXML-SV-II-list-string-maxLength-2-5 tokoe:invalid" result="pass"/><test-case name="21803NISTSchema-SV-II-list-string-maxLength-3 tokoe:valid" result="pass"/><test-case name="21804NISTXML-SV-II-list-string-maxLength-3-1 tokoe:invalid" result="pass"/><test-case name="21805NISTXML-SV-II-list-string-maxLength-3-2 tokoe:invalid" result="pass"/><test-case name="21806NISTXML-SV-II-list-string-maxLength-3-3 tokoe:invalid" result="pass"/><test-case name="21807NISTXML-SV-II-list-string-maxLength-3-4 tokoe:invalid" result="pass"/><test-case name="21808NISTXML-SV-II-list-string-maxLength-3-5 tokoe:invalid" result="pass"/><test-case name="21809NISTSchema-SV-II-list-string-maxLength-4 tokoe:valid" result="pass"/><test-case name="21810NISTXML-SV-II-list-string-maxLength-4-1 tokoe:invalid" result="pass"/><test-case name="21811NISTXML-SV-II-list-string-maxLength-4-2 tokoe:invalid" result="pass"/><test-case name="21812NISTXML-SV-II-list-string-maxLength-4-3 tokoe:invalid" result="pass"/><test-case name="21813NISTXML-SV-II-list-string-maxLength-4-4 tokoe:invalid" result="pass"/><test-case name="21814NISTXML-SV-II-list-string-maxLength-4-5 tokoe:invalid" result="pass"/><test-case name="21815NISTSchema-SV-II-list-string-maxLength-5 tokoe:valid" result="pass"/><test-case name="21816NISTXML-SV-II-list-string-maxLength-5-1 tokoe:invalid" result="pass"/><test-case name="21817NISTXML-SV-II-list-string-maxLength-5-2 tokoe:invalid" result="pass"/><test-case name="21818NISTXML-SV-II-list-string-maxLength-5-3 tokoe:invalid" result="pass"/><test-case name="21819NISTXML-SV-II-list-string-maxLength-5-4 tokoe:invalid" result="pass"/><test-case name="21820NISTXML-SV-II-list-string-maxLength-5-5 tokoe:invalid" result="pass"/><test-case name="21821NISTSchema-SV-II-list-string-minLength-1 tokoe:valid" result="pass"/><test-case name="21822NISTXML-SV-II-list-string-minLength-1-1 tokoe:invalid" result="pass"/><test-case name="21823NISTXML-SV-II-list-string-minLength-1-2 tokoe:invalid" result="pass"/><test-case name="21824NISTXML-SV-II-list-string-minLength-1-3 tokoe:invalid" result="pass"/><test-case name="21825NISTXML-SV-II-list-string-minLength-1-4 tokoe:invalid" result="pass"/><test-case name="21826NISTXML-SV-II-list-string-minLength-1-5 tokoe:invalid" result="pass"/><test-case name="21827NISTSchema-SV-II-list-string-minLength-2 tokoe:valid" result="pass"/><test-case name="21828NISTXML-SV-II-list-string-minLength-2-1 tokoe:invalid" result="pass"/><test-case name="21829NISTXML-SV-II-list-string-minLength-2-2 tokoe:invalid" result="pass"/><test-case name="21830NISTXML-SV-II-list-string-minLength-2-3 tokoe:invalid" result="pass"/><test-case name="21831NISTXML-SV-II-list-string-minLength-2-4 tokoe:invalid" result="pass"/><test-case name="21832NISTXML-SV-II-list-string-minLength-2-5 tokoe:invalid" result="pass"/><test-case name="21833NISTSchema-SV-II-list-string-minLength-3 tokoe:valid" result="pass"/><test-case name="21834NISTXML-SV-II-list-string-minLength-3-1 tokoe:invalid" result="pass"/><test-case name="21835NISTXML-SV-II-list-string-minLength-3-2 tokoe:invalid" result="pass"/><test-case name="21836NISTXML-SV-II-list-string-minLength-3-3 tokoe:invalid" result="pass"/><test-case name="21837NISTXML-SV-II-list-string-minLength-3-4 tokoe:invalid" result="pass"/><test-case name="21838NISTXML-SV-II-list-string-minLength-3-5 tokoe:invalid" result="pass"/><test-case name="21839NISTSchema-SV-II-list-string-minLength-4 tokoe:valid" result="pass"/><test-case name="21840NISTXML-SV-II-list-string-minLength-4-1 tokoe:invalid" result="pass"/><test-case name="21841NISTXML-SV-II-list-string-minLength-4-2 tokoe:invalid" result="pass"/><test-case name="21842NISTXML-SV-II-list-string-minLength-4-3 tokoe:invalid" result="pass"/><test-case name="21843NISTXML-SV-II-list-string-minLength-4-4 tokoe:invalid" result="pass"/><test-case name="21844NISTXML-SV-II-list-string-minLength-4-5 tokoe:invalid" result="pass"/><test-case name="21845NISTSchema-SV-II-list-string-minLength-5 tokoe:valid" result="pass"/><test-case name="21846NISTXML-SV-II-list-string-minLength-5-1 tokoe:invalid" result="pass"/><test-case name="21847NISTXML-SV-II-list-string-minLength-5-2 tokoe:invalid" result="pass"/><test-case name="21848NISTXML-SV-II-list-string-minLength-5-3 tokoe:invalid" result="pass"/><test-case name="21849NISTXML-SV-II-list-string-minLength-5-4 tokoe:invalid" result="pass"/><test-case name="21850NISTXML-SV-II-list-string-minLength-5-5 tokoe:invalid" result="pass"/><test-case name="21851NISTSchema-SV-II-list-string-length-1 tokoe:valid" result="pass"/><test-case name="21852NISTXML-SV-II-list-string-length-1-1 tokoe:invalid" result="pass"/><test-case name="21853NISTXML-SV-II-list-string-length-1-2 tokoe:invalid" result="pass"/><test-case name="21854NISTXML-SV-II-list-string-length-1-3 tokoe:invalid" result="pass"/><test-case name="21855NISTXML-SV-II-list-string-length-1-4 tokoe:invalid" result="pass"/><test-case name="21856NISTXML-SV-II-list-string-length-1-5 tokoe:invalid" result="pass"/><test-case name="21857NISTSchema-SV-II-list-string-length-2 tokoe:valid" result="pass"/><test-case name="21858NISTXML-SV-II-list-string-length-2-1 tokoe:invalid" result="pass"/><test-case name="21859NISTXML-SV-II-list-string-length-2-2 tokoe:invalid" result="pass"/><test-case name="21860NISTXML-SV-II-list-string-length-2-3 tokoe:invalid" result="pass"/><test-case name="21861NISTXML-SV-II-list-string-length-2-4 tokoe:invalid" result="pass"/><test-case name="21862NISTXML-SV-II-list-string-length-2-5 tokoe:invalid" result="pass"/><test-case name="21863NISTSchema-SV-II-list-string-length-3 tokoe:valid" result="pass"/><test-case name="21864NISTXML-SV-II-list-string-length-3-1 tokoe:invalid" result="pass"/><test-case name="21865NISTXML-SV-II-list-string-length-3-2 tokoe:invalid" result="pass"/><test-case name="21866NISTXML-SV-II-list-string-length-3-3 tokoe:invalid" result="pass"/><test-case name="21867NISTXML-SV-II-list-string-length-3-4 tokoe:invalid" result="pass"/><test-case name="21868NISTXML-SV-II-list-string-length-3-5 tokoe:invalid" result="pass"/><test-case name="21869NISTSchema-SV-II-list-string-length-4 tokoe:valid" result="pass"/><test-case name="21870NISTXML-SV-II-list-string-length-4-1 tokoe:invalid" result="pass"/><test-case name="21871NISTXML-SV-II-list-string-length-4-2 tokoe:invalid" result="pass"/><test-case name="21872NISTXML-SV-II-list-string-length-4-3 tokoe:invalid" result="pass"/><test-case name="21873NISTXML-SV-II-list-string-length-4-4 tokoe:invalid" result="pass"/><test-case name="21874NISTXML-SV-II-list-string-length-4-5 tokoe:invalid" result="pass"/><test-case name="21875NISTSchema-SV-II-list-string-length-5 tokoe:valid" result="pass"/><test-case name="21876NISTXML-SV-II-list-string-length-5-1 tokoe:invalid" result="pass"/><test-case name="21877NISTXML-SV-II-list-string-length-5-2 tokoe:invalid" result="pass"/><test-case name="21878NISTXML-SV-II-list-string-length-5-3 tokoe:invalid" result="pass"/><test-case name="21879NISTXML-SV-II-list-string-length-5-4 tokoe:invalid" result="pass"/><test-case name="21880NISTXML-SV-II-list-string-length-5-5 tokoe:invalid" result="pass"/><test-case name="21881NISTSchema-SV-II-list-normalizedString-maxLength-1 tokoe:valid" result="pass"/><test-case name="21882NISTXML-SV-II-list-normalizedString-maxLength-1-1 tokoe:invalid" result="pass"/><test-case name="21883NISTXML-SV-II-list-normalizedString-maxLength-1-2 tokoe:invalid" result="pass"/><test-case name="21884NISTXML-SV-II-list-normalizedString-maxLength-1-3 tokoe:invalid" result="pass"/><test-case name="21885NISTXML-SV-II-list-normalizedString-maxLength-1-4 tokoe:invalid" result="pass"/><test-case name="21886NISTXML-SV-II-list-normalizedString-maxLength-1-5 tokoe:invalid" result="pass"/><test-case name="21887NISTSchema-SV-II-list-normalizedString-maxLength-2 tokoe:valid" result="pass"/><test-case name="21888NISTXML-SV-II-list-normalizedString-maxLength-2-1 tokoe:invalid" result="pass"/><test-case name="21889NISTXML-SV-II-list-normalizedString-maxLength-2-2 tokoe:invalid" result="pass"/><test-case name="21890NISTXML-SV-II-list-normalizedString-maxLength-2-3 tokoe:invalid" result="pass"/><test-case name="21891NISTXML-SV-II-list-normalizedString-maxLength-2-4 tokoe:invalid" result="pass"/><test-case name="21892NISTXML-SV-II-list-normalizedString-maxLength-2-5 tokoe:invalid" result="pass"/><test-case name="21893NISTSchema-SV-II-list-normalizedString-maxLength-3 tokoe:valid" result="pass"/><test-case name="21894NISTXML-SV-II-list-normalizedString-maxLength-3-1 tokoe:invalid" result="pass"/><test-case name="21895NISTXML-SV-II-list-normalizedString-maxLength-3-2 tokoe:invalid" result="pass"/><test-case name="21896NISTXML-SV-II-list-normalizedString-maxLength-3-3 tokoe:invalid" result="pass"/><test-case name="21897NISTXML-SV-II-list-normalizedString-maxLength-3-4 tokoe:invalid" result="pass"/><test-case name="21898NISTXML-SV-II-list-normalizedString-maxLength-3-5 tokoe:invalid" result="pass"/><test-case name="21899NISTSchema-SV-II-list-normalizedString-maxLength-4 tokoe:valid" result="pass"/><test-case name="21900NISTXML-SV-II-list-normalizedString-maxLength-4-1 tokoe:invalid" result="pass"/><test-case name="21901NISTXML-SV-II-list-normalizedString-maxLength-4-2 tokoe:invalid" result="pass"/><test-case name="21902NISTXML-SV-II-list-normalizedString-maxLength-4-3 tokoe:invalid" result="pass"/><test-case name="21903NISTXML-SV-II-list-normalizedString-maxLength-4-4 tokoe:invalid" result="pass"/><test-case name="21904NISTXML-SV-II-list-normalizedString-maxLength-4-5 tokoe:invalid" result="pass"/><test-case name="21905NISTSchema-SV-II-list-normalizedString-maxLength-5 tokoe:valid" result="pass"/><test-case name="21906NISTXML-SV-II-list-normalizedString-maxLength-5-1 tokoe:invalid" result="pass"/><test-case name="21907NISTXML-SV-II-list-normalizedString-maxLength-5-2 tokoe:invalid" result="pass"/><test-case name="21908NISTXML-SV-II-list-normalizedString-maxLength-5-3 tokoe:invalid" result="pass"/><test-case name="21909NISTXML-SV-II-list-normalizedString-maxLength-5-4 tokoe:invalid" result="pass"/><test-case name="21910NISTXML-SV-II-list-normalizedString-maxLength-5-5 tokoe:invalid" result="pass"/><test-case name="21911NISTSchema-SV-II-list-normalizedString-minLength-1 tokoe:valid" result="pass"/><test-case name="21912NISTXML-SV-II-list-normalizedString-minLength-1-1 tokoe:invalid" result="pass"/><test-case name="21913NISTXML-SV-II-list-normalizedString-minLength-1-2 tokoe:invalid" result="pass"/><test-case name="21914NISTXML-SV-II-list-normalizedString-minLength-1-3 tokoe:invalid" result="pass"/><test-case name="21915NISTXML-SV-II-list-normalizedString-minLength-1-4 tokoe:invalid" result="pass"/><test-case name="21916NISTXML-SV-II-list-normalizedString-minLength-1-5 tokoe:invalid" result="pass"/><test-case name="21917NISTSchema-SV-II-list-normalizedString-minLength-2 tokoe:valid" result="pass"/><test-case name="21918NISTXML-SV-II-list-normalizedString-minLength-2-1 tokoe:invalid" result="pass"/><test-case name="21919NISTXML-SV-II-list-normalizedString-minLength-2-2 tokoe:invalid" result="pass"/><test-case name="21920NISTXML-SV-II-list-normalizedString-minLength-2-3 tokoe:invalid" result="pass"/><test-case name="21921NISTXML-SV-II-list-normalizedString-minLength-2-4 tokoe:invalid" result="pass"/><test-case name="21922NISTXML-SV-II-list-normalizedString-minLength-2-5 tokoe:invalid" result="pass"/><test-case name="21923NISTSchema-SV-II-list-normalizedString-minLength-3 tokoe:valid" result="pass"/><test-case name="21924NISTXML-SV-II-list-normalizedString-minLength-3-1 tokoe:invalid" result="pass"/><test-case name="21925NISTXML-SV-II-list-normalizedString-minLength-3-2 tokoe:invalid" result="pass"/><test-case name="21926NISTXML-SV-II-list-normalizedString-minLength-3-3 tokoe:invalid" result="pass"/><test-case name="21927NISTXML-SV-II-list-normalizedString-minLength-3-4 tokoe:invalid" result="pass"/><test-case name="21928NISTXML-SV-II-list-normalizedString-minLength-3-5 tokoe:invalid" result="pass"/><test-case name="21929NISTSchema-SV-II-list-normalizedString-minLength-4 tokoe:valid" result="pass"/><test-case name="21930NISTXML-SV-II-list-normalizedString-minLength-4-1 tokoe:invalid" result="pass"/><test-case name="21931NISTXML-SV-II-list-normalizedString-minLength-4-2 tokoe:invalid" result="pass"/><test-case name="21932NISTXML-SV-II-list-normalizedString-minLength-4-3 tokoe:invalid" result="pass"/><test-case name="21933NISTXML-SV-II-list-normalizedString-minLength-4-4 tokoe:invalid" result="pass"/><test-case name="21934NISTXML-SV-II-list-normalizedString-minLength-4-5 tokoe:invalid" result="pass"/><test-case name="21935NISTSchema-SV-II-list-normalizedString-minLength-5 tokoe:valid" result="pass"/><test-case name="21936NISTXML-SV-II-list-normalizedString-minLength-5-1 tokoe:invalid" result="pass"/><test-case name="21937NISTXML-SV-II-list-normalizedString-minLength-5-2 tokoe:invalid" result="pass"/><test-case name="21938NISTXML-SV-II-list-normalizedString-minLength-5-3 tokoe:invalid" result="pass"/><test-case name="21939NISTXML-SV-II-list-normalizedString-minLength-5-4 tokoe:invalid" result="pass"/><test-case name="21940NISTXML-SV-II-list-normalizedString-minLength-5-5 tokoe:invalid" result="pass"/><test-case name="21941NISTSchema-SV-II-list-normalizedString-length-1 tokoe:valid" result="pass"/><test-case name="21942NISTXML-SV-II-list-normalizedString-length-1-1 tokoe:invalid" result="pass"/><test-case name="21943NISTXML-SV-II-list-normalizedString-length-1-2 tokoe:invalid" result="pass"/><test-case name="21944NISTXML-SV-II-list-normalizedString-length-1-3 tokoe:invalid" result="pass"/><test-case name="21945NISTXML-SV-II-list-normalizedString-length-1-4 tokoe:invalid" result="pass"/><test-case name="21946NISTXML-SV-II-list-normalizedString-length-1-5 tokoe:invalid" result="pass"/><test-case name="21947NISTSchema-SV-II-list-normalizedString-length-2 tokoe:valid" result="pass"/><test-case name="21948NISTXML-SV-II-list-normalizedString-length-2-1 tokoe:invalid" result="pass"/><test-case name="21949NISTXML-SV-II-list-normalizedString-length-2-2 tokoe:invalid" result="pass"/><test-case name="21950NISTXML-SV-II-list-normalizedString-length-2-3 tokoe:invalid" result="pass"/><test-case name="21951NISTXML-SV-II-list-normalizedString-length-2-4 tokoe:invalid" result="pass"/><test-case name="21952NISTXML-SV-II-list-normalizedString-length-2-5 tokoe:invalid" result="pass"/><test-case name="21953NISTSchema-SV-II-list-normalizedString-length-3 tokoe:valid" result="pass"/><test-case name="21954NISTXML-SV-II-list-normalizedString-length-3-1 tokoe:invalid" result="pass"/><test-case name="21955NISTXML-SV-II-list-normalizedString-length-3-2 tokoe:invalid" result="pass"/><test-case name="21956NISTXML-SV-II-list-normalizedString-length-3-3 tokoe:invalid" result="pass"/><test-case name="21957NISTXML-SV-II-list-normalizedString-length-3-4 tokoe:invalid" result="pass"/><test-case name="21958NISTXML-SV-II-list-normalizedString-length-3-5 tokoe:invalid" result="pass"/><test-case name="21959NISTSchema-SV-II-list-normalizedString-length-4 tokoe:valid" result="pass"/><test-case name="21960NISTXML-SV-II-list-normalizedString-length-4-1 tokoe:invalid" result="pass"/><test-case name="21961NISTXML-SV-II-list-normalizedString-length-4-2 tokoe:invalid" result="pass"/><test-case name="21962NISTXML-SV-II-list-normalizedString-length-4-3 tokoe:invalid" result="pass"/><test-case name="21963NISTXML-SV-II-list-normalizedString-length-4-4 tokoe:invalid" result="pass"/><test-case name="21964NISTXML-SV-II-list-normalizedString-length-4-5 tokoe:invalid" result="pass"/><test-case name="21965NISTSchema-SV-II-list-normalizedString-length-5 tokoe:valid" result="pass"/><test-case name="21966NISTXML-SV-II-list-normalizedString-length-5-1 tokoe:invalid" result="pass"/><test-case name="21967NISTXML-SV-II-list-normalizedString-length-5-2 tokoe:invalid" result="pass"/><test-case name="21968NISTXML-SV-II-list-normalizedString-length-5-3 tokoe:invalid" result="pass"/><test-case name="21969NISTXML-SV-II-list-normalizedString-length-5-4 tokoe:invalid" result="pass"/><test-case name="21970NISTXML-SV-II-list-normalizedString-length-5-5 tokoe:invalid" result="pass"/><test-case name="21971NISTSchema-SV-II-list-token-maxLength-1 tokoe:valid" result="pass"/><test-case name="21972NISTXML-SV-II-list-token-maxLength-1-1 tokoe:invalid" result="pass"/><test-case name="21973NISTXML-SV-II-list-token-maxLength-1-2 tokoe:invalid" result="pass"/><test-case name="21974NISTXML-SV-II-list-token-maxLength-1-3 tokoe:invalid" result="pass"/><test-case name="21975NISTXML-SV-II-list-token-maxLength-1-4 tokoe:invalid" result="pass"/><test-case name="21976NISTXML-SV-II-list-token-maxLength-1-5 tokoe:invalid" result="pass"/><test-case name="21977NISTSchema-SV-II-list-token-maxLength-2 tokoe:valid" result="pass"/><test-case name="21978NISTXML-SV-II-list-token-maxLength-2-1 tokoe:invalid" result="pass"/><test-case name="21979NISTXML-SV-II-list-token-maxLength-2-2 tokoe:invalid" result="pass"/><test-case name="21980NISTXML-SV-II-list-token-maxLength-2-3 tokoe:invalid" result="pass"/><test-case name="21981NISTXML-SV-II-list-token-maxLength-2-4 tokoe:invalid" result="pass"/><test-case name="21982NISTXML-SV-II-list-token-maxLength-2-5 tokoe:invalid" result="pass"/><test-case name="21983NISTSchema-SV-II-list-token-maxLength-3 tokoe:valid" result="pass"/><test-case name="21984NISTXML-SV-II-list-token-maxLength-3-1 tokoe:invalid" result="pass"/><test-case name="21985NISTXML-SV-II-list-token-maxLength-3-2 tokoe:invalid" result="pass"/><test-case name="21986NISTXML-SV-II-list-token-maxLength-3-3 tokoe:invalid" result="pass"/><test-case name="21987NISTXML-SV-II-list-token-maxLength-3-4 tokoe:invalid" result="pass"/><test-case name="21988NISTXML-SV-II-list-token-maxLength-3-5 tokoe:invalid" result="pass"/><test-case name="21989NISTSchema-SV-II-list-token-maxLength-4 tokoe:valid" result="pass"/><test-case name="21990NISTXML-SV-II-list-token-maxLength-4-1 tokoe:invalid" result="pass"/><test-case name="21991NISTXML-SV-II-list-token-maxLength-4-2 tokoe:invalid" result="pass"/><test-case name="21992NISTXML-SV-II-list-token-maxLength-4-3 tokoe:invalid" result="pass"/><test-case name="21993NISTXML-SV-II-list-token-maxLength-4-4 tokoe:invalid" result="pass"/><test-case name="21994NISTXML-SV-II-list-token-maxLength-4-5 tokoe:invalid" result="pass"/><test-case name="21995NISTSchema-SV-II-list-token-maxLength-5 tokoe:valid" result="pass"/><test-case name="21996NISTXML-SV-II-list-token-maxLength-5-1 tokoe:invalid" result="pass"/><test-case name="21997NISTXML-SV-II-list-token-maxLength-5-2 tokoe:invalid" result="pass"/><test-case name="21998NISTXML-SV-II-list-token-maxLength-5-3 tokoe:invalid" result="pass"/><test-case name="21999NISTXML-SV-II-list-token-maxLength-5-4 tokoe:invalid" result="pass"/><test-case name="22000NISTXML-SV-II-list-token-maxLength-5-5 tokoe:invalid" result="pass"/><test-case name="22001NISTSchema-SV-II-list-token-minLength-1 tokoe:valid" result="pass"/><test-case name="22002NISTXML-SV-II-list-token-minLength-1-1 tokoe:invalid" result="pass"/><test-case name="22003NISTXML-SV-II-list-token-minLength-1-2 tokoe:invalid" result="pass"/><test-case name="22004NISTXML-SV-II-list-token-minLength-1-3 tokoe:invalid" result="pass"/><test-case name="22005NISTXML-SV-II-list-token-minLength-1-4 tokoe:invalid" result="pass"/><test-case name="22006NISTXML-SV-II-list-token-minLength-1-5 tokoe:invalid" result="pass"/><test-case name="22007NISTSchema-SV-II-list-token-minLength-2 tokoe:valid" result="pass"/><test-case name="22008NISTXML-SV-II-list-token-minLength-2-1 tokoe:invalid" result="pass"/><test-case name="22009NISTXML-SV-II-list-token-minLength-2-2 tokoe:invalid" result="pass"/><test-case name="22010NISTXML-SV-II-list-token-minLength-2-3 tokoe:invalid" result="pass"/><test-case name="22011NISTXML-SV-II-list-token-minLength-2-4 tokoe:invalid" result="pass"/><test-case name="22012NISTXML-SV-II-list-token-minLength-2-5 tokoe:invalid" result="pass"/><test-case name="22013NISTSchema-SV-II-list-token-minLength-3 tokoe:valid" result="pass"/><test-case name="22014NISTXML-SV-II-list-token-minLength-3-1 tokoe:invalid" result="pass"/><test-case name="22015NISTXML-SV-II-list-token-minLength-3-2 tokoe:invalid" result="pass"/><test-case name="22016NISTXML-SV-II-list-token-minLength-3-3 tokoe:invalid" result="pass"/><test-case name="22017NISTXML-SV-II-list-token-minLength-3-4 tokoe:invalid" result="pass"/><test-case name="22018NISTXML-SV-II-list-token-minLength-3-5 tokoe:invalid" result="pass"/><test-case name="22019NISTSchema-SV-II-list-token-minLength-4 tokoe:valid" result="pass"/><test-case name="22020NISTXML-SV-II-list-token-minLength-4-1 tokoe:invalid" result="pass"/><test-case name="22021NISTXML-SV-II-list-token-minLength-4-2 tokoe:invalid" result="pass"/><test-case name="22022NISTXML-SV-II-list-token-minLength-4-3 tokoe:invalid" result="pass"/><test-case name="22023NISTXML-SV-II-list-token-minLength-4-4 tokoe:invalid" result="pass"/><test-case name="22024NISTXML-SV-II-list-token-minLength-4-5 tokoe:invalid" result="pass"/><test-case name="22025NISTSchema-SV-II-list-token-minLength-5 tokoe:valid" result="pass"/><test-case name="22026NISTXML-SV-II-list-token-minLength-5-1 tokoe:invalid" result="pass"/><test-case name="22027NISTXML-SV-II-list-token-minLength-5-2 tokoe:invalid" result="pass"/><test-case name="22028NISTXML-SV-II-list-token-minLength-5-3 tokoe:invalid" result="pass"/><test-case name="22029NISTXML-SV-II-list-token-minLength-5-4 tokoe:invalid" result="pass"/><test-case name="22030NISTXML-SV-II-list-token-minLength-5-5 tokoe:invalid" result="pass"/><test-case name="22031NISTSchema-SV-II-list-token-length-1 tokoe:valid" result="pass"/><test-case name="22032NISTXML-SV-II-list-token-length-1-1 tokoe:invalid" result="pass"/><test-case name="22033NISTXML-SV-II-list-token-length-1-2 tokoe:invalid" result="pass"/><test-case name="22034NISTXML-SV-II-list-token-length-1-3 tokoe:invalid" result="pass"/><test-case name="22035NISTXML-SV-II-list-token-length-1-4 tokoe:invalid" result="pass"/><test-case name="22036NISTXML-SV-II-list-token-length-1-5 tokoe:invalid" result="pass"/><test-case name="22037NISTSchema-SV-II-list-token-length-2 tokoe:valid" result="pass"/><test-case name="22038NISTXML-SV-II-list-token-length-2-1 tokoe:invalid" result="pass"/><test-case name="22039NISTXML-SV-II-list-token-length-2-2 tokoe:invalid" result="pass"/><test-case name="22040NISTXML-SV-II-list-token-length-2-3 tokoe:invalid" result="pass"/><test-case name="22041NISTXML-SV-II-list-token-length-2-4 tokoe:invalid" result="pass"/><test-case name="22042NISTXML-SV-II-list-token-length-2-5 tokoe:invalid" result="pass"/><test-case name="22043NISTSchema-SV-II-list-token-length-3 tokoe:valid" result="pass"/><test-case name="22044NISTXML-SV-II-list-token-length-3-1 tokoe:invalid" result="pass"/><test-case name="22045NISTXML-SV-II-list-token-length-3-2 tokoe:invalid" result="pass"/><test-case name="22046NISTXML-SV-II-list-token-length-3-3 tokoe:invalid" result="pass"/><test-case name="22047NISTXML-SV-II-list-token-length-3-4 tokoe:invalid" result="pass"/><test-case name="22048NISTXML-SV-II-list-token-length-3-5 tokoe:invalid" result="pass"/><test-case name="22049NISTSchema-SV-II-list-token-length-4 tokoe:valid" result="pass"/><test-case name="22050NISTXML-SV-II-list-token-length-4-1 tokoe:invalid" result="pass"/><test-case name="22051NISTXML-SV-II-list-token-length-4-2 tokoe:invalid" result="pass"/><test-case name="22052NISTXML-SV-II-list-token-length-4-3 tokoe:invalid" result="pass"/><test-case name="22053NISTXML-SV-II-list-token-length-4-4 tokoe:invalid" result="pass"/><test-case name="22054NISTXML-SV-II-list-token-length-4-5 tokoe:invalid" result="pass"/><test-case name="22055NISTSchema-SV-II-list-token-length-5 tokoe:valid" result="pass"/><test-case name="22056NISTXML-SV-II-list-token-length-5-1 tokoe:invalid" result="pass"/><test-case name="22057NISTXML-SV-II-list-token-length-5-2 tokoe:invalid" result="pass"/><test-case name="22058NISTXML-SV-II-list-token-length-5-3 tokoe:invalid" result="pass"/><test-case name="22059NISTXML-SV-II-list-token-length-5-4 tokoe:invalid" result="pass"/><test-case name="22060NISTXML-SV-II-list-token-length-5-5 tokoe:invalid" result="pass"/><test-case name="22061NISTSchema-SV-II-list-Name-maxLength-1 tokoe:valid" result="pass"/><test-case name="22062NISTXML-SV-II-list-Name-maxLength-1-1 tokoe:invalid" result="pass"/><test-case name="22063NISTXML-SV-II-list-Name-maxLength-1-2 tokoe:invalid" result="pass"/><test-case name="22064NISTXML-SV-II-list-Name-maxLength-1-3 tokoe:invalid" result="pass"/><test-case name="22065NISTXML-SV-II-list-Name-maxLength-1-4 tokoe:invalid" result="pass"/><test-case name="22066NISTXML-SV-II-list-Name-maxLength-1-5 tokoe:invalid" result="pass"/><test-case name="22067NISTSchema-SV-II-list-Name-maxLength-2 tokoe:valid" result="pass"/><test-case name="22068NISTXML-SV-II-list-Name-maxLength-2-1 tokoe:invalid" result="pass"/><test-case name="22069NISTXML-SV-II-list-Name-maxLength-2-2 tokoe:invalid" result="pass"/><test-case name="22070NISTXML-SV-II-list-Name-maxLength-2-3 tokoe:invalid" result="pass"/><test-case name="22071NISTXML-SV-II-list-Name-maxLength-2-4 tokoe:invalid" result="pass"/><test-case name="22072NISTXML-SV-II-list-Name-maxLength-2-5 tokoe:invalid" result="pass"/><test-case name="22073NISTSchema-SV-II-list-Name-maxLength-3 tokoe:valid" result="pass"/><test-case name="22074NISTXML-SV-II-list-Name-maxLength-3-1 tokoe:invalid" result="pass"/><test-case name="22075NISTXML-SV-II-list-Name-maxLength-3-2 tokoe:invalid" result="pass"/><test-case name="22076NISTXML-SV-II-list-Name-maxLength-3-3 tokoe:invalid" result="pass"/><test-case name="22077NISTXML-SV-II-list-Name-maxLength-3-4 tokoe:invalid" result="pass"/><test-case name="22078NISTXML-SV-II-list-Name-maxLength-3-5 tokoe:invalid" result="pass"/><test-case name="22079NISTSchema-SV-II-list-Name-maxLength-4 tokoe:valid" result="pass"/><test-case name="22080NISTXML-SV-II-list-Name-maxLength-4-1 tokoe:invalid" result="pass"/><test-case name="22081NISTXML-SV-II-list-Name-maxLength-4-2 tokoe:invalid" result="pass"/><test-case name="22082NISTXML-SV-II-list-Name-maxLength-4-3 tokoe:invalid" result="pass"/><test-case name="22083NISTXML-SV-II-list-Name-maxLength-4-4 tokoe:invalid" result="pass"/><test-case name="22084NISTXML-SV-II-list-Name-maxLength-4-5 tokoe:invalid" result="pass"/><test-case name="22085NISTSchema-SV-II-list-Name-maxLength-5 tokoe:valid" result="pass"/><test-case name="22086NISTXML-SV-II-list-Name-maxLength-5-1 tokoe:invalid" result="pass"/><test-case name="22087NISTXML-SV-II-list-Name-maxLength-5-2 tokoe:invalid" result="pass"/><test-case name="22088NISTXML-SV-II-list-Name-maxLength-5-3 tokoe:invalid" result="pass"/><test-case name="22089NISTXML-SV-II-list-Name-maxLength-5-4 tokoe:invalid" result="pass"/><test-case name="22090NISTXML-SV-II-list-Name-maxLength-5-5 tokoe:invalid" result="pass"/><test-case name="22091NISTSchema-SV-II-list-Name-minLength-1 tokoe:valid" result="pass"/><test-case name="22092NISTXML-SV-II-list-Name-minLength-1-1 tokoe:invalid" result="pass"/><test-case name="22093NISTXML-SV-II-list-Name-minLength-1-2 tokoe:invalid" result="pass"/><test-case name="22094NISTXML-SV-II-list-Name-minLength-1-3 tokoe:invalid" result="pass"/><test-case name="22095NISTXML-SV-II-list-Name-minLength-1-4 tokoe:invalid" result="pass"/><test-case name="22096NISTXML-SV-II-list-Name-minLength-1-5 tokoe:invalid" result="pass"/><test-case name="22097NISTSchema-SV-II-list-Name-minLength-2 tokoe:valid" result="pass"/><test-case name="22098NISTXML-SV-II-list-Name-minLength-2-1 tokoe:invalid" result="pass"/><test-case name="22099NISTXML-SV-II-list-Name-minLength-2-2 tokoe:invalid" result="pass"/><test-case name="22100NISTXML-SV-II-list-Name-minLength-2-3 tokoe:invalid" result="pass"/><test-case name="22101NISTXML-SV-II-list-Name-minLength-2-4 tokoe:invalid" result="pass"/><test-case name="22102NISTXML-SV-II-list-Name-minLength-2-5 tokoe:invalid" result="pass"/><test-case name="22103NISTSchema-SV-II-list-Name-minLength-3 tokoe:valid" result="pass"/><test-case name="22104NISTXML-SV-II-list-Name-minLength-3-1 tokoe:invalid" result="pass"/><test-case name="22105NISTXML-SV-II-list-Name-minLength-3-2 tokoe:invalid" result="pass"/><test-case name="22106NISTXML-SV-II-list-Name-minLength-3-3 tokoe:invalid" result="pass"/><test-case name="22107NISTXML-SV-II-list-Name-minLength-3-4 tokoe:invalid" result="pass"/><test-case name="22108NISTXML-SV-II-list-Name-minLength-3-5 tokoe:invalid" result="pass"/><test-case name="22109NISTSchema-SV-II-list-Name-minLength-4 tokoe:valid" result="pass"/><test-case name="22110NISTXML-SV-II-list-Name-minLength-4-1 tokoe:invalid" result="pass"/><test-case name="22111NISTXML-SV-II-list-Name-minLength-4-2 tokoe:invalid" result="pass"/><test-case name="22112NISTXML-SV-II-list-Name-minLength-4-3 tokoe:invalid" result="pass"/><test-case name="22113NISTXML-SV-II-list-Name-minLength-4-4 tokoe:invalid" result="pass"/><test-case name="22114NISTXML-SV-II-list-Name-minLength-4-5 tokoe:invalid" result="pass"/><test-case name="22115NISTSchema-SV-II-list-Name-minLength-5 tokoe:valid" result="pass"/><test-case name="22116NISTXML-SV-II-list-Name-minLength-5-1 tokoe:invalid" result="pass"/><test-case name="22117NISTXML-SV-II-list-Name-minLength-5-2 tokoe:invalid" result="pass"/><test-case name="22118NISTXML-SV-II-list-Name-minLength-5-3 tokoe:invalid" result="pass"/><test-case name="22119NISTXML-SV-II-list-Name-minLength-5-4 tokoe:invalid" result="pass"/><test-case name="22120NISTXML-SV-II-list-Name-minLength-5-5 tokoe:invalid" result="pass"/><test-case name="22121NISTSchema-SV-II-list-Name-length-1 tokoe:valid" result="pass"/><test-case name="22122NISTXML-SV-II-list-Name-length-1-1 tokoe:invalid" result="pass"/><test-case name="22123NISTXML-SV-II-list-Name-length-1-2 tokoe:invalid" result="pass"/><test-case name="22124NISTXML-SV-II-list-Name-length-1-3 tokoe:invalid" result="pass"/><test-case name="22125NISTXML-SV-II-list-Name-length-1-4 tokoe:invalid" result="pass"/><test-case name="22126NISTXML-SV-II-list-Name-length-1-5 tokoe:invalid" result="pass"/><test-case name="22127NISTSchema-SV-II-list-Name-length-2 tokoe:valid" result="pass"/><test-case name="22128NISTXML-SV-II-list-Name-length-2-1 tokoe:invalid" result="pass"/><test-case name="22129NISTXML-SV-II-list-Name-length-2-2 tokoe:invalid" result="pass"/><test-case name="22130NISTXML-SV-II-list-Name-length-2-3 tokoe:invalid" result="pass"/><test-case name="22131NISTXML-SV-II-list-Name-length-2-4 tokoe:invalid" result="pass"/><test-case name="22132NISTXML-SV-II-list-Name-length-2-5 tokoe:invalid" result="pass"/><test-case name="22133NISTSchema-SV-II-list-Name-length-3 tokoe:valid" result="pass"/><test-case name="22134NISTXML-SV-II-list-Name-length-3-1 tokoe:invalid" result="pass"/><test-case name="22135NISTXML-SV-II-list-Name-length-3-2 tokoe:invalid" result="pass"/><test-case name="22136NISTXML-SV-II-list-Name-length-3-3 tokoe:invalid" result="pass"/><test-case name="22137NISTXML-SV-II-list-Name-length-3-4 tokoe:invalid" result="pass"/><test-case name="22138NISTXML-SV-II-list-Name-length-3-5 tokoe:invalid" result="pass"/><test-case name="22139NISTSchema-SV-II-list-Name-length-4 tokoe:valid" result="pass"/><test-case name="22140NISTXML-SV-II-list-Name-length-4-1 tokoe:invalid" result="pass"/><test-case name="22141NISTXML-SV-II-list-Name-length-4-2 tokoe:invalid" result="pass"/><test-case name="22142NISTXML-SV-II-list-Name-length-4-3 tokoe:invalid" result="pass"/><test-case name="22143NISTXML-SV-II-list-Name-length-4-4 tokoe:invalid" result="pass"/><test-case name="22144NISTXML-SV-II-list-Name-length-4-5 tokoe:invalid" result="pass"/><test-case name="22145NISTSchema-SV-II-list-Name-length-5 tokoe:valid" result="pass"/><test-case name="22146NISTXML-SV-II-list-Name-length-5-1 tokoe:invalid" result="pass"/><test-case name="22147NISTXML-SV-II-list-Name-length-5-2 tokoe:invalid" result="pass"/><test-case name="22148NISTXML-SV-II-list-Name-length-5-3 tokoe:invalid" result="pass"/><test-case name="22149NISTXML-SV-II-list-Name-length-5-4 tokoe:invalid" result="pass"/><test-case name="22150NISTXML-SV-II-list-Name-length-5-5 tokoe:invalid" result="pass"/><test-case name="22151NISTSchema-SV-II-list-NMTOKEN-maxLength-1 tokoe:valid" result="pass"/><test-case name="22152NISTXML-SV-II-list-NMTOKEN-maxLength-1-1 tokoe:invalid" result="pass"/><test-case name="22153NISTXML-SV-II-list-NMTOKEN-maxLength-1-2 tokoe:invalid" result="pass"/><test-case name="22154NISTXML-SV-II-list-NMTOKEN-maxLength-1-3 tokoe:invalid" result="pass"/><test-case name="22155NISTXML-SV-II-list-NMTOKEN-maxLength-1-4 tokoe:invalid" result="pass"/><test-case name="22156NISTXML-SV-II-list-NMTOKEN-maxLength-1-5 tokoe:invalid" result="pass"/><test-case name="22157NISTSchema-SV-II-list-NMTOKEN-maxLength-2 tokoe:valid" result="pass"/><test-case name="22158NISTXML-SV-II-list-NMTOKEN-maxLength-2-1 tokoe:invalid" result="pass"/><test-case name="22159NISTXML-SV-II-list-NMTOKEN-maxLength-2-2 tokoe:invalid" result="pass"/><test-case name="22160NISTXML-SV-II-list-NMTOKEN-maxLength-2-3 tokoe:invalid" result="pass"/><test-case name="22161NISTXML-SV-II-list-NMTOKEN-maxLength-2-4 tokoe:invalid" result="pass"/><test-case name="22162NISTXML-SV-II-list-NMTOKEN-maxLength-2-5 tokoe:invalid" result="pass"/><test-case name="22163NISTSchema-SV-II-list-NMTOKEN-maxLength-3 tokoe:valid" result="pass"/><test-case name="22164NISTXML-SV-II-list-NMTOKEN-maxLength-3-1 tokoe:invalid" result="pass"/><test-case name="22165NISTXML-SV-II-list-NMTOKEN-maxLength-3-2 tokoe:invalid" result="pass"/><test-case name="22166NISTXML-SV-II-list-NMTOKEN-maxLength-3-3 tokoe:invalid" result="pass"/><test-case name="22167NISTXML-SV-II-list-NMTOKEN-maxLength-3-4 tokoe:invalid" result="pass"/><test-case name="22168NISTXML-SV-II-list-NMTOKEN-maxLength-3-5 tokoe:invalid" result="pass"/><test-case name="22169NISTSchema-SV-II-list-NMTOKEN-maxLength-4 tokoe:valid" result="pass"/><test-case name="22170NISTXML-SV-II-list-NMTOKEN-maxLength-4-1 tokoe:invalid" result="pass"/><test-case name="22171NISTXML-SV-II-list-NMTOKEN-maxLength-4-2 tokoe:invalid" result="pass"/><test-case name="22172NISTXML-SV-II-list-NMTOKEN-maxLength-4-3 tokoe:invalid" result="pass"/><test-case name="22173NISTXML-SV-II-list-NMTOKEN-maxLength-4-4 tokoe:invalid" result="pass"/><test-case name="22174NISTXML-SV-II-list-NMTOKEN-maxLength-4-5 tokoe:invalid" result="pass"/><test-case name="22175NISTSchema-SV-II-list-NMTOKEN-maxLength-5 tokoe:valid" result="pass"/><test-case name="22176NISTXML-SV-II-list-NMTOKEN-maxLength-5-1 tokoe:invalid" result="pass"/><test-case name="22177NISTXML-SV-II-list-NMTOKEN-maxLength-5-2 tokoe:invalid" result="pass"/><test-case name="22178NISTXML-SV-II-list-NMTOKEN-maxLength-5-3 tokoe:invalid" result="pass"/><test-case name="22179NISTXML-SV-II-list-NMTOKEN-maxLength-5-4 tokoe:invalid" result="pass"/><test-case name="22180NISTXML-SV-II-list-NMTOKEN-maxLength-5-5 tokoe:invalid" result="pass"/><test-case name="22181NISTSchema-SV-II-list-NMTOKEN-minLength-1 tokoe:valid" result="pass"/><test-case name="22182NISTXML-SV-II-list-NMTOKEN-minLength-1-1 tokoe:invalid" result="pass"/><test-case name="22183NISTXML-SV-II-list-NMTOKEN-minLength-1-2 tokoe:invalid" result="pass"/><test-case name="22184NISTXML-SV-II-list-NMTOKEN-minLength-1-3 tokoe:invalid" result="pass"/><test-case name="22185NISTXML-SV-II-list-NMTOKEN-minLength-1-4 tokoe:invalid" result="pass"/><test-case name="22186NISTXML-SV-II-list-NMTOKEN-minLength-1-5 tokoe:invalid" result="pass"/><test-case name="22187NISTSchema-SV-II-list-NMTOKEN-minLength-2 tokoe:valid" result="pass"/><test-case name="22188NISTXML-SV-II-list-NMTOKEN-minLength-2-1 tokoe:invalid" result="pass"/><test-case name="22189NISTXML-SV-II-list-NMTOKEN-minLength-2-2 tokoe:invalid" result="pass"/><test-case name="22190NISTXML-SV-II-list-NMTOKEN-minLength-2-3 tokoe:invalid" result="pass"/><test-case name="22191NISTXML-SV-II-list-NMTOKEN-minLength-2-4 tokoe:invalid" result="pass"/><test-case name="22192NISTXML-SV-II-list-NMTOKEN-minLength-2-5 tokoe:invalid" result="pass"/><test-case name="22193NISTSchema-SV-II-list-NMTOKEN-minLength-3 tokoe:valid" result="pass"/><test-case name="22194NISTXML-SV-II-list-NMTOKEN-minLength-3-1 tokoe:invalid" result="pass"/><test-case name="22195NISTXML-SV-II-list-NMTOKEN-minLength-3-2 tokoe:invalid" result="pass"/><test-case name="22196NISTXML-SV-II-list-NMTOKEN-minLength-3-3 tokoe:invalid" result="pass"/><test-case name="22197NISTXML-SV-II-list-NMTOKEN-minLength-3-4 tokoe:invalid" result="pass"/><test-case name="22198NISTXML-SV-II-list-NMTOKEN-minLength-3-5 tokoe:invalid" result="pass"/><test-case name="22199NISTSchema-SV-II-list-NMTOKEN-minLength-4 tokoe:valid" result="pass"/><test-case name="22200NISTXML-SV-II-list-NMTOKEN-minLength-4-1 tokoe:invalid" result="pass"/><test-case name="22201NISTXML-SV-II-list-NMTOKEN-minLength-4-2 tokoe:invalid" result="pass"/><test-case name="22202NISTXML-SV-II-list-NMTOKEN-minLength-4-3 tokoe:invalid" result="pass"/><test-case name="22203NISTXML-SV-II-list-NMTOKEN-minLength-4-4 tokoe:invalid" result="pass"/><test-case name="22204NISTXML-SV-II-list-NMTOKEN-minLength-4-5 tokoe:invalid" result="pass"/><test-case name="22205NISTSchema-SV-II-list-NMTOKEN-minLength-5 tokoe:valid" result="pass"/><test-case name="22206NISTXML-SV-II-list-NMTOKEN-minLength-5-1 tokoe:invalid" result="pass"/><test-case name="22207NISTXML-SV-II-list-NMTOKEN-minLength-5-2 tokoe:invalid" result="pass"/><test-case name="22208NISTXML-SV-II-list-NMTOKEN-minLength-5-3 tokoe:invalid" result="pass"/><test-case name="22209NISTXML-SV-II-list-NMTOKEN-minLength-5-4 tokoe:invalid" result="pass"/><test-case name="22210NISTXML-SV-II-list-NMTOKEN-minLength-5-5 tokoe:invalid" result="pass"/><test-case name="22211NISTSchema-SV-II-list-NMTOKEN-length-1 tokoe:valid" result="pass"/><test-case name="22212NISTXML-SV-II-list-NMTOKEN-length-1-1 tokoe:invalid" result="pass"/><test-case name="22213NISTXML-SV-II-list-NMTOKEN-length-1-2 tokoe:invalid" result="pass"/><test-case name="22214NISTXML-SV-II-list-NMTOKEN-length-1-3 tokoe:invalid" result="pass"/><test-case name="22215NISTXML-SV-II-list-NMTOKEN-length-1-4 tokoe:invalid" result="pass"/><test-case name="22216NISTXML-SV-II-list-NMTOKEN-length-1-5 tokoe:invalid" result="pass"/><test-case name="22217NISTSchema-SV-II-list-NMTOKEN-length-2 tokoe:valid" result="pass"/><test-case name="22218NISTXML-SV-II-list-NMTOKEN-length-2-1 tokoe:invalid" result="pass"/><test-case name="22219NISTXML-SV-II-list-NMTOKEN-length-2-2 tokoe:invalid" result="pass"/><test-case name="22220NISTXML-SV-II-list-NMTOKEN-length-2-3 tokoe:invalid" result="pass"/><test-case name="22221NISTXML-SV-II-list-NMTOKEN-length-2-4 tokoe:invalid" result="pass"/><test-case name="22222NISTXML-SV-II-list-NMTOKEN-length-2-5 tokoe:invalid" result="pass"/><test-case name="22223NISTSchema-SV-II-list-NMTOKEN-length-3 tokoe:valid" result="pass"/><test-case name="22224NISTXML-SV-II-list-NMTOKEN-length-3-1 tokoe:invalid" result="pass"/><test-case name="22225NISTXML-SV-II-list-NMTOKEN-length-3-2 tokoe:invalid" result="pass"/><test-case name="22226NISTXML-SV-II-list-NMTOKEN-length-3-3 tokoe:invalid" result="pass"/><test-case name="22227NISTXML-SV-II-list-NMTOKEN-length-3-4 tokoe:invalid" result="pass"/><test-case name="22228NISTXML-SV-II-list-NMTOKEN-length-3-5 tokoe:invalid" result="pass"/><test-case name="22229NISTSchema-SV-II-list-NMTOKEN-length-4 tokoe:valid" result="pass"/><test-case name="22230NISTXML-SV-II-list-NMTOKEN-length-4-1 tokoe:invalid" result="pass"/><test-case name="22231NISTXML-SV-II-list-NMTOKEN-length-4-2 tokoe:invalid" result="pass"/><test-case name="22232NISTXML-SV-II-list-NMTOKEN-length-4-3 tokoe:invalid" result="pass"/><test-case name="22233NISTXML-SV-II-list-NMTOKEN-length-4-4 tokoe:invalid" result="pass"/><test-case name="22234NISTXML-SV-II-list-NMTOKEN-length-4-5 tokoe:invalid" result="pass"/><test-case name="22235NISTSchema-SV-II-list-NMTOKEN-length-5 tokoe:valid" result="pass"/><test-case name="22236NISTXML-SV-II-list-NMTOKEN-length-5-1 tokoe:invalid" result="pass"/><test-case name="22237NISTXML-SV-II-list-NMTOKEN-length-5-2 tokoe:invalid" result="pass"/><test-case name="22238NISTXML-SV-II-list-NMTOKEN-length-5-3 tokoe:invalid" result="pass"/><test-case name="22239NISTXML-SV-II-list-NMTOKEN-length-5-4 tokoe:invalid" result="pass"/><test-case name="22240NISTXML-SV-II-list-NMTOKEN-length-5-5 tokoe:invalid" result="pass"/><test-case name="22241NISTSchema-SV-II-list-NMTOKENS-maxLength-1 tokoe:valid" result="pass"/><test-case name="22242NISTXML-SV-II-list-NMTOKENS-maxLength-1-1 tokoe:invalid" result="pass"/><test-case name="22243NISTXML-SV-II-list-NMTOKENS-maxLength-1-2 tokoe:invalid" result="pass"/><test-case name="22244NISTXML-SV-II-list-NMTOKENS-maxLength-1-3 tokoe:invalid" result="pass"/><test-case name="22245NISTXML-SV-II-list-NMTOKENS-maxLength-1-4 tokoe:invalid" result="pass"/><test-case name="22246NISTXML-SV-II-list-NMTOKENS-maxLength-1-5 tokoe:invalid" result="pass"/><test-case name="22247NISTSchema-SV-II-list-NMTOKENS-maxLength-2 tokoe:valid" result="pass"/><test-case name="22248NISTXML-SV-II-list-NMTOKENS-maxLength-2-1 tokoe:invalid" result="pass"/><test-case name="22249NISTXML-SV-II-list-NMTOKENS-maxLength-2-2 tokoe:invalid" result="pass"/><test-case name="22250NISTXML-SV-II-list-NMTOKENS-maxLength-2-3 tokoe:invalid" result="pass"/><test-case name="22251NISTXML-SV-II-list-NMTOKENS-maxLength-2-4 tokoe:invalid" result="pass"/><test-case name="22252NISTXML-SV-II-list-NMTOKENS-maxLength-2-5 tokoe:invalid" result="pass"/><test-case name="22253NISTSchema-SV-II-list-NMTOKENS-maxLength-3 tokoe:valid" result="pass"/><test-case name="22254NISTXML-SV-II-list-NMTOKENS-maxLength-3-1 tokoe:invalid" result="pass"/><test-case name="22255NISTXML-SV-II-list-NMTOKENS-maxLength-3-2 tokoe:invalid" result="pass"/><test-case name="22256NISTXML-SV-II-list-NMTOKENS-maxLength-3-3 tokoe:invalid" result="pass"/><test-case name="22257NISTXML-SV-II-list-NMTOKENS-maxLength-3-4 tokoe:invalid" result="pass"/><test-case name="22258NISTXML-SV-II-list-NMTOKENS-maxLength-3-5 tokoe:invalid" result="pass"/><test-case name="22259NISTSchema-SV-II-list-NMTOKENS-maxLength-4 tokoe:valid" result="pass"/><test-case name="22260NISTXML-SV-II-list-NMTOKENS-maxLength-4-1 tokoe:invalid" result="pass"/><test-case name="22261NISTXML-SV-II-list-NMTOKENS-maxLength-4-2 tokoe:invalid" result="pass"/><test-case name="22262NISTXML-SV-II-list-NMTOKENS-maxLength-4-3 tokoe:invalid" result="pass"/><test-case name="22263NISTXML-SV-II-list-NMTOKENS-maxLength-4-4 tokoe:invalid" result="pass"/><test-case name="22264NISTXML-SV-II-list-NMTOKENS-maxLength-4-5 tokoe:invalid" result="pass"/><test-case name="22265NISTSchema-SV-II-list-NMTOKENS-maxLength-5 tokoe:valid" result="pass"/><test-case name="22266NISTXML-SV-II-list-NMTOKENS-maxLength-5-1 tokoe:invalid" result="pass"/><test-case name="22267NISTXML-SV-II-list-NMTOKENS-maxLength-5-2 tokoe:invalid" result="pass"/><test-case name="22268NISTXML-SV-II-list-NMTOKENS-maxLength-5-3 tokoe:invalid" result="pass"/><test-case name="22269NISTXML-SV-II-list-NMTOKENS-maxLength-5-4 tokoe:invalid" result="pass"/><test-case name="22270NISTXML-SV-II-list-NMTOKENS-maxLength-5-5 tokoe:invalid" result="pass"/><test-case name="22271NISTSchema-SV-II-list-NMTOKENS-minLength-1 tokoe:valid" result="pass"/><test-case name="22272NISTXML-SV-II-list-NMTOKENS-minLength-1-1 tokoe:invalid" result="pass"/><test-case name="22273NISTXML-SV-II-list-NMTOKENS-minLength-1-2 tokoe:invalid" result="pass"/><test-case name="22274NISTXML-SV-II-list-NMTOKENS-minLength-1-3 tokoe:invalid" result="pass"/><test-case name="22275NISTXML-SV-II-list-NMTOKENS-minLength-1-4 tokoe:invalid" result="pass"/><test-case name="22276NISTXML-SV-II-list-NMTOKENS-minLength-1-5 tokoe:invalid" result="pass"/><test-case name="22277NISTSchema-SV-II-list-NMTOKENS-minLength-2 tokoe:valid" result="pass"/><test-case name="22278NISTXML-SV-II-list-NMTOKENS-minLength-2-1 tokoe:invalid" result="pass"/><test-case name="22279NISTXML-SV-II-list-NMTOKENS-minLength-2-2 tokoe:invalid" result="pass"/><test-case name="22280NISTXML-SV-II-list-NMTOKENS-minLength-2-3 tokoe:invalid" result="pass"/><test-case name="22281NISTXML-SV-II-list-NMTOKENS-minLength-2-4 tokoe:invalid" result="pass"/><test-case name="22282NISTXML-SV-II-list-NMTOKENS-minLength-2-5 tokoe:invalid" result="pass"/><test-case name="22283NISTSchema-SV-II-list-NMTOKENS-minLength-3 tokoe:valid" result="pass"/><test-case name="22284NISTXML-SV-II-list-NMTOKENS-minLength-3-1 tokoe:invalid" result="pass"/><test-case name="22285NISTXML-SV-II-list-NMTOKENS-minLength-3-2 tokoe:invalid" result="pass"/><test-case name="22286NISTXML-SV-II-list-NMTOKENS-minLength-3-3 tokoe:invalid" result="pass"/><test-case name="22287NISTXML-SV-II-list-NMTOKENS-minLength-3-4 tokoe:invalid" result="pass"/><test-case name="22288NISTXML-SV-II-list-NMTOKENS-minLength-3-5 tokoe:invalid" result="pass"/><test-case name="22289NISTSchema-SV-II-list-NMTOKENS-minLength-4 tokoe:valid" result="pass"/><test-case name="22290NISTXML-SV-II-list-NMTOKENS-minLength-4-1 tokoe:invalid" result="pass"/><test-case name="22291NISTXML-SV-II-list-NMTOKENS-minLength-4-2 tokoe:invalid" result="pass"/><test-case name="22292NISTXML-SV-II-list-NMTOKENS-minLength-4-3 tokoe:invalid" result="pass"/><test-case name="22293NISTXML-SV-II-list-NMTOKENS-minLength-4-4 tokoe:invalid" result="pass"/><test-case name="22294NISTXML-SV-II-list-NMTOKENS-minLength-4-5 tokoe:invalid" result="pass"/><test-case name="22295NISTSchema-SV-II-list-NMTOKENS-minLength-5 tokoe:valid" result="pass"/><test-case name="22296NISTXML-SV-II-list-NMTOKENS-minLength-5-1 tokoe:invalid" result="pass"/><test-case name="22297NISTXML-SV-II-list-NMTOKENS-minLength-5-2 tokoe:invalid" result="pass"/><test-case name="22298NISTXML-SV-II-list-NMTOKENS-minLength-5-3 tokoe:invalid" result="pass"/><test-case name="22299NISTXML-SV-II-list-NMTOKENS-minLength-5-4 tokoe:invalid" result="pass"/><test-case name="22300NISTXML-SV-II-list-NMTOKENS-minLength-5-5 tokoe:invalid" result="pass"/><test-case name="22301NISTSchema-SV-II-list-NMTOKENS-length-1 tokoe:valid" result="pass"/><test-case name="22302NISTXML-SV-II-list-NMTOKENS-length-1-1 tokoe:invalid" result="pass"/><test-case name="22303NISTXML-SV-II-list-NMTOKENS-length-1-2 tokoe:invalid" result="pass"/><test-case name="22304NISTXML-SV-II-list-NMTOKENS-length-1-3 tokoe:invalid" result="pass"/><test-case name="22305NISTXML-SV-II-list-NMTOKENS-length-1-4 tokoe:invalid" result="pass"/><test-case name="22306NISTXML-SV-II-list-NMTOKENS-length-1-5 tokoe:invalid" result="pass"/><test-case name="22307NISTSchema-SV-II-list-NMTOKENS-length-2 tokoe:valid" result="pass"/><test-case name="22308NISTXML-SV-II-list-NMTOKENS-length-2-1 tokoe:invalid" result="pass"/><test-case name="22309NISTXML-SV-II-list-NMTOKENS-length-2-2 tokoe:invalid" result="pass"/><test-case name="22310NISTXML-SV-II-list-NMTOKENS-length-2-3 tokoe:invalid" result="pass"/><test-case name="22311NISTXML-SV-II-list-NMTOKENS-length-2-4 tokoe:invalid" result="pass"/><test-case name="22312NISTXML-SV-II-list-NMTOKENS-length-2-5 tokoe:invalid" result="pass"/><test-case name="22313NISTSchema-SV-II-list-NMTOKENS-length-3 tokoe:valid" result="pass"/><test-case name="22314NISTXML-SV-II-list-NMTOKENS-length-3-1 tokoe:invalid" result="pass"/><test-case name="22315NISTXML-SV-II-list-NMTOKENS-length-3-2 tokoe:invalid" result="pass"/><test-case name="22316NISTXML-SV-II-list-NMTOKENS-length-3-3 tokoe:invalid" result="pass"/><test-case name="22317NISTXML-SV-II-list-NMTOKENS-length-3-4 tokoe:invalid" result="pass"/><test-case name="22318NISTXML-SV-II-list-NMTOKENS-length-3-5 tokoe:invalid" result="pass"/><test-case name="22319NISTSchema-SV-II-list-NMTOKENS-length-4 tokoe:valid" result="pass"/><test-case name="22320NISTXML-SV-II-list-NMTOKENS-length-4-1 tokoe:invalid" result="pass"/><test-case name="22321NISTXML-SV-II-list-NMTOKENS-length-4-2 tokoe:invalid" result="pass"/><test-case name="22322NISTXML-SV-II-list-NMTOKENS-length-4-3 tokoe:invalid" result="pass"/><test-case name="22323NISTXML-SV-II-list-NMTOKENS-length-4-4 tokoe:invalid" result="pass"/><test-case name="22324NISTXML-SV-II-list-NMTOKENS-length-4-5 tokoe:invalid" result="pass"/><test-case name="22325NISTSchema-SV-II-list-NMTOKENS-length-5 tokoe:valid" result="pass"/><test-case name="22326NISTXML-SV-II-list-NMTOKENS-length-5-1 tokoe:invalid" result="pass"/><test-case name="22327NISTXML-SV-II-list-NMTOKENS-length-5-2 tokoe:invalid" result="pass"/><test-case name="22328NISTXML-SV-II-list-NMTOKENS-length-5-3 tokoe:invalid" result="pass"/><test-case name="22329NISTXML-SV-II-list-NMTOKENS-length-5-4 tokoe:invalid" result="pass"/><test-case name="22330NISTXML-SV-II-list-NMTOKENS-length-5-5 tokoe:invalid" result="pass"/><test-case name="22331NISTSchema-SV-II-list-NCName-maxLength-1 tokoe:valid" result="pass"/><test-case name="22332NISTXML-SV-II-list-NCName-maxLength-1-1 tokoe:invalid" result="pass"/><test-case name="22333NISTXML-SV-II-list-NCName-maxLength-1-2 tokoe:invalid" result="pass"/><test-case name="22334NISTXML-SV-II-list-NCName-maxLength-1-3 tokoe:invalid" result="pass"/><test-case name="22335NISTXML-SV-II-list-NCName-maxLength-1-4 tokoe:invalid" result="pass"/><test-case name="22336NISTXML-SV-II-list-NCName-maxLength-1-5 tokoe:invalid" result="pass"/><test-case name="22337NISTSchema-SV-II-list-NCName-maxLength-2 tokoe:valid" result="pass"/><test-case name="22338NISTXML-SV-II-list-NCName-maxLength-2-1 tokoe:invalid" result="pass"/><test-case name="22339NISTXML-SV-II-list-NCName-maxLength-2-2 tokoe:invalid" result="pass"/><test-case name="22340NISTXML-SV-II-list-NCName-maxLength-2-3 tokoe:invalid" result="pass"/><test-case name="22341NISTXML-SV-II-list-NCName-maxLength-2-4 tokoe:invalid" result="pass"/><test-case name="22342NISTXML-SV-II-list-NCName-maxLength-2-5 tokoe:invalid" result="pass"/><test-case name="22343NISTSchema-SV-II-list-NCName-maxLength-3 tokoe:valid" result="pass"/><test-case name="22344NISTXML-SV-II-list-NCName-maxLength-3-1 tokoe:invalid" result="pass"/><test-case name="22345NISTXML-SV-II-list-NCName-maxLength-3-2 tokoe:invalid" result="pass"/><test-case name="22346NISTXML-SV-II-list-NCName-maxLength-3-3 tokoe:invalid" result="pass"/><test-case name="22347NISTXML-SV-II-list-NCName-maxLength-3-4 tokoe:invalid" result="pass"/><test-case name="22348NISTXML-SV-II-list-NCName-maxLength-3-5 tokoe:invalid" result="pass"/><test-case name="22349NISTSchema-SV-II-list-NCName-maxLength-4 tokoe:valid" result="pass"/><test-case name="22350NISTXML-SV-II-list-NCName-maxLength-4-1 tokoe:invalid" result="pass"/><test-case name="22351NISTXML-SV-II-list-NCName-maxLength-4-2 tokoe:invalid" result="pass"/><test-case name="22352NISTXML-SV-II-list-NCName-maxLength-4-3 tokoe:invalid" result="pass"/><test-case name="22353NISTXML-SV-II-list-NCName-maxLength-4-4 tokoe:invalid" result="pass"/><test-case name="22354NISTXML-SV-II-list-NCName-maxLength-4-5 tokoe:invalid" result="pass"/><test-case name="22355NISTSchema-SV-II-list-NCName-maxLength-5 tokoe:valid" result="pass"/><test-case name="22356NISTXML-SV-II-list-NCName-maxLength-5-1 tokoe:invalid" result="pass"/><test-case name="22357NISTXML-SV-II-list-NCName-maxLength-5-2 tokoe:invalid" result="pass"/><test-case name="22358NISTXML-SV-II-list-NCName-maxLength-5-3 tokoe:invalid" result="pass"/><test-case name="22359NISTXML-SV-II-list-NCName-maxLength-5-4 tokoe:invalid" result="pass"/><test-case name="22360NISTXML-SV-II-list-NCName-maxLength-5-5 tokoe:invalid" result="pass"/><test-case name="22361NISTSchema-SV-II-list-NCName-minLength-1 tokoe:valid" result="pass"/><test-case name="22362NISTXML-SV-II-list-NCName-minLength-1-1 tokoe:invalid" result="pass"/><test-case name="22363NISTXML-SV-II-list-NCName-minLength-1-2 tokoe:invalid" result="pass"/><test-case name="22364NISTXML-SV-II-list-NCName-minLength-1-3 tokoe:invalid" result="pass"/><test-case name="22365NISTXML-SV-II-list-NCName-minLength-1-4 tokoe:invalid" result="pass"/><test-case name="22366NISTXML-SV-II-list-NCName-minLength-1-5 tokoe:invalid" result="pass"/><test-case name="22367NISTSchema-SV-II-list-NCName-minLength-2 tokoe:valid" result="pass"/><test-case name="22368NISTXML-SV-II-list-NCName-minLength-2-1 tokoe:invalid" result="pass"/><test-case name="22369NISTXML-SV-II-list-NCName-minLength-2-2 tokoe:invalid" result="pass"/><test-case name="22370NISTXML-SV-II-list-NCName-minLength-2-3 tokoe:invalid" result="pass"/><test-case name="22371NISTXML-SV-II-list-NCName-minLength-2-4 tokoe:invalid" result="pass"/><test-case name="22372NISTXML-SV-II-list-NCName-minLength-2-5 tokoe:invalid" result="pass"/><test-case name="22373NISTSchema-SV-II-list-NCName-minLength-3 tokoe:valid" result="pass"/><test-case name="22374NISTXML-SV-II-list-NCName-minLength-3-1 tokoe:invalid" result="pass"/><test-case name="22375NISTXML-SV-II-list-NCName-minLength-3-2 tokoe:invalid" result="pass"/><test-case name="22376NISTXML-SV-II-list-NCName-minLength-3-3 tokoe:invalid" result="pass"/><test-case name="22377NISTXML-SV-II-list-NCName-minLength-3-4 tokoe:invalid" result="pass"/><test-case name="22378NISTXML-SV-II-list-NCName-minLength-3-5 tokoe:invalid" result="pass"/><test-case name="22379NISTSchema-SV-II-list-NCName-minLength-4 tokoe:valid" result="pass"/><test-case name="22380NISTXML-SV-II-list-NCName-minLength-4-1 tokoe:invalid" result="pass"/><test-case name="22381NISTXML-SV-II-list-NCName-minLength-4-2 tokoe:invalid" result="pass"/><test-case name="22382NISTXML-SV-II-list-NCName-minLength-4-3 tokoe:invalid" result="pass"/><test-case name="22383NISTXML-SV-II-list-NCName-minLength-4-4 tokoe:invalid" result="pass"/><test-case name="22384NISTXML-SV-II-list-NCName-minLength-4-5 tokoe:invalid" result="pass"/><test-case name="22385NISTSchema-SV-II-list-NCName-minLength-5 tokoe:valid" result="pass"/><test-case name="22386NISTXML-SV-II-list-NCName-minLength-5-1 tokoe:invalid" result="pass"/><test-case name="22387NISTXML-SV-II-list-NCName-minLength-5-2 tokoe:invalid" result="pass"/><test-case name="22388NISTXML-SV-II-list-NCName-minLength-5-3 tokoe:invalid" result="pass"/><test-case name="22389NISTXML-SV-II-list-NCName-minLength-5-4 tokoe:invalid" result="pass"/><test-case name="22390NISTXML-SV-II-list-NCName-minLength-5-5 tokoe:invalid" result="pass"/><test-case name="22391NISTSchema-SV-II-list-NCName-length-1 tokoe:valid" result="pass"/><test-case name="22392NISTXML-SV-II-list-NCName-length-1-1 tokoe:invalid" result="pass"/><test-case name="22393NISTXML-SV-II-list-NCName-length-1-2 tokoe:invalid" result="pass"/><test-case name="22394NISTXML-SV-II-list-NCName-length-1-3 tokoe:invalid" result="pass"/><test-case name="22395NISTXML-SV-II-list-NCName-length-1-4 tokoe:invalid" result="pass"/><test-case name="22396NISTXML-SV-II-list-NCName-length-1-5 tokoe:invalid" result="pass"/><test-case name="22397NISTSchema-SV-II-list-NCName-length-2 tokoe:valid" result="pass"/><test-case name="22398NISTXML-SV-II-list-NCName-length-2-1 tokoe:invalid" result="pass"/><test-case name="22399NISTXML-SV-II-list-NCName-length-2-2 tokoe:invalid" result="pass"/><test-case name="22400NISTXML-SV-II-list-NCName-length-2-3 tokoe:invalid" result="pass"/><test-case name="22401NISTXML-SV-II-list-NCName-length-2-4 tokoe:invalid" result="pass"/><test-case name="22402NISTXML-SV-II-list-NCName-length-2-5 tokoe:invalid" result="pass"/><test-case name="22403NISTSchema-SV-II-list-NCName-length-3 tokoe:valid" result="pass"/><test-case name="22404NISTXML-SV-II-list-NCName-length-3-1 tokoe:invalid" result="pass"/><test-case name="22405NISTXML-SV-II-list-NCName-length-3-2 tokoe:invalid" result="pass"/><test-case name="22406NISTXML-SV-II-list-NCName-length-3-3 tokoe:invalid" result="pass"/><test-case name="22407NISTXML-SV-II-list-NCName-length-3-4 tokoe:invalid" result="pass"/><test-case name="22408NISTXML-SV-II-list-NCName-length-3-5 tokoe:invalid" result="pass"/><test-case name="22409NISTSchema-SV-II-list-NCName-length-4 tokoe:valid" result="pass"/><test-case name="22410NISTXML-SV-II-list-NCName-length-4-1 tokoe:invalid" result="pass"/><test-case name="22411NISTXML-SV-II-list-NCName-length-4-2 tokoe:invalid" result="pass"/><test-case name="22412NISTXML-SV-II-list-NCName-length-4-3 tokoe:invalid" result="pass"/><test-case name="22413NISTXML-SV-II-list-NCName-length-4-4 tokoe:invalid" result="pass"/><test-case name="22414NISTXML-SV-II-list-NCName-length-4-5 tokoe:invalid" result="pass"/><test-case name="22415NISTSchema-SV-II-list-NCName-length-5 tokoe:valid" result="pass"/><test-case name="22416NISTXML-SV-II-list-NCName-length-5-1 tokoe:invalid" result="pass"/><test-case name="22417NISTXML-SV-II-list-NCName-length-5-2 tokoe:invalid" result="pass"/><test-case name="22418NISTXML-SV-II-list-NCName-length-5-3 tokoe:invalid" result="pass"/><test-case name="22419NISTXML-SV-II-list-NCName-length-5-4 tokoe:invalid" result="pass"/><test-case name="22420NISTXML-SV-II-list-NCName-length-5-5 tokoe:invalid" result="pass"/><test-case name="22421NISTSchema-SV-II-list-ID-maxLength-1 tokoe:valid" result="pass"/><test-case name="22422NISTXML-SV-II-list-ID-maxLength-1-1 tokoe:invalid" result="pass"/><test-case name="22423NISTXML-SV-II-list-ID-maxLength-1-2 tokoe:invalid" result="pass"/><test-case name="22424NISTXML-SV-II-list-ID-maxLength-1-3 tokoe:invalid" result="pass"/><test-case name="22425NISTXML-SV-II-list-ID-maxLength-1-4 tokoe:invalid" result="pass"/><test-case name="22426NISTXML-SV-II-list-ID-maxLength-1-5 tokoe:invalid" result="pass"/><test-case name="22427NISTSchema-SV-II-list-ID-maxLength-2 tokoe:valid" result="pass"/><test-case name="22428NISTXML-SV-II-list-ID-maxLength-2-1 tokoe:invalid" result="pass"/><test-case name="22429NISTXML-SV-II-list-ID-maxLength-2-2 tokoe:invalid" result="pass"/><test-case name="22430NISTXML-SV-II-list-ID-maxLength-2-3 tokoe:invalid" result="pass"/><test-case name="22431NISTXML-SV-II-list-ID-maxLength-2-4 tokoe:invalid" result="pass"/><test-case name="22432NISTXML-SV-II-list-ID-maxLength-2-5 tokoe:invalid" result="pass"/><test-case name="22433NISTSchema-SV-II-list-ID-maxLength-3 tokoe:valid" result="pass"/><test-case name="22434NISTXML-SV-II-list-ID-maxLength-3-1 tokoe:invalid" result="pass"/><test-case name="22435NISTXML-SV-II-list-ID-maxLength-3-2 tokoe:invalid" result="pass"/><test-case name="22436NISTXML-SV-II-list-ID-maxLength-3-3 tokoe:invalid" result="pass"/><test-case name="22437NISTXML-SV-II-list-ID-maxLength-3-4 tokoe:invalid" result="pass"/><test-case name="22438NISTXML-SV-II-list-ID-maxLength-3-5 tokoe:invalid" result="pass"/><test-case name="22439NISTSchema-SV-II-list-ID-maxLength-4 tokoe:valid" result="pass"/><test-case name="22440NISTXML-SV-II-list-ID-maxLength-4-1 tokoe:invalid" result="pass"/><test-case name="22441NISTXML-SV-II-list-ID-maxLength-4-2 tokoe:invalid" result="pass"/><test-case name="22442NISTXML-SV-II-list-ID-maxLength-4-3 tokoe:invalid" result="pass"/><test-case name="22443NISTXML-SV-II-list-ID-maxLength-4-4 tokoe:invalid" result="pass"/><test-case name="22444NISTXML-SV-II-list-ID-maxLength-4-5 tokoe:invalid" result="pass"/><test-case name="22445NISTSchema-SV-II-list-ID-maxLength-5 tokoe:valid" result="pass"/><test-case name="22446NISTXML-SV-II-list-ID-maxLength-5-1 tokoe:invalid" result="pass"/><test-case name="22447NISTXML-SV-II-list-ID-maxLength-5-2 tokoe:invalid" result="pass"/><test-case name="22448NISTXML-SV-II-list-ID-maxLength-5-3 tokoe:invalid" result="pass"/><test-case name="22449NISTXML-SV-II-list-ID-maxLength-5-4 tokoe:invalid" result="pass"/><test-case name="22450NISTXML-SV-II-list-ID-maxLength-5-5 tokoe:invalid" result="pass"/><test-case name="22451NISTSchema-SV-II-list-ID-minLength-1 tokoe:valid" result="pass"/><test-case name="22452NISTXML-SV-II-list-ID-minLength-1-1 tokoe:invalid" result="pass"/><test-case name="22453NISTXML-SV-II-list-ID-minLength-1-2 tokoe:invalid" result="pass"/><test-case name="22454NISTXML-SV-II-list-ID-minLength-1-3 tokoe:invalid" result="pass"/><test-case name="22455NISTXML-SV-II-list-ID-minLength-1-4 tokoe:invalid" result="pass"/><test-case name="22456NISTXML-SV-II-list-ID-minLength-1-5 tokoe:invalid" result="pass"/><test-case name="22457NISTSchema-SV-II-list-ID-minLength-2 tokoe:valid" result="pass"/><test-case name="22458NISTXML-SV-II-list-ID-minLength-2-1 tokoe:invalid" result="pass"/><test-case name="22459NISTXML-SV-II-list-ID-minLength-2-2 tokoe:invalid" result="pass"/><test-case name="22460NISTXML-SV-II-list-ID-minLength-2-3 tokoe:invalid" result="pass"/><test-case name="22461NISTXML-SV-II-list-ID-minLength-2-4 tokoe:invalid" result="pass"/><test-case name="22462NISTXML-SV-II-list-ID-minLength-2-5 tokoe:invalid" result="pass"/><test-case name="22463NISTSchema-SV-II-list-ID-minLength-3 tokoe:valid" result="pass"/><test-case name="22464NISTXML-SV-II-list-ID-minLength-3-1 tokoe:invalid" result="pass"/><test-case name="22465NISTXML-SV-II-list-ID-minLength-3-2 tokoe:invalid" result="pass"/><test-case name="22466NISTXML-SV-II-list-ID-minLength-3-3 tokoe:invalid" result="pass"/><test-case name="22467NISTXML-SV-II-list-ID-minLength-3-4 tokoe:invalid" result="pass"/><test-case name="22468NISTXML-SV-II-list-ID-minLength-3-5 tokoe:invalid" result="pass"/><test-case name="22469NISTSchema-SV-II-list-ID-minLength-4 tokoe:valid" result="pass"/><test-case name="22470NISTXML-SV-II-list-ID-minLength-4-1 tokoe:invalid" result="pass"/><test-case name="22471NISTXML-SV-II-list-ID-minLength-4-2 tokoe:invalid" result="pass"/><test-case name="22472NISTXML-SV-II-list-ID-minLength-4-3 tokoe:invalid" result="pass"/><test-case name="22473NISTXML-SV-II-list-ID-minLength-4-4 tokoe:invalid" result="pass"/><test-case name="22474NISTXML-SV-II-list-ID-minLength-4-5 tokoe:invalid" result="pass"/><test-case name="22475NISTSchema-SV-II-list-ID-minLength-5 tokoe:valid" result="pass"/><test-case name="22476NISTXML-SV-II-list-ID-minLength-5-1 tokoe:invalid" result="pass"/><test-case name="22477NISTXML-SV-II-list-ID-minLength-5-2 tokoe:invalid" result="pass"/><test-case name="22478NISTXML-SV-II-list-ID-minLength-5-3 tokoe:invalid" result="pass"/><test-case name="22479NISTXML-SV-II-list-ID-minLength-5-4 tokoe:invalid" result="pass"/><test-case name="22480NISTXML-SV-II-list-ID-minLength-5-5 tokoe:invalid" result="pass"/><test-case name="22481NISTSchema-SV-II-list-ID-length-1 tokoe:valid" result="pass"/><test-case name="22482NISTXML-SV-II-list-ID-length-1-1 tokoe:invalid" result="pass"/><test-case name="22483NISTXML-SV-II-list-ID-length-1-2 tokoe:invalid" result="pass"/><test-case name="22484NISTXML-SV-II-list-ID-length-1-3 tokoe:invalid" result="pass"/><test-case name="22485NISTXML-SV-II-list-ID-length-1-4 tokoe:invalid" result="pass"/><test-case name="22486NISTXML-SV-II-list-ID-length-1-5 tokoe:invalid" result="pass"/><test-case name="22487NISTSchema-SV-II-list-ID-length-2 tokoe:valid" result="pass"/><test-case name="22488NISTXML-SV-II-list-ID-length-2-1 tokoe:invalid" result="pass"/><test-case name="22489NISTXML-SV-II-list-ID-length-2-2 tokoe:invalid" result="pass"/><test-case name="22490NISTXML-SV-II-list-ID-length-2-3 tokoe:invalid" result="pass"/><test-case name="22491NISTXML-SV-II-list-ID-length-2-4 tokoe:invalid" result="pass"/><test-case name="22492NISTXML-SV-II-list-ID-length-2-5 tokoe:invalid" result="pass"/><test-case name="22493NISTSchema-SV-II-list-ID-length-3 tokoe:valid" result="pass"/><test-case name="22494NISTXML-SV-II-list-ID-length-3-1 tokoe:invalid" result="pass"/><test-case name="22495NISTXML-SV-II-list-ID-length-3-2 tokoe:invalid" result="pass"/><test-case name="22496NISTXML-SV-II-list-ID-length-3-3 tokoe:invalid" result="pass"/><test-case name="22497NISTXML-SV-II-list-ID-length-3-4 tokoe:invalid" result="pass"/><test-case name="22498NISTXML-SV-II-list-ID-length-3-5 tokoe:invalid" result="pass"/><test-case name="22499NISTSchema-SV-II-list-ID-length-4 tokoe:valid" result="pass"/><test-case name="22500NISTXML-SV-II-list-ID-length-4-1 tokoe:invalid" result="pass"/><test-case name="22501NISTXML-SV-II-list-ID-length-4-2 tokoe:invalid" result="pass"/><test-case name="22502NISTXML-SV-II-list-ID-length-4-3 tokoe:invalid" result="pass"/><test-case name="22503NISTXML-SV-II-list-ID-length-4-4 tokoe:invalid" result="pass"/><test-case name="22504NISTXML-SV-II-list-ID-length-4-5 tokoe:invalid" result="pass"/><test-case name="22505NISTSchema-SV-II-list-ID-length-5 tokoe:valid" result="pass"/><test-case name="22506NISTXML-SV-II-list-ID-length-5-1 tokoe:invalid" result="pass"/><test-case name="22507NISTXML-SV-II-list-ID-length-5-2 tokoe:invalid" result="pass"/><test-case name="22508NISTXML-SV-II-list-ID-length-5-3 tokoe:invalid" result="pass"/><test-case name="22509NISTXML-SV-II-list-ID-length-5-4 tokoe:invalid" result="pass"/><test-case name="22510NISTXML-SV-II-list-ID-length-5-5 tokoe:invalid" result="pass"/><test-case name="22511NISTSchema-SV-II-list-language-maxLength-1 tokoe:valid" result="pass"/><test-case name="22512NISTXML-SV-II-list-language-maxLength-1-1 tokoe:invalid" result="pass"/><test-case name="22513NISTXML-SV-II-list-language-maxLength-1-2 tokoe:invalid" result="pass"/><test-case name="22514NISTXML-SV-II-list-language-maxLength-1-3 tokoe:invalid" result="pass"/><test-case name="22515NISTXML-SV-II-list-language-maxLength-1-4 tokoe:invalid" result="pass"/><test-case name="22516NISTXML-SV-II-list-language-maxLength-1-5 tokoe:invalid" result="pass"/><test-case name="22517NISTSchema-SV-II-list-language-maxLength-2 tokoe:valid" result="pass"/><test-case name="22518NISTXML-SV-II-list-language-maxLength-2-1 tokoe:invalid" result="pass"/><test-case name="22519NISTXML-SV-II-list-language-maxLength-2-2 tokoe:invalid" result="pass"/><test-case name="22520NISTXML-SV-II-list-language-maxLength-2-3 tokoe:invalid" result="pass"/><test-case name="22521NISTXML-SV-II-list-language-maxLength-2-4 tokoe:invalid" result="pass"/><test-case name="22522NISTXML-SV-II-list-language-maxLength-2-5 tokoe:invalid" result="pass"/><test-case name="22523NISTSchema-SV-II-list-language-maxLength-3 tokoe:valid" result="pass"/><test-case name="22524NISTXML-SV-II-list-language-maxLength-3-1 tokoe:invalid" result="pass"/><test-case name="22525NISTXML-SV-II-list-language-maxLength-3-2 tokoe:invalid" result="pass"/><test-case name="22526NISTXML-SV-II-list-language-maxLength-3-3 tokoe:invalid" result="pass"/><test-case name="22527NISTXML-SV-II-list-language-maxLength-3-4 tokoe:invalid" result="pass"/><test-case name="22528NISTXML-SV-II-list-language-maxLength-3-5 tokoe:invalid" result="pass"/><test-case name="22529NISTSchema-SV-II-list-language-maxLength-4 tokoe:valid" result="pass"/><test-case name="22530NISTXML-SV-II-list-language-maxLength-4-1 tokoe:invalid" result="pass"/><test-case name="22531NISTXML-SV-II-list-language-maxLength-4-2 tokoe:invalid" result="pass"/><test-case name="22532NISTXML-SV-II-list-language-maxLength-4-3 tokoe:invalid" result="pass"/><test-case name="22533NISTXML-SV-II-list-language-maxLength-4-4 tokoe:invalid" result="pass"/><test-case name="22534NISTXML-SV-II-list-language-maxLength-4-5 tokoe:invalid" result="pass"/><test-case name="22535NISTSchema-SV-II-list-language-maxLength-5 tokoe:valid" result="pass"/><test-case name="22536NISTXML-SV-II-list-language-maxLength-5-1 tokoe:invalid" result="pass"/><test-case name="22537NISTXML-SV-II-list-language-maxLength-5-2 tokoe:invalid" result="pass"/><test-case name="22538NISTXML-SV-II-list-language-maxLength-5-3 tokoe:invalid" result="pass"/><test-case name="22539NISTXML-SV-II-list-language-maxLength-5-4 tokoe:invalid" result="pass"/><test-case name="22540NISTXML-SV-II-list-language-maxLength-5-5 tokoe:invalid" result="pass"/><test-case name="22541NISTSchema-SV-II-list-language-minLength-1 tokoe:valid" result="pass"/><test-case name="22542NISTXML-SV-II-list-language-minLength-1-1 tokoe:invalid" result="pass"/><test-case name="22543NISTXML-SV-II-list-language-minLength-1-2 tokoe:invalid" result="pass"/><test-case name="22544NISTXML-SV-II-list-language-minLength-1-3 tokoe:invalid" result="pass"/><test-case name="22545NISTXML-SV-II-list-language-minLength-1-4 tokoe:invalid" result="pass"/><test-case name="22546NISTXML-SV-II-list-language-minLength-1-5 tokoe:invalid" result="pass"/><test-case name="22547NISTSchema-SV-II-list-language-minLength-2 tokoe:valid" result="pass"/><test-case name="22548NISTXML-SV-II-list-language-minLength-2-1 tokoe:invalid" result="pass"/><test-case name="22549NISTXML-SV-II-list-language-minLength-2-2 tokoe:invalid" result="pass"/><test-case name="22550NISTXML-SV-II-list-language-minLength-2-3 tokoe:invalid" result="pass"/><test-case name="22551NISTXML-SV-II-list-language-minLength-2-4 tokoe:invalid" result="pass"/><test-case name="22552NISTXML-SV-II-list-language-minLength-2-5 tokoe:invalid" result="pass"/><test-case name="22553NISTSchema-SV-II-list-language-minLength-3 tokoe:valid" result="pass"/><test-case name="22554NISTXML-SV-II-list-language-minLength-3-1 tokoe:invalid" result="pass"/><test-case name="22555NISTXML-SV-II-list-language-minLength-3-2 tokoe:invalid" result="pass"/><test-case name="22556NISTXML-SV-II-list-language-minLength-3-3 tokoe:invalid" result="pass"/><test-case name="22557NISTXML-SV-II-list-language-minLength-3-4 tokoe:invalid" result="pass"/><test-case name="22558NISTXML-SV-II-list-language-minLength-3-5 tokoe:invalid" result="pass"/><test-case name="22559NISTSchema-SV-II-list-language-minLength-4 tokoe:valid" result="pass"/><test-case name="22560NISTXML-SV-II-list-language-minLength-4-1 tokoe:invalid" result="pass"/><test-case name="22561NISTXML-SV-II-list-language-minLength-4-2 tokoe:invalid" result="pass"/><test-case name="22562NISTXML-SV-II-list-language-minLength-4-3 tokoe:invalid" result="pass"/><test-case name="22563NISTXML-SV-II-list-language-minLength-4-4 tokoe:invalid" result="pass"/><test-case name="22564NISTXML-SV-II-list-language-minLength-4-5 tokoe:invalid" result="pass"/><test-case name="22565NISTSchema-SV-II-list-language-minLength-5 tokoe:valid" result="pass"/><test-case name="22566NISTXML-SV-II-list-language-minLength-5-1 tokoe:invalid" result="pass"/><test-case name="22567NISTXML-SV-II-list-language-minLength-5-2 tokoe:invalid" result="pass"/><test-case name="22568NISTXML-SV-II-list-language-minLength-5-3 tokoe:invalid" result="pass"/><test-case name="22569NISTXML-SV-II-list-language-minLength-5-4 tokoe:invalid" result="pass"/><test-case name="22570NISTXML-SV-II-list-language-minLength-5-5 tokoe:invalid" result="pass"/><test-case name="22571NISTSchema-SV-II-list-language-length-1 tokoe:valid" result="pass"/><test-case name="22572NISTXML-SV-II-list-language-length-1-1 tokoe:invalid" result="pass"/><test-case name="22573NISTXML-SV-II-list-language-length-1-2 tokoe:invalid" result="pass"/><test-case name="22574NISTXML-SV-II-list-language-length-1-3 tokoe:invalid" result="pass"/><test-case name="22575NISTXML-SV-II-list-language-length-1-4 tokoe:invalid" result="pass"/><test-case name="22576NISTXML-SV-II-list-language-length-1-5 tokoe:invalid" result="pass"/><test-case name="22577NISTSchema-SV-II-list-language-length-2 tokoe:valid" result="pass"/><test-case name="22578NISTXML-SV-II-list-language-length-2-1 tokoe:invalid" result="pass"/><test-case name="22579NISTXML-SV-II-list-language-length-2-2 tokoe:invalid" result="pass"/><test-case name="22580NISTXML-SV-II-list-language-length-2-3 tokoe:invalid" result="pass"/><test-case name="22581NISTXML-SV-II-list-language-length-2-4 tokoe:invalid" result="pass"/><test-case name="22582NISTXML-SV-II-list-language-length-2-5 tokoe:invalid" result="pass"/><test-case name="22583NISTSchema-SV-II-list-language-length-3 tokoe:valid" result="pass"/><test-case name="22584NISTXML-SV-II-list-language-length-3-1 tokoe:invalid" result="pass"/><test-case name="22585NISTXML-SV-II-list-language-length-3-2 tokoe:invalid" result="pass"/><test-case name="22586NISTXML-SV-II-list-language-length-3-3 tokoe:invalid" result="pass"/><test-case name="22587NISTXML-SV-II-list-language-length-3-4 tokoe:invalid" result="pass"/><test-case name="22588NISTXML-SV-II-list-language-length-3-5 tokoe:invalid" result="pass"/><test-case name="22589NISTSchema-SV-II-list-language-length-4 tokoe:valid" result="pass"/><test-case name="22590NISTXML-SV-II-list-language-length-4-1 tokoe:invalid" result="pass"/><test-case name="22591NISTXML-SV-II-list-language-length-4-2 tokoe:invalid" result="pass"/><test-case name="22592NISTXML-SV-II-list-language-length-4-3 tokoe:invalid" result="pass"/><test-case name="22593NISTXML-SV-II-list-language-length-4-4 tokoe:invalid" result="pass"/><test-case name="22594NISTXML-SV-II-list-language-length-4-5 tokoe:invalid" result="pass"/><test-case name="22595NISTSchema-SV-II-list-language-length-5 tokoe:valid" result="pass"/><test-case name="22596NISTXML-SV-II-list-language-length-5-1 tokoe:invalid" result="pass"/><test-case name="22597NISTXML-SV-II-list-language-length-5-2 tokoe:invalid" result="pass"/><test-case name="22598NISTXML-SV-II-list-language-length-5-3 tokoe:invalid" result="pass"/><test-case name="22599NISTXML-SV-II-list-language-length-5-4 tokoe:invalid" result="pass"/><test-case name="22600NISTXML-SV-II-list-language-length-5-5 tokoe:invalid" result="pass"/><test-case name="22601NISTSchema-SV-II-list-QName-maxLength-1 tokoe:valid" result="pass"/><test-case name="22602NISTXML-SV-II-list-QName-maxLength-1-1 tokoe:invalid" result="pass"/><test-case name="22603NISTXML-SV-II-list-QName-maxLength-1-2 tokoe:invalid" result="pass"/><test-case name="22604NISTXML-SV-II-list-QName-maxLength-1-3 tokoe:invalid" result="pass"/><test-case name="22605NISTXML-SV-II-list-QName-maxLength-1-4 tokoe:invalid" result="pass"/><test-case name="22606NISTXML-SV-II-list-QName-maxLength-1-5 tokoe:invalid" result="pass"/><test-case name="22607NISTSchema-SV-II-list-QName-maxLength-2 tokoe:valid" result="pass"/><test-case name="22608NISTXML-SV-II-list-QName-maxLength-2-1 tokoe:invalid" result="pass"/><test-case name="22609NISTXML-SV-II-list-QName-maxLength-2-2 tokoe:invalid" result="pass"/><test-case name="22610NISTXML-SV-II-list-QName-maxLength-2-3 tokoe:invalid" result="pass"/><test-case name="22611NISTXML-SV-II-list-QName-maxLength-2-4 tokoe:invalid" result="pass"/><test-case name="22612NISTXML-SV-II-list-QName-maxLength-2-5 tokoe:invalid" result="pass"/><test-case name="22613NISTSchema-SV-II-list-QName-maxLength-3 tokoe:valid" result="pass"/><test-case name="22614NISTXML-SV-II-list-QName-maxLength-3-1 tokoe:invalid" result="pass"/><test-case name="22615NISTXML-SV-II-list-QName-maxLength-3-2 tokoe:invalid" result="pass"/><test-case name="22616NISTXML-SV-II-list-QName-maxLength-3-3 tokoe:invalid" result="pass"/><test-case name="22617NISTXML-SV-II-list-QName-maxLength-3-4 tokoe:invalid" result="pass"/><test-case name="22618NISTXML-SV-II-list-QName-maxLength-3-5 tokoe:invalid" result="pass"/><test-case name="22619NISTSchema-SV-II-list-QName-maxLength-4 tokoe:valid" result="pass"/><test-case name="22620NISTXML-SV-II-list-QName-maxLength-4-1 tokoe:invalid" result="pass"/><test-case name="22621NISTXML-SV-II-list-QName-maxLength-4-2 tokoe:invalid" result="pass"/><test-case name="22622NISTXML-SV-II-list-QName-maxLength-4-3 tokoe:invalid" result="pass"/><test-case name="22623NISTXML-SV-II-list-QName-maxLength-4-4 tokoe:invalid" result="pass"/><test-case name="22624NISTXML-SV-II-list-QName-maxLength-4-5 tokoe:invalid" result="pass"/><test-case name="22625NISTSchema-SV-II-list-QName-maxLength-5 tokoe:valid" result="pass"/><test-case name="22626NISTXML-SV-II-list-QName-maxLength-5-1 tokoe:invalid" result="pass"/><test-case name="22627NISTXML-SV-II-list-QName-maxLength-5-2 tokoe:invalid" result="pass"/><test-case name="22628NISTXML-SV-II-list-QName-maxLength-5-3 tokoe:invalid" result="pass"/><test-case name="22629NISTXML-SV-II-list-QName-maxLength-5-4 tokoe:invalid" result="pass"/><test-case name="22630NISTXML-SV-II-list-QName-maxLength-5-5 tokoe:invalid" result="pass"/><test-case name="22631NISTSchema-SV-II-list-QName-minLength-1 tokoe:valid" result="pass"/><test-case name="22632NISTXML-SV-II-list-QName-minLength-1-1 tokoe:invalid" result="pass"/><test-case name="22633NISTXML-SV-II-list-QName-minLength-1-2 tokoe:invalid" result="pass"/><test-case name="22634NISTXML-SV-II-list-QName-minLength-1-3 tokoe:invalid" result="pass"/><test-case name="22635NISTXML-SV-II-list-QName-minLength-1-4 tokoe:invalid" result="pass"/><test-case name="22636NISTXML-SV-II-list-QName-minLength-1-5 tokoe:invalid" result="pass"/><test-case name="22637NISTSchema-SV-II-list-QName-minLength-2 tokoe:valid" result="pass"/><test-case name="22638NISTXML-SV-II-list-QName-minLength-2-1 tokoe:invalid" result="pass"/><test-case name="22639NISTXML-SV-II-list-QName-minLength-2-2 tokoe:invalid" result="pass"/><test-case name="22640NISTXML-SV-II-list-QName-minLength-2-3 tokoe:invalid" result="pass"/><test-case name="22641NISTXML-SV-II-list-QName-minLength-2-4 tokoe:invalid" result="pass"/><test-case name="22642NISTXML-SV-II-list-QName-minLength-2-5 tokoe:invalid" result="pass"/><test-case name="22643NISTSchema-SV-II-list-QName-minLength-3 tokoe:valid" result="pass"/><test-case name="22644NISTXML-SV-II-list-QName-minLength-3-1 tokoe:invalid" result="pass"/><test-case name="22645NISTXML-SV-II-list-QName-minLength-3-2 tokoe:invalid" result="pass"/><test-case name="22646NISTXML-SV-II-list-QName-minLength-3-3 tokoe:invalid" result="pass"/><test-case name="22647NISTXML-SV-II-list-QName-minLength-3-4 tokoe:invalid" result="pass"/><test-case name="22648NISTXML-SV-II-list-QName-minLength-3-5 tokoe:invalid" result="pass"/><test-case name="22649NISTSchema-SV-II-list-QName-minLength-4 tokoe:valid" result="pass"/><test-case name="22650NISTXML-SV-II-list-QName-minLength-4-1 tokoe:invalid" result="pass"/><test-case name="22651NISTXML-SV-II-list-QName-minLength-4-2 tokoe:invalid" result="pass"/><test-case name="22652NISTXML-SV-II-list-QName-minLength-4-3 tokoe:invalid" result="pass"/><test-case name="22653NISTXML-SV-II-list-QName-minLength-4-4 tokoe:invalid" result="pass"/><test-case name="22654NISTXML-SV-II-list-QName-minLength-4-5 tokoe:invalid" result="pass"/><test-case name="22655NISTSchema-SV-II-list-QName-minLength-5 tokoe:valid" result="pass"/><test-case name="22656NISTXML-SV-II-list-QName-minLength-5-1 tokoe:invalid" result="pass"/><test-case name="22657NISTXML-SV-II-list-QName-minLength-5-2 tokoe:invalid" result="pass"/><test-case name="22658NISTXML-SV-II-list-QName-minLength-5-3 tokoe:invalid" result="pass"/><test-case name="22659NISTXML-SV-II-list-QName-minLength-5-4 tokoe:invalid" result="pass"/><test-case name="22660NISTXML-SV-II-list-QName-minLength-5-5 tokoe:invalid" result="pass"/><test-case name="22661NISTSchema-SV-II-list-QName-length-1 tokoe:valid" result="pass"/><test-case name="22662NISTXML-SV-II-list-QName-length-1-1 tokoe:invalid" result="pass"/><test-case name="22663NISTXML-SV-II-list-QName-length-1-2 tokoe:invalid" result="pass"/><test-case name="22664NISTXML-SV-II-list-QName-length-1-3 tokoe:invalid" result="pass"/><test-case name="22665NISTXML-SV-II-list-QName-length-1-4 tokoe:invalid" result="pass"/><test-case name="22666NISTXML-SV-II-list-QName-length-1-5 tokoe:invalid" result="pass"/><test-case name="22667NISTSchema-SV-II-list-QName-length-2 tokoe:valid" result="pass"/><test-case name="22668NISTXML-SV-II-list-QName-length-2-1 tokoe:invalid" result="pass"/><test-case name="22669NISTXML-SV-II-list-QName-length-2-2 tokoe:invalid" result="pass"/><test-case name="22670NISTXML-SV-II-list-QName-length-2-3 tokoe:invalid" result="pass"/><test-case name="22671NISTXML-SV-II-list-QName-length-2-4 tokoe:invalid" result="pass"/><test-case name="22672NISTXML-SV-II-list-QName-length-2-5 tokoe:invalid" result="pass"/><test-case name="22673NISTSchema-SV-II-list-QName-length-3 tokoe:valid" result="pass"/><test-case name="22674NISTXML-SV-II-list-QName-length-3-1 tokoe:invalid" result="pass"/><test-case name="22675NISTXML-SV-II-list-QName-length-3-2 tokoe:invalid" result="pass"/><test-case name="22676NISTXML-SV-II-list-QName-length-3-3 tokoe:invalid" result="pass"/><test-case name="22677NISTXML-SV-II-list-QName-length-3-4 tokoe:invalid" result="pass"/><test-case name="22678NISTXML-SV-II-list-QName-length-3-5 tokoe:invalid" result="pass"/><test-case name="22679NISTSchema-SV-II-list-QName-length-4 tokoe:valid" result="pass"/><test-case name="22680NISTXML-SV-II-list-QName-length-4-1 tokoe:invalid" result="pass"/><test-case name="22681NISTXML-SV-II-list-QName-length-4-2 tokoe:invalid" result="pass"/><test-case name="22682NISTXML-SV-II-list-QName-length-4-3 tokoe:invalid" result="pass"/><test-case name="22683NISTXML-SV-II-list-QName-length-4-4 tokoe:invalid" result="pass"/><test-case name="22684NISTXML-SV-II-list-QName-length-4-5 tokoe:invalid" result="pass"/><test-case name="22685NISTSchema-SV-II-list-QName-length-5 tokoe:valid" result="pass"/><test-case name="22686NISTXML-SV-II-list-QName-length-5-1 tokoe:invalid" result="pass"/><test-case name="22687NISTXML-SV-II-list-QName-length-5-2 tokoe:invalid" result="pass"/><test-case name="22688NISTXML-SV-II-list-QName-length-5-3 tokoe:invalid" result="pass"/><test-case name="22689NISTXML-SV-II-list-QName-length-5-4 tokoe:invalid" result="pass"/><test-case name="22690NISTXML-SV-II-list-QName-length-5-5 tokoe:invalid" result="pass"/><test-case name="22691NISTSchema-SV-IV-union-duration-decimal-pattern-1 tokoe:valid" result="pass"/><test-case name="22692NISTXML-SV-IV-union-duration-decimal-pattern-1-1 tokoe:valid" result="pass"/><test-case name="22693NISTXML-SV-IV-union-duration-decimal-pattern-1-2 tokoe:valid" result="pass"/><test-case name="22694NISTXML-SV-IV-union-duration-decimal-pattern-1-3 tokoe:valid" result="pass"/><test-case name="22695NISTXML-SV-IV-union-duration-decimal-pattern-1-4 tokoe:valid" result="pass"/><test-case name="22696NISTXML-SV-IV-union-duration-decimal-pattern-1-5 tokoe:valid" result="pass"/><test-case name="22697NISTSchema-SV-IV-union-duration-decimal-pattern-2 tokoe:valid" result="pass"/><test-case name="22698NISTXML-SV-IV-union-duration-decimal-pattern-2-1 tokoe:valid" result="pass"/><test-case name="22699NISTXML-SV-IV-union-duration-decimal-pattern-2-2 tokoe:valid" result="pass"/><test-case name="22700NISTXML-SV-IV-union-duration-decimal-pattern-2-3 tokoe:valid" result="pass"/><test-case name="22701NISTXML-SV-IV-union-duration-decimal-pattern-2-4 tokoe:valid" result="pass"/><test-case name="22702NISTXML-SV-IV-union-duration-decimal-pattern-2-5 tokoe:valid" result="pass"/><test-case name="22703NISTSchema-SV-IV-union-duration-decimal-pattern-3 tokoe:valid" result="pass"/><test-case name="22704NISTXML-SV-IV-union-duration-decimal-pattern-3-1 tokoe:valid" result="pass"/><test-case name="22705NISTXML-SV-IV-union-duration-decimal-pattern-3-2 tokoe:valid" result="pass"/><test-case name="22706NISTXML-SV-IV-union-duration-decimal-pattern-3-3 tokoe:valid" result="pass"/><test-case name="22707NISTXML-SV-IV-union-duration-decimal-pattern-3-4 tokoe:valid" result="pass"/><test-case name="22708NISTXML-SV-IV-union-duration-decimal-pattern-3-5 tokoe:valid" result="pass"/><test-case name="22709NISTSchema-SV-IV-union-duration-decimal-pattern-4 tokoe:valid" result="pass"/><test-case name="22710NISTXML-SV-IV-union-duration-decimal-pattern-4-1 tokoe:valid" result="pass"/><test-case name="22711NISTXML-SV-IV-union-duration-decimal-pattern-4-2 tokoe:valid" result="pass"/><test-case name="22712NISTXML-SV-IV-union-duration-decimal-pattern-4-3 tokoe:valid" result="pass"/><test-case name="22713NISTXML-SV-IV-union-duration-decimal-pattern-4-4 tokoe:valid" result="pass"/><test-case name="22714NISTXML-SV-IV-union-duration-decimal-pattern-4-5 tokoe:valid" result="pass"/><test-case name="22715NISTSchema-SV-IV-union-duration-decimal-pattern-5 tokoe:valid" result="pass"/><test-case name="22716NISTXML-SV-IV-union-duration-decimal-pattern-5-1 tokoe:valid" result="pass"/><test-case name="22717NISTXML-SV-IV-union-duration-decimal-pattern-5-2 tokoe:valid" result="pass"/><test-case name="22718NISTXML-SV-IV-union-duration-decimal-pattern-5-3 tokoe:valid" result="pass"/><test-case name="22719NISTXML-SV-IV-union-duration-decimal-pattern-5-4 tokoe:valid" result="pass"/><test-case name="22720NISTXML-SV-IV-union-duration-decimal-pattern-5-5 tokoe:valid" result="pass"/><test-case name="22721NISTSchema-SV-IV-union-duration-decimal-enumeration-1 tokoe:valid" result="pass"/><test-case name="22722NISTXML-SV-IV-union-duration-decimal-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="22723NISTXML-SV-IV-union-duration-decimal-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="22724NISTXML-SV-IV-union-duration-decimal-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="22725NISTXML-SV-IV-union-duration-decimal-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="22726NISTXML-SV-IV-union-duration-decimal-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="22727NISTSchema-SV-IV-union-duration-decimal-enumeration-2 tokoe:valid" result="pass"/><test-case name="22728NISTXML-SV-IV-union-duration-decimal-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="22729NISTXML-SV-IV-union-duration-decimal-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="22730NISTXML-SV-IV-union-duration-decimal-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="22731NISTXML-SV-IV-union-duration-decimal-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="22732NISTXML-SV-IV-union-duration-decimal-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="22733NISTSchema-SV-IV-union-duration-decimal-enumeration-3 tokoe:valid" result="pass"/><test-case name="22734NISTXML-SV-IV-union-duration-decimal-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="22735NISTXML-SV-IV-union-duration-decimal-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="22736NISTXML-SV-IV-union-duration-decimal-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="22737NISTXML-SV-IV-union-duration-decimal-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="22738NISTXML-SV-IV-union-duration-decimal-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="22739NISTSchema-SV-IV-union-duration-decimal-enumeration-4 tokoe:valid" result="pass"/><test-case name="22740NISTXML-SV-IV-union-duration-decimal-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="22741NISTXML-SV-IV-union-duration-decimal-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="22742NISTXML-SV-IV-union-duration-decimal-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="22743NISTXML-SV-IV-union-duration-decimal-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="22744NISTXML-SV-IV-union-duration-decimal-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="22745NISTSchema-SV-IV-union-duration-decimal-enumeration-5 tokoe:valid" result="pass"/><test-case name="22746NISTXML-SV-IV-union-duration-decimal-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="22747NISTXML-SV-IV-union-duration-decimal-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="22748NISTXML-SV-IV-union-duration-decimal-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="22749NISTXML-SV-IV-union-duration-decimal-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="22750NISTXML-SV-IV-union-duration-decimal-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="22751NISTSchema-SV-IV-union-anyURI-float-pattern-1 tokoe:valid" result="pass"/><test-case name="22752NISTXML-SV-IV-union-anyURI-float-pattern-1-1 tokoe:valid" result="pass"/><test-case name="22753NISTXML-SV-IV-union-anyURI-float-pattern-1-2 tokoe:valid" result="pass"/><test-case name="22754NISTXML-SV-IV-union-anyURI-float-pattern-1-3 tokoe:valid" result="pass"/><test-case name="22755NISTXML-SV-IV-union-anyURI-float-pattern-1-4 tokoe:valid" result="pass"/><test-case name="22756NISTXML-SV-IV-union-anyURI-float-pattern-1-5 tokoe:valid" result="pass"/><test-case name="22757NISTSchema-SV-IV-union-anyURI-float-pattern-2 tokoe:valid" result="pass"/><test-case name="22758NISTXML-SV-IV-union-anyURI-float-pattern-2-1 tokoe:valid" result="pass"/><test-case name="22759NISTXML-SV-IV-union-anyURI-float-pattern-2-2 tokoe:valid" result="pass"/><test-case name="22760NISTXML-SV-IV-union-anyURI-float-pattern-2-3 tokoe:valid" result="pass"/><test-case name="22761NISTXML-SV-IV-union-anyURI-float-pattern-2-4 tokoe:valid" result="pass"/><test-case name="22762NISTXML-SV-IV-union-anyURI-float-pattern-2-5 tokoe:valid" result="pass"/><test-case name="22763NISTSchema-SV-IV-union-anyURI-float-pattern-3 tokoe:valid" result="pass"/><test-case name="22764NISTXML-SV-IV-union-anyURI-float-pattern-3-1 tokoe:valid" result="pass"/><test-case name="22765NISTXML-SV-IV-union-anyURI-float-pattern-3-2 tokoe:valid" result="pass"/><test-case name="22766NISTXML-SV-IV-union-anyURI-float-pattern-3-3 tokoe:valid" result="pass"/><test-case name="22767NISTXML-SV-IV-union-anyURI-float-pattern-3-4 tokoe:valid" result="pass"/><test-case name="22768NISTXML-SV-IV-union-anyURI-float-pattern-3-5 tokoe:valid" result="pass"/><test-case name="22769NISTSchema-SV-IV-union-anyURI-float-pattern-4 tokoe:valid" result="pass"/><test-case name="22770NISTXML-SV-IV-union-anyURI-float-pattern-4-1 tokoe:valid" result="pass"/><test-case name="22771NISTXML-SV-IV-union-anyURI-float-pattern-4-2 tokoe:valid" result="pass"/><test-case name="22772NISTXML-SV-IV-union-anyURI-float-pattern-4-3 tokoe:valid" result="pass"/><test-case name="22773NISTXML-SV-IV-union-anyURI-float-pattern-4-4 tokoe:valid" result="pass"/><test-case name="22774NISTXML-SV-IV-union-anyURI-float-pattern-4-5 tokoe:valid" result="pass"/><test-case name="22775NISTSchema-SV-IV-union-anyURI-float-pattern-5 tokoe:valid" result="pass"/><test-case name="22776NISTXML-SV-IV-union-anyURI-float-pattern-5-1 tokoe:valid" result="pass"/><test-case name="22777NISTXML-SV-IV-union-anyURI-float-pattern-5-2 tokoe:valid" result="pass"/><test-case name="22778NISTXML-SV-IV-union-anyURI-float-pattern-5-3 tokoe:valid" result="pass"/><test-case name="22779NISTXML-SV-IV-union-anyURI-float-pattern-5-4 tokoe:valid" result="pass"/><test-case name="22780NISTXML-SV-IV-union-anyURI-float-pattern-5-5 tokoe:valid" result="pass"/><test-case name="22781NISTSchema-SV-IV-union-anyURI-float-enumeration-1 tokoe:valid" result="pass"/><test-case name="22782NISTXML-SV-IV-union-anyURI-float-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="22783NISTXML-SV-IV-union-anyURI-float-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="22784NISTXML-SV-IV-union-anyURI-float-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="22785NISTXML-SV-IV-union-anyURI-float-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="22786NISTXML-SV-IV-union-anyURI-float-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="22787NISTSchema-SV-IV-union-anyURI-float-enumeration-2 tokoe:valid" result="pass"/><test-case name="22788NISTXML-SV-IV-union-anyURI-float-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="22789NISTXML-SV-IV-union-anyURI-float-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="22790NISTXML-SV-IV-union-anyURI-float-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="22791NISTXML-SV-IV-union-anyURI-float-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="22792NISTXML-SV-IV-union-anyURI-float-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="22793NISTSchema-SV-IV-union-anyURI-float-enumeration-3 tokoe:valid" result="pass"/><test-case name="22794NISTXML-SV-IV-union-anyURI-float-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="22795NISTXML-SV-IV-union-anyURI-float-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="22796NISTXML-SV-IV-union-anyURI-float-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="22797NISTXML-SV-IV-union-anyURI-float-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="22798NISTXML-SV-IV-union-anyURI-float-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="22799NISTSchema-SV-IV-union-anyURI-float-enumeration-4 tokoe:valid" result="pass"/><test-case name="22800NISTXML-SV-IV-union-anyURI-float-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="22801NISTXML-SV-IV-union-anyURI-float-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="22802NISTXML-SV-IV-union-anyURI-float-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="22803NISTXML-SV-IV-union-anyURI-float-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="22804NISTXML-SV-IV-union-anyURI-float-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="22805NISTSchema-SV-IV-union-anyURI-float-enumeration-5 tokoe:valid" result="pass"/><test-case name="22806NISTXML-SV-IV-union-anyURI-float-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="22807NISTXML-SV-IV-union-anyURI-float-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="22808NISTXML-SV-IV-union-anyURI-float-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="22809NISTXML-SV-IV-union-anyURI-float-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="22810NISTXML-SV-IV-union-anyURI-float-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="22811NISTSchema-SV-IV-union-gMonthDay-gYearMonth-pattern-1 tokoe:valid" result="pass"/><test-case name="22812NISTXML-SV-IV-union-gMonthDay-gYearMonth-pattern-1-1 tokoe:valid" result="pass"/><test-case name="22813NISTXML-SV-IV-union-gMonthDay-gYearMonth-pattern-1-2 tokoe:valid" result="pass"/><test-case name="22814NISTXML-SV-IV-union-gMonthDay-gYearMonth-pattern-1-3 tokoe:valid" result="pass"/><test-case name="22815NISTXML-SV-IV-union-gMonthDay-gYearMonth-pattern-1-4 tokoe:valid" result="pass"/><test-case name="22816NISTXML-SV-IV-union-gMonthDay-gYearMonth-pattern-1-5 tokoe:valid" result="pass"/><test-case name="22817NISTSchema-SV-IV-union-gMonthDay-gYearMonth-pattern-2 tokoe:valid" result="pass"/><test-case name="22818NISTXML-SV-IV-union-gMonthDay-gYearMonth-pattern-2-1 tokoe:valid" result="pass"/><test-case name="22819NISTXML-SV-IV-union-gMonthDay-gYearMonth-pattern-2-2 tokoe:valid" result="pass"/><test-case name="22820NISTXML-SV-IV-union-gMonthDay-gYearMonth-pattern-2-3 tokoe:valid" result="pass"/><test-case name="22821NISTXML-SV-IV-union-gMonthDay-gYearMonth-pattern-2-4 tokoe:valid" result="pass"/><test-case name="22822NISTXML-SV-IV-union-gMonthDay-gYearMonth-pattern-2-5 tokoe:valid" result="pass"/><test-case name="22823NISTSchema-SV-IV-union-gMonthDay-gYearMonth-pattern-3 tokoe:valid" result="pass"/><test-case name="22824NISTXML-SV-IV-union-gMonthDay-gYearMonth-pattern-3-1 tokoe:valid" result="pass"/><test-case name="22825NISTXML-SV-IV-union-gMonthDay-gYearMonth-pattern-3-2 tokoe:valid" result="pass"/><test-case name="22826NISTXML-SV-IV-union-gMonthDay-gYearMonth-pattern-3-3 tokoe:valid" result="pass"/><test-case name="22827NISTXML-SV-IV-union-gMonthDay-gYearMonth-pattern-3-4 tokoe:valid" result="pass"/><test-case name="22828NISTXML-SV-IV-union-gMonthDay-gYearMonth-pattern-3-5 tokoe:valid" result="pass"/><test-case name="22829NISTSchema-SV-IV-union-gMonthDay-gYearMonth-pattern-4 tokoe:valid" result="pass"/><test-case name="22830NISTXML-SV-IV-union-gMonthDay-gYearMonth-pattern-4-1 tokoe:valid" result="pass"/><test-case name="22831NISTXML-SV-IV-union-gMonthDay-gYearMonth-pattern-4-2 tokoe:valid" result="pass"/><test-case name="22832NISTXML-SV-IV-union-gMonthDay-gYearMonth-pattern-4-3 tokoe:valid" result="pass"/><test-case name="22833NISTXML-SV-IV-union-gMonthDay-gYearMonth-pattern-4-4 tokoe:valid" result="pass"/><test-case name="22834NISTXML-SV-IV-union-gMonthDay-gYearMonth-pattern-4-5 tokoe:valid" result="pass"/><test-case name="22835NISTSchema-SV-IV-union-gMonthDay-gYearMonth-pattern-5 tokoe:valid" result="pass"/><test-case name="22836NISTXML-SV-IV-union-gMonthDay-gYearMonth-pattern-5-1 tokoe:valid" result="pass"/><test-case name="22837NISTXML-SV-IV-union-gMonthDay-gYearMonth-pattern-5-2 tokoe:valid" result="pass"/><test-case name="22838NISTXML-SV-IV-union-gMonthDay-gYearMonth-pattern-5-3 tokoe:valid" result="pass"/><test-case name="22839NISTXML-SV-IV-union-gMonthDay-gYearMonth-pattern-5-4 tokoe:valid" result="pass"/><test-case name="22840NISTXML-SV-IV-union-gMonthDay-gYearMonth-pattern-5-5 tokoe:valid" result="pass"/><test-case name="22841NISTSchema-SV-IV-union-gMonthDay-gYearMonth-enumeration-1 tokoe:valid" result="pass"/><test-case name="22842NISTXML-SV-IV-union-gMonthDay-gYearMonth-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="22843NISTXML-SV-IV-union-gMonthDay-gYearMonth-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="22844NISTXML-SV-IV-union-gMonthDay-gYearMonth-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="22845NISTXML-SV-IV-union-gMonthDay-gYearMonth-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="22846NISTXML-SV-IV-union-gMonthDay-gYearMonth-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="22847NISTSchema-SV-IV-union-gMonthDay-gYearMonth-enumeration-2 tokoe:valid" result="pass"/><test-case name="22848NISTXML-SV-IV-union-gMonthDay-gYearMonth-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="22849NISTXML-SV-IV-union-gMonthDay-gYearMonth-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="22850NISTXML-SV-IV-union-gMonthDay-gYearMonth-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="22851NISTXML-SV-IV-union-gMonthDay-gYearMonth-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="22852NISTXML-SV-IV-union-gMonthDay-gYearMonth-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="22853NISTSchema-SV-IV-union-gMonthDay-gYearMonth-enumeration-3 tokoe:valid" result="pass"/><test-case name="22854NISTXML-SV-IV-union-gMonthDay-gYearMonth-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="22855NISTXML-SV-IV-union-gMonthDay-gYearMonth-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="22856NISTXML-SV-IV-union-gMonthDay-gYearMonth-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="22857NISTXML-SV-IV-union-gMonthDay-gYearMonth-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="22858NISTXML-SV-IV-union-gMonthDay-gYearMonth-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="22859NISTSchema-SV-IV-union-gMonthDay-gYearMonth-enumeration-4 tokoe:valid" result="pass"/><test-case name="22860NISTXML-SV-IV-union-gMonthDay-gYearMonth-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="22861NISTXML-SV-IV-union-gMonthDay-gYearMonth-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="22862NISTXML-SV-IV-union-gMonthDay-gYearMonth-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="22863NISTXML-SV-IV-union-gMonthDay-gYearMonth-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="22864NISTXML-SV-IV-union-gMonthDay-gYearMonth-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="22865NISTSchema-SV-IV-union-gMonthDay-gYearMonth-enumeration-5 tokoe:valid" result="pass"/><test-case name="22866NISTXML-SV-IV-union-gMonthDay-gYearMonth-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="22867NISTXML-SV-IV-union-gMonthDay-gYearMonth-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="22868NISTXML-SV-IV-union-gMonthDay-gYearMonth-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="22869NISTXML-SV-IV-union-gMonthDay-gYearMonth-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="22870NISTXML-SV-IV-union-gMonthDay-gYearMonth-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="22871NISTSchema-SV-IV-union-short-gYear-pattern-1 tokoe:valid" result="pass"/><test-case name="22872NISTXML-SV-IV-union-short-gYear-pattern-1-1 tokoe:valid" result="pass"/><test-case name="22873NISTXML-SV-IV-union-short-gYear-pattern-1-2 tokoe:valid" result="pass"/><test-case name="22874NISTXML-SV-IV-union-short-gYear-pattern-1-3 tokoe:valid" result="pass"/><test-case name="22875NISTXML-SV-IV-union-short-gYear-pattern-1-4 tokoe:valid" result="pass"/><test-case name="22876NISTXML-SV-IV-union-short-gYear-pattern-1-5 tokoe:valid" result="pass"/><test-case name="22877NISTSchema-SV-IV-union-short-gYear-pattern-2 tokoe:valid" result="pass"/><test-case name="22878NISTXML-SV-IV-union-short-gYear-pattern-2-1 tokoe:valid" result="pass"/><test-case name="22879NISTXML-SV-IV-union-short-gYear-pattern-2-2 tokoe:valid" result="pass"/><test-case name="22880NISTXML-SV-IV-union-short-gYear-pattern-2-3 tokoe:valid" result="pass"/><test-case name="22881NISTXML-SV-IV-union-short-gYear-pattern-2-4 tokoe:valid" result="pass"/><test-case name="22882NISTXML-SV-IV-union-short-gYear-pattern-2-5 tokoe:valid" result="pass"/><test-case name="22883NISTSchema-SV-IV-union-short-gYear-pattern-3 tokoe:valid" result="pass"/><test-case name="22884NISTXML-SV-IV-union-short-gYear-pattern-3-1 tokoe:valid" result="pass"/><test-case name="22885NISTXML-SV-IV-union-short-gYear-pattern-3-2 tokoe:valid" result="pass"/><test-case name="22886NISTXML-SV-IV-union-short-gYear-pattern-3-3 tokoe:valid" result="pass"/><test-case name="22887NISTXML-SV-IV-union-short-gYear-pattern-3-4 tokoe:valid" result="pass"/><test-case name="22888NISTXML-SV-IV-union-short-gYear-pattern-3-5 tokoe:valid" result="pass"/><test-case name="22889NISTSchema-SV-IV-union-short-gYear-pattern-4 tokoe:valid" result="pass"/><test-case name="22890NISTXML-SV-IV-union-short-gYear-pattern-4-1 tokoe:valid" result="pass"/><test-case name="22891NISTXML-SV-IV-union-short-gYear-pattern-4-2 tokoe:valid" result="pass"/><test-case name="22892NISTXML-SV-IV-union-short-gYear-pattern-4-3 tokoe:valid" result="pass"/><test-case name="22893NISTXML-SV-IV-union-short-gYear-pattern-4-4 tokoe:valid" result="pass"/><test-case name="22894NISTXML-SV-IV-union-short-gYear-pattern-4-5 tokoe:valid" result="pass"/><test-case name="22895NISTSchema-SV-IV-union-short-gYear-pattern-5 tokoe:valid" result="pass"/><test-case name="22896NISTXML-SV-IV-union-short-gYear-pattern-5-1 tokoe:valid" result="pass"/><test-case name="22897NISTXML-SV-IV-union-short-gYear-pattern-5-2 tokoe:valid" result="pass"/><test-case name="22898NISTXML-SV-IV-union-short-gYear-pattern-5-3 tokoe:valid" result="pass"/><test-case name="22899NISTXML-SV-IV-union-short-gYear-pattern-5-4 tokoe:valid" result="pass"/><test-case name="22900NISTXML-SV-IV-union-short-gYear-pattern-5-5 tokoe:valid" result="pass"/><test-case name="22901NISTSchema-SV-IV-union-short-gYear-enumeration-1 tokoe:valid" result="pass"/><test-case name="22902NISTXML-SV-IV-union-short-gYear-enumeration-1-1 tokoe:valid" result="pass"/><test-case name="22903NISTXML-SV-IV-union-short-gYear-enumeration-1-2 tokoe:valid" result="pass"/><test-case name="22904NISTXML-SV-IV-union-short-gYear-enumeration-1-3 tokoe:valid" result="pass"/><test-case name="22905NISTXML-SV-IV-union-short-gYear-enumeration-1-4 tokoe:valid" result="pass"/><test-case name="22906NISTXML-SV-IV-union-short-gYear-enumeration-1-5 tokoe:valid" result="pass"/><test-case name="22907NISTSchema-SV-IV-union-short-gYear-enumeration-2 tokoe:valid" result="pass"/><test-case name="22908NISTXML-SV-IV-union-short-gYear-enumeration-2-1 tokoe:valid" result="pass"/><test-case name="22909NISTXML-SV-IV-union-short-gYear-enumeration-2-2 tokoe:valid" result="pass"/><test-case name="22910NISTXML-SV-IV-union-short-gYear-enumeration-2-3 tokoe:valid" result="pass"/><test-case name="22911NISTXML-SV-IV-union-short-gYear-enumeration-2-4 tokoe:valid" result="pass"/><test-case name="22912NISTXML-SV-IV-union-short-gYear-enumeration-2-5 tokoe:valid" result="pass"/><test-case name="22913NISTSchema-SV-IV-union-short-gYear-enumeration-3 tokoe:valid" result="pass"/><test-case name="22914NISTXML-SV-IV-union-short-gYear-enumeration-3-1 tokoe:valid" result="pass"/><test-case name="22915NISTXML-SV-IV-union-short-gYear-enumeration-3-2 tokoe:valid" result="pass"/><test-case name="22916NISTXML-SV-IV-union-short-gYear-enumeration-3-3 tokoe:valid" result="pass"/><test-case name="22917NISTXML-SV-IV-union-short-gYear-enumeration-3-4 tokoe:valid" result="pass"/><test-case name="22918NISTXML-SV-IV-union-short-gYear-enumeration-3-5 tokoe:valid" result="pass"/><test-case name="22919NISTSchema-SV-IV-union-short-gYear-enumeration-4 tokoe:valid" result="pass"/><test-case name="22920NISTXML-SV-IV-union-short-gYear-enumeration-4-1 tokoe:valid" result="pass"/><test-case name="22921NISTXML-SV-IV-union-short-gYear-enumeration-4-2 tokoe:valid" result="pass"/><test-case name="22922NISTXML-SV-IV-union-short-gYear-enumeration-4-3 tokoe:valid" result="pass"/><test-case name="22923NISTXML-SV-IV-union-short-gYear-enumeration-4-4 tokoe:valid" result="pass"/><test-case name="22924NISTXML-SV-IV-union-short-gYear-enumeration-4-5 tokoe:valid" result="pass"/><test-case name="22925NISTSchema-SV-IV-union-short-gYear-enumeration-5 tokoe:valid" result="pass"/><test-case name="22926NISTXML-SV-IV-union-short-gYear-enumeration-5-1 tokoe:valid" result="pass"/><test-case name="22927NISTXML-SV-IV-union-short-gYear-enumeration-5-2 tokoe:valid" result="pass"/><test-case name="22928NISTXML-SV-IV-union-short-gYear-enumeration-5-3 tokoe:valid" result="pass"/><test-case name="22929NISTXML-SV-IV-union-short-gYear-enumeration-5-4 tokoe:valid" result="pass"/><test-case name="22930NISTXML-SV-IV-union-short-gYear-enumeration-5-5 tokoe:valid" result="pass"/><test-case name="22931NISTSchema-SV-II-union-duration-decimal-pattern-1 tokoe:valid" result="pass"/><test-case name="22932NISTXML-SV-II-union-duration-decimal-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="22933NISTXML-SV-II-union-duration-decimal-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="22934NISTXML-SV-II-union-duration-decimal-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="22935NISTXML-SV-II-union-duration-decimal-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="22936NISTXML-SV-II-union-duration-decimal-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="22937NISTSchema-SV-II-union-duration-decimal-pattern-2 tokoe:valid" result="pass"/><test-case name="22938NISTXML-SV-II-union-duration-decimal-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="22939NISTXML-SV-II-union-duration-decimal-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="22940NISTXML-SV-II-union-duration-decimal-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="22941NISTXML-SV-II-union-duration-decimal-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="22942NISTXML-SV-II-union-duration-decimal-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="22943NISTSchema-SV-II-union-duration-decimal-pattern-3 tokoe:valid" result="pass"/><test-case name="22944NISTXML-SV-II-union-duration-decimal-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="22945NISTXML-SV-II-union-duration-decimal-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="22946NISTXML-SV-II-union-duration-decimal-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="22947NISTXML-SV-II-union-duration-decimal-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="22948NISTXML-SV-II-union-duration-decimal-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="22949NISTSchema-SV-II-union-duration-decimal-pattern-4 tokoe:valid" result="pass"/><test-case name="22950NISTXML-SV-II-union-duration-decimal-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="22951NISTXML-SV-II-union-duration-decimal-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="22952NISTXML-SV-II-union-duration-decimal-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="22953NISTXML-SV-II-union-duration-decimal-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="22954NISTXML-SV-II-union-duration-decimal-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="22955NISTSchema-SV-II-union-duration-decimal-pattern-5 tokoe:valid" result="pass"/><test-case name="22956NISTXML-SV-II-union-duration-decimal-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="22957NISTXML-SV-II-union-duration-decimal-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="22958NISTXML-SV-II-union-duration-decimal-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="22959NISTXML-SV-II-union-duration-decimal-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="22960NISTXML-SV-II-union-duration-decimal-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="22961NISTSchema-SV-II-union-duration-decimal-enumeration-1 tokoe:valid" result="pass"/><test-case name="22962NISTXML-SV-II-union-duration-decimal-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="22963NISTXML-SV-II-union-duration-decimal-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="22964NISTXML-SV-II-union-duration-decimal-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="22965NISTXML-SV-II-union-duration-decimal-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="22966NISTXML-SV-II-union-duration-decimal-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="22967NISTSchema-SV-II-union-duration-decimal-enumeration-2 tokoe:valid" result="pass"/><test-case name="22968NISTXML-SV-II-union-duration-decimal-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="22969NISTXML-SV-II-union-duration-decimal-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="22970NISTXML-SV-II-union-duration-decimal-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="22971NISTXML-SV-II-union-duration-decimal-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="22972NISTXML-SV-II-union-duration-decimal-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="22973NISTSchema-SV-II-union-duration-decimal-enumeration-3 tokoe:valid" result="pass"/><test-case name="22974NISTXML-SV-II-union-duration-decimal-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="22975NISTXML-SV-II-union-duration-decimal-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="22976NISTXML-SV-II-union-duration-decimal-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="22977NISTXML-SV-II-union-duration-decimal-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="22978NISTXML-SV-II-union-duration-decimal-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="22979NISTSchema-SV-II-union-duration-decimal-enumeration-4 tokoe:valid" result="pass"/><test-case name="22980NISTXML-SV-II-union-duration-decimal-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="22981NISTXML-SV-II-union-duration-decimal-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="22982NISTXML-SV-II-union-duration-decimal-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="22983NISTXML-SV-II-union-duration-decimal-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="22984NISTXML-SV-II-union-duration-decimal-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="22985NISTSchema-SV-II-union-duration-decimal-enumeration-5 tokoe:valid" result="pass"/><test-case name="22986NISTXML-SV-II-union-duration-decimal-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="22987NISTXML-SV-II-union-duration-decimal-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="22988NISTXML-SV-II-union-duration-decimal-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="22989NISTXML-SV-II-union-duration-decimal-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="22990NISTXML-SV-II-union-duration-decimal-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="22991NISTSchema-SV-II-union-anyURI-float-pattern-1 tokoe:valid" result="pass"/><test-case name="22992NISTXML-SV-II-union-anyURI-float-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="22993NISTXML-SV-II-union-anyURI-float-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="22994NISTXML-SV-II-union-anyURI-float-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="22995NISTXML-SV-II-union-anyURI-float-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="22996NISTXML-SV-II-union-anyURI-float-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="22997NISTSchema-SV-II-union-anyURI-float-pattern-2 tokoe:valid" result="pass"/><test-case name="22998NISTXML-SV-II-union-anyURI-float-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="22999NISTXML-SV-II-union-anyURI-float-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="23000NISTXML-SV-II-union-anyURI-float-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="23001NISTXML-SV-II-union-anyURI-float-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="23002NISTXML-SV-II-union-anyURI-float-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="23003NISTSchema-SV-II-union-anyURI-float-pattern-3 tokoe:valid" result="pass"/><test-case name="23004NISTXML-SV-II-union-anyURI-float-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="23005NISTXML-SV-II-union-anyURI-float-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="23006NISTXML-SV-II-union-anyURI-float-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="23007NISTXML-SV-II-union-anyURI-float-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="23008NISTXML-SV-II-union-anyURI-float-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="23009NISTSchema-SV-II-union-anyURI-float-pattern-4 tokoe:valid" result="pass"/><test-case name="23010NISTXML-SV-II-union-anyURI-float-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="23011NISTXML-SV-II-union-anyURI-float-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="23012NISTXML-SV-II-union-anyURI-float-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="23013NISTXML-SV-II-union-anyURI-float-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="23014NISTXML-SV-II-union-anyURI-float-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="23015NISTSchema-SV-II-union-anyURI-float-pattern-5 tokoe:valid" result="pass"/><test-case name="23016NISTXML-SV-II-union-anyURI-float-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="23017NISTXML-SV-II-union-anyURI-float-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="23018NISTXML-SV-II-union-anyURI-float-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="23019NISTXML-SV-II-union-anyURI-float-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="23020NISTXML-SV-II-union-anyURI-float-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="23021NISTSchema-SV-II-union-anyURI-float-enumeration-1 tokoe:valid" result="pass"/><test-case name="23022NISTXML-SV-II-union-anyURI-float-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="23023NISTXML-SV-II-union-anyURI-float-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="23024NISTXML-SV-II-union-anyURI-float-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="23025NISTXML-SV-II-union-anyURI-float-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="23026NISTXML-SV-II-union-anyURI-float-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="23027NISTSchema-SV-II-union-anyURI-float-enumeration-2 tokoe:valid" result="pass"/><test-case name="23028NISTXML-SV-II-union-anyURI-float-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="23029NISTXML-SV-II-union-anyURI-float-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="23030NISTXML-SV-II-union-anyURI-float-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="23031NISTXML-SV-II-union-anyURI-float-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="23032NISTXML-SV-II-union-anyURI-float-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="23033NISTSchema-SV-II-union-anyURI-float-enumeration-3 tokoe:valid" result="pass"/><test-case name="23034NISTXML-SV-II-union-anyURI-float-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="23035NISTXML-SV-II-union-anyURI-float-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="23036NISTXML-SV-II-union-anyURI-float-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="23037NISTXML-SV-II-union-anyURI-float-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="23038NISTXML-SV-II-union-anyURI-float-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="23039NISTSchema-SV-II-union-anyURI-float-enumeration-4 tokoe:valid" result="pass"/><test-case name="23040NISTXML-SV-II-union-anyURI-float-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="23041NISTXML-SV-II-union-anyURI-float-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="23042NISTXML-SV-II-union-anyURI-float-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="23043NISTXML-SV-II-union-anyURI-float-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="23044NISTXML-SV-II-union-anyURI-float-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="23045NISTSchema-SV-II-union-anyURI-float-enumeration-5 tokoe:valid" result="pass"/><test-case name="23046NISTXML-SV-II-union-anyURI-float-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="23047NISTXML-SV-II-union-anyURI-float-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="23048NISTXML-SV-II-union-anyURI-float-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="23049NISTXML-SV-II-union-anyURI-float-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="23050NISTXML-SV-II-union-anyURI-float-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="23051NISTSchema-SV-II-union-gMonthDay-gYearMonth-pattern-1 tokoe:valid" result="pass"/><test-case name="23052NISTXML-SV-II-union-gMonthDay-gYearMonth-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="23053NISTXML-SV-II-union-gMonthDay-gYearMonth-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="23054NISTXML-SV-II-union-gMonthDay-gYearMonth-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="23055NISTXML-SV-II-union-gMonthDay-gYearMonth-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="23056NISTXML-SV-II-union-gMonthDay-gYearMonth-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="23057NISTSchema-SV-II-union-gMonthDay-gYearMonth-pattern-2 tokoe:valid" result="pass"/><test-case name="23058NISTXML-SV-II-union-gMonthDay-gYearMonth-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="23059NISTXML-SV-II-union-gMonthDay-gYearMonth-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="23060NISTXML-SV-II-union-gMonthDay-gYearMonth-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="23061NISTXML-SV-II-union-gMonthDay-gYearMonth-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="23062NISTXML-SV-II-union-gMonthDay-gYearMonth-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="23063NISTSchema-SV-II-union-gMonthDay-gYearMonth-pattern-3 tokoe:valid" result="pass"/><test-case name="23064NISTXML-SV-II-union-gMonthDay-gYearMonth-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="23065NISTXML-SV-II-union-gMonthDay-gYearMonth-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="23066NISTXML-SV-II-union-gMonthDay-gYearMonth-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="23067NISTXML-SV-II-union-gMonthDay-gYearMonth-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="23068NISTXML-SV-II-union-gMonthDay-gYearMonth-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="23069NISTSchema-SV-II-union-gMonthDay-gYearMonth-pattern-4 tokoe:valid" result="pass"/><test-case name="23070NISTXML-SV-II-union-gMonthDay-gYearMonth-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="23071NISTXML-SV-II-union-gMonthDay-gYearMonth-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="23072NISTXML-SV-II-union-gMonthDay-gYearMonth-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="23073NISTXML-SV-II-union-gMonthDay-gYearMonth-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="23074NISTXML-SV-II-union-gMonthDay-gYearMonth-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="23075NISTSchema-SV-II-union-gMonthDay-gYearMonth-pattern-5 tokoe:valid" result="pass"/><test-case name="23076NISTXML-SV-II-union-gMonthDay-gYearMonth-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="23077NISTXML-SV-II-union-gMonthDay-gYearMonth-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="23078NISTXML-SV-II-union-gMonthDay-gYearMonth-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="23079NISTXML-SV-II-union-gMonthDay-gYearMonth-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="23080NISTXML-SV-II-union-gMonthDay-gYearMonth-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="23081NISTSchema-SV-II-union-gMonthDay-gYearMonth-enumeration-1 tokoe:valid" result="pass"/><test-case name="23082NISTXML-SV-II-union-gMonthDay-gYearMonth-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="23083NISTXML-SV-II-union-gMonthDay-gYearMonth-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="23084NISTXML-SV-II-union-gMonthDay-gYearMonth-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="23085NISTXML-SV-II-union-gMonthDay-gYearMonth-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="23086NISTXML-SV-II-union-gMonthDay-gYearMonth-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="23087NISTSchema-SV-II-union-gMonthDay-gYearMonth-enumeration-2 tokoe:valid" result="pass"/><test-case name="23088NISTXML-SV-II-union-gMonthDay-gYearMonth-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="23089NISTXML-SV-II-union-gMonthDay-gYearMonth-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="23090NISTXML-SV-II-union-gMonthDay-gYearMonth-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="23091NISTXML-SV-II-union-gMonthDay-gYearMonth-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="23092NISTXML-SV-II-union-gMonthDay-gYearMonth-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="23093NISTSchema-SV-II-union-gMonthDay-gYearMonth-enumeration-3 tokoe:valid" result="pass"/><test-case name="23094NISTXML-SV-II-union-gMonthDay-gYearMonth-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="23095NISTXML-SV-II-union-gMonthDay-gYearMonth-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="23096NISTXML-SV-II-union-gMonthDay-gYearMonth-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="23097NISTXML-SV-II-union-gMonthDay-gYearMonth-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="23098NISTXML-SV-II-union-gMonthDay-gYearMonth-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="23099NISTSchema-SV-II-union-gMonthDay-gYearMonth-enumeration-4 tokoe:valid" result="pass"/><test-case name="23100NISTXML-SV-II-union-gMonthDay-gYearMonth-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="23101NISTXML-SV-II-union-gMonthDay-gYearMonth-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="23102NISTXML-SV-II-union-gMonthDay-gYearMonth-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="23103NISTXML-SV-II-union-gMonthDay-gYearMonth-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="23104NISTXML-SV-II-union-gMonthDay-gYearMonth-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="23105NISTSchema-SV-II-union-gMonthDay-gYearMonth-enumeration-5 tokoe:valid" result="pass"/><test-case name="23106NISTXML-SV-II-union-gMonthDay-gYearMonth-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="23107NISTXML-SV-II-union-gMonthDay-gYearMonth-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="23108NISTXML-SV-II-union-gMonthDay-gYearMonth-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="23109NISTXML-SV-II-union-gMonthDay-gYearMonth-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="23110NISTXML-SV-II-union-gMonthDay-gYearMonth-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="23111NISTSchema-SV-II-union-short-gYear-pattern-1 tokoe:valid" result="pass"/><test-case name="23112NISTXML-SV-II-union-short-gYear-pattern-1-1 tokoe:invalid" result="pass"/><test-case name="23113NISTXML-SV-II-union-short-gYear-pattern-1-2 tokoe:invalid" result="pass"/><test-case name="23114NISTXML-SV-II-union-short-gYear-pattern-1-3 tokoe:invalid" result="pass"/><test-case name="23115NISTXML-SV-II-union-short-gYear-pattern-1-4 tokoe:invalid" result="pass"/><test-case name="23116NISTXML-SV-II-union-short-gYear-pattern-1-5 tokoe:invalid" result="pass"/><test-case name="23117NISTSchema-SV-II-union-short-gYear-pattern-2 tokoe:valid" result="pass"/><test-case name="23118NISTXML-SV-II-union-short-gYear-pattern-2-1 tokoe:invalid" result="pass"/><test-case name="23119NISTXML-SV-II-union-short-gYear-pattern-2-2 tokoe:invalid" result="pass"/><test-case name="23120NISTXML-SV-II-union-short-gYear-pattern-2-3 tokoe:invalid" result="pass"/><test-case name="23121NISTXML-SV-II-union-short-gYear-pattern-2-4 tokoe:invalid" result="pass"/><test-case name="23122NISTXML-SV-II-union-short-gYear-pattern-2-5 tokoe:invalid" result="pass"/><test-case name="23123NISTSchema-SV-II-union-short-gYear-pattern-3 tokoe:valid" result="pass"/><test-case name="23124NISTXML-SV-II-union-short-gYear-pattern-3-1 tokoe:invalid" result="pass"/><test-case name="23125NISTXML-SV-II-union-short-gYear-pattern-3-2 tokoe:invalid" result="pass"/><test-case name="23126NISTXML-SV-II-union-short-gYear-pattern-3-3 tokoe:invalid" result="pass"/><test-case name="23127NISTXML-SV-II-union-short-gYear-pattern-3-4 tokoe:invalid" result="pass"/><test-case name="23128NISTXML-SV-II-union-short-gYear-pattern-3-5 tokoe:invalid" result="pass"/><test-case name="23129NISTSchema-SV-II-union-short-gYear-pattern-4 tokoe:valid" result="pass"/><test-case name="23130NISTXML-SV-II-union-short-gYear-pattern-4-1 tokoe:invalid" result="pass"/><test-case name="23131NISTXML-SV-II-union-short-gYear-pattern-4-2 tokoe:invalid" result="pass"/><test-case name="23132NISTXML-SV-II-union-short-gYear-pattern-4-3 tokoe:invalid" result="pass"/><test-case name="23133NISTXML-SV-II-union-short-gYear-pattern-4-4 tokoe:invalid" result="pass"/><test-case name="23134NISTXML-SV-II-union-short-gYear-pattern-4-5 tokoe:invalid" result="pass"/><test-case name="23135NISTSchema-SV-II-union-short-gYear-pattern-5 tokoe:valid" result="pass"/><test-case name="23136NISTXML-SV-II-union-short-gYear-pattern-5-1 tokoe:invalid" result="pass"/><test-case name="23137NISTXML-SV-II-union-short-gYear-pattern-5-2 tokoe:invalid" result="pass"/><test-case name="23138NISTXML-SV-II-union-short-gYear-pattern-5-3 tokoe:invalid" result="pass"/><test-case name="23139NISTXML-SV-II-union-short-gYear-pattern-5-4 tokoe:invalid" result="pass"/><test-case name="23140NISTXML-SV-II-union-short-gYear-pattern-5-5 tokoe:invalid" result="pass"/><test-case name="23141NISTSchema-SV-II-union-short-gYear-enumeration-1 tokoe:valid" result="pass"/><test-case name="23142NISTXML-SV-II-union-short-gYear-enumeration-1-1 tokoe:invalid" result="pass"/><test-case name="23143NISTXML-SV-II-union-short-gYear-enumeration-1-2 tokoe:invalid" result="pass"/><test-case name="23144NISTXML-SV-II-union-short-gYear-enumeration-1-3 tokoe:invalid" result="pass"/><test-case name="23145NISTXML-SV-II-union-short-gYear-enumeration-1-4 tokoe:invalid" result="pass"/><test-case name="23146NISTXML-SV-II-union-short-gYear-enumeration-1-5 tokoe:invalid" result="pass"/><test-case name="23147NISTSchema-SV-II-union-short-gYear-enumeration-2 tokoe:valid" result="pass"/><test-case name="23148NISTXML-SV-II-union-short-gYear-enumeration-2-1 tokoe:invalid" result="pass"/><test-case name="23149NISTXML-SV-II-union-short-gYear-enumeration-2-2 tokoe:invalid" result="pass"/><test-case name="23150NISTXML-SV-II-union-short-gYear-enumeration-2-3 tokoe:invalid" result="pass"/><test-case name="23151NISTXML-SV-II-union-short-gYear-enumeration-2-4 tokoe:invalid" result="pass"/><test-case name="23152NISTXML-SV-II-union-short-gYear-enumeration-2-5 tokoe:invalid" result="pass"/><test-case name="23153NISTSchema-SV-II-union-short-gYear-enumeration-3 tokoe:valid" result="pass"/><test-case name="23154NISTXML-SV-II-union-short-gYear-enumeration-3-1 tokoe:invalid" result="pass"/><test-case name="23155NISTXML-SV-II-union-short-gYear-enumeration-3-2 tokoe:invalid" result="pass"/><test-case name="23156NISTXML-SV-II-union-short-gYear-enumeration-3-3 tokoe:invalid" result="pass"/><test-case name="23157NISTXML-SV-II-union-short-gYear-enumeration-3-4 tokoe:invalid" result="pass"/><test-case name="23158NISTXML-SV-II-union-short-gYear-enumeration-3-5 tokoe:invalid" result="pass"/><test-case name="23159NISTSchema-SV-II-union-short-gYear-enumeration-4 tokoe:valid" result="pass"/><test-case name="23160NISTXML-SV-II-union-short-gYear-enumeration-4-1 tokoe:invalid" result="pass"/><test-case name="23161NISTXML-SV-II-union-short-gYear-enumeration-4-2 tokoe:invalid" result="pass"/><test-case name="23162NISTXML-SV-II-union-short-gYear-enumeration-4-3 tokoe:invalid" result="pass"/><test-case name="23163NISTXML-SV-II-union-short-gYear-enumeration-4-4 tokoe:invalid" result="pass"/><test-case name="23164NISTXML-SV-II-union-short-gYear-enumeration-4-5 tokoe:invalid" result="pass"/><test-case name="23165NISTSchema-SV-II-union-short-gYear-enumeration-5 tokoe:valid" result="pass"/><test-case name="23166NISTXML-SV-II-union-short-gYear-enumeration-5-1 tokoe:invalid" result="pass"/><test-case name="23167NISTXML-SV-II-union-short-gYear-enumeration-5-2 tokoe:invalid" result="pass"/><test-case name="23168NISTXML-SV-II-union-short-gYear-enumeration-5-3 tokoe:invalid" result="pass"/><test-case name="23169NISTXML-SV-II-union-short-gYear-enumeration-5-4 tokoe:invalid" result="pass"/><test-case name="23170NISTXML-SV-II-union-short-gYear-enumeration-5-5 tokoe:invalid" result="pass"/><test-case name="23171test tokoe:valid" result="pass"/><test-case name="23172test.1.v tokoe:valid" result="pass"/><test-case name="23173test.2.n tokoe:invalid" result="pass"/><test-case name="23174test tokoe:valid" result="pass"/><test-case name="23175test.1.v tokoe:valid" result="pass"/><test-case name="23176test.2.n tokoe:invalid" result="pass"/><test-case name="23177test.3.n tokoe:invalid" result="pass"/><test-case name="23178test.4.n tokoe:invalid" result="pass"/><test-case name="23179test.5.n tokoe:invalid" result="pass"/><test-case name="23180test tokoe:valid" result="pass"/><test-case name="23181test.1.v tokoe:valid" result="pass"/><test-case name="23182test.2.n tokoe:invalid" result="pass"/><test-case name="23183test.3.n tokoe:invalid" result="pass"/><test-case name="23184test.4.n tokoe:invalid" result="pass"/><test-case name="23185test.5.n tokoe:invalid" result="pass"/><test-case name="23186test tokoe:valid" result="pass"/><test-case name="23187test.1.v tokoe:valid" result="pass"/><test-case name="23188test.2.n tokoe:invalid" result="pass"/><test-case name="23189test.3.n tokoe:invalid" result="pass"/><test-case name="23190test.4.n tokoe:invalid" result="pass"/><test-case name="23191test.5.n tokoe:invalid" result="pass"/><test-case name="23192test tokoe:valid" result="pass"/><test-case name="23193test.1.v tokoe:valid" result="pass"/><test-case name="23194test.2.n tokoe:invalid" result="pass"/><test-case name="23195test.3.n tokoe:invalid" result="pass"/><test-case name="23196test.4.n tokoe:invalid" result="pass"/><test-case name="23197test.5.n tokoe:invalid" result="pass"/><test-case name="23198test tokoe:valid" result="pass"/><test-case name="23199test.1.v tokoe:valid" result="pass"/><test-case name="23200test.10.n tokoe:invalid" result="pass"/><test-case name="23201test.11.n tokoe:invalid" result="pass"/><test-case name="23202test.12.n tokoe:invalid" result="pass"/><test-case name="23203test.13.n tokoe:invalid" result="pass"/><test-case name="23204test.14.n tokoe:invalid" result="pass"/><test-case name="23205test.15.n tokoe:invalid" result="pass"/><test-case name="23206test.16.n tokoe:invalid" result="pass"/><test-case name="23207test.17.n tokoe:invalid" result="pass"/><test-case name="23208test.18.n tokoe:invalid" result="pass"/><test-case name="23209test.19.n tokoe:invalid" result="pass"/><test-case name="23210test.2.v tokoe:valid" result="pass"/><test-case name="23211test.20.n tokoe:invalid" result="pass"/><test-case name="23212test.21.n tokoe:invalid" result="pass"/><test-case name="23213test.22.n tokoe:invalid" result="pass"/><test-case name="23214test.23.n tokoe:invalid" result="pass"/><test-case name="23215test.24.n tokoe:invalid" result="pass"/><test-case name="23216test.25.n tokoe:invalid" result="pass"/><test-case name="23217test.26.n tokoe:invalid" result="pass"/><test-case name="23218test.27.n tokoe:invalid" result="pass"/><test-case name="23219test.28.n tokoe:invalid" result="pass"/><test-case name="23220test.29.n tokoe:invalid" result="pass"/><test-case name="23221test.3.n tokoe:invalid" result="pass"/><test-case name="23222test.30.n tokoe:invalid" result="pass"/><test-case name="23223test.31.n tokoe:invalid" result="pass"/><test-case name="23224test.32.n tokoe:invalid" result="pass"/><test-case name="23225test.33.n tokoe:invalid" result="pass"/><test-case name="23226test.34.n tokoe:invalid" result="pass"/><test-case name="23227test.4.n tokoe:invalid" result="pass"/><test-case name="23228test.5.n tokoe:invalid" result="pass"/><test-case name="23229test.6.n tokoe:invalid" result="pass"/><test-case name="23230test.7.n tokoe:invalid" result="pass"/><test-case name="23231test.8.n tokoe:invalid" result="pass"/><test-case name="23232test.9.n tokoe:invalid" result="pass"/><test-case name="23233test tokoe:valid" result="pass"/><test-case name="23234test.1.v tokoe:valid" result="pass"/><test-case name="23235test.6.v tokoe:valid" result="pass"/><test-case name="23236test.2.n tokoe:invalid" result="pass"/><test-case name="23237test.3.n tokoe:invalid" result="pass"/><test-case name="23238test.4.n tokoe:invalid" result="pass"/><test-case name="23239test.5.n tokoe:invalid" result="pass"/><test-case name="23240test.7.n tokoe:invalid" result="pass"/><test-case name="23241test.8.n tokoe:invalid" result="pass"/><test-case name="23242test tokoe:valid" result="pass"/><test-case name="23243test.1.n tokoe:invalid" result="pass"/><test-case name="23244test.10.n tokoe:invalid" result="pass"/><test-case name="23245test.11.n tokoe:invalid" result="pass"/><test-case name="23246test.12.n tokoe:invalid" result="pass"/><test-case name="23247test.5.n tokoe:invalid" result="pass"/><test-case name="23248test.7.n tokoe:invalid" result="pass"/><test-case name="23249test.8.n tokoe:invalid" result="pass"/><test-case name="23250test.9.n tokoe:invalid" result="pass"/><test-case name="23251test.2.v tokoe:valid" result="pass"/><test-case name="23252test.3.v tokoe:valid" result="pass"/><test-case name="23253test.4.v tokoe:valid" result="pass"/><test-case name="23254test.6.v tokoe:valid" result="pass"/><test-case name="23255test tokoe:valid" result="pass"/><test-case name="23256test.13.n tokoe:invalid" result="pass"/><test-case name="23257test.8.n tokoe:invalid" result="pass"/><test-case name="23258test.1.v tokoe:valid" result="pass"/><test-case name="23259test.10.v tokoe:valid" result="pass"/><test-case name="23260test.11.v tokoe:valid" result="pass"/><test-case name="23261test.12.v tokoe:valid" result="pass"/><test-case name="23262test.2.v tokoe:valid" result="pass"/><test-case name="23263test.3.v tokoe:valid" result="pass"/><test-case name="23264test.4.v tokoe:valid" result="pass"/><test-case name="23265test.5.v tokoe:valid" result="pass"/><test-case name="23266test.6.v tokoe:valid" result="pass"/><test-case name="23267test.7.v tokoe:valid" result="pass"/><test-case name="23268test.9.v tokoe:valid" result="pass"/><test-case name="23269test tokoe:valid" result="pass"/><test-case name="23270test.1.v tokoe:valid" result="pass"/><test-case name="23271test.2.n tokoe:invalid" result="pass"/><test-case name="23272test tokoe:valid" result="pass"/><test-case name="23273test.1.v tokoe:valid" result="pass"/><test-case name="23274test.2.v tokoe:valid" result="pass"/><test-case name="23275test.3.n tokoe:invalid" result="pass"/><test-case name="23276test tokoe:valid" result="pass"/><test-case name="23277test.1.v tokoe:valid" result="pass"/><test-case name="23278test.2.v tokoe:valid" result="pass"/><test-case name="23279test.3.n tokoe:invalid" result="pass"/><test-case name="23280test tokoe:valid" result="pass"/><test-case name="23281test.1.v tokoe:valid" result="pass"/><test-case name="23282test.2.n tokoe:invalid" result="pass"/><test-case name="23283test.3.n tokoe:invalid" result="pass"/><test-case name="23284idc001.nogen tokoe:valid" result="pass"/><test-case name="23285idc001.nogen.n00 tokoe:invalid" result="pass"/><test-case name="23286idc001.nogen.v00 tokoe:valid" result="pass"/><test-case name="23287idc001.nogen.v01 tokoe:valid" result="pass"/><test-case name="23288idc002.e tokoe:invalid" result="pass"/><test-case name="23289idc002b.e tokoe:invalid" result="pass"/><test-case name="23290idc003.e tokoe:invalid" result="pass"/><test-case name="23291idc004.nogen tokoe:valid" result="pass"/><test-case name="23292idc004.nogen.n00 tokoe:invalid" result="pass"/><test-case name="23293idc004.nogen.n01 tokoe:invalid" result="pass"/><test-case name="23294idc004.nogen.n02 tokoe:invalid" result="pass"/><test-case name="23295idc004.nogen.n03 tokoe:invalid" result="pass"/><test-case name="23296idc004.nogen.v00 tokoe:valid" result="pass"/><test-case name="23297idc004a.e tokoe:invalid" result="pass"/><test-case name="23298idc005.nogen tokoe:valid" result="pass"/><test-case name="23299idc005.nogen.n00 tokoe:invalid" result="pass"/><test-case name="23300idc005.nogen.n01 tokoe:invalid" result="pass"/><test-case name="23301idc005.nogen.v00 tokoe:valid" result="pass"/><test-case name="23302idc006.nogen tokoe:valid" result="pass"/><test-case name="23303idc006.nogen.n00 tokoe:invalid" result="pass"/><test-case name="23304idc006.nogen.n01 tokoe:invalid" result="pass"/><test-case name="23305idc006.nogen.v00 tokoe:valid" result="pass"/><test-case name="23306xsd001 tokoe:valid" result="pass"/><test-case name="23307xsd001.n00 tokoe:invalid" result="pass"/><test-case name="23308xsd001.n01 tokoe:invalid" result="pass"/><test-case name="23309xsd001.n02 tokoe:invalid" result="pass"/><test-case name="23310xsd001.n03 tokoe:invalid" result="pass"/><test-case name="23311xsd001.n04 tokoe:invalid" result="pass"/><test-case name="23312xsd001.n05 tokoe:invalid" result="pass"/><test-case name="23313xsd001.n06 tokoe:invalid" result="pass"/><test-case name="23314xsd001.n07 tokoe:invalid" result="pass"/><test-case name="23315xsd001.v00 tokoe:valid" result="pass"/><test-case name="23316xsd001.v01 tokoe:valid" result="pass"/><test-case name="23317xsd001.v02 tokoe:valid" result="pass"/><test-case name="23318xsd001.v03 tokoe:valid" result="pass"/><test-case name="23319xsd002 tokoe:valid" result="pass"/><test-case name="23320xsd002.n00 tokoe:invalid" result="pass"/><test-case name="23321xsd002.n01 tokoe:invalid" result="pass"/><test-case name="23322xsd002.n02 tokoe:invalid" result="pass"/><test-case name="23323xsd002.v00 tokoe:valid" result="pass"/><test-case name="23324xsd002.v01 tokoe:valid" result="pass"/><test-case name="23325xsd003-1.e tokoe:invalid" result="pass"/><test-case name="23326xsd003-2.e tokoe:invalid" result="pass"/><test-case name="23327xsd003a tokoe:valid" result="pass"/><test-case name="23328xsd003a.v00 tokoe:valid" result="pass"/><test-case name="23329xsd003b.e tokoe:invalid" result="pass"/><test-case name="23330xsd003b tokoe:valid" result="pass"/><test-case name="23331xsd003b.n00 tokoe:invalid" result="pass"/><test-case name="23332xsd003b.n01 tokoe:invalid" result="pass"/><test-case name="23333xsd003b.v00 tokoe:valid" result="pass"/><test-case name="23334xsd003b.v01 tokoe:valid" result="pass"/><test-case name="23335xsd004 tokoe:valid" result="pass"/><test-case name="23336xsd004.n00 tokoe:invalid" result="pass"/><test-case name="23337xsd004.n01 tokoe:invalid" result="pass"/><test-case name="23338xsd004.n02 tokoe:invalid" result="pass"/><test-case name="23339xsd004.n03 tokoe:invalid" result="pass"/><test-case name="23340xsd004.n04 tokoe:invalid" result="pass"/><test-case name="23341xsd004.n05 tokoe:invalid" result="pass"/><test-case name="23342xsd004.n06 tokoe:invalid" result="pass"/><test-case name="23343xsd004.n07 tokoe:invalid" result="pass"/><test-case name="23344xsd004.n08 tokoe:invalid" result="pass"/><test-case name="23345xsd004.n09 tokoe:invalid" result="pass"/><test-case name="23346xsd004.n10 tokoe:invalid" result="pass"/><test-case name="23347xsd004.n11 tokoe:invalid" result="pass"/><test-case name="23348xsd004.n12 tokoe:invalid" result="pass"/><test-case name="23349xsd004.v00 tokoe:valid" result="pass"/><test-case name="23350xsd005 tokoe:valid" result="pass"/><test-case name="23351xsd005.n00 tokoe:invalid" result="pass"/><test-case name="23352xsd005.n01 tokoe:invalid" result="pass"/><test-case name="23353xsd005.n02 tokoe:invalid" result="pass"/><test-case name="23354xsd005.n03 tokoe:invalid" result="pass"/><test-case name="23355xsd005.n04 tokoe:invalid" result="pass"/><test-case name="23356xsd005.n05 tokoe:invalid" result="pass"/><test-case name="23357xsd005.n06 tokoe:invalid" result="pass"/><test-case name="23358xsd005.v00 tokoe:valid" result="pass"/><test-case name="23359xsd006 tokoe:valid" result="pass"/><test-case name="23360xsd006.n00 tokoe:invalid" result="pass"/><test-case name="23361xsd006.n01 tokoe:invalid" result="pass"/><test-case name="23362xsd006.n02 tokoe:invalid" result="pass"/><test-case name="23363xsd006.n03 tokoe:invalid" result="pass"/><test-case name="23364xsd006.n04 tokoe:invalid" result="pass"/><test-case name="23365xsd006.n05 tokoe:invalid" result="pass"/><test-case name="23366xsd006.n06 tokoe:invalid" result="pass"/><test-case name="23367xsd006.n07 tokoe:invalid" result="pass"/><test-case name="23368xsd006.n08 tokoe:invalid" result="pass"/><test-case name="23369xsd006.n09 tokoe:invalid" result="pass"/><test-case name="23370xsd006.n10 tokoe:invalid" result="pass"/><test-case name="23371xsd006.n11 tokoe:invalid" result="pass"/><test-case name="23372xsd006.v00 tokoe:valid" result="pass"/><test-case name="23373xsd007.e tokoe:invalid" result="pass"/><test-case name="23374xsd008 tokoe:valid" result="pass"/><test-case name="23375xsd008.n00 tokoe:invalid" result="pass"/><test-case name="23376xsd008.n01 tokoe:invalid" result="pass"/><test-case name="23377xsd008.n02 tokoe:invalid" result="pass"/><test-case name="23378xsd008.v00 tokoe:valid" result="pass"/><test-case name="23379xsd009.e tokoe:invalid" result="pass"/><test-case name="23380xsd010.e tokoe:invalid" result="pass"/><test-case name="23381xsd011 tokoe:valid" result="pass"/><test-case name="23382xsd011.n00 tokoe:invalid" result="pass"/><test-case name="23383xsd011.n01 tokoe:invalid" result="pass"/><test-case name="23384xsd011.n02 tokoe:invalid" result="pass"/><test-case name="23385xsd011.n03 tokoe:invalid" result="pass"/><test-case name="23386xsd011.n04 tokoe:invalid" result="pass"/><test-case name="23387xsd011.v00 tokoe:valid" result="pass"/><test-case name="23388xsd012 tokoe:valid" result="pass"/><test-case name="23389xsd012.n00 tokoe:invalid" result="pass"/><test-case name="23390xsd012.v00 tokoe:valid" result="pass"/><test-case name="23391xsd013.e tokoe:invalid" result="pass"/><test-case name="23392xsd014.e tokoe:invalid" result="pass"/><test-case name="23393xsd015.e tokoe:invalid" result="pass"/><test-case name="23394xsd016.e tokoe:invalid" result="pass"/><test-case name="23395xsd017.e tokoe:invalid" result="pass"/><test-case name="23396xsd018.e tokoe:invalid" result="pass"/><test-case name="23397xsd019.e tokoe:invalid" result="pass"/><test-case name="23398xsd020-2.e tokoe:invalid" result="pass"/><test-case name="23399xsd020-3.e tokoe:invalid" result="pass"/><test-case name="23400xsd020-4.e tokoe:invalid" result="pass"/><test-case name="23401xsd020.e tokoe:invalid" result="pass"/><test-case name="23402xsd021 tokoe:valid" result="pass"/><test-case name="23403xsd021.n00 tokoe:invalid" result="pass"/><test-case name="23404xsd021.n01 tokoe:invalid" result="pass"/><test-case name="23405xsd021.n02 tokoe:invalid" result="pass"/><test-case name="23406xsd021.n03 tokoe:invalid" result="pass"/><test-case name="23407xsd021.n04 tokoe:invalid" result="pass"/><test-case name="23408xsd021.n05 tokoe:invalid" result="pass"/><test-case name="23409xsd021.n06 tokoe:invalid" result="pass"/><test-case name="23410xsd021.n07 tokoe:invalid" result="pass"/><test-case name="23411xsd021.n08 tokoe:invalid" result="pass"/><test-case name="23412xsd021.n09 tokoe:invalid" result="pass"/><test-case name="23413xsd021.n10 tokoe:invalid" result="pass"/><test-case name="23414xsd021.n11 tokoe:invalid" result="pass"/><test-case name="23415xsd021.v00 tokoe:valid" result="pass"/><test-case name="23416xsd022 tokoe:valid" result="pass"/><test-case name="23417xsd022.n00 tokoe:invalid" result="pass"/><test-case name="23418xsd022.v00 tokoe:valid" result="pass"/><test-case name="23419xsd023.e tokoe:invalid" result="pass"/><test-case name="23420xsd024 tokoe:valid" result="pass"/><test-case name="23421xsd024.v00 tokoe:valid" result="pass"/><test-case name="23422AG_attrUseNS00101m1_p tokoe:valid" result="pass"/><test-case name="23423Positive tokoe:valid" result="pass"/><test-case name="23424AG_attrUseNS00101m1_n tokoe:invalid" result="pass"/><test-case name="23425AG_attrWCard00101m1 tokoe:valid" result="pass"/><test-case name="23426Positive tokoe:valid" result="pass"/><test-case name="23427AG_name00101m1_p tokoe:valid" result="pass"/><test-case name="23428Positive tokoe:valid" result="pass"/><test-case name="23429AG_name00101m1_n tokoe:invalid" result="pass"/><test-case name="23430AG_targetNS00101m1_p tokoe:valid" result="pass"/><test-case name="23431Positive tokoe:valid" result="pass"/><test-case name="23432AG_targetNS00101m1_n tokoe:invalid" result="pass"/><test-case name="23433annotation00101m1 tokoe:valid" result="pass"/><test-case name="23434Positive tokoe:valid" result="pass"/><test-case name="23435annotation00101m2 tokoe:invalid" result="pass"/><test-case name="23436annotation00101m3 tokoe:invalid" result="pass"/><test-case name="23437annotation00101m4 tokoe:valid" result="pass"/><test-case name="23438Positive tokoe:valid" result="pass"/><test-case name="23439annotation00101m5 tokoe:invalid" result="pass"/><test-case name="23440annotation00101m6 tokoe:invalid" result="pass"/><test-case name="23441AD_annotation00101m1 tokoe:valid" result="pass"/><test-case name="23442Positive tokoe:valid" result="pass"/><test-case name="23443AD_annotation00101m2 tokoe:valid" result="pass"/><test-case name="23444Positive tokoe:valid" result="pass"/><test-case name="23445AD_name00101m1 tokoe:valid" result="pass"/><test-case name="23446Positive tokoe:valid" result="pass"/><test-case name="23447Negative tokoe:invalid" result="pass"/><test-case name="23448AD_name00101m2 tokoe:valid" result="pass"/><test-case name="23449Positive tokoe:valid" result="pass"/><test-case name="23450Negative tokoe:invalid" result="pass"/><test-case name="23451AD_name00101m3 tokoe:valid" result="pass"/><test-case name="23452Positive tokoe:valid" result="pass"/><test-case name="23453Negative tokoe:invalid" result="pass"/><test-case name="23454AD_name00101m4 tokoe:valid" result="pass"/><test-case name="23455Positive tokoe:valid" result="pass"/><test-case name="23456Negative tokoe:invalid" result="pass"/><test-case name="23457AD_name00102m1 tokoe:valid" result="pass"/><test-case name="23458Positive tokoe:valid" result="pass"/><test-case name="23459AD_name00103m1 tokoe:valid" result="pass"/><test-case name="23460Positive tokoe:valid" result="pass"/><test-case name="23461AD_name00103m2 tokoe:valid" result="pass"/><test-case name="23462Positive tokoe:valid" result="pass"/><test-case name="23463AD_name00104m1 tokoe:valid" result="pass"/><test-case name="23464Positive tokoe:valid" result="pass"/><test-case name="23465AD_name00104m10 tokoe:valid" result="pass"/><test-case name="23466Positive tokoe:valid" result="pass"/><test-case name="23467AD_name00104m11 tokoe:valid" result="pass"/><test-case name="23468Positive tokoe:valid" result="pass"/><test-case name="23469AD_name00104m12 tokoe:valid" result="pass"/><test-case name="23470Positive tokoe:valid" result="pass"/><test-case name="23471AD_name00104m13 tokoe:valid" result="pass"/><test-case name="23472Positive tokoe:valid" result="pass"/><test-case name="23473AD_name00104m14 tokoe:valid" result="pass"/><test-case name="23474Positive tokoe:valid" result="pass"/><test-case name="23475AD_name00104m15 tokoe:valid" result="pass"/><test-case name="23476Positive tokoe:valid" result="pass"/><test-case name="23477AD_name00104m16 tokoe:valid" result="pass"/><test-case name="23478Positive tokoe:valid" result="pass"/><test-case name="23479AD_name00104m17 tokoe:valid" result="pass"/><test-case name="23480Positive tokoe:valid" result="pass"/><test-case name="23481AD_name00104m18 tokoe:valid" result="pass"/><test-case name="23482Positive tokoe:valid" result="pass"/><test-case name="23483AD_name00104m19 tokoe:valid" result="pass"/><test-case name="23484Positive tokoe:valid" result="pass"/><test-case name="23485AD_name00104m2 tokoe:valid" result="pass"/><test-case name="23486Positive tokoe:valid" result="pass"/><test-case name="23487AD_name00104m20 tokoe:valid" result="pass"/><test-case name="23488Positive tokoe:valid" result="pass"/><test-case name="23489AD_name00104m21 tokoe:valid" result="pass"/><test-case name="23490Positive tokoe:valid" result="pass"/><test-case name="23491AD_name00104m3 tokoe:valid" result="pass"/><test-case name="23492Positive tokoe:valid" result="pass"/><test-case name="23493AD_name00104m4 tokoe:valid" result="pass"/><test-case name="23494Positive tokoe:valid" result="pass"/><test-case name="23495AD_name00104m5 tokoe:valid" result="pass"/><test-case name="23496Positive tokoe:valid" result="pass"/><test-case name="23497AD_name00104m6 tokoe:valid" result="pass"/><test-case name="23498Positive tokoe:valid" result="pass"/><test-case name="23499AD_name00104m7 tokoe:valid" result="pass"/><test-case name="23500Positive tokoe:valid" result="pass"/><test-case name="23501AD_name00104m8 tokoe:valid" result="pass"/><test-case name="23502Positive tokoe:valid" result="pass"/><test-case name="23503AD_name00104m9 tokoe:valid" result="pass"/><test-case name="23504Positive tokoe:valid" result="pass"/><test-case name="23505AD_name00105m1 tokoe:valid" result="pass"/><test-case name="23506Positive tokoe:valid" result="pass"/><test-case name="23507AD_name00106m1 tokoe:valid" result="pass"/><test-case name="23508Positive tokoe:valid" result="pass"/><test-case name="23509AD_name00107m1 tokoe:valid" result="pass"/><test-case name="23510Positive tokoe:valid" result="pass"/><test-case name="23511AD_name00108m1 tokoe:valid" result="pass"/><test-case name="23512Positive tokoe:valid" result="pass"/><test-case name="23513AD_name00108m10 tokoe:valid" result="pass"/><test-case name="23514Positive tokoe:valid" result="pass"/><test-case name="23515AD_name00108m11 tokoe:valid" result="pass"/><test-case name="23516Positive tokoe:valid" result="pass"/><test-case name="23517AD_name00108m12 tokoe:valid" result="pass"/><test-case name="23518Positive tokoe:valid" result="pass"/><test-case name="23519AD_name00108m13 tokoe:valid" result="pass"/><test-case name="23520Positive tokoe:valid" result="pass"/><test-case name="23521AD_name00108m14 tokoe:valid" result="pass"/><test-case name="23522Positive tokoe:valid" result="pass"/><test-case name="23523AD_name00108m15 tokoe:valid" result="pass"/><test-case name="23524Positive tokoe:valid" result="pass"/><test-case name="23525AD_name00108m16 tokoe:valid" result="pass"/><test-case name="23526Positive tokoe:valid" result="pass"/><test-case name="23527AD_name00108m17 tokoe:valid" result="pass"/><test-case name="23528Positive tokoe:valid" result="pass"/><test-case name="23529AD_name00108m18 tokoe:valid" result="pass"/><test-case name="23530Positive tokoe:valid" result="pass"/><test-case name="23531AD_name00108m19 tokoe:valid" result="pass"/><test-case name="23532Positive tokoe:valid" result="pass"/><test-case name="23533AD_name00108m2 tokoe:valid" result="pass"/><test-case name="23534Positive tokoe:valid" result="pass"/><test-case name="23535AD_name00108m20 tokoe:valid" result="pass"/><test-case name="23536Positive tokoe:valid" result="pass"/><test-case name="23537AD_name00108m21 tokoe:valid" result="pass"/><test-case name="23538Positive tokoe:valid" result="pass"/><test-case name="23539AD_name00108m3 tokoe:valid" result="pass"/><test-case name="23540Positive tokoe:valid" result="pass"/><test-case name="23541AD_name00108m4 tokoe:valid" result="pass"/><test-case name="23542Positive tokoe:valid" result="pass"/><test-case name="23543AD_name00108m5 tokoe:valid" result="pass"/><test-case name="23544Positive tokoe:valid" result="pass"/><test-case name="23545AD_name00108m6 tokoe:valid" result="pass"/><test-case name="23546Positive tokoe:valid" result="pass"/><test-case name="23547AD_name00108m7 tokoe:valid" result="pass"/><test-case name="23548Positive tokoe:valid" result="pass"/><test-case name="23549AD_name00108m8 tokoe:valid" result="pass"/><test-case name="23550Positive tokoe:valid" result="pass"/><test-case name="23551AD_name00108m9 tokoe:valid" result="pass"/><test-case name="23552Positive tokoe:valid" result="pass"/><test-case name="23553AD_name00109m1 tokoe:valid" result="pass"/><test-case name="23554Positive tokoe:valid" result="pass"/><test-case name="23555AD_name00109m2 tokoe:valid" result="pass"/><test-case name="23556Positive tokoe:valid" result="pass"/><test-case name="23557AD_name00110m1 tokoe:valid" result="pass"/><test-case name="23558Positive tokoe:valid" result="pass"/><test-case name="23559AD_name00110m10 tokoe:valid" result="pass"/><test-case name="23560Positive tokoe:valid" result="pass"/><test-case name="23561AD_name00110m2 tokoe:valid" result="pass"/><test-case name="23562Positive tokoe:valid" result="pass"/><test-case name="23563AD_name00110m3 tokoe:valid" result="pass"/><test-case name="23564Positive tokoe:valid" result="pass"/><test-case name="23565AD_name00110m4 tokoe:valid" result="pass"/><test-case name="23566Positive tokoe:valid" result="pass"/><test-case name="23567AD_name00110m5 tokoe:valid" result="pass"/><test-case name="23568Positive tokoe:valid" result="pass"/><test-case name="23569AD_name00110m6 tokoe:valid" result="pass"/><test-case name="23570Positive tokoe:valid" result="pass"/><test-case name="23571AD_name00110m7 tokoe:valid" result="pass"/><test-case name="23572Positive tokoe:valid" result="pass"/><test-case name="23573AD_name00110m8 tokoe:valid" result="pass"/><test-case name="23574Positive tokoe:valid" result="pass"/><test-case name="23575AD_name00110m9 tokoe:valid" result="pass"/><test-case name="23576Positive tokoe:valid" result="pass"/><test-case name="23577AD_name00111 tokoe:valid" result="pass"/><test-case name="23578AD_name00111_p tokoe:valid" result="pass"/><test-case name="23579AD_name00112 tokoe:valid" result="pass"/><test-case name="23580AD_name00112_p tokoe:valid" result="pass"/><test-case name="23581AD_name00113 tokoe:valid" result="pass"/><test-case name="23582AD_name00113_p tokoe:valid" result="pass"/><test-case name="23583AD_name00114 tokoe:valid" result="pass"/><test-case name="23584AD_name00114_p tokoe:valid" result="pass"/><test-case name="23585AD_name00115 tokoe:valid" result="pass"/><test-case name="23586AD_name00115_p tokoe:valid" result="pass"/><test-case name="23587AD_name00118 tokoe:valid" result="pass"/><test-case name="23588AD_name00118_p tokoe:valid" result="pass"/><test-case name="23589AD_scope00101m1 tokoe:valid" result="pass"/><test-case name="23590Positive tokoe:valid" result="pass"/><test-case name="23591AD_scope00101m2 tokoe:invalid" result="pass"/><test-case name="23592AD_targetNS00101m tokoe:valid" result="pass"/><test-case name="23593AD_targetNS00101m1_p tokoe:valid" result="pass"/><test-case name="23594AD_targetNS00101m1_n tokoe:invalid" result="pass"/><test-case name="23595AD_targetNS00101m2_n tokoe:invalid" result="pass"/><test-case name="23596AD_targetNS00101m3_p tokoe:valid" result="pass"/><test-case name="23597AD_targetNS00101m3_n tokoe:invalid" result="pass"/><test-case name="23598AD_type00101m tokoe:valid" result="pass"/><test-case name="23599AD_type00101m1_p tokoe:valid" result="pass"/><test-case name="23600AD_type00101m1_n tokoe:invalid" result="pass"/><test-case name="23601AD_type00101m2_p tokoe:valid" result="pass"/><test-case name="23602AD_type00101m2_n tokoe:invalid" result="pass"/><test-case name="23603AD_type00102m tokoe:valid" result="pass"/><test-case name="23604AD_type00102m1_p tokoe:valid" result="pass"/><test-case name="23605AD_type00102m1_n tokoe:invalid" result="pass"/><test-case name="23606AD_type00102m2_p tokoe:valid" result="pass"/><test-case name="23607AD_type00102m2_n tokoe:invalid" result="pass"/><test-case name="23608AD_valConstr00101m tokoe:valid" result="pass"/><test-case name="23609AD_valConstr00101m1_p tokoe:valid" result="pass"/><test-case name="23610AD_valConstr00101m1_n tokoe:invalid" result="pass"/><test-case name="23611AD_valConstr00101m2_p tokoe:valid" result="pass"/><test-case name="23612AD_valConstr00101m2_n tokoe:invalid" result="pass"/><test-case name="23613AD_valConstr00201m1 tokoe:invalid" result="pass"/><test-case name="23614AD_valConstr00201m2 tokoe:invalid" result="pass"/><test-case name="23615AD_valConstr00201m3 tokoe:valid" result="pass"/><test-case name="23616Positive tokoe:valid" result="pass"/><test-case name="23617AD_valConstr00201m4 tokoe:invalid" result="pass"/><test-case name="23618AD_valConstr00201m5 tokoe:invalid" result="pass"/><test-case name="23619AU_attrDecl00101m1_p tokoe:valid" result="pass"/><test-case name="23620Positive tokoe:valid" result="pass"/><test-case name="23621AU_attrDecl00101m1_n tokoe:invalid" result="pass"/><test-case name="23622AU_required00101m1 tokoe:valid" result="pass"/><test-case name="23623Positive tokoe:valid" result="pass"/><test-case name="23624Negative tokoe:invalid" result="pass"/><test-case name="23625AU_valConstr00101m1 tokoe:valid" result="pass"/><test-case name="23626Positive tokoe:valid" result="pass"/><test-case name="23627Negative tokoe:invalid" result="pass"/><test-case name="23628abstract00101m1 tokoe:valid" result="pass"/><test-case name="23629Positive tokoe:valid" result="pass"/><test-case name="23630Negative tokoe:invalid" result="pass"/><test-case name="23631abstract00101m2 tokoe:valid" result="pass"/><test-case name="23632Negative tokoe:invalid" result="pass"/><test-case name="23633annotation00101m1 tokoe:valid" result="pass"/><test-case name="23634Positive tokoe:valid" result="pass"/><test-case name="23635annotation00101m2 tokoe:valid" result="pass"/><test-case name="23636Positive tokoe:valid" result="pass"/><test-case name="23637annotation00101m3 tokoe:invalid" result="pass"/><test-case name="23638annotation00101m4 tokoe:invalid" result="pass"/><test-case name="23639attrWildcard00101m1 tokoe:valid" result="pass"/><test-case name="23640Positive tokoe:valid" result="pass"/><test-case name="23641attributeUses00101m1 tokoe:valid" result="pass"/><test-case name="23642Positive tokoe:valid" result="pass"/><test-case name="23643Negative tokoe:invalid" result="pass"/><test-case name="23644baseTD00101m1 tokoe:valid" result="pass"/><test-case name="23645Positive tokoe:valid" result="pass"/><test-case name="23646Negative tokoe:invalid" result="pass"/><test-case name="23647baseTD00101m2 tokoe:valid" result="pass"/><test-case name="23648Positive tokoe:valid" result="pass"/><test-case name="23649Negative tokoe:invalid" result="pass"/><test-case name="23650baseTD00101m3 tokoe:valid" result="pass"/><test-case name="23651Positive tokoe:valid" result="pass"/><test-case name="23652Negative tokoe:invalid" result="pass"/><test-case name="23653baseTD00101m4 tokoe:valid" result="pass"/><test-case name="23654Positive tokoe:valid" result="pass"/><test-case name="23655Negative tokoe:invalid" result="pass"/><test-case name="23656contentType00101m tokoe:valid" result="pass"/><test-case name="23657contentType00101m1_p tokoe:valid" result="pass"/><test-case name="23658contentType00101m1_n tokoe:invalid" result="pass"/><test-case name="23659contentType00201m tokoe:valid" result="pass"/><test-case name="23660contentType00201m1_p tokoe:valid" result="pass"/><test-case name="23661contentType00201m1_n tokoe:invalid" result="pass"/><test-case name="23662contentType00301m tokoe:valid" result="pass"/><test-case name="23663contentType00301m1_p tokoe:valid" result="pass"/><test-case name="23664contentType00301m1_n tokoe:invalid" result="pass"/><test-case name="23665contentType00401m tokoe:valid" result="pass"/><test-case name="23666contentType00401m1_p tokoe:valid" result="pass"/><test-case name="23667contentType00401m1_n tokoe:invalid" result="pass"/><test-case name="23668derivationMethod00101m1 tokoe:valid" result="pass"/><test-case name="23669Positive tokoe:valid" result="pass"/><test-case name="23670Negative tokoe:invalid" result="pass"/><test-case name="23671derivationMethod00101m2 tokoe:valid" result="pass"/><test-case name="23672Positive tokoe:valid" result="pass"/><test-case name="23673Negative tokoe:invalid" result="pass"/><test-case name="23674derivationMethod00102m1 tokoe:valid" result="pass"/><test-case name="23675Positive tokoe:valid" result="pass"/><test-case name="23676Negative tokoe:invalid" result="pass"/><test-case name="23677derivationMethod00102m2 tokoe:valid" result="pass"/><test-case name="23678Positive tokoe:valid" result="pass"/><test-case name="23679Negative tokoe:invalid" result="pass"/><test-case name="23680final00101m2 tokoe:invalid" result="pass"/><test-case name="23681final00101m3 tokoe:valid" result="pass"/><test-case name="23682Positive tokoe:valid" result="pass"/><test-case name="23683Negative tokoe:invalid" result="pass"/><test-case name="23684final00101m4 tokoe:invalid" result="pass"/><test-case name="23685final00101m5 tokoe:invalid" result="pass"/><test-case name="23686final00101m6 tokoe:invalid" result="pass"/><test-case name="23687name00101m tokoe:valid" result="pass"/><test-case name="23688name00101m1_p tokoe:valid" result="pass"/><test-case name="23689name00101m1_n tokoe:invalid" result="pass"/><test-case name="23690pSubstitutions00101m tokoe:valid" result="pass"/><test-case name="23691pSubstitutions00101m1_p tokoe:valid" result="pass"/><test-case name="23692pSubstitutions00101m1_n tokoe:invalid" result="pass"/><test-case name="23693pSubstitutions00101m2_p tokoe:valid" result="pass"/><test-case name="23694pSubstitutions00101m2_n tokoe:invalid" result="pass"/><test-case name="23695pSubstitutions00102m tokoe:valid" result="pass"/><test-case name="23696pSubstitutions00102m1_p tokoe:valid" result="pass"/><test-case name="23697pSubstitutions00102m1_n tokoe:invalid" result="pass"/><test-case name="23698pSubstitutions00102m2_p tokoe:valid" result="pass"/><test-case name="23699pSubstitutions00102m2_n tokoe:invalid" result="pass"/><test-case name="23700pSubstitutions00103m tokoe:valid" result="pass"/><test-case name="23701pSubstitutions00103m1_p tokoe:valid" result="pass"/><test-case name="23702pSubstitutions00103m1_n tokoe:invalid" result="pass"/><test-case name="23703pSubstitutions00103m2_p tokoe:valid" result="pass"/><test-case name="23704pSubstitutions00103m2_n tokoe:invalid" result="pass"/><test-case name="23705pSubstitutions00104m tokoe:valid" result="pass"/><test-case name="23706pSubstitutions00104m1_p tokoe:valid" result="pass"/><test-case name="23707pSubstitutions00104m1_n tokoe:invalid" result="pass"/><test-case name="23708pSubstitutions00104m2_p tokoe:valid" result="pass"/><test-case name="23709pSubstitutions00104m2_n tokoe:invalid" result="pass"/><test-case name="23710targetNS00101m tokoe:valid" result="pass"/><test-case name="23711targetNS00101m1_p tokoe:valid" result="pass"/><test-case name="23712targetNS00101m1_n tokoe:invalid" result="pass"/><test-case name="23713abstract00101m tokoe:valid" result="pass"/><test-case name="23714abstract00101m1_p tokoe:valid" result="pass"/><test-case name="23715abstract00101m1_n tokoe:invalid" result="pass"/><test-case name="23716abstract00201m1 tokoe:valid" result="pass"/><test-case name="23717Negative tokoe:invalid" result="pass"/><test-case name="23718abstract00201m2 tokoe:valid" result="pass"/><test-case name="23719Positive tokoe:valid" result="pass"/><test-case name="23720abstract00201m3 tokoe:valid" result="pass"/><test-case name="23721Positive tokoe:valid" result="pass"/><test-case name="23722annotation00101m1 tokoe:valid" result="pass"/><test-case name="23723Positive tokoe:valid" result="pass"/><test-case name="23724annotation00101m2 tokoe:invalid" result="pass"/><test-case name="23725annotation00101m3 tokoe:valid" result="pass"/><test-case name="23726Positive tokoe:valid" result="pass"/><test-case name="23727annotation00101m4 tokoe:invalid" result="pass"/><test-case name="23728disallowedSubst00101m tokoe:valid" result="pass"/><test-case name="23729disallowedSubst00101m1_p tokoe:valid" result="pass"/><test-case name="23730disallowedSubst00101m1_n tokoe:invalid" result="pass"/><test-case name="23731disallowedSubst00102m1 tokoe:valid" result="pass"/><test-case name="23732Positive tokoe:valid" result="pass"/><test-case name="23733disallowedSubst00102m2 tokoe:valid" result="pass"/><test-case name="23734Negative tokoe:invalid" result="pass"/><test-case name="23735disallowedSubst00105m tokoe:valid" result="pass"/><test-case name="23736disallowedSubst00105m1_p tokoe:valid" result="pass"/><test-case name="23737disallowedSubst00105m1_n tokoe:invalid" result="pass"/><test-case name="23738disallowedSubst00106m1 tokoe:valid" result="pass"/><test-case name="23739Positive tokoe:valid" result="pass"/><test-case name="23740disallowedSubst00106m2 tokoe:valid" result="pass"/><test-case name="23741Negative tokoe:invalid" result="pass"/><test-case name="23742disallowedSubst00202m1 tokoe:invalid" result="pass"/><test-case name="23743disallowedSubst00202m10 tokoe:invalid" result="pass"/><test-case name="23744disallowedSubst00202m11 tokoe:invalid" result="pass"/><test-case name="23745disallowedSubst00202m12 tokoe:valid" result="pass"/><test-case name="23746Positive tokoe:valid" result="pass"/><test-case name="23747disallowedSubst00202m2 tokoe:invalid" result="pass"/><test-case name="23748disallowedSubst00202m3 tokoe:invalid" result="pass"/><test-case name="23749disallowedSubst00202m4 tokoe:invalid" result="pass"/><test-case name="23750disallowedSubst00202m5 tokoe:invalid" result="pass"/><test-case name="23751disallowedSubst00202m6 tokoe:invalid" result="pass"/><test-case name="23752disallowedSubst00202m7 tokoe:invalid" result="pass"/><test-case name="23753disallowedSubst00202m8 tokoe:invalid" result="pass"/><test-case name="23754disallowedSubst00202m9 tokoe:invalid" result="pass"/><test-case name="23755disallowedSubst00301m1 tokoe:valid" result="pass"/><test-case name="23756Positive tokoe:valid" result="pass"/><test-case name="23757disallowedSubst00301m2 tokoe:valid" result="pass"/><test-case name="23758Negative tokoe:invalid" result="pass"/><test-case name="23759disallowedSubst00401m1 tokoe:valid" result="pass"/><test-case name="23760Positive tokoe:valid" result="pass"/><test-case name="23761disallowedSubst00401m2 tokoe:valid" result="pass"/><test-case name="23762Negative tokoe:invalid" result="pass"/><test-case name="23763disallowedSubst00501m1 tokoe:valid" result="pass"/><test-case name="23764Positive tokoe:valid" result="pass"/><test-case name="23765disallowedSubst00501m2 tokoe:valid" result="pass"/><test-case name="23766Negative tokoe:invalid" result="pass"/><test-case name="23767disallowedSubst00502m1 tokoe:valid" result="pass"/><test-case name="23768Positive tokoe:valid" result="pass"/><test-case name="23769disallowedSubst00502m2 tokoe:valid" result="pass"/><test-case name="23770Positive tokoe:valid" result="pass"/><test-case name="23771disallowedSubst00502m3 tokoe:valid" result="pass"/><test-case name="23772Negative tokoe:invalid" result="pass"/><test-case name="23773disallowedSubst00502m4 tokoe:valid" result="pass"/><test-case name="23774Negative tokoe:invalid" result="pass"/><test-case name="23775disallowedSubst00503m1 tokoe:valid" result="pass"/><test-case name="23776Positive tokoe:valid" result="pass"/><test-case name="23777disallowedSubst00503m2 tokoe:valid" result="pass"/><test-case name="23778Positive tokoe:valid" result="pass"/><test-case name="23779disallowedSubst00503m3 tokoe:valid" result="pass"/><test-case name="23780Negative tokoe:invalid" result="pass"/><test-case name="23781disallowedSubst00503m4 tokoe:valid" result="pass"/><test-case name="23782Negative tokoe:invalid" result="pass"/><test-case name="23783disallowedSubst00503m5 tokoe:valid" result="pass"/><test-case name="23784Negative tokoe:invalid" result="pass"/><test-case name="23785idConstrDefs00101m tokoe:valid" result="pass"/><test-case name="23786idConstrDefs00101m1_p tokoe:valid" result="pass"/><test-case name="23787idConstrDefs00101m1_n tokoe:invalid" result="pass"/><test-case name="23788idConstrDefs00201m tokoe:valid" result="pass"/><test-case name="23789idConstrDefs00201m1_p tokoe:valid" result="pass"/><test-case name="23790idConstrDefs00201m2_n tokoe:invalid" result="pass"/><test-case name="23791idConstrDefs00201m3_n tokoe:invalid" result="pass"/><test-case name="23792idConstrDefs00201m4_n tokoe:invalid" result="pass"/><test-case name="23793idConstrDefs00202m tokoe:valid" result="pass"/><test-case name="23794idConstrDefs00202m1_p tokoe:valid" result="pass"/><test-case name="23795idConstrDefs00202m1_n tokoe:invalid" result="pass"/><test-case name="23796idConstrDefs00203m tokoe:valid" result="pass"/><test-case name="23797idConstrDefs00203m1_p tokoe:valid" result="pass"/><test-case name="23798idConstrDefs00203m1_n tokoe:invalid" result="pass"/><test-case name="23799idConstrDefs00204m tokoe:valid" result="pass"/><test-case name="23800idConstrDefs00204m1_p tokoe:valid" result="pass"/><test-case name="23801idConstrDefs00204m1_n tokoe:invalid" result="pass"/><test-case name="23802idConstrDefs00301m tokoe:valid" result="pass"/><test-case name="23803idConstrDefs00301m1_p tokoe:valid" result="pass"/><test-case name="23804idConstrDefs00301m2_n tokoe:invalid" result="pass"/><test-case name="23805idConstrDefs00301m3_n tokoe:invalid" result="pass"/><test-case name="23806idConstrDefs00301m4_n tokoe:invalid" result="pass"/><test-case name="23807idConstrDefs00302m tokoe:valid" result="pass"/><test-case name="23808idConstrDefs00302m1_p tokoe:valid" result="pass"/><test-case name="23809idConstrDefs00302m2_n tokoe:invalid" result="pass"/><test-case name="23810idConstrDefs00302m3_n tokoe:invalid" result="pass"/><test-case name="23811idConstrDefs00302m4_n tokoe:invalid" result="pass"/><test-case name="23812idConstrDefs00401m tokoe:valid" result="pass"/><test-case name="23813idConstrDefs00401m1_p tokoe:valid" result="pass"/><test-case name="23814idConstrDefs00402m tokoe:valid" result="pass"/><test-case name="23815idConstrDefs00402m1_p tokoe:valid" result="pass"/><test-case name="23816idConstrDefs00402m1_n tokoe:invalid" result="pass"/><test-case name="23817idConstrDefs00403m tokoe:valid" result="pass"/><test-case name="23818idConstrDefs00403m1_p tokoe:valid" result="pass"/><test-case name="23819idConstrDefs00403m1_n tokoe:invalid" result="pass"/><test-case name="23820idConstrDefs00501m tokoe:valid" result="pass"/><test-case name="23821idConstrDefs00501m1_p tokoe:valid" result="pass"/><test-case name="23822idConstrDefs00501m1_n tokoe:invalid" result="pass"/><test-case name="23823maxOccurs00101m tokoe:valid" result="pass"/><test-case name="23824maxOccurs00101m1_p tokoe:valid" result="pass"/><test-case name="23825maxOccurs00101m1_n tokoe:invalid" result="pass"/><test-case name="23826maxOccurs00201m tokoe:valid" result="pass"/><test-case name="23827maxOccurs00201m1_p tokoe:valid" result="pass"/><test-case name="23828maxOccurs00201m1_n tokoe:invalid" result="pass"/><test-case name="23829minOccurs00101m tokoe:valid" result="pass"/><test-case name="23830minOccurs00101m1_p tokoe:valid" result="pass"/><test-case name="23831minOccurs00101m1_n tokoe:invalid" result="pass"/><test-case name="23832minOccurs00201m tokoe:valid" result="pass"/><test-case name="23833minOccurs00201m1_p tokoe:valid" result="pass"/><test-case name="23834minOccurs00201m1_n tokoe:invalid" result="pass"/><test-case name="23835name00101m tokoe:valid" result="pass"/><test-case name="23836name00101m1_p tokoe:valid" result="pass"/><test-case name="23837name00101m1_n tokoe:invalid" result="pass"/><test-case name="23838name00201m1 tokoe:valid" result="pass"/><test-case name="23839Positive tokoe:valid" result="pass"/><test-case name="23840name00201m2 tokoe:valid" result="pass"/><test-case name="23841Positive tokoe:valid" result="pass"/><test-case name="23842name00301m1 tokoe:valid" result="pass"/><test-case name="23843Positive tokoe:valid" result="pass"/><test-case name="23844name00401m1 tokoe:valid" result="pass"/><test-case name="23845Positive tokoe:valid" result="pass"/><test-case name="23846name00401m2 tokoe:valid" result="pass"/><test-case name="23847Positive tokoe:valid" result="pass"/><test-case name="23848name00401m3 tokoe:invalid" result="pass"/><test-case name="23849name00401m4 tokoe:invalid" result="pass"/><test-case name="23850name00401m5 tokoe:invalid" result="pass"/><test-case name="23851name00501m1 tokoe:valid" result="pass"/><test-case name="23852Positive tokoe:valid" result="pass"/><test-case name="23853name00501m10 tokoe:invalid" result="pass"/><test-case name="23854name00501m11 tokoe:valid" result="pass"/><test-case name="23855Positive tokoe:valid" result="pass"/><test-case name="23856name00501m12 tokoe:invalid" result="pass"/><test-case name="23857name00501m13 tokoe:valid" result="pass"/><test-case name="23858Positive tokoe:valid" result="pass"/><test-case name="23859name00501m14 tokoe:valid" result="pass"/><test-case name="23860Positive tokoe:valid" result="pass"/><test-case name="23861name00501m15 tokoe:valid" result="pass"/><test-case name="23862Positive tokoe:valid" result="pass"/><test-case name="23863name00501m2 tokoe:invalid" result="pass"/><test-case name="23864name00501m3 tokoe:valid" result="pass"/><test-case name="23865Positive tokoe:valid" result="pass"/><test-case name="23866name00501m4 tokoe:invalid" result="pass"/><test-case name="23867name00501m5 tokoe:valid" result="pass"/><test-case name="23868Positive tokoe:valid" result="pass"/><test-case name="23869name00501m6 tokoe:invalid" result="pass"/><test-case name="23870name00501m7 tokoe:valid" result="pass"/><test-case name="23871Positive tokoe:valid" result="pass"/><test-case name="23872name00501m8 tokoe:invalid" result="pass"/><test-case name="23873name00501m9 tokoe:valid" result="pass"/><test-case name="23874Positive tokoe:valid" result="pass"/><test-case name="23875name00502m1 tokoe:valid" result="pass"/><test-case name="23876Positive tokoe:valid" result="pass"/><test-case name="23877name00502m2 tokoe:invalid" result="pass"/><test-case name="23878name00503m1 tokoe:valid" result="pass"/><test-case name="23879Positive tokoe:valid" result="pass"/><test-case name="23880name00503m2 tokoe:invalid" result="pass"/><test-case name="23881name00504m1 tokoe:valid" result="pass"/><test-case name="23882Positive tokoe:valid" result="pass"/><test-case name="23883name00504m2 tokoe:invalid" result="pass"/><test-case name="23884name00504m3 tokoe:valid" result="pass"/><test-case name="23885Positive tokoe:valid" result="pass"/><test-case name="23886name00504m4 tokoe:invalid" result="pass"/><test-case name="23887name00505m1 tokoe:valid" result="pass"/><test-case name="23888Positive tokoe:valid" result="pass"/><test-case name="23889name00505m2 tokoe:invalid" result="pass"/><test-case name="23890name00601m tokoe:valid" result="pass"/><test-case name="23891name00601m1_p tokoe:valid" result="pass"/><test-case name="23892name00601m1_n tokoe:invalid" result="pass"/><test-case name="23893name00801 tokoe:valid" result="pass"/><test-case name="23894name00801_p tokoe:valid" result="pass"/><test-case name="23895name00802 tokoe:valid" result="pass"/><test-case name="23896name00802_p tokoe:valid" result="pass"/><test-case name="23897name00803 tokoe:valid" result="pass"/><test-case name="23898name00803_p tokoe:valid" result="pass"/><test-case name="23899name00804 tokoe:valid" result="pass"/><test-case name="23900name00804_p tokoe:valid" result="pass"/><test-case name="23901name00805 tokoe:valid" result="pass"/><test-case name="23902name00805_p tokoe:valid" result="pass"/><test-case name="23903nillable00101m1 tokoe:valid" result="pass"/><test-case name="23904Positive tokoe:valid" result="pass"/><test-case name="23905nillable00101m2 tokoe:valid" result="pass"/><test-case name="23906Negative tokoe:invalid" result="pass"/><test-case name="23907nillable00102m tokoe:valid" result="pass"/><test-case name="23908nillable00102m1_p tokoe:valid" result="pass"/><test-case name="23909nillable00102m1_n tokoe:invalid" result="pass"/><test-case name="23910nillable00201m tokoe:valid" result="pass"/><test-case name="23911nillable00201m1_n tokoe:invalid" result="pass"/><test-case name="23912nillable00201m2_n tokoe:invalid" result="pass"/><test-case name="23913nillable00201m3_p tokoe:valid" result="pass"/><test-case name="23914nillable00301m tokoe:valid" result="pass"/><test-case name="23915nillable00301m1_p tokoe:valid" result="pass"/><test-case name="23916nillable00301m1_n tokoe:invalid" result="pass"/><test-case name="23917nillable00302m tokoe:valid" result="pass"/><test-case name="23918nillable00302m1_p tokoe:valid" result="pass"/><test-case name="23919nillable00302m1_n tokoe:invalid" result="pass"/><test-case name="23920nillable00401m1 tokoe:valid" result="pass"/><test-case name="23921Positive tokoe:valid" result="pass"/><test-case name="23922nillable00401m2 tokoe:valid" result="pass"/><test-case name="23923Positive tokoe:valid" result="pass"/><test-case name="23924scope00101m tokoe:valid" result="pass"/><test-case name="23925scope00101m1_p tokoe:valid" result="pass"/><test-case name="23926scope00201m1 tokoe:valid" result="pass"/><test-case name="23927Positive tokoe:valid" result="pass"/><test-case name="23928scope00201m2 tokoe:invalid" result="pass"/><test-case name="23929scope00301m tokoe:valid" result="pass"/><test-case name="23930scope00301m1_p tokoe:valid" result="pass"/><test-case name="23931substGrpAffil00101m tokoe:valid" result="pass"/><test-case name="23932substGrpAffil00101m1_p tokoe:valid" result="pass"/><test-case name="23933substGrpAffil00101m1_n tokoe:invalid" result="pass"/><test-case name="23934substGrpAffil00201m tokoe:valid" result="pass"/><test-case name="23935substGrpAffil00201m1_p tokoe:valid" result="pass"/><test-case name="23936substGrpAffil00201m1_n tokoe:invalid" result="pass"/><test-case name="23937substGrpExcl00202m1 tokoe:valid" result="pass"/><test-case name="23938Positive tokoe:valid" result="pass"/><test-case name="23939substGrpExcl00202m2 tokoe:invalid" result="pass"/><test-case name="23940substGrpExcl00301m1 tokoe:valid" result="pass"/><test-case name="23941Positive tokoe:valid" result="pass"/><test-case name="23942substGrpExcl00301m3 tokoe:valid" result="pass"/><test-case name="23943Positive tokoe:valid" result="pass"/><test-case name="23944substGrpExcl00303m1 tokoe:valid" result="pass"/><test-case name="23945Positive tokoe:valid" result="pass"/><test-case name="23946substGrpExcl00303m2 tokoe:invalid" result="pass"/><test-case name="23947substGrpExcl00303m3 tokoe:valid" result="pass"/><test-case name="23948Positive tokoe:valid" result="pass"/><test-case name="23949substGrpExcl00401m1 tokoe:valid" result="pass"/><test-case name="23950Positive tokoe:valid" result="pass"/><test-case name="23951substGrpExcl00401m2 tokoe:valid" result="pass"/><test-case name="23952Positive tokoe:valid" result="pass"/><test-case name="23953substGrpExcl00401m3 tokoe:valid" result="pass"/><test-case name="23954Positive tokoe:valid" result="pass"/><test-case name="23955substGrpExcl00401m4 tokoe:valid" result="pass"/><test-case name="23956Positive tokoe:valid" result="pass"/><test-case name="23957substGrpExcl00401m5 tokoe:valid" result="pass"/><test-case name="23958Positive tokoe:valid" result="pass"/><test-case name="23959substGrpExcl00401m6 tokoe:valid" result="pass"/><test-case name="23960Positive tokoe:valid" result="pass"/><test-case name="23961substGrpExcl00402m1 tokoe:invalid" result="pass"/><test-case name="23962substGrpExcl00402m2 tokoe:invalid" result="pass"/><test-case name="23963substGrpExcl00402m3 tokoe:invalid" result="pass"/><test-case name="23964substGrpExcl00402m4 tokoe:invalid" result="pass"/><test-case name="23965substGrpExcl00402m5 tokoe:invalid" result="pass"/><test-case name="23966substGrpExcl00402m6 tokoe:invalid" result="pass"/><test-case name="23967substGrpExcl00402m7 tokoe:valid" result="pass"/><test-case name="23968Positive tokoe:valid" result="pass"/><test-case name="23969targetNS00101m tokoe:valid" result="pass"/><test-case name="23970targetNS00101m1_p tokoe:valid" result="pass"/><test-case name="23971targetNS00201m tokoe:valid" result="pass"/><test-case name="23972targetNS00201m1_p tokoe:valid" result="pass"/><test-case name="23973targetNS00201m1_n tokoe:invalid" result="pass"/><test-case name="23974targetNS00301m1 tokoe:valid" result="pass"/><test-case name="23975Positive tokoe:valid" result="pass"/><test-case name="23976Negative tokoe:invalid" result="pass"/><test-case name="23977targetNS00301m2 tokoe:valid" result="pass"/><test-case name="23978Positive tokoe:valid" result="pass"/><test-case name="23979Negative tokoe:invalid" result="pass"/><test-case name="23980targetNS00301m3 tokoe:valid" result="pass"/><test-case name="23981Positive tokoe:valid" result="pass"/><test-case name="23982Negative tokoe:invalid" result="pass"/><test-case name="23983targetNS00302m1 tokoe:valid" result="pass"/><test-case name="23984Positive tokoe:valid" result="pass"/><test-case name="23985Negative tokoe:invalid" result="pass"/><test-case name="23986targetNS00302m2 tokoe:valid" result="pass"/><test-case name="23987Positive tokoe:valid" result="pass"/><test-case name="23988Negative tokoe:invalid" result="pass"/><test-case name="23989targetNS00302m3 tokoe:valid" result="pass"/><test-case name="23990Positive tokoe:valid" result="pass"/><test-case name="23991Negative tokoe:invalid" result="pass"/><test-case name="23992targetNS00303m1 tokoe:valid" result="pass"/><test-case name="23993Positive tokoe:valid" result="pass"/><test-case name="23994Negative tokoe:invalid" result="pass"/><test-case name="23995targetNS00303m2 tokoe:valid" result="pass"/><test-case name="23996Positive tokoe:valid" result="pass"/><test-case name="23997Negative tokoe:invalid" result="pass"/><test-case name="23998targetNS00303m3 tokoe:valid" result="pass"/><test-case name="23999Positive tokoe:valid" result="pass"/><test-case name="24000Negative tokoe:invalid" result="pass"/><test-case name="24001targetNS00401m tokoe:valid" result="pass"/><test-case name="24002targetNS00401m1_p tokoe:valid" result="pass"/><test-case name="24003targetNS00401m1_n tokoe:invalid" result="pass"/><test-case name="24004targetNS00402m tokoe:valid" result="pass"/><test-case name="24005targetNS00402m1_p tokoe:valid" result="pass"/><test-case name="24006targetNS00402m1_n tokoe:invalid" result="pass"/><test-case name="24007term00101m tokoe:valid" result="pass"/><test-case name="24008term00101m1_p tokoe:valid" result="pass"/><test-case name="24009term00101m1_n tokoe:invalid" result="pass"/><test-case name="24010typeDef00101m tokoe:valid" result="pass"/><test-case name="24011typeDef00101m1_p tokoe:valid" result="pass"/><test-case name="24012typeDef00101m1_n tokoe:invalid" result="pass"/><test-case name="24013typeDef00201m tokoe:valid" result="pass"/><test-case name="24014typeDef00201m1_p tokoe:valid" result="pass"/><test-case name="24015typeDef00201m1_n tokoe:invalid" result="pass"/><test-case name="24016typeDef00202m tokoe:valid" result="pass"/><test-case name="24017typeDef00202m1_p tokoe:valid" result="pass"/><test-case name="24018typeDef00202m1_n tokoe:invalid" result="pass"/><test-case name="24019typeDef00203m tokoe:valid" result="pass"/><test-case name="24020typeDef00203m1_p tokoe:valid" result="pass"/><test-case name="24021typeDef00203m1_n tokoe:invalid" result="pass"/><test-case name="24022typeDef00204m tokoe:valid" result="pass"/><test-case name="24023typeDef00204m1_p tokoe:valid" result="pass"/><test-case name="24024typeDef00204m1_n tokoe:invalid" result="pass"/><test-case name="24025typeDef00205m tokoe:valid" result="pass"/><test-case name="24026typeDef00205m1_p tokoe:valid" result="pass"/><test-case name="24027typeDef00301m tokoe:valid" result="pass"/><test-case name="24028typeDef00301m1_p tokoe:valid" result="pass"/><test-case name="24029typeDef00301m1_n tokoe:invalid" result="pass"/><test-case name="24030typeDef00401m tokoe:valid" result="pass"/><test-case name="24031typeDef00401m1_p tokoe:valid" result="pass"/><test-case name="24032typeDef00401m1_n tokoe:invalid" result="pass"/><test-case name="24033typeDef00402m tokoe:valid" result="pass"/><test-case name="24034typeDef00402m1_p tokoe:valid" result="pass"/><test-case name="24035typeDef00402m1_n tokoe:invalid" result="pass"/><test-case name="24036typeDef00403m tokoe:valid" result="pass"/><test-case name="24037typeDef00403m1_p tokoe:valid" result="pass"/><test-case name="24038typeDef00501m1 tokoe:valid" result="pass"/><test-case name="24039Positive tokoe:valid" result="pass"/><test-case name="24040typeDef00501m2 tokoe:invalid" result="pass"/><test-case name="24041typeDef00502m1 tokoe:valid" result="pass"/><test-case name="24042Positive tokoe:valid" result="pass"/><test-case name="24043typeDef00502m2 tokoe:invalid" result="pass"/><test-case name="24044typeDef00601m tokoe:valid" result="pass"/><test-case name="24045typeDef00601m1_p tokoe:valid" result="pass"/><test-case name="24046typeDef00701m tokoe:valid" result="pass"/><test-case name="24047typeDef00701m1_p tokoe:valid" result="pass"/><test-case name="24048typeDef00701m1_n tokoe:invalid" result="pass"/><test-case name="24049typeDef00801m1 tokoe:valid" result="pass"/><test-case name="24050Positive tokoe:valid" result="pass"/><test-case name="24051typeDef00801m2 tokoe:valid" result="pass"/><test-case name="24052Negative tokoe:invalid" result="pass"/><test-case name="24053typeDef00801m3 tokoe:valid" result="pass"/><test-case name="24054Negative tokoe:invalid" result="pass"/><test-case name="24055typeDef00802m1 tokoe:valid" result="pass"/><test-case name="24056Positive tokoe:valid" result="pass"/><test-case name="24057Negative tokoe:invalid" result="pass"/><test-case name="24058typeDef00802m2 tokoe:valid" result="pass"/><test-case name="24059Negative tokoe:invalid" result="pass"/><test-case name="24060typeDef00901m1 tokoe:valid" result="pass"/><test-case name="24061Positive tokoe:valid" result="pass"/><test-case name="24062Negative tokoe:invalid" result="pass"/><test-case name="24063typeDef01101m1 tokoe:valid" result="pass"/><test-case name="24064Positive tokoe:valid" result="pass"/><test-case name="24065Negative tokoe:invalid" result="pass"/><test-case name="24066typeDef01201m1 tokoe:valid" result="pass"/><test-case name="24067Positive tokoe:valid" result="pass"/><test-case name="24068Negative tokoe:invalid" result="pass"/><test-case name="24069typeDef01202m1 tokoe:valid" result="pass"/><test-case name="24070Positive tokoe:valid" result="pass"/><test-case name="24071Negative tokoe:invalid" result="pass"/><test-case name="24072typeDef01301m1 tokoe:valid" result="pass"/><test-case name="24073Positive tokoe:valid" result="pass"/><test-case name="24074Negative tokoe:invalid" result="pass"/><test-case name="24075typeDef01401m1 tokoe:valid" result="pass"/><test-case name="24076Positive tokoe:valid" result="pass"/><test-case name="24077Negative tokoe:invalid" result="pass"/><test-case name="24078typeDef01501m1 tokoe:valid" result="pass"/><test-case name="24079Positive tokoe:valid" result="pass"/><test-case name="24080Negative tokoe:invalid" result="pass"/><test-case name="24081valueConstraint00101m1 tokoe:valid" result="pass"/><test-case name="24082Positive tokoe:valid" result="pass"/><test-case name="24083valueConstraint00101m2 tokoe:invalid" result="pass"/><test-case name="24084valueConstraint00201m tokoe:valid" result="pass"/><test-case name="24085valueConstraint00201m1_p tokoe:valid" result="pass"/><test-case name="24086valueConstraint00201m1_n tokoe:invalid" result="pass"/><test-case name="24087valueConstraint00301m1 tokoe:valid" result="pass"/><test-case name="24088Positive tokoe:valid" result="pass"/><test-case name="24089valueConstraint00301m2 tokoe:valid" result="pass"/><test-case name="24090Positive tokoe:valid" result="pass"/><test-case name="24091valueConstraint00301m3 tokoe:invalid" result="pass"/><test-case name="24092valueConstraint00301m4 tokoe:invalid" result="pass"/><test-case name="24093valueConstraint00301m5 tokoe:invalid" result="pass"/><test-case name="24094valueConstraint00401m1 tokoe:valid" result="pass"/><test-case name="24095Positive tokoe:valid" result="pass"/><test-case name="24096valueConstraint00401m2 tokoe:invalid" result="pass"/><test-case name="24097valueConstraint00401m3 tokoe:valid" result="pass"/><test-case name="24098Positive tokoe:valid" result="pass"/><test-case name="24099valueConstraint00401m4 tokoe:valid" result="pass"/><test-case name="24100Positive tokoe:valid" result="pass"/><test-case name="24101valueConstraint00401m5 tokoe:valid" result="pass"/><test-case name="24102Positive tokoe:valid" result="pass"/><test-case name="24103valueConstraint00401m6 tokoe:invalid" result="pass"/><test-case name="24104valueConstraint00401m7 tokoe:valid" result="pass"/><test-case name="24105Positive tokoe:valid" result="pass"/><test-case name="24106valueConstraint00401m8 tokoe:invalid" result="pass"/><test-case name="24107valueConstraint00401m9 tokoe:valid" result="pass"/><test-case name="24108Positive tokoe:valid" result="pass"/><test-case name="24109valueConstraint00402m1 tokoe:valid" result="pass"/><test-case name="24110Positive tokoe:valid" result="pass"/><test-case name="24111valueConstraint00402m2 tokoe:invalid" result="pass"/><test-case name="24112valueConstraint00402m3 tokoe:valid" result="pass"/><test-case name="24113Positive tokoe:valid" result="pass"/><test-case name="24114valueConstraint00402m4 tokoe:valid" result="pass"/><test-case name="24115Positive tokoe:valid" result="pass"/><test-case name="24116valueConstraint00402m5 tokoe:valid" result="pass"/><test-case name="24117Positive tokoe:valid" result="pass"/><test-case name="24118valueConstraint00402m6 tokoe:invalid" result="pass"/><test-case name="24119valueConstraint00402m7 tokoe:valid" result="pass"/><test-case name="24120Positive tokoe:valid" result="pass"/><test-case name="24121valueConstraint00402m8 tokoe:invalid" result="pass"/><test-case name="24122valueConstraint00402m9 tokoe:valid" result="pass"/><test-case name="24123Positive tokoe:valid" result="pass"/><test-case name="24124valueConstraint00501m1 tokoe:valid" result="pass"/><test-case name="24125Positive tokoe:valid" result="pass"/><test-case name="24126valueConstraint00501m2 tokoe:valid" result="pass"/><test-case name="24127Positive tokoe:valid" result="pass"/><test-case name="24128valueConstraint00501m3 tokoe:valid" result="pass"/><test-case name="24129Negative tokoe:invalid" result="pass"/><test-case name="24130valueConstraint00501m4 tokoe:valid" result="pass"/><test-case name="24131Positive tokoe:valid" result="pass"/><test-case name="24132valueConstraint00501m5 tokoe:valid" result="pass"/><test-case name="24133Positive tokoe:valid" result="pass"/><test-case name="24134valueConstraint00501m6 tokoe:valid" result="pass"/><test-case name="24135Negative tokoe:invalid" result="pass"/><test-case name="24136valueConstraint00601m1 tokoe:valid" result="pass"/><test-case name="24137Positive tokoe:valid" result="pass"/><test-case name="24138valueConstraint00601m2 tokoe:invalid" result="pass"/><test-case name="24139valueConstraint00601m3 tokoe:valid" result="pass"/><test-case name="24140Positive tokoe:valid" result="pass"/><test-case name="24141valueConstraint00601m4 tokoe:invalid" result="pass"/><test-case name="24142valueConstraint00601m5 tokoe:valid" result="pass"/><test-case name="24143Positive tokoe:valid" result="pass"/><test-case name="24144valueConstraint00601m6 tokoe:invalid" result="pass"/><test-case name="24145valueConstraint00601m7 tokoe:valid" result="pass"/><test-case name="24146Positive tokoe:valid" result="pass"/><test-case name="24147valueConstraint00601m8 tokoe:invalid" result="pass"/><test-case name="24148valueConstraint00701m1 tokoe:valid" result="pass"/><test-case name="24149Positive tokoe:valid" result="pass"/><test-case name="24150Negative tokoe:invalid" result="pass"/><test-case name="24151valueConstraint00801m1 tokoe:valid" result="pass"/><test-case name="24152Positive tokoe:valid" result="pass"/><test-case name="24153Negative tokoe:invalid" result="pass"/><test-case name="24154valueConstraint00901m1 tokoe:valid" result="pass"/><test-case name="24155Positive tokoe:valid" result="pass"/><test-case name="24156Negative tokoe:invalid" result="pass"/><test-case name="24157valueConstraint01001m1 tokoe:valid" result="pass"/><test-case name="24158Positive tokoe:valid" result="pass"/><test-case name="24159valueConstraint01001m2 tokoe:invalid" result="pass"/><test-case name="24160valueConstraint01001m3 tokoe:invalid" result="pass"/><test-case name="24161valueConstraint01001m4 tokoe:valid" result="pass"/><test-case name="24162Positive tokoe:valid" result="pass"/><test-case name="24163valueConstraint01001m5 tokoe:invalid" result="pass"/><test-case name="24164valueConstraint01001m6 tokoe:invalid" result="pass"/><test-case name="24165valueConstraint01001m7 tokoe:valid" result="pass"/><test-case name="24166Positive tokoe:valid" result="pass"/><test-case name="24167valueConstraint01001m8 tokoe:valid" result="pass"/><test-case name="24168Positive tokoe:valid" result="pass"/><test-case name="24169valueConstraint01101m1 tokoe:valid" result="pass"/><test-case name="24170Positive tokoe:valid" result="pass"/><test-case name="24171valueConstraint01101m2 tokoe:valid" result="pass"/><test-case name="24172Negative tokoe:invalid" result="pass"/><test-case name="24173valueConstraint01101m3 tokoe:valid" result="pass"/><test-case name="24174Positive tokoe:valid" result="pass"/><test-case name="24175valueConstraint01101m4 tokoe:valid" result="pass"/><test-case name="24176Negative tokoe:invalid" result="pass"/><test-case name="24177annotation00101m1 tokoe:valid" result="pass"/><test-case name="24178Positive tokoe:valid" result="pass"/><test-case name="24179annotation00101m2 tokoe:invalid" result="pass"/><test-case name="24180annotation00101m3 tokoe:invalid" result="pass"/><test-case name="24181annotation00101m4 tokoe:valid" result="pass"/><test-case name="24182Positive tokoe:valid" result="pass"/><test-case name="24183annotation00101m5 tokoe:invalid" result="pass"/><test-case name="24184annotation00101m6 tokoe:invalid" result="pass"/><test-case name="24185fields00101m1 tokoe:valid" result="pass"/><test-case name="24186Positive tokoe:valid" result="pass"/><test-case name="24187fields00201m1 tokoe:valid" result="pass"/><test-case name="24188Positive tokoe:valid" result="pass"/><test-case name="24189fields00201m2 tokoe:valid" result="pass"/><test-case name="24190Negative tokoe:invalid" result="pass"/><test-case name="24191fields00201m3 tokoe:valid" result="pass"/><test-case name="24192Negative tokoe:invalid" result="pass"/><test-case name="24193fields00201m4 tokoe:valid" result="pass"/><test-case name="24194Positive tokoe:valid" result="pass"/><test-case name="24195fields00201m5 tokoe:valid" result="pass"/><test-case name="24196Negative tokoe:invalid" result="pass"/><test-case name="24197fields00202m1 tokoe:valid" result="pass"/><test-case name="24198Positive tokoe:valid" result="pass"/><test-case name="24199fields00202m2 tokoe:valid" result="pass"/><test-case name="24200Positive tokoe:valid" result="pass"/><test-case name="24201fields00202m3 tokoe:valid" result="pass"/><test-case name="24202Positive tokoe:valid" result="pass"/><test-case name="24203fields00202m4 tokoe:valid" result="pass"/><test-case name="24204Positive tokoe:valid" result="pass"/><test-case name="24205fields00202m5 tokoe:valid" result="pass"/><test-case name="24206Negative tokoe:invalid" result="pass"/><test-case name="24207fields00203m1 tokoe:valid" result="pass"/><test-case name="24208Positive tokoe:valid" result="pass"/><test-case name="24209fields00203m2 tokoe:valid" result="pass"/><test-case name="24210Negative tokoe:invalid" result="pass"/><test-case name="24211fields00203m3 tokoe:valid" result="pass"/><test-case name="24212Negative tokoe:invalid" result="pass"/><test-case name="24213fields00203m4 tokoe:valid" result="pass"/><test-case name="24214Positive tokoe:valid" result="pass"/><test-case name="24215fields00203m5 tokoe:valid" result="pass"/><test-case name="24216Negative tokoe:invalid" result="pass"/><test-case name="24217name00101m1 tokoe:valid" result="pass"/><test-case name="24218Positive tokoe:valid" result="pass"/><test-case name="24219name00201m1 tokoe:valid" result="pass"/><test-case name="24220Positive tokoe:valid" result="pass"/><test-case name="24221targetNS00101m1 tokoe:valid" result="pass"/><test-case name="24222Positive tokoe:valid" result="pass"/><test-case name="24223targetNS00101m2 tokoe:invalid" result="pass"/><test-case name="24224annotation00101m1 tokoe:valid" result="pass"/><test-case name="24225Positive tokoe:valid" result="pass"/><test-case name="24226annotation00101m10 tokoe:valid" result="pass"/><test-case name="24227Positive tokoe:valid" result="pass"/><test-case name="24228annotation00101m11 tokoe:invalid" result="pass"/><test-case name="24229annotation00101m12 tokoe:invalid" result="pass"/><test-case name="24230annotation00101m13 tokoe:valid" result="pass"/><test-case name="24231Positive tokoe:valid" result="pass"/><test-case name="24232annotation00101m14 tokoe:invalid" result="pass"/><test-case name="24233annotation00101m15 tokoe:invalid" result="pass"/><test-case name="24234annotation00101m16 tokoe:valid" result="pass"/><test-case name="24235Positive tokoe:valid" result="pass"/><test-case name="24236annotation00101m17 tokoe:invalid" result="pass"/><test-case name="24237annotation00101m18 tokoe:invalid" result="pass"/><test-case name="24238annotation00101m2 tokoe:invalid" result="pass"/><test-case name="24239annotation00101m3 tokoe:invalid" result="pass"/><test-case name="24240annotation00101m4 tokoe:valid" result="pass"/><test-case name="24241Positive tokoe:valid" result="pass"/><test-case name="24242annotation00101m5 tokoe:invalid" result="pass"/><test-case name="24243annotation00101m6 tokoe:invalid" result="pass"/><test-case name="24244annotation00101m7 tokoe:valid" result="pass"/><test-case name="24245Positive tokoe:valid" result="pass"/><test-case name="24246annotation00101m8 tokoe:invalid" result="pass"/><test-case name="24247annotation00101m9 tokoe:invalid" result="pass"/><test-case name="24248compositor00101m1 tokoe:valid" result="pass"/><test-case name="24249Positive tokoe:valid" result="pass"/><test-case name="24250Negative tokoe:invalid" result="pass"/><test-case name="24251compositor00102m1 tokoe:valid" result="pass"/><test-case name="24252Positive tokoe:valid" result="pass"/><test-case name="24253Negative tokoe:invalid" result="pass"/><test-case name="24254compositor00103m1 tokoe:valid" result="pass"/><test-case name="24255Positive tokoe:valid" result="pass"/><test-case name="24256Negative tokoe:invalid" result="pass"/><test-case name="24257compositor00201m1 tokoe:valid" result="pass"/><test-case name="24258Positive tokoe:valid" result="pass"/><test-case name="24259compositor00202m1 tokoe:valid" result="pass"/><test-case name="24260Positive tokoe:valid" result="pass"/><test-case name="24261compositor00203m1 tokoe:valid" result="pass"/><test-case name="24262Positive tokoe:valid" result="pass"/><test-case name="24263particles00101m1 tokoe:valid" result="pass"/><test-case name="24264Positive tokoe:valid" result="pass"/><test-case name="24265Negative tokoe:invalid" result="pass"/><test-case name="24266particles00101m2 tokoe:valid" result="pass"/><test-case name="24267Positive tokoe:valid" result="pass"/><test-case name="24268Negative tokoe:invalid" result="pass"/><test-case name="24269particles00102m1 tokoe:invalid" result="pass"/><test-case name="24270particles00103m1 tokoe:invalid" result="pass"/><test-case name="24271particles00104m1 tokoe:invalid" result="pass"/><test-case name="24272particles00105m1 tokoe:invalid" result="pass"/><test-case name="24273particles00201m1 tokoe:valid" result="pass"/><test-case name="24274Positive tokoe:valid" result="pass"/><test-case name="24275Negative tokoe:invalid" result="pass"/><test-case name="24276particles00202m1 tokoe:valid" result="pass"/><test-case name="24277Positive tokoe:valid" result="pass"/><test-case name="24278Negative tokoe:invalid" result="pass"/><test-case name="24279particles00203m1 tokoe:valid" result="pass"/><test-case name="24280Positive tokoe:valid" result="pass"/><test-case name="24281Negative tokoe:invalid" result="pass"/><test-case name="24282particles00204m1 tokoe:valid" result="pass"/><test-case name="24283Positive tokoe:valid" result="pass"/><test-case name="24284Negative tokoe:invalid" result="pass"/><test-case name="24285particles00205m1 tokoe:valid" result="pass"/><test-case name="24286Positive tokoe:valid" result="pass"/><test-case name="24287Negative tokoe:invalid" result="pass"/><test-case name="24288particles00301m1 tokoe:valid" result="pass"/><test-case name="24289Positive tokoe:valid" result="fail"/><test-case name="24290Negative tokoe:invalid" result="pass"/><test-case name="24291particles00302m1 tokoe:valid" result="pass"/><test-case name="24292Positive tokoe:valid" result="fail"/><test-case name="24293Negative tokoe:invalid" result="pass"/><test-case name="24294particles00303m1 tokoe:valid" result="pass"/><test-case name="24295Positive tokoe:valid" result="pass"/><test-case name="24296Negative tokoe:invalid" result="pass"/><test-case name="24297particles00304m1 tokoe:valid" result="pass"/><test-case name="24298Positive tokoe:valid" result="pass"/><test-case name="24299Negative tokoe:invalid" result="pass"/><test-case name="24300particles00305m1 tokoe:valid" result="pass"/><test-case name="24301Positive tokoe:valid" result="pass"/><test-case name="24302Negative tokoe:invalid" result="pass"/><test-case name="24303annotation00101m1 tokoe:valid" result="pass"/><test-case name="24304Positive tokoe:valid" result="pass"/><test-case name="24305annotation00101m2 tokoe:invalid" result="pass"/><test-case name="24306annotation00101m3 tokoe:invalid" result="pass"/><test-case name="24307annotation00101m4 tokoe:valid" result="pass"/><test-case name="24308Positive tokoe:valid" result="pass"/><test-case name="24309annotation00101m5 tokoe:invalid" result="pass"/><test-case name="24310annotation00101m6 tokoe:invalid" result="pass"/><test-case name="24311modelGroup00101m1 tokoe:valid" result="pass"/><test-case name="24312Positive tokoe:valid" result="pass"/><test-case name="24313Negative tokoe:invalid" result="pass"/><test-case name="24314modelGroup00101m2 tokoe:valid" result="pass"/><test-case name="24315Positive tokoe:valid" result="pass"/><test-case name="24316Negative tokoe:invalid" result="pass"/><test-case name="24317modelGroup00101m3 tokoe:valid" result="pass"/><test-case name="24318Positive tokoe:valid" result="pass"/><test-case name="24319Negative tokoe:invalid" result="pass"/><test-case name="24320modelGroup00102m1 tokoe:invalid" result="pass"/><test-case name="24321modelGroup00102m2 tokoe:invalid" result="pass"/><test-case name="24322modelGroup00102m3 tokoe:invalid" result="pass"/><test-case name="24323modelGroup00102m4 tokoe:invalid" result="pass"/><test-case name="24324modelGroup00102m5 tokoe:invalid" result="pass"/><test-case name="24325modelGroup00102m6 tokoe:invalid" result="pass"/><test-case name="24326name00101m1 tokoe:valid" result="pass"/><test-case name="24327Positive tokoe:valid" result="pass"/><test-case name="24328Negative tokoe:invalid" result="pass"/><test-case name="24329targetNS00101m1 tokoe:valid" result="pass"/><test-case name="24330Positive tokoe:valid" result="pass"/><test-case name="24331Negative tokoe:invalid" result="pass"/><test-case name="24332targetNS00101m2 tokoe:valid" result="pass"/><test-case name="24333Positive tokoe:valid" result="pass"/><test-case name="24334Negative tokoe:invalid" result="pass"/><test-case name="24335annotation00101m1 tokoe:valid" result="pass"/><test-case name="24336Positive tokoe:valid" result="pass"/><test-case name="24337annotation00101m2 tokoe:invalid" result="pass"/><test-case name="24338annotation00101m3 tokoe:valid" result="pass"/><test-case name="24339Positive tokoe:valid" result="pass"/><test-case name="24340annotation00101m4 tokoe:invalid" result="pass"/><test-case name="24341name00101m1 tokoe:valid" result="pass"/><test-case name="24342Positive tokoe:valid" result="pass"/><test-case name="24343name00201m1 tokoe:invalid" result="pass"/><test-case name="24344publicId00101m1 tokoe:valid" result="pass"/><test-case name="24345Positive tokoe:valid" result="pass"/><test-case name="24346publicId00201m1 tokoe:invalid" result="pass"/><test-case name="24347systemId00101m1 tokoe:valid" result="pass"/><test-case name="24348Positive tokoe:valid" result="pass"/><test-case name="24349systemId00201m1 tokoe:valid" result="pass"/><test-case name="24350Positive tokoe:valid" result="pass"/><test-case name="24351targetNS00101m1 tokoe:valid" result="pass"/><test-case name="24352Positive tokoe:valid" result="pass"/><test-case name="24353targetNS00101m2 tokoe:valid" result="pass"/><test-case name="24354Positive tokoe:valid" result="pass"/><test-case name="24355ST_annotation00101m1 tokoe:valid" result="pass"/><test-case name="24356Positive tokoe:valid" result="pass"/><test-case name="24357ST_annotation00101m2 tokoe:valid" result="pass"/><test-case name="24358Positive tokoe:valid" result="pass"/><test-case name="24359ST_baseTD00101m tokoe:valid" result="pass"/><test-case name="24360ST_baseTD00101m1_p tokoe:valid" result="pass"/><test-case name="24361ST_baseTD00101m1_n tokoe:invalid" result="pass"/><test-case name="24362ST_baseTD00101m2_p tokoe:valid" result="pass"/><test-case name="24363ST_baseTD00201m tokoe:valid" result="pass"/><test-case name="24364ST_baseTD00201m1_p tokoe:valid" result="pass"/><test-case name="24365ST_baseTD00201m1_n tokoe:invalid" result="pass"/><test-case name="24366ST_baseTD00301m tokoe:valid" result="pass"/><test-case name="24367ST_baseTD00301m1_p tokoe:valid" result="pass"/><test-case name="24368ST_baseTD00301m1_n tokoe:invalid" result="pass"/><test-case name="24369ST_baseTD00302m tokoe:valid" result="pass"/><test-case name="24370ST_baseTD00302m1_p tokoe:valid" result="pass"/><test-case name="24371ST_baseTD00302m1_n tokoe:invalid" result="pass"/><test-case name="24372ST_baseTD00302m2_p tokoe:valid" result="pass"/><test-case name="24373ST_baseTD00302m2_n tokoe:invalid" result="pass"/><test-case name="24374ST_baseTD00302m3_n tokoe:invalid" result="pass"/><test-case name="24375ST_facets00101m tokoe:valid" result="pass"/><test-case name="24376ST_facets00101m1_p tokoe:valid" result="pass"/><test-case name="24377ST_facets00101m1_n tokoe:invalid" result="pass"/><test-case name="24378ST_facets00101m2_p tokoe:valid" result="pass"/><test-case name="24379ST_facets00101m3_p tokoe:valid" result="pass"/><test-case name="24380ST_facets00102m tokoe:valid" result="pass"/><test-case name="24381ST_facets00102m1_p tokoe:valid" result="pass"/><test-case name="24382ST_facets00102m1_n tokoe:invalid" result="pass"/><test-case name="24383ST_facets00103m tokoe:valid" result="pass"/><test-case name="24384ST_facets00103m1_p tokoe:valid" result="pass"/><test-case name="24385ST_facets00103m1_n tokoe:invalid" result="pass"/><test-case name="24386ST_facets00104m tokoe:valid" result="pass"/><test-case name="24387ST_facets00104m1_p tokoe:valid" result="pass"/><test-case name="24388ST_facets00104m1_n tokoe:invalid" result="pass"/><test-case name="24389ST_facets00105m tokoe:valid" result="pass"/><test-case name="24390ST_facets00105m1_p tokoe:valid" result="pass"/><test-case name="24391ST_facets00105m1_n tokoe:invalid" result="pass"/><test-case name="24392ST_facets00106m tokoe:valid" result="pass"/><test-case name="24393ST_facets00106m1_p tokoe:valid" result="pass"/><test-case name="24394ST_facets00106m1_n tokoe:invalid" result="pass"/><test-case name="24395ST_facets00107m tokoe:valid" result="pass"/><test-case name="24396ST_facets00107m1_p tokoe:valid" result="pass"/><test-case name="24397ST_facets00107m1_n tokoe:invalid" result="pass"/><test-case name="24398ST_facets00108m tokoe:valid" result="pass"/><test-case name="24399ST_facets00108m1_p tokoe:valid" result="pass"/><test-case name="24400ST_facets00108m1_n tokoe:invalid" result="pass"/><test-case name="24401ST_facets00109m tokoe:valid" result="pass"/><test-case name="24402ST_facets00109m1_p tokoe:valid" result="pass"/><test-case name="24403ST_facets00109m1_n tokoe:invalid" result="pass"/><test-case name="24404ST_facets00110m tokoe:valid" result="pass"/><test-case name="24405ST_facets00110m1_p tokoe:valid" result="pass"/><test-case name="24406ST_facets00110m1_n tokoe:invalid" result="pass"/><test-case name="24407ST_facets00111m tokoe:valid" result="pass"/><test-case name="24408ST_facets00111m1_p tokoe:valid" result="pass"/><test-case name="24409ST_facets00111m1_n tokoe:invalid" result="pass"/><test-case name="24410ST_facets00112m tokoe:valid" result="pass"/><test-case name="24411ST_facets00112m1_p tokoe:valid" result="pass"/><test-case name="24412ST_facets00112m1_n tokoe:invalid" result="pass"/><test-case name="24413ST_facets00113m tokoe:valid" result="pass"/><test-case name="24414ST_facets00113m1_p tokoe:valid" result="pass"/><test-case name="24415ST_facets00113m1_n tokoe:invalid" result="pass"/><test-case name="24416ST_facets00114m tokoe:valid" result="pass"/><test-case name="24417ST_facets00114m1_p tokoe:valid" result="pass"/><test-case name="24418ST_facets00114m1_n tokoe:invalid" result="pass"/><test-case name="24419ST_facets00115m tokoe:valid" result="pass"/><test-case name="24420ST_facets00115m1_p tokoe:valid" result="pass"/><test-case name="24421ST_facets00115m1_n tokoe:invalid" result="pass"/><test-case name="24422ST_facets00116m tokoe:valid" result="pass"/><test-case name="24423ST_facets00116m1_p tokoe:valid" result="pass"/><test-case name="24424ST_facets00116m1_n tokoe:invalid" result="pass"/><test-case name="24425ST_facets00117m tokoe:valid" result="pass"/><test-case name="24426ST_facets00117m1_p tokoe:valid" result="pass"/><test-case name="24427ST_facets00117m1_n tokoe:invalid" result="pass"/><test-case name="24428ST_facets00118m tokoe:valid" result="pass"/><test-case name="24429ST_facets00118m1_p tokoe:valid" result="pass"/><test-case name="24430ST_facets00118m1_n tokoe:invalid" result="pass"/><test-case name="24431ST_facets00119m tokoe:valid" result="fail"/><test-case name="24432ST_facets00119m1_p tokoe:valid" result="fail"/><test-case name="24433ST_facets00119m1_n tokoe:invalid" result="pass"/><test-case name="24434ST_facets00120m tokoe:valid" result="pass"/><test-case name="24435ST_facets00120m1_p tokoe:valid" result="pass"/><test-case name="24436ST_facets00120m1_n tokoe:invalid" result="pass"/><test-case name="24437ST_facets00121m tokoe:valid" result="pass"/><test-case name="24438ST_facets00121m1_p tokoe:valid" result="pass"/><test-case name="24439ST_facets00121m1_n tokoe:invalid" result="pass"/><test-case name="24440ST_facets00122m tokoe:valid" result="pass"/><test-case name="24441ST_facets00122m1_p tokoe:valid" result="pass"/><test-case name="24442ST_facets00122m1_n tokoe:invalid" result="pass"/><test-case name="24443ST_facets00123m tokoe:valid" result="pass"/><test-case name="24444ST_facets00123m1_p tokoe:valid" result="pass"/><test-case name="24445ST_facets00123m1_n tokoe:invalid" result="pass"/><test-case name="24446ST_facets00124m1 tokoe:valid" result="pass"/><test-case name="24447Positive tokoe:valid" result="pass"/><test-case name="24448Negative tokoe:invalid" result="pass"/><test-case name="24449ST_facets00201m1 tokoe:valid" result="pass"/><test-case name="24450Positive tokoe:valid" result="pass"/><test-case name="24451Negative tokoe:invalid" result="pass"/><test-case name="24452ST_facets00201m10 tokoe:valid" result="pass"/><test-case name="24453Positive tokoe:valid" result="pass"/><test-case name="24454Negative tokoe:invalid" result="pass"/><test-case name="24455ST_facets00201m11 tokoe:valid" result="pass"/><test-case name="24456Positive tokoe:valid" result="pass"/><test-case name="24457Negative tokoe:invalid" result="pass"/><test-case name="24458ST_facets00201m12 tokoe:valid" result="pass"/><test-case name="24459Positive tokoe:valid" result="pass"/><test-case name="24460Negative tokoe:invalid" result="pass"/><test-case name="24461ST_facets00201m13 tokoe:valid" result="pass"/><test-case name="24462Positive tokoe:valid" result="pass"/><test-case name="24463Negative tokoe:invalid" result="pass"/><test-case name="24464ST_facets00201m14 tokoe:valid" result="pass"/><test-case name="24465Positive tokoe:valid" result="pass"/><test-case name="24466Negative tokoe:invalid" result="pass"/><test-case name="24467ST_facets00201m15 tokoe:valid" result="pass"/><test-case name="24468Positive tokoe:valid" result="pass"/><test-case name="24469Negative tokoe:invalid" result="pass"/><test-case name="24470ST_facets00201m16 tokoe:valid" result="pass"/><test-case name="24471Positive tokoe:valid" result="pass"/><test-case name="24472Negative tokoe:invalid" result="pass"/><test-case name="24473ST_facets00201m2 tokoe:valid" result="pass"/><test-case name="24474Positive tokoe:valid" result="pass"/><test-case name="24475Negative tokoe:invalid" result="pass"/><test-case name="24476ST_facets00201m3 tokoe:valid" result="pass"/><test-case name="24477Positive tokoe:valid" result="pass"/><test-case name="24478Negative tokoe:invalid" result="pass"/><test-case name="24479ST_facets00201m4 tokoe:valid" result="pass"/><test-case name="24480Positive tokoe:valid" result="pass"/><test-case name="24481Negative tokoe:invalid" result="pass"/><test-case name="24482ST_facets00201m5 tokoe:valid" result="pass"/><test-case name="24483Positive tokoe:valid" result="pass"/><test-case name="24484Negative tokoe:invalid" result="pass"/><test-case name="24485ST_facets00201m6 tokoe:valid" result="pass"/><test-case name="24486Positive tokoe:valid" result="pass"/><test-case name="24487Negative tokoe:invalid" result="pass"/><test-case name="24488ST_facets00201m7 tokoe:valid" result="pass"/><test-case name="24489Positive tokoe:valid" result="pass"/><test-case name="24490Negative tokoe:invalid" result="pass"/><test-case name="24491ST_facets00201m8 tokoe:valid" result="pass"/><test-case name="24492Positive tokoe:valid" result="pass"/><test-case name="24493Negative tokoe:invalid" result="pass"/><test-case name="24494ST_facets00201m9 tokoe:valid" result="pass"/><test-case name="24495Positive tokoe:valid" result="pass"/><test-case name="24496Negative tokoe:invalid" result="pass"/><test-case name="24497ST_facets00301m tokoe:valid" result="pass"/><test-case name="24498ST_facets00301m1_p tokoe:valid" result="pass"/><test-case name="24499ST_facets00301m1_n tokoe:invalid" result="pass"/><test-case name="24500ST_facets00401m1 tokoe:valid" result="pass"/><test-case name="24501Positive tokoe:valid" result="pass"/><test-case name="24502ST_facets00401m10 tokoe:valid" result="pass"/><test-case name="24503Positive tokoe:valid" result="pass"/><test-case name="24504ST_facets00401m11 tokoe:valid" result="pass"/><test-case name="24505Positive tokoe:valid" result="pass"/><test-case name="24506ST_facets00401m12 tokoe:valid" result="pass"/><test-case name="24507Positive tokoe:valid" result="pass"/><test-case name="24508ST_facets00401m13 tokoe:valid" result="pass"/><test-case name="24509Positive tokoe:valid" result="pass"/><test-case name="24510ST_facets00401m14 tokoe:valid" result="pass"/><test-case name="24511Positive tokoe:valid" result="pass"/><test-case name="24512ST_facets00401m15 tokoe:valid" result="pass"/><test-case name="24513Positive tokoe:valid" result="pass"/><test-case name="24514ST_facets00401m16 tokoe:valid" result="pass"/><test-case name="24515Positive tokoe:valid" result="pass"/><test-case name="24516ST_facets00401m17 tokoe:valid" result="pass"/><test-case name="24517Positive tokoe:valid" result="pass"/><test-case name="24518ST_facets00401m18 tokoe:valid" result="pass"/><test-case name="24519Positive tokoe:valid" result="pass"/><test-case name="24520ST_facets00401m19 tokoe:valid" result="pass"/><test-case name="24521Positive tokoe:valid" result="pass"/><test-case name="24522ST_facets00401m2 tokoe:valid" result="pass"/><test-case name="24523Positive tokoe:valid" result="pass"/><test-case name="24524ST_facets00401m20 tokoe:valid" result="pass"/><test-case name="24525Positive tokoe:valid" result="pass"/><test-case name="24526ST_facets00401m21 tokoe:valid" result="pass"/><test-case name="24527Positive tokoe:valid" result="pass"/><test-case name="24528ST_facets00401m3 tokoe:valid" result="pass"/><test-case name="24529Positive tokoe:valid" result="pass"/><test-case name="24530ST_facets00401m4 tokoe:valid" result="pass"/><test-case name="24531Positive tokoe:valid" result="pass"/><test-case name="24532ST_facets00401m5 tokoe:valid" result="pass"/><test-case name="24533Positive tokoe:valid" result="pass"/><test-case name="24534ST_facets00401m6 tokoe:valid" result="pass"/><test-case name="24535Positive tokoe:valid" result="pass"/><test-case name="24536ST_facets00401m7 tokoe:valid" result="pass"/><test-case name="24537Positive tokoe:valid" result="pass"/><test-case name="24538ST_facets00401m8 tokoe:valid" result="pass"/><test-case name="24539Positive tokoe:valid" result="pass"/><test-case name="24540ST_facets00401m9 tokoe:valid" result="pass"/><test-case name="24541Positive tokoe:valid" result="pass"/><test-case name="24542ST_facets00402m1 tokoe:valid" result="pass"/><test-case name="24543Positive tokoe:valid" result="pass"/><test-case name="24544ST_facets00403m1 tokoe:valid" result="pass"/><test-case name="24545Positive tokoe:valid" result="pass"/><test-case name="24546ST_facets00501m1 tokoe:valid" result="pass"/><test-case name="24547Positive tokoe:valid" result="pass"/><test-case name="24548ST_facets00501m10 tokoe:valid" result="pass"/><test-case name="24549Positive tokoe:valid" result="pass"/><test-case name="24550ST_facets00501m11 tokoe:valid" result="pass"/><test-case name="24551Positive tokoe:valid" result="pass"/><test-case name="24552ST_facets00501m12 tokoe:valid" result="pass"/><test-case name="24553Positive tokoe:valid" result="pass"/><test-case name="24554ST_facets00501m13 tokoe:valid" result="pass"/><test-case name="24555Positive tokoe:valid" result="pass"/><test-case name="24556ST_facets00501m14 tokoe:valid" result="pass"/><test-case name="24557Positive tokoe:valid" result="pass"/><test-case name="24558ST_facets00501m15 tokoe:valid" result="pass"/><test-case name="24559Positive tokoe:valid" result="pass"/><test-case name="24560ST_facets00501m16 tokoe:valid" result="pass"/><test-case name="24561Positive tokoe:valid" result="pass"/><test-case name="24562ST_facets00501m17 tokoe:valid" result="pass"/><test-case name="24563Positive tokoe:valid" result="pass"/><test-case name="24564ST_facets00501m18 tokoe:valid" result="pass"/><test-case name="24565Positive tokoe:valid" result="pass"/><test-case name="24566ST_facets00501m19 tokoe:valid" result="pass"/><test-case name="24567Positive tokoe:valid" result="pass"/><test-case name="24568ST_facets00501m2 tokoe:valid" result="pass"/><test-case name="24569Positive tokoe:valid" result="pass"/><test-case name="24570ST_facets00501m20 tokoe:valid" result="pass"/><test-case name="24571Positive tokoe:valid" result="pass"/><test-case name="24572ST_facets00501m21 tokoe:valid" result="pass"/><test-case name="24573Positive tokoe:valid" result="pass"/><test-case name="24574ST_facets00501m3 tokoe:valid" result="pass"/><test-case name="24575Positive tokoe:valid" result="pass"/><test-case name="24576ST_facets00501m4 tokoe:valid" result="pass"/><test-case name="24577Positive tokoe:valid" result="pass"/><test-case name="24578ST_facets00501m5 tokoe:valid" result="pass"/><test-case name="24579Positive tokoe:valid" result="pass"/><test-case name="24580ST_facets00501m6 tokoe:valid" result="pass"/><test-case name="24581Positive tokoe:valid" result="pass"/><test-case name="24582ST_facets00501m7 tokoe:valid" result="pass"/><test-case name="24583Positive tokoe:valid" result="pass"/><test-case name="24584ST_facets00501m8 tokoe:valid" result="pass"/><test-case name="24585Positive tokoe:valid" result="pass"/><test-case name="24586ST_facets00501m9 tokoe:valid" result="pass"/><test-case name="24587Positive tokoe:valid" result="pass"/><test-case name="24588ST_facets00502m1 tokoe:valid" result="pass"/><test-case name="24589Positive tokoe:valid" result="pass"/><test-case name="24590ST_facets00503m1 tokoe:valid" result="pass"/><test-case name="24591Positive tokoe:valid" result="pass"/><test-case name="24592ST_facets00504m1 tokoe:valid" result="pass"/><test-case name="24593Positive tokoe:valid" result="pass"/><test-case name="24594ST_facets00504m2 tokoe:valid" result="pass"/><test-case name="24595Positive tokoe:valid" result="pass"/><test-case name="24596ST_facets00505m1 tokoe:valid" result="pass"/><test-case name="24597Positive tokoe:valid" result="pass"/><test-case name="24598ST_facets00505m10 tokoe:valid" result="pass"/><test-case name="24599Positive tokoe:valid" result="pass"/><test-case name="24600ST_facets00505m2 tokoe:valid" result="pass"/><test-case name="24601Positive tokoe:valid" result="pass"/><test-case name="24602ST_facets00505m3 tokoe:valid" result="pass"/><test-case name="24603Positive tokoe:valid" result="pass"/><test-case name="24604ST_facets00505m4 tokoe:valid" result="pass"/><test-case name="24605Positive tokoe:valid" result="pass"/><test-case name="24606ST_facets00505m5 tokoe:valid" result="pass"/><test-case name="24607Positive tokoe:valid" result="pass"/><test-case name="24608ST_facets00505m6 tokoe:valid" result="pass"/><test-case name="24609Positive tokoe:valid" result="pass"/><test-case name="24610ST_facets00505m7 tokoe:valid" result="pass"/><test-case name="24611Positive tokoe:valid" result="pass"/><test-case name="24612ST_facets00505m8 tokoe:valid" result="pass"/><test-case name="24613Positive tokoe:valid" result="pass"/><test-case name="24614ST_facets00505m9 tokoe:valid" result="pass"/><test-case name="24615Positive tokoe:valid" result="pass"/><test-case name="24616ST_facets00506m1 tokoe:valid" result="pass"/><test-case name="24617Positive tokoe:valid" result="pass"/><test-case name="24618ST_facets00506m2 tokoe:valid" result="pass"/><test-case name="24619Positive tokoe:valid" result="pass"/><test-case name="24620ST_facets00601 tokoe:valid" result="pass"/><test-case name="24621ST_facets00601_p tokoe:valid" result="pass"/><test-case name="24622ST_facets00602 tokoe:valid" result="pass"/><test-case name="24623ST_facets00602_p tokoe:valid" result="pass"/><test-case name="24624ST_facets00603 tokoe:valid" result="pass"/><test-case name="24625ST_facets00603_p tokoe:valid" result="pass"/><test-case name="24626ST_facets00604 tokoe:valid" result="pass"/><test-case name="24627ST_facets00604_p tokoe:valid" result="pass"/><test-case name="24628ST_facets00605 tokoe:valid" result="pass"/><test-case name="24629ST_facets00605_p tokoe:valid" result="pass"/><test-case name="24630ST_facets00608 tokoe:valid" result="pass"/><test-case name="24631ST_facets00608_p tokoe:valid" result="pass"/><test-case name="24632ST_final00101m1 tokoe:invalid" result="pass"/><test-case name="24633ST_final00101m2 tokoe:valid" result="pass"/><test-case name="24634Positive tokoe:valid" result="pass"/><test-case name="24635Negative tokoe:invalid" result="pass"/><test-case name="24636ST_final00101m3 tokoe:valid" result="pass"/><test-case name="24637Positive tokoe:valid" result="pass"/><test-case name="24638Negative tokoe:invalid" result="pass"/><test-case name="24639ST_final00101m4 tokoe:valid" result="pass"/><test-case name="24640Positive tokoe:valid" result="pass"/><test-case name="24641Negative tokoe:invalid" result="pass"/><test-case name="24642ST_final00101m5 tokoe:valid" result="pass"/><test-case name="24643Positive tokoe:valid" result="pass"/><test-case name="24644Negative tokoe:invalid" result="pass"/><test-case name="24645ST_final00101m6 tokoe:valid" result="pass"/><test-case name="24646Positive tokoe:valid" result="pass"/><test-case name="24647Negative tokoe:invalid" result="pass"/><test-case name="24648ST_final00102m1 tokoe:invalid" result="pass"/><test-case name="24649ST_final00102m2 tokoe:valid" result="pass"/><test-case name="24650Positive tokoe:valid" result="pass"/><test-case name="24651Negative tokoe:invalid" result="pass"/><test-case name="24652ST_final00102m3 tokoe:valid" result="pass"/><test-case name="24653Positive tokoe:valid" result="pass"/><test-case name="24654Negative tokoe:invalid" result="pass"/><test-case name="24655ST_final00102m4 tokoe:valid" result="pass"/><test-case name="24656Positive tokoe:valid" result="pass"/><test-case name="24657Negative tokoe:invalid" result="pass"/><test-case name="24658ST_final00102m5 tokoe:valid" result="pass"/><test-case name="24659Positive tokoe:valid" result="pass"/><test-case name="24660Negative tokoe:invalid" result="pass"/><test-case name="24661ST_final00102m6 tokoe:valid" result="pass"/><test-case name="24662Positive tokoe:valid" result="pass"/><test-case name="24663Negative tokoe:invalid" result="pass"/><test-case name="24664ST_final00103m1 tokoe:invalid" result="pass"/><test-case name="24665ST_final00103m2 tokoe:valid" result="pass"/><test-case name="24666Positive tokoe:valid" result="pass"/><test-case name="24667Negative tokoe:invalid" result="pass"/><test-case name="24668ST_final00103m3 tokoe:valid" result="pass"/><test-case name="24669Positive tokoe:valid" result="pass"/><test-case name="24670Negative tokoe:invalid" result="pass"/><test-case name="24671ST_name00101m tokoe:valid" result="pass"/><test-case name="24672ST_name00101m1_p tokoe:valid" result="pass"/><test-case name="24673ST_name00101m1_n tokoe:invalid" result="pass"/><test-case name="24674ST_name00201m tokoe:invalid" result="pass"/><test-case name="24675ST_name00301m tokoe:invalid" result="pass"/><test-case name="24676ST_name00401m tokoe:valid" result="pass"/><test-case name="24677ST_name00401m1_p tokoe:valid" result="pass"/><test-case name="24678ST_targetNS00101m tokoe:valid" result="pass"/><test-case name="24679ST_targetNS00101m1_p tokoe:valid" result="pass"/><test-case name="24680ST_targetNS00101m1_n tokoe:invalid" result="pass"/><test-case name="24681ST_targetNS00101m2_p tokoe:valid" result="pass"/><test-case name="24682ST_targetNS00101m2_n tokoe:invalid" result="pass"/><test-case name="24683ST_targetNS00201m tokoe:valid" result="pass"/><test-case name="24684ST_targetNS00201m1_p tokoe:valid" result="pass"/><test-case name="24685ST_variety00101m1 tokoe:valid" result="pass"/><test-case name="24686Positive tokoe:valid" result="pass"/><test-case name="24687Negative tokoe:invalid" result="pass"/><test-case name="24688ST_variety00101m2 tokoe:valid" result="pass"/><test-case name="24689Positive tokoe:valid" result="pass"/><test-case name="24690Negative tokoe:invalid" result="pass"/><test-case name="24691ST_variety00201m1 tokoe:invalid" result="pass"/><test-case name="24692ST_variety00201m2 tokoe:invalid" result="pass"/><test-case name="24693annotations00101m1 tokoe:valid" result="pass"/><test-case name="24694Positive tokoe:valid" result="pass"/><test-case name="24695annotations00101m2 tokoe:valid" result="pass"/><test-case name="24696Positive tokoe:valid" result="pass"/><test-case name="24697annotations00101m3 tokoe:valid" result="pass"/><test-case name="24698Positive tokoe:valid" result="pass"/><test-case name="24699annotations00101m4 tokoe:valid" result="pass"/><test-case name="24700Positive tokoe:valid" result="pass"/><test-case name="24701annotations00101m5 tokoe:valid" result="pass"/><test-case name="24702Positive tokoe:valid" result="pass"/><test-case name="24703annotations00101m6 tokoe:valid" result="pass"/><test-case name="24704Positive tokoe:valid" result="pass"/><test-case name="24705annotation00101m1 tokoe:valid" result="pass"/><test-case name="24706Positive tokoe:valid" result="pass"/><test-case name="24707annotation00101m2 tokoe:invalid" result="pass"/><test-case name="24708annotation00101m3 tokoe:valid" result="pass"/><test-case name="24709Positive tokoe:valid" result="pass"/><test-case name="24710annotation00101m4 tokoe:invalid" result="pass"/><test-case name="24711annotation00101m5 tokoe:valid" result="pass"/><test-case name="24712Positive tokoe:valid" result="pass"/><test-case name="24713annotation00101m6 tokoe:invalid" result="pass"/><test-case name="24714annotation00101m7 tokoe:valid" result="pass"/><test-case name="24715Positive tokoe:valid" result="pass"/><test-case name="24716annotation00101m8 tokoe:invalid" result="pass"/><test-case name="24717nsConstraint00101m1 tokoe:valid" result="pass"/><test-case name="24718Positive tokoe:valid" result="pass"/><test-case name="24719Negative tokoe:invalid" result="pass"/><test-case name="24720nsConstraint00101m2 tokoe:valid" result="pass"/><test-case name="24721Positive tokoe:valid" result="pass"/><test-case name="24722Negative tokoe:invalid" result="pass"/><test-case name="24723nsConstraint00102m1 tokoe:valid" result="pass"/><test-case name="24724Positive tokoe:valid" result="pass"/><test-case name="24725nsConstraint00102m2 tokoe:valid" result="pass"/><test-case name="24726Positive tokoe:valid" result="pass"/><test-case name="24727nsConstraint00201m1 tokoe:valid" result="pass"/><test-case name="24728Positive tokoe:valid" result="pass"/><test-case name="24729Negative tokoe:invalid" result="pass"/><test-case name="24730nsConstraint00202m1 tokoe:valid" result="pass"/><test-case name="24731Positive tokoe:valid" result="pass"/><test-case name="24732Negative tokoe:invalid" result="pass"/><test-case name="24733nsConstraint00301m1 tokoe:valid" result="pass"/><test-case name="24734Positive tokoe:valid" result="pass"/><test-case name="24735Negative tokoe:invalid" result="pass"/><test-case name="24736nsConstraint00302m1 tokoe:valid" result="pass"/><test-case name="24737Positive tokoe:valid" result="pass"/><test-case name="24738Negative tokoe:invalid" result="pass"/><test-case name="24739psContents00101m1 tokoe:valid" result="pass"/><test-case name="24740Positive tokoe:valid" result="pass"/><test-case name="24741Negative tokoe:invalid" result="pass"/><test-case name="24742psContents00101m2 tokoe:valid" result="pass"/><test-case name="24743Negative tokoe:invalid" result="pass"/><test-case name="24744psContents00102m1 tokoe:valid" result="pass"/><test-case name="24745Positive tokoe:valid" result="pass"/><test-case name="24746Negative tokoe:invalid" result="pass"/><test-case name="24747psContents00102m2 tokoe:valid" result="pass"/><test-case name="24748Negative tokoe:invalid" result="pass"/><test-case name="24749psContents00201m1 tokoe:valid" result="pass"/><test-case name="24750Positive tokoe:valid" result="pass"/><test-case name="24751Negative tokoe:invalid" result="pass"/><test-case name="24752psContents00202m1 tokoe:valid" result="pass"/><test-case name="24753Positive tokoe:valid" result="pass"/><test-case name="24754psContents00301m1 tokoe:valid" result="pass"/><test-case name="24755Positive tokoe:valid" result="pass"/><test-case name="24756Negative tokoe:invalid" result="pass"/><test-case name="24757psContents00301m2 tokoe:valid" result="pass"/><test-case name="24758Positive tokoe:valid" result="pass"/><test-case name="24759Negative tokoe:invalid" result="pass"/><test-case name="24760psContents00302m1 tokoe:valid" result="pass"/><test-case name="24761Positive tokoe:valid" result="pass"/><test-case name="24762Negative tokoe:invalid" result="pass"/><test-case name="24763psContents00302m2 tokoe:valid" result="pass"/><test-case name="24764Positive tokoe:valid" result="pass"/><test-case name="24765Negative tokoe:invalid" result="pass"/><test-case name="24766addA001 tokoe:valid" result="pass"/><test-case name="24767addA002 tokoe:valid" result="pass"/><test-case name="24768addA003 tokoe:invalid" result="pass"/><test-case name="24769addA005 tokoe:valid" result="pass"/><test-case name="24770addA005.v tokoe:valid" result="pass"/><test-case name="24771addA006.v tokoe:valid" result="fail"/><test-case name="24772adda007.v tokoe:valid" result="pass"/><test-case name="24773addA008.v tokoe:valid" result="pass"/><test-case name="24774addC001 tokoe:valid" result="pass"/><test-case name="24775addC001.v tokoe:valid" result="pass"/><test-case name="24776addC002 tokoe:valid" result="pass"/><test-case name="24777addB001 tokoe:valid" result="pass"/><test-case name="24778addB002 tokoe:valid" result="pass"/><test-case name="24779addB002.i tokoe:invalid" result="pass"/><test-case name="24780addB003 tokoe:valid" result="pass"/><test-case name="24781addB003.i tokoe:invalid" result="pass"/><test-case name="24782addB004 tokoe:invalid" result="pass"/><test-case name="24783addB005 tokoe:invalid" result="pass"/><test-case name="24784addB006 tokoe:valid" result="pass"/><test-case name="24785addB007 tokoe:valid" result="pass"/><test-case name="24786addB008 tokoe:invalid" result="pass"/><test-case name="24787addB009 tokoe:invalid" result="pass"/><test-case name="24788addB010 tokoe:invalid" result="pass"/><test-case name="24789addB011 tokoe:valid" result="pass"/><test-case name="24790addB011.i tokoe:invalid" result="pass"/><test-case name="24791addB012 tokoe:valid" result="pass"/><test-case name="24792addB012.v tokoe:valid" result="pass"/><test-case name="24793addB013 tokoe:valid" result="pass"/><test-case name="24794addB013.i tokoe:invalid" result="pass"/><test-case name="24795addB014 tokoe:invalid" result="pass"/><test-case name="24796addB016 tokoe:valid" result="fail"/><test-case name="24797addB017 tokoe:valid" result="pass"/><test-case name="24798addB018 tokoe:valid" result="pass"/><test-case name="24799addB019 tokoe:valid" result="pass"/><test-case name="24800addB019.v tokoe:valid" result="pass"/><test-case name="24801addB020 tokoe:valid" result="pass"/><test-case name="24802addB021 tokoe:valid" result="pass"/><test-case name="24803addB021a tokoe:invalid" result="pass"/><test-case name="24804addB022 tokoe:invalid" result="pass"/><test-case name="24805addB023 tokoe:valid" result="pass"/><test-case name="24806addB024 tokoe:valid" result="pass"/><test-case name="24807addB025 tokoe:valid" result="pass"/><test-case name="24808addB026 tokoe:valid" result="pass"/><test-case name="24809addB027 tokoe:valid" result="pass"/><test-case name="24810addB028 tokoe:valid" result="pass"/><test-case name="24811addB028.v tokoe:valid" result="pass"/><test-case name="24812addB029 tokoe:valid" result="pass"/><test-case name="24813addB030 tokoe:invalid" result="pass"/><test-case name="24814addB31 tokoe:valid" result="pass"/><test-case name="24815addB31.v tokoe:valid" result="pass"/><test-case name="24816addB32 tokoe:invalid" result="pass"/><test-case name="24817addB033 tokoe:invalid" result="pass"/><test-case name="24818addB034 tokoe:valid" result="pass"/><test-case name="24819addB034.v tokoe:valid" result="pass"/><test-case name="24820addB035 tokoe:invalid" result="pass"/><test-case name="24821addB036 tokoe:invalid" result="pass"/><test-case name="24822addB037 tokoe:valid" result="pass"/><test-case name="24823addB037.i tokoe:invalid" result="pass"/><test-case name="24824addB040 tokoe:valid" result="pass"/><test-case name="24825addB040.v tokoe:valid" result="pass"/><test-case name="24826addB041 tokoe:invalid" result="pass"/><test-case name="24827addB042 tokoe:valid" result="pass"/><test-case name="24828addB043 tokoe:invalid" result="pass"/><test-case name="24829addB044 tokoe:invalid" result="pass"/><test-case name="24830addB045 tokoe:invalid" result="pass"/><test-case name="24831addB046 tokoe:valid" result="pass"/><test-case name="24832addB046.v tokoe:valid" result="pass"/><test-case name="24833addB047 tokoe:valid" result="pass"/><test-case name="24834addB047.v tokoe:valid" result="pass"/><test-case name="24835addB050 tokoe:valid" result="pass"/><test-case name="24836addB050.i tokoe:invalid" result="pass"/><test-case name="24837addB051 tokoe:valid" result="pass"/><test-case name="24838addB051b tokoe:valid" result="pass"/><test-case name="24839addB052 tokoe:invalid" result="pass"/><test-case name="24840addB053 tokoe:invalid" result="pass"/><test-case name="24841addB054 tokoe:valid" result="pass"/><test-case name="24842addB054.v tokoe:valid" result="pass"/><test-case name="24843addB055 tokoe:valid" result="pass"/><test-case name="24844addB056 tokoe:valid" result="pass"/><test-case name="24845addB056.v tokoe:valid" result="pass"/><test-case name="24846addB057 tokoe:valid" result="pass"/><test-case name="24847addB057.i tokoe:invalid" result="pass"/><test-case name="24848addB058 tokoe:valid" result="pass"/><test-case name="24849addB058.v tokoe:valid" result="pass"/><test-case name="24850addB059 tokoe:valid" result="pass"/><test-case name="24851addB059.v tokoe:valid" result="pass"/><test-case name="24852addB060 tokoe:valid" result="pass"/><test-case name="24853addB061 tokoe:valid" result="pass"/><test-case name="24854addB062 tokoe:valid" result="pass"/><test-case name="24855addB063.i tokoe:invalid" result="pass"/><test-case name="24856addB064 tokoe:valid" result="pass"/><test-case name="24857addB065 tokoe:valid" result="pass"/><test-case name="24858addB065.i tokoe:invalid" result="pass"/><test-case name="24859addB066 tokoe:valid" result="pass"/><test-case name="24860addB066.i tokoe:invalid" result="pass"/><test-case name="24861addB067 tokoe:valid" result="pass"/><test-case name="24862addB067.v tokoe:valid" result="pass"/><test-case name="24863addB069 tokoe:valid" result="pass"/><test-case name="24864addB069.i tokoe:invalid" result="pass"/><test-case name="24865addB070 tokoe:invalid" result="pass"/><test-case name="24866addB070a tokoe:invalid" result="pass"/><test-case name="24867addB071 tokoe:valid" result="pass"/><test-case name="24868addB072 tokoe:valid" result="pass"/><test-case name="24869addB073 tokoe:valid" result="pass"/><test-case name="24870addB075 tokoe:valid" result="pass"/><test-case name="24871addB075.i tokoe:invalid" result="pass"/><test-case name="24872addB076 tokoe:valid" result="pass"/><test-case name="24873addB076.v tokoe:valid" result="pass"/><test-case name="24874addB077 tokoe:valid" result="pass"/><test-case name="24875addB079 tokoe:valid" result="pass"/><test-case name="24876addB080 tokoe:valid" result="pass"/><test-case name="24877addB080.i tokoe:invalid" result="pass"/><test-case name="24878addB081 tokoe:invalid" result="pass"/><test-case name="24879addB082 tokoe:invalid" result="pass"/><test-case name="24880addB083 tokoe:invalid" result="pass"/><test-case name="24881addB084 tokoe:valid" result="pass"/><test-case name="24882addB084.v tokoe:valid" result="pass"/><test-case name="24883addB085 tokoe:valid" result="pass"/><test-case name="24884addB087 tokoe:valid" result="pass"/><test-case name="24885addB087.i tokoe:invalid" result="pass"/><test-case name="24886addB088 tokoe:valid" result="pass"/><test-case name="24887addB088.v tokoe:valid" result="pass"/><test-case name="24888addB089 tokoe:invalid" result="pass"/><test-case name="24889addB090 tokoe:valid" result="pass"/><test-case name="24890addB090.v tokoe:valid" result="pass"/><test-case name="24891addB091 tokoe:valid" result="pass"/><test-case name="24892addB092 tokoe:valid" result="pass"/><test-case name="24893addB092.i tokoe:invalid" result="pass"/><test-case name="24894addB093 tokoe:valid" result="pass"/><test-case name="24895addB094 tokoe:valid" result="pass"/><test-case name="24896addB095 tokoe:invalid" result="pass"/><test-case name="24897addB096 tokoe:valid" result="pass"/><test-case name="24898addB096.v tokoe:valid" result="pass"/><test-case name="24899addB097 tokoe:invalid" result="pass"/><test-case name="24900addB098 tokoe:valid" result="pass"/><test-case name="24901addB098.i tokoe:invalid" result="pass"/><test-case name="24902addB100 tokoe:invalid" result="pass"/><test-case name="24903addB101 tokoe:invalid" result="pass"/><test-case name="24904addB102 tokoe:valid" result="pass"/><test-case name="24905addB102.i tokoe:invalid" result="pass"/><test-case name="24906addB103 tokoe:valid" result="pass"/><test-case name="24907addB104 tokoe:valid" result="pass"/><test-case name="24908addB104.v tokoe:valid" result="pass"/><test-case name="24909addB105 tokoe:valid" result="pass"/><test-case name="24910addB105.i tokoe:invalid" result="pass"/><test-case name="24911addB106 tokoe:valid" result="pass"/><test-case name="24912addB107 tokoe:valid" result="pass"/><test-case name="24913addB108 tokoe:invalid" result="pass"/><test-case name="24914addB109 tokoe:valid" result="pass"/><test-case name="24915addB109.i tokoe:invalid" result="pass"/><test-case name="24916addB110 tokoe:invalid" result="pass"/><test-case name="24917addB111 tokoe:invalid" result="pass"/><test-case name="24918addB112 tokoe:invalid" result="pass"/><test-case name="24919addB113 tokoe:invalid" result="pass"/><test-case name="24920addB114 tokoe:valid" result="pass"/><test-case name="24921addB114.i tokoe:invalid" result="pass"/><test-case name="24922addB115 tokoe:valid" result="pass"/><test-case name="24923addB115.i tokoe:invalid" result="pass"/><test-case name="24924addB116 tokoe:valid" result="pass"/><test-case name="24925addB116.v tokoe:valid" result="pass"/><test-case name="24926addB117 tokoe:valid" result="pass"/><test-case name="24927addB121 tokoe:invalid" result="pass"/><test-case name="24928addB122 tokoe:valid" result="pass"/><test-case name="24929addB122.v tokoe:valid" result="pass"/><test-case name="24930addB123 tokoe:valid" result="pass"/><test-case name="24931addB123.i tokoe:invalid" result="pass"/><test-case name="24932addB124.i tokoe:invalid" result="pass"/><test-case name="24933addB125 tokoe:valid" result="pass"/><test-case name="24934addB125.v tokoe:valid" result="pass"/><test-case name="24935addB126 tokoe:valid" result="pass"/><test-case name="24936addB127 tokoe:valid" result="pass"/><test-case name="24937addB128 tokoe:valid" result="pass"/><test-case name="24938addB129 tokoe:valid" result="pass"/><test-case name="24939addB129.v tokoe:valid" result="pass"/><test-case name="24940addB130 tokoe:valid" result="pass"/><test-case name="24941addB130.v tokoe:valid" result="pass"/><test-case name="24942addB131 tokoe:valid" result="pass"/><test-case name="24943addB131.v tokoe:valid" result="pass"/><test-case name="24944addB132 tokoe:valid" result="pass"/><test-case name="24945addB132.v tokoe:valid" result="pass"/><test-case name="24946addB134.v tokoe:valid" result="pass"/><test-case name="24947addB135 tokoe:valid" result="pass"/><test-case name="24948addB135.v tokoe:valid" result="pass"/><test-case name="24949addB136 tokoe:valid" result="pass"/><test-case name="24950addB136.v tokoe:valid" result="pass"/><test-case name="24951addB137 tokoe:invalid" result="pass"/><test-case name="24952addB138.i tokoe:invalid" result="pass"/><test-case name="24953addB139.i tokoe:invalid" result="pass"/><test-case name="24954addB140 tokoe:valid" result="pass"/><test-case name="24955addB140.v tokoe:valid" result="pass"/><test-case name="24956addB141 tokoe:invalid" result="pass"/><test-case name="24957addB142.i tokoe:invalid" result="pass"/><test-case name="24958addB143 tokoe:valid" result="pass"/><test-case name="24959addB143.i tokoe:invalid" result="pass"/><test-case name="24960addB144 tokoe:valid" result="pass"/><test-case name="24961addB145 tokoe:valid" result="pass"/><test-case name="24962addB145.v tokoe:valid" result="pass"/><test-case name="24963test93160 tokoe:valid" result="pass"/><test-case name="24964test93160.i tokoe:invalid" result="pass"/><test-case name="24965addB147 tokoe:valid" result="pass"/><test-case name="24966addB148 tokoe:valid" result="pass"/><test-case name="24967addB148.v tokoe:valid" result="pass"/><test-case name="24968addB149 tokoe:valid" result="pass"/><test-case name="24969addB149.i tokoe:invalid" result="pass"/><test-case name="24970addB150 tokoe:valid" result="pass"/><test-case name="24971addB151 tokoe:valid" result="pass"/><test-case name="24972addB153 tokoe:invalid" result="pass"/><test-case name="24973addB155.v tokoe:valid" result="pass"/><test-case name="24974addB156.i tokoe:invalid" result="pass"/><test-case name="24975addB157.v tokoe:valid" result="pass"/><test-case name="24976addB158.i tokoe:invalid" result="pass"/><test-case name="24977addB159.i tokoe:invalid" result="pass"/><test-case name="24978addB160.v tokoe:valid" result="pass"/><test-case name="24979addB161.i tokoe:invalid" result="pass"/><test-case name="24980addB162.i tokoe:invalid" result="pass"/><test-case name="24981addB163.v tokoe:valid" result="pass"/><test-case name="24982addB164.i tokoe:invalid" result="pass"/><test-case name="24983addB165.v tokoe:valid" result="pass"/><test-case name="24984addB166.i tokoe:invalid" result="pass"/><test-case name="24985addB167.i tokoe:invalid" result="fail"/><test-case name="24986addB168.v tokoe:valid" result="pass"/><test-case name="24987addB169.v tokoe:valid" result="pass"/><test-case name="24988addB169.1 tokoe:valid" result="pass"/><test-case name="24989addB169.1.v tokoe:valid" result="pass"/><test-case name="24990addB170 tokoe:valid" result="pass"/><test-case name="24991addB170.i tokoe:invalid" result="pass"/><test-case name="24992addB171 tokoe:valid" result="pass"/><test-case name="24993addB171.i tokoe:invalid" result="pass"/><test-case name="24994addB172 tokoe:valid" result="pass"/><test-case name="24995addB172.i tokoe:invalid" result="pass"/><test-case name="24996addB173 tokoe:valid" result="pass"/><test-case name="24997addB173.i tokoe:invalid" result="pass"/><test-case name="24998addB174 tokoe:valid" result="pass"/><test-case name="24999addB174.v tokoe:valid" result="pass"/><test-case name="25000addB175 tokoe:valid" result="pass"/><test-case name="25001addB175.i tokoe:invalid" result="pass"/><test-case name="25002addB176 tokoe:valid" result="pass"/><test-case name="25003addB176.v tokoe:valid" result="pass"/><test-case name="25004addB177 tokoe:invalid" result="pass"/><test-case name="25005addB178 tokoe:invalid" result="pass"/><test-case name="25006addB180 tokoe:invalid" result="pass"/><test-case name="25007addB181.i tokoe:invalid" result="pass"/><test-case name="25008addB182 tokoe:valid" result="pass"/><test-case name="25009addB182.v tokoe:valid" result="pass"/><test-case name="25010addB183 tokoe:valid" result="pass"/><test-case name="25011addB184 tokoe:valid" result="pass"/><test-case name="25012addB187 tokoe:valid" result="pass"/><test-case name="25013addB187.v tokoe:valid" result="pass"/><test-case name="25014addB188 tokoe:valid" result="pass"/><test-case name="25015addB188.i tokoe:invalid" result="pass"/><test-case name="25016addB191.v tokoe:invalid" result="pass"/><test-case name="25017addB193 tokoe:valid" result="pass"/><test-case name="25018addB194 tokoe:valid" result="fail"/><test-case name="25019addB196a tokoe:valid" result="pass"/><test-case name="25020addB196a.v tokoe:valid" result="pass"/><test-case name="25021addB196b tokoe:valid" result="pass"/><test-case name="25022addB196b.i tokoe:invalid" result="pass"/><test-case name="25023addB196c tokoe:valid" result="pass"/><test-case name="25024addB196c.v tokoe:valid" result="pass"/><test-case name="25025addB196d tokoe:valid" result="pass"/><test-case name="25026addB196d.i tokoe:invalid" result="pass"/><test-case name="25027addB196e tokoe:valid" result="pass"/><test-case name="25028addB196e.i tokoe:invalid" result="pass"/><test-case name="25029addB196f tokoe:valid" result="pass"/><test-case name="25030addB196f.v tokoe:valid" result="pass"/><test-case name="25031addB196g tokoe:valid" result="pass"/><test-case name="25032addB196g.i tokoe:invalid" result="pass"/><test-case name="25033addB196h tokoe:valid" result="pass"/><test-case name="25034addB196h.v tokoe:valid" result="pass"/><test-case name="25035addB196i tokoe:valid" result="pass"/><test-case name="25036addB196i.i tokoe:invalid" result="pass"/><test-case name="25037addB196j tokoe:valid" result="pass"/><test-case name="25038addB196j.i tokoe:invalid" result="pass"/><test-case name="25039addB196k tokoe:valid" result="pass"/><test-case name="25040addB196k.i tokoe:invalid" result="pass"/><test-case name="25041addB196l tokoe:valid" result="pass"/><test-case name="25042addB196l.i tokoe:invalid" result="pass"/><test-case name="25043addB197a tokoe:valid" result="pass"/><test-case name="25044addB197a.v tokoe:valid" result="pass"/><test-case name="25045addB197b tokoe:valid" result="pass"/><test-case name="25046addB197b.i tokoe:invalid" result="pass"/><test-case name="25047addB197c tokoe:valid" result="pass"/><test-case name="25048addB197c.v tokoe:valid" result="pass"/><test-case name="25049addB197d tokoe:valid" result="pass"/><test-case name="25050addB197d.i tokoe:invalid" result="pass"/><test-case name="25051addB197e tokoe:valid" result="pass"/><test-case name="25052addB197e.i tokoe:invalid" result="pass"/><test-case name="25053addB197f tokoe:valid" result="pass"/><test-case name="25054addB197f.i tokoe:invalid" result="pass"/><test-case name="25055addB198a tokoe:valid" result="pass"/><test-case name="25056addB198a.i tokoe:invalid" result="pass"/><test-case name="25057addB198b tokoe:valid" result="pass"/><test-case name="25058addB198b.i tokoe:invalid" result="pass"/><test-case name="25059addB198c tokoe:valid" result="pass"/><test-case name="25060addB198c.v tokoe:valid" result="pass"/><test-case name="25061addB198d tokoe:valid" result="pass"/><test-case name="25062addB198d.v tokoe:valid" result="pass"/><test-case name="25063addB199.i tokoe:invalid" result="pass"/><test-case name="25064addB200a tokoe:valid" result="pass"/><test-case name="25065addB200a.i tokoe:invalid" result="pass"/><test-case name="25066addB200b tokoe:valid" result="pass"/><test-case name="25067addB200b.i tokoe:invalid" result="pass"/><test-case name="25068addB200c tokoe:valid" result="pass"/><test-case name="25069addB200c.i tokoe:invalid" result="pass"/><test-case name="25070addB201 tokoe:valid" result="pass"/><test-case name="25071addB201.i tokoe:invalid" result="pass"/><test-case name="25072addB202a.i tokoe:invalid" result="pass"/><test-case name="25073addB202b.i tokoe:invalid" result="pass"/><test-case name="25074addD001 tokoe:valid" result="pass"/><test-case name="25075addD001.v tokoe:valid" result="pass"/><test-case name="25076addD002 tokoe:valid" result="pass"/><test-case name="25077addD002.v tokoe:valid" result="pass"/><test-case name="25078addD003 tokoe:valid" result="pass"/><test-case name="25079addD004 tokoe:valid" result="pass"/><test-case name="25080addD004.v tokoe:valid" result="pass"/><test-case name="25081addD004a tokoe:valid" result="pass"/><test-case name="25082addD004a.v tokoe:valid" result="pass"/><test-case name="25083isDefault001 tokoe:valid" result="pass"/><test-case name="25084isDefault001.v tokoe:valid" result="pass"/><test-case name="25085isDefault002 tokoe:valid" result="pass"/><test-case name="25086isDefault002.v tokoe:valid" result="pass"/><test-case name="25087isDefault003 tokoe:valid" result="pass"/><test-case name="25088isDefault003.v tokoe:valid" result="pass"/><test-case name="25089isDefault004 tokoe:valid" result="pass"/><test-case name="25090isDefault004.i tokoe:invalid" result="pass"/><test-case name="25091isDefault005 tokoe:valid" result="pass"/><test-case name="25092isDefault005.v tokoe:valid" result="pass"/><test-case name="25093isDefault006 tokoe:valid" result="pass"/><test-case name="25094isDefault006.v tokoe:valid" result="pass"/><test-case name="25095isDefault007 tokoe:valid" result="pass"/><test-case name="25096isDefault007.v tokoe:valid" result="pass"/><test-case name="25097isDefault008 tokoe:valid" result="pass"/><test-case name="25098isDefault008.i tokoe:invalid" result="pass"/><test-case name="25099isDefault009 tokoe:valid" result="pass"/><test-case name="25100isDefault009.i tokoe:invalid" result="pass"/><test-case name="25101isDefault010 tokoe:valid" result="pass"/><test-case name="25102isDefault010.i tokoe:invalid" result="pass"/><test-case name="25103isDefault011 tokoe:valid" result="pass"/><test-case name="25104isDefault011.i tokoe:invalid" result="pass"/><test-case name="25105isDefault021 tokoe:valid" result="pass"/><test-case name="25106isDefault021.v tokoe:valid" result="pass"/><test-case name="25107isDefault022 tokoe:valid" result="pass"/><test-case name="25108isDefault022.v tokoe:valid" result="pass"/><test-case name="25109isDefault023 tokoe:valid" result="pass"/><test-case name="25110isDefault023.v tokoe:valid" result="pass"/><test-case name="25111isDefault024 tokoe:valid" result="pass"/><test-case name="25112isDefault024.v tokoe:valid" result="pass"/><test-case name="25113isDefault025 tokoe:valid" result="pass"/><test-case name="25114isDefault025.v tokoe:valid" result="pass"/><test-case name="25115isDefault026 tokoe:valid" result="pass"/><test-case name="25116isDefault026.v tokoe:valid" result="pass"/><test-case name="25117isDefault027 tokoe:valid" result="pass"/><test-case name="25118isDefault027.v tokoe:valid" result="pass"/><test-case name="25119isDefault028 tokoe:valid" result="pass"/><test-case name="25120isDefault028.v tokoe:valid" result="pass"/><test-case name="25121isDefault051 tokoe:valid" result="pass"/><test-case name="25122isDefault051.v tokoe:valid" result="pass"/><test-case name="25123isDefault052 tokoe:valid" result="pass"/><test-case name="25124isDefault052.i tokoe:invalid" result="pass"/><test-case name="25125isDefault053 tokoe:valid" result="pass"/><test-case name="25126isDefault053.i tokoe:invalid" result="pass"/><test-case name="25127isDefault054 tokoe:valid" result="pass"/><test-case name="25128isDefault054.i tokoe:invalid" result="pass"/><test-case name="25129isDefault055 tokoe:valid" result="pass"/><test-case name="25130isDefault055.v tokoe:valid" result="pass"/><test-case name="25131isDefault056 tokoe:valid" result="pass"/><test-case name="25132isDefault056.v tokoe:valid" result="pass"/><test-case name="25133isDefault057 tokoe:valid" result="pass"/><test-case name="25134isDefault057.v tokoe:valid" result="pass"/><test-case name="25135isDefault058 tokoe:valid" result="pass"/><test-case name="25136isDefault058.v tokoe:valid" result="pass"/><test-case name="25137isDefault061 tokoe:valid" result="pass"/><test-case name="25138isDefault061.v tokoe:valid" result="pass"/><test-case name="25139isDefault062 tokoe:valid" result="pass"/><test-case name="25140isDefault062.i tokoe:invalid" result="pass"/><test-case name="25141isDefault063 tokoe:valid" result="pass"/><test-case name="25142isDefault063.i tokoe:invalid" result="pass"/><test-case name="25143isDefault064 tokoe:valid" result="pass"/><test-case name="25144isDefault064.i tokoe:invalid" result="pass"/><test-case name="25145isDefault065 tokoe:valid" result="pass"/><test-case name="25146isDefault065.v tokoe:valid" result="pass"/><test-case name="25147isDefault066 tokoe:valid" result="pass"/><test-case name="25148isDefault066.v tokoe:valid" result="pass"/><test-case name="25149isDefault067 tokoe:valid" result="pass"/><test-case name="25150isDefault067.v tokoe:valid" result="pass"/><test-case name="25151isDefault068 tokoe:valid" result="pass"/><test-case name="25152isDefault068.v tokoe:valid" result="pass"/><test-case name="25153isDefault060_1 tokoe:valid" result="pass"/><test-case name="25154isDefault060_1.v tokoe:valid" result="pass"/><test-case name="25155isDefault070 tokoe:valid" result="pass"/><test-case name="25156isDefault070.i tokoe:invalid" result="pass"/><test-case name="25157isDefault071 tokoe:valid" result="pass"/><test-case name="25158isDefault071.v tokoe:valid" result="pass"/><test-case name="25159isDefault072 tokoe:valid" result="pass"/><test-case name="25160isDefault072.v tokoe:valid" result="pass"/><test-case name="25161isDefault073 tokoe:valid" result="pass"/><test-case name="25162isDefault073.v tokoe:valid" result="pass"/><test-case name="25163isDefault074 tokoe:valid" result="pass"/><test-case name="25164isDefault074.v tokoe:valid" result="pass"/><test-case name="25165isDefault075 tokoe:valid" result="pass"/><test-case name="25166isDefault075.v tokoe:valid" result="pass"/><test-case name="25167isDefault076 tokoe:valid" result="pass"/><test-case name="25168isDefault076.v tokoe:valid" result="pass"/><test-case name="25169isDefault077 tokoe:valid" result="pass"/><test-case name="25170isDefault077.i tokoe:invalid" result="pass"/><test-case name="25171isDefault078 tokoe:valid" result="pass"/><test-case name="25172isDefault078.v tokoe:valid" result="pass"/><test-case name="25173isDefault079 tokoe:valid" result="pass"/><test-case name="25174isDefault079.v tokoe:valid" result="pass"/><test-case name="25175memberType001 tokoe:valid" result="pass"/><test-case name="25176memberType001.v tokoe:valid" result="pass"/><test-case name="25177memberType002 tokoe:valid" result="pass"/><test-case name="25178memberType002.v tokoe:valid" result="pass"/><test-case name="25179memberType003 tokoe:valid" result="pass"/><test-case name="25180memberType003.v tokoe:valid" result="pass"/><test-case name="25181memberType004 tokoe:valid" result="pass"/><test-case name="25182memberType004.v tokoe:valid" result="pass"/><test-case name="25183memberType005 tokoe:valid" result="pass"/><test-case name="25184memberType005.v tokoe:valid" result="pass"/><test-case name="25185memberType006 tokoe:valid" result="pass"/><test-case name="25186memberType006.v tokoe:valid" result="pass"/><test-case name="25187memberType007 tokoe:valid" result="pass"/><test-case name="25188memberType007.v tokoe:valid" result="pass"/><test-case name="25189memberType008 tokoe:valid" result="pass"/><test-case name="25190memberType008.v tokoe:valid" result="pass"/><test-case name="25191memberType021 tokoe:valid" result="pass"/><test-case name="25192memberType021.v tokoe:valid" result="pass"/><test-case name="25193memberType022 tokoe:valid" result="pass"/><test-case name="25194memberType022.v tokoe:valid" result="pass"/><test-case name="25195memberType023 tokoe:valid" result="pass"/><test-case name="25196memberType023.v tokoe:valid" result="pass"/><test-case name="25197memberType024 tokoe:valid" result="pass"/><test-case name="25198memberType024.v tokoe:valid" result="pass"/><test-case name="25199annotA001 tokoe:valid" result="pass"/><test-case name="25200annotA002 tokoe:valid" result="pass"/><test-case name="25201annotA003 tokoe:valid" result="pass"/><test-case name="25202annotA004 tokoe:valid" result="pass"/><test-case name="25203annotA005 tokoe:valid" result="pass"/><test-case name="25204annotA006 tokoe:valid" result="pass"/><test-case name="25205annotA007 tokoe:valid" result="pass"/><test-case name="25206annotA008 tokoe:valid" result="pass"/><test-case name="25207annotA009 tokoe:valid" result="pass"/><test-case name="25208annotA010 tokoe:valid" result="pass"/><test-case name="25209annotA011 tokoe:valid" result="pass"/><test-case name="25210annotA012 tokoe:valid" result="pass"/><test-case name="25211annotA013 tokoe:valid" result="pass"/><test-case name="25212annotA014 tokoe:valid" result="pass"/><test-case name="25213annotA015 tokoe:valid" result="pass"/><test-case name="25214annotA016 tokoe:valid" result="pass"/><test-case name="25215annotA017 tokoe:valid" result="pass"/><test-case name="25216annotA018 tokoe:valid" result="pass"/><test-case name="25217annotA019 tokoe:valid" result="pass"/><test-case name="25218annotA020 tokoe:valid" result="pass"/><test-case name="25219annotA021 tokoe:valid" result="pass"/><test-case name="25220annotA022 tokoe:valid" result="pass"/><test-case name="25221annotA023 tokoe:valid" result="pass"/><test-case name="25222annotB001 tokoe:invalid" result="pass"/><test-case name="25223annotB002 tokoe:valid" result="pass"/><test-case name="25224annotB003 tokoe:valid" result="pass"/><test-case name="25225annotB004 tokoe:invalid" result="pass"/><test-case name="25226annotB005 tokoe:invalid" result="pass"/><test-case name="25227annotB006 tokoe:invalid" result="pass"/><test-case name="25228annotB007 tokoe:invalid" result="pass"/><test-case name="25229annotB008 tokoe:valid" result="pass"/><test-case name="25230annotB009 tokoe:invalid" result="pass"/><test-case name="25231annotB010 tokoe:invalid" result="pass"/><test-case name="25232annotB011 tokoe:invalid" result="pass"/><test-case name="25233annotB012 tokoe:invalid" result="pass"/><test-case name="25234annotB013 tokoe:invalid" result="pass"/><test-case name="25235annotB014 tokoe:valid" result="pass"/><test-case name="25236annotB015 tokoe:invalid" result="pass"/><test-case name="25237annotB016 tokoe:invalid" result="pass"/><test-case name="25238annotB017 tokoe:invalid" result="pass"/><test-case name="25239annotB018 tokoe:invalid" result="pass"/><test-case name="25240annotB019 tokoe:invalid" result="pass"/><test-case name="25241annotB020 tokoe:invalid" result="pass"/><test-case name="25242annotB021 tokoe:invalid" result="pass"/><test-case name="25243annotB022 tokoe:invalid" result="pass"/><test-case name="25244annotB023 tokoe:invalid" result="pass"/><test-case name="25245annotB024 tokoe:invalid" result="pass"/><test-case name="25246annotB026 tokoe:invalid" result="pass"/><test-case name="25247annotB027 tokoe:valid" result="pass"/><test-case name="25248annotB028 tokoe:invalid" result="pass"/><test-case name="25249annotB029 tokoe:invalid" result="pass"/><test-case name="25250annotB030 tokoe:invalid" result="pass"/><test-case name="25251annotB031 tokoe:invalid" result="pass"/><test-case name="25252annotB032 tokoe:invalid" result="pass"/><test-case name="25253annotB033 tokoe:invalid" result="pass"/><test-case name="25254annotC001 tokoe:valid" result="pass"/><test-case name="25255annotC002 tokoe:valid" result="pass"/><test-case name="25256annotC003 tokoe:valid" result="pass"/><test-case name="25257annotC004 tokoe:valid" result="pass"/><test-case name="25258annotC005 tokoe:valid" result="pass"/><test-case name="25259annotD001 tokoe:valid" result="pass"/><test-case name="25260annotD002 tokoe:valid" result="pass"/><test-case name="25261annotD003 tokoe:valid" result="pass"/><test-case name="25262annotD004 tokoe:valid" result="pass"/><test-case name="25263annotD005 tokoe:valid" result="pass"/><test-case name="25264annotE001 tokoe:valid" result="pass"/><test-case name="25265annotE002 tokoe:valid" result="pass"/><test-case name="25266annotF001 tokoe:invalid" result="pass"/><test-case name="25267annotF002 tokoe:valid" result="pass"/><test-case name="25268annotF003 tokoe:invalid" result="pass"/><test-case name="25269annotF004 tokoe:valid" result="pass"/><test-case name="25270annotF005 tokoe:valid" result="pass"/><test-case name="25271annotF006 tokoe:valid" result="pass"/><test-case name="25272annotF007 tokoe:valid" result="pass"/><test-case name="25273annotF008 tokoe:valid" result="pass"/><test-case name="25274annotF009 tokoe:invalid" result="pass"/><test-case name="25275annotZ001 tokoe:valid" result="pass"/><test-case name="25276annotZ002 tokoe:valid" result="pass"/><test-case name="25277annotZ004 tokoe:valid" result="pass"/><test-case name="25278attgA001 tokoe:valid" result="pass"/><test-case name="25279attgA002 tokoe:invalid" result="pass"/><test-case name="25280attgA003 tokoe:invalid" result="pass"/><test-case name="25281attgA004 tokoe:invalid" result="pass"/><test-case name="25282attgA005 tokoe:invalid" result="pass"/><test-case name="25283attgA006 tokoe:invalid" result="pass"/><test-case name="25284attgA007 tokoe:invalid" result="pass"/><test-case name="25285attgA008 tokoe:valid" result="pass"/><test-case name="25286attgA009 tokoe:invalid" result="pass"/><test-case name="25287attgB001 tokoe:valid" result="pass"/><test-case name="25288attgB002 tokoe:invalid" result="pass"/><test-case name="25289attgB003 tokoe:invalid" result="pass"/><test-case name="25290attgB004 tokoe:invalid" result="pass"/><test-case name="25291attgB005 tokoe:valid" result="pass"/><test-case name="25292attgB006 tokoe:invalid" result="pass"/><test-case name="25293attgB007 tokoe:invalid" result="pass"/><test-case name="25294attgB008 tokoe:valid" result="pass"/><test-case name="25295attgB009 tokoe:valid" result="pass"/><test-case name="25296attgB010 tokoe:invalid" result="pass"/><test-case name="25297attgB011 tokoe:invalid" result="pass"/><test-case name="25298attgB012 tokoe:valid" result="pass"/><test-case name="25299attgB013 tokoe:invalid" result="pass"/><test-case name="25300attgB014 tokoe:valid" result="pass"/><test-case name="25301attgB015 tokoe:invalid" result="pass"/><test-case name="25302attgC001 tokoe:invalid" result="pass"/><test-case name="25303attgC002 tokoe:valid" result="pass"/><test-case name="25304attgC003 tokoe:valid" result="pass"/><test-case name="25305attgC004 tokoe:valid" result="pass"/><test-case name="25306attgC005 tokoe:valid" result="pass"/><test-case name="25307attgC006 tokoe:valid" result="pass"/><test-case name="25308attgC006.i tokoe:invalid" result="pass"/><test-case name="25309attgC007 tokoe:valid" result="pass"/><test-case name="25310attgC007.v tokoe:valid" result="pass"/><test-case name="25311attgC008 tokoe:invalid" result="pass"/><test-case name="25312attgC009 tokoe:invalid" result="pass"/><test-case name="25313attgC010 tokoe:invalid" result="pass"/><test-case name="25314attgC011 tokoe:invalid" result="pass"/><test-case name="25315attgC012 tokoe:valid" result="pass"/><test-case name="25316attgC013 tokoe:valid" result="pass"/><test-case name="25317attgC014 tokoe:valid" result="pass"/><test-case name="25318attgC015 tokoe:valid" result="pass"/><test-case name="25319attgC016 tokoe:valid" result="pass"/><test-case name="25320attgC017 tokoe:valid" result="pass"/><test-case name="25321attgC018 tokoe:invalid" result="pass"/><test-case name="25322attgC019 tokoe:invalid" result="pass"/><test-case name="25323attgC020 tokoe:invalid" result="pass"/><test-case name="25324attgC021 tokoe:invalid" result="pass"/><test-case name="25325attgC022 tokoe:valid" result="pass"/><test-case name="25326attgC023 tokoe:valid" result="pass"/><test-case name="25327attgC024 tokoe:valid" result="pass"/><test-case name="25328attgC024.v tokoe:valid" result="pass"/><test-case name="25329attgC025 tokoe:valid" result="pass"/><test-case name="25330attgC025.i tokoe:invalid" result="pass"/><test-case name="25331attgC026 tokoe:valid" result="pass"/><test-case name="25332attgC026.v tokoe:valid" result="pass"/><test-case name="25333attgC027 tokoe:valid" result="pass"/><test-case name="25334attgC028 tokoe:invalid" result="pass"/><test-case name="25335attgC029 tokoe:invalid" result="pass"/><test-case name="25336attgC030 tokoe:invalid" result="pass"/><test-case name="25337attgC031 tokoe:invalid" result="pass"/><test-case name="25338attgC032 tokoe:invalid" result="pass"/><test-case name="25339attgC033 tokoe:valid" result="pass"/><test-case name="25340attgC034 tokoe:valid" result="pass"/><test-case name="25341attgC035 tokoe:valid" result="pass"/><test-case name="25342attgC035.v tokoe:valid" result="pass"/><test-case name="25343attgC036 tokoe:valid" result="pass"/><test-case name="25344attgC036.v tokoe:valid" result="pass"/><test-case name="25345attgC037 tokoe:valid" result="pass"/><test-case name="25346attgC037.v tokoe:valid" result="pass"/><test-case name="25347attgC038 tokoe:valid" result="pass"/><test-case name="25348attgC038.v tokoe:valid" result="pass"/><test-case name="25349attgC039 tokoe:invalid" result="pass"/><test-case name="25350attgC040 tokoe:invalid" result="pass"/><test-case name="25351attgC041 tokoe:valid" result="pass"/><test-case name="25352attgC042 tokoe:invalid" result="pass"/><test-case name="25353attgC043 tokoe:valid" result="pass"/><test-case name="25354attgC044 tokoe:invalid" result="pass"/><test-case name="25355attgC045 tokoe:valid" result="pass"/><test-case name="25356attgD001 tokoe:valid" result="pass"/><test-case name="25357attgD002 tokoe:invalid" result="pass"/><test-case name="25358attgD003 tokoe:valid" result="pass"/><test-case name="25359attgD003.v tokoe:valid" result="pass"/><test-case name="25360attgD004 tokoe:valid" result="pass"/><test-case name="25361attgD004.v tokoe:valid" result="pass"/><test-case name="25362attgD005 tokoe:valid" result="pass"/><test-case name="25363attgD005.v tokoe:valid" result="pass"/><test-case name="25364attgD006 tokoe:invalid" result="pass"/><test-case name="25365attgD007 tokoe:invalid" result="pass"/><test-case name="25366attgD008 tokoe:invalid" result="pass"/><test-case name="25367attgD009 tokoe:invalid" result="pass"/><test-case name="25368attgD010 tokoe:valid" result="pass"/><test-case name="25369attgD011 tokoe:invalid" result="pass"/><test-case name="25370attgD012 tokoe:invalid" result="pass"/><test-case name="25371attgD013 tokoe:invalid" result="pass"/><test-case name="25372attgD014 tokoe:invalid" result="pass"/><test-case name="25373attgD015 tokoe:invalid" result="pass"/><test-case name="25374attgD016 tokoe:invalid" result="pass"/><test-case name="25375attgD017 tokoe:invalid" result="pass"/><test-case name="25376attgD018 tokoe:valid" result="pass"/><test-case name="25377attgD018.v tokoe:valid" result="pass"/><test-case name="25378attgD019 tokoe:valid" result="pass"/><test-case name="25379attgD019.v tokoe:valid" result="pass"/><test-case name="25380attgD020 tokoe:valid" result="pass"/><test-case name="25381attgD020.v tokoe:valid" result="pass"/><test-case name="25382attgD021 tokoe:valid" result="pass"/><test-case name="25383attgD021.v tokoe:valid" result="pass"/><test-case name="25384attgD022 tokoe:valid" result="pass"/><test-case name="25385attgD022.v tokoe:valid" result="pass"/><test-case name="25386attgD023 tokoe:valid" result="pass"/><test-case name="25387attgD023.i tokoe:invalid" result="pass"/><test-case name="25388attgD024 tokoe:valid" result="pass"/><test-case name="25389attgD024.i tokoe:invalid" result="pass"/><test-case name="25390attgD025 tokoe:valid" result="pass"/><test-case name="25391attgD025.v tokoe:valid" result="pass"/><test-case name="25392attgD026 tokoe:valid" result="pass"/><test-case name="25393attgD026.i tokoe:invalid" result="pass"/><test-case name="25394attgD027 tokoe:valid" result="pass"/><test-case name="25395attgD027.v tokoe:valid" result="pass"/><test-case name="25396attgD028 tokoe:valid" result="pass"/><test-case name="25397attgD028.i tokoe:invalid" result="pass"/><test-case name="25398attgD029 tokoe:valid" result="pass"/><test-case name="25399attgD029.v tokoe:valid" result="pass"/><test-case name="25400attgD030 tokoe:valid" result="pass"/><test-case name="25401attgD030.i tokoe:invalid" result="pass"/><test-case name="25402attgD031 tokoe:valid" result="pass"/><test-case name="25403attgD031.v tokoe:valid" result="pass"/><test-case name="25404attgD032 tokoe:valid" result="pass"/><test-case name="25405attgD032.v tokoe:valid" result="pass"/><test-case name="25406attgD033 tokoe:valid" result="pass"/><test-case name="25407attgD033.v tokoe:valid" result="pass"/><test-case name="25408attgD034 tokoe:valid" result="pass"/><test-case name="25409attgD034.v tokoe:valid" result="pass"/><test-case name="25410attgD035 tokoe:valid" result="pass"/><test-case name="25411attgD035.i tokoe:invalid" result="pass"/><test-case name="25412attgD036 tokoe:valid" result="pass"/><test-case name="25413attgD036.v tokoe:valid" result="pass"/><test-case name="25414attgD037 tokoe:invalid" result="pass"/><test-case name="25415attgD038 tokoe:invalid" result="pass"/><test-case name="25416attgD039 tokoe:invalid" result="pass"/><test-case name="25417attgD040 tokoe:valid" result="pass"/><test-case name="25418attgD041 tokoe:invalid" result="pass"/><test-case name="25419attgD042 tokoe:valid" result="pass"/><test-case name="25420attgD042.i tokoe:invalid" result="pass"/><test-case name="25421attgZ001 tokoe:valid" result="pass"/><test-case name="25422attgZ001.i tokoe:invalid" result="pass"/><test-case name="25423attgZ002 tokoe:invalid" result="pass"/><test-case name="25424attgZ003 tokoe:invalid" result="pass"/><test-case name="25425attA001 tokoe:invalid" result="pass"/><test-case name="25426attA002 tokoe:invalid" result="pass"/><test-case name="25427attA003 tokoe:invalid" result="pass"/><test-case name="25428attA004 tokoe:invalid" result="pass"/><test-case name="25429attA005 tokoe:invalid" result="pass"/><test-case name="25430attA006 tokoe:invalid" result="pass"/><test-case name="25431attA007 tokoe:valid" result="pass"/><test-case name="25432attA008 tokoe:valid" result="pass"/><test-case name="25433attB001 tokoe:valid" result="pass"/><test-case name="25434attB002 tokoe:valid" result="pass"/><test-case name="25435attB003 tokoe:valid" result="pass"/><test-case name="25436attB004 tokoe:valid" result="pass"/><test-case name="25437attB005 tokoe:invalid" result="pass"/><test-case name="25438attB006 tokoe:invalid" result="pass"/><test-case name="25439attC001 tokoe:valid" result="pass"/><test-case name="25440attC002 tokoe:valid" result="pass"/><test-case name="25441attC003 tokoe:valid" result="pass"/><test-case name="25442attC004 tokoe:invalid" result="pass"/><test-case name="25443attC005 tokoe:invalid" result="pass"/><test-case name="25444attC006 tokoe:invalid" result="pass"/><test-case name="25445attC007 tokoe:invalid" result="pass"/><test-case name="25446attC008 tokoe:invalid" result="pass"/><test-case name="25447attC009 tokoe:invalid" result="pass"/><test-case name="25448attC010 tokoe:invalid" result="pass"/><test-case name="25449attD001 tokoe:valid" result="pass"/><test-case name="25450attD002 tokoe:invalid" result="pass"/><test-case name="25451attD003 tokoe:valid" result="pass"/><test-case name="25452attD003.v tokoe:valid" result="pass"/><test-case name="25453attD004 tokoe:valid" result="pass"/><test-case name="25454attD004.v tokoe:valid" result="pass"/><test-case name="25455attD005 tokoe:invalid" result="pass"/><test-case name="25456attD006 tokoe:invalid" result="pass"/><test-case name="25457attD007 tokoe:valid" result="pass"/><test-case name="25458attD007.v tokoe:valid" result="pass"/><test-case name="25459attE001 tokoe:valid" result="pass"/><test-case name="25460attE001.v tokoe:valid" result="pass"/><test-case name="25461attE002 tokoe:invalid" result="pass"/><test-case name="25462attE003 tokoe:invalid" result="pass"/><test-case name="25463attE004 tokoe:invalid" result="pass"/><test-case name="25464attE005 tokoe:invalid" result="pass"/><test-case name="25465attE006 tokoe:invalid" result="pass"/><test-case name="25466attE007 tokoe:invalid" result="pass"/><test-case name="25467attE008 tokoe:valid" result="pass"/><test-case name="25468attF001 tokoe:valid" result="pass"/><test-case name="25469attF001.i tokoe:invalid" result="pass"/><test-case name="25470attF002 tokoe:valid" result="pass"/><test-case name="25471attF002.v tokoe:valid" result="pass"/><test-case name="25472attF003 tokoe:valid" result="pass"/><test-case name="25473attF003.v tokoe:valid" result="pass"/><test-case name="25474attF004 tokoe:invalid" result="pass"/><test-case name="25475attF005 tokoe:invalid" result="pass"/><test-case name="25476attF006 tokoe:invalid" result="pass"/><test-case name="25477attF007 tokoe:invalid" result="pass"/><test-case name="25478attF008 tokoe:invalid" result="pass"/><test-case name="25479attF009 tokoe:invalid" result="pass"/><test-case name="25480attF010 tokoe:invalid" result="pass"/><test-case name="25481attF011 tokoe:invalid" result="pass"/><test-case name="25482attJ001 tokoe:valid" result="pass"/><test-case name="25483attJ001.v tokoe:valid" result="pass"/><test-case name="25484attJ002 tokoe:valid" result="pass"/><test-case name="25485attJ002.i tokoe:invalid" result="pass"/><test-case name="25486attJ003 tokoe:valid" result="pass"/><test-case name="25487attJ003.i tokoe:invalid" result="pass"/><test-case name="25488attJ004 tokoe:valid" result="pass"/><test-case name="25489attJ004.v tokoe:valid" result="pass"/><test-case name="25490attJ005 tokoe:valid" result="pass"/><test-case name="25491attJ005.v tokoe:valid" result="pass"/><test-case name="25492attJ006 tokoe:valid" result="pass"/><test-case name="25493attJ006.v tokoe:valid" result="pass"/><test-case name="25494attJ007 tokoe:valid" result="pass"/><test-case name="25495attJ007.v tokoe:valid" result="pass"/><test-case name="25496attJ008 tokoe:valid" result="pass"/><test-case name="25497attJ008.i tokoe:invalid" result="pass"/><test-case name="25498attJ009 tokoe:valid" result="pass"/><test-case name="25499attJ009.i tokoe:invalid" result="pass"/><test-case name="25500attJ010 tokoe:valid" result="pass"/><test-case name="25501attJ010.i tokoe:invalid" result="pass"/><test-case name="25502attJ011 tokoe:invalid" result="pass"/><test-case name="25503attJ012 tokoe:invalid" result="pass"/><test-case name="25504attJ013 tokoe:invalid" result="pass"/><test-case name="25505attJ014 tokoe:invalid" result="pass"/><test-case name="25506attJ015 tokoe:invalid" result="pass"/><test-case name="25507attJ016 tokoe:invalid" result="pass"/><test-case name="25508attJ017 tokoe:invalid" result="pass"/><test-case name="25509attJ018 tokoe:valid" result="pass"/><test-case name="25510attJ018.v tokoe:valid" result="pass"/><test-case name="25511attG001 tokoe:valid" result="pass"/><test-case name="25512attG002 tokoe:valid" result="pass"/><test-case name="25513attG003 tokoe:valid" result="pass"/><test-case name="25514attH001 tokoe:invalid" result="pass"/><test-case name="25515attI001 tokoe:valid" result="pass"/><test-case name="25516attI002 tokoe:valid" result="pass"/><test-case name="25517attI003 tokoe:valid" result="pass"/><test-case name="25518attI003.v tokoe:valid" result="pass"/><test-case name="25519attI004 tokoe:invalid" result="pass"/><test-case name="25520attI005 tokoe:invalid" result="pass"/><test-case name="25521attI006 tokoe:invalid" result="pass"/><test-case name="25522attKa001 tokoe:invalid" result="pass"/><test-case name="25523attKa002 tokoe:valid" result="pass"/><test-case name="25524attKa003 tokoe:invalid" result="pass"/><test-case name="25525attKa004 tokoe:invalid" result="pass"/><test-case name="25526attKa005 tokoe:invalid" result="pass"/><test-case name="25527attKa006 tokoe:valid" result="pass"/><test-case name="25528attKa007 tokoe:invalid" result="pass"/><test-case name="25529attKa008 tokoe:invalid" result="pass"/><test-case name="25530attKa009 tokoe:invalid" result="pass"/><test-case name="25531attKa010 tokoe:invalid" result="pass"/><test-case name="25532attKa011 tokoe:invalid" result="pass"/><test-case name="25533attKa012 tokoe:invalid" result="pass"/><test-case name="25534attKa013 tokoe:invalid" result="pass"/><test-case name="25535attKa014 tokoe:invalid" result="pass"/><test-case name="25536attKa015 tokoe:invalid" result="pass"/><test-case name="25537attKb001 tokoe:invalid" result="pass"/><test-case name="25538attKb002 tokoe:valid" result="pass"/><test-case name="25539attKb003 tokoe:valid" result="pass"/><test-case name="25540attKb004 tokoe:invalid" result="pass"/><test-case name="25541attKb005 tokoe:invalid" result="pass"/><test-case name="25542attKb006 tokoe:valid" result="pass"/><test-case name="25543attKb007 tokoe:valid" result="pass"/><test-case name="25544attKb008 tokoe:valid" result="pass"/><test-case name="25545attKb009 tokoe:valid" result="pass"/><test-case name="25546attKb010 tokoe:invalid" result="pass"/><test-case name="25547attKb011 tokoe:invalid" result="pass"/><test-case name="25548attKb012 tokoe:invalid" result="pass"/><test-case name="25549attKb013 tokoe:invalid" result="pass"/><test-case name="25550attKb014 tokoe:invalid" result="pass"/><test-case name="25551attKb015 tokoe:invalid" result="pass"/><test-case name="25552attKb016 tokoe:invalid" result="pass"/><test-case name="25553attKb017 tokoe:invalid" result="pass"/><test-case name="25554attKb018 tokoe:valid" result="pass"/><test-case name="25555attKb018a tokoe:invalid" result="pass"/><test-case name="25556attKc001 tokoe:invalid" result="pass"/><test-case name="25557attKc002 tokoe:valid" result="pass"/><test-case name="25558attKc003 tokoe:valid" result="pass"/><test-case name="25559attKc004 tokoe:invalid" result="pass"/><test-case name="25560attKc005 tokoe:invalid" result="pass"/><test-case name="25561attKc006 tokoe:valid" result="pass"/><test-case name="25562attKc007 tokoe:valid" result="pass"/><test-case name="25563attKc008 tokoe:valid" result="pass"/><test-case name="25564attKc009 tokoe:valid" result="pass"/><test-case name="25565attKc010 tokoe:invalid" result="pass"/><test-case name="25566attKc011 tokoe:invalid" result="pass"/><test-case name="25567attKc012 tokoe:invalid" result="pass"/><test-case name="25568attKc013 tokoe:invalid" result="pass"/><test-case name="25569attKc014 tokoe:invalid" result="pass"/><test-case name="25570attKc015 tokoe:invalid" result="pass"/><test-case name="25571attKc016 tokoe:invalid" result="pass"/><test-case name="25572attKc017 tokoe:invalid" result="pass"/><test-case name="25573attKc018 tokoe:valid" result="pass"/><test-case name="25574attKc018a tokoe:invalid" result="pass"/><test-case name="25575attLa001 tokoe:valid" result="pass"/><test-case name="25576attLa001.v tokoe:valid" result="pass"/><test-case name="25577attLa002 tokoe:valid" result="pass"/><test-case name="25578attLa002.v tokoe:valid" result="pass"/><test-case name="25579attLa003 tokoe:valid" result="pass"/><test-case name="25580attLa003.v tokoe:valid" result="pass"/><test-case name="25581attLa004 tokoe:valid" result="pass"/><test-case name="25582attLa004.v tokoe:valid" result="pass"/><test-case name="25583attLa005 tokoe:valid" result="pass"/><test-case name="25584attLa005.i tokoe:invalid" result="pass"/><test-case name="25585attLa006 tokoe:valid" result="pass"/><test-case name="25586attLa006.v tokoe:valid" result="pass"/><test-case name="25587attLb001 tokoe:valid" result="pass"/><test-case name="25588attLb001.v tokoe:valid" result="pass"/><test-case name="25589attLb002 tokoe:valid" result="pass"/><test-case name="25590attLb002.v tokoe:valid" result="pass"/><test-case name="25591attLb003 tokoe:valid" result="pass"/><test-case name="25592attLb003.v tokoe:valid" result="pass"/><test-case name="25593attLb004 tokoe:valid" result="pass"/><test-case name="25594attLb004.v tokoe:valid" result="pass"/><test-case name="25595attLb005 tokoe:valid" result="pass"/><test-case name="25596attLb005.i tokoe:invalid" result="pass"/><test-case name="25597attLb006 tokoe:valid" result="pass"/><test-case name="25598attLb006.v tokoe:valid" result="pass"/><test-case name="25599attLc001 tokoe:valid" result="pass"/><test-case name="25600attLc001.v tokoe:valid" result="pass"/><test-case name="25601attLc002 tokoe:valid" result="pass"/><test-case name="25602attLc002.v tokoe:valid" result="pass"/><test-case name="25603attLc003 tokoe:valid" result="pass"/><test-case name="25604attLc003.v tokoe:valid" result="pass"/><test-case name="25605attLc004 tokoe:valid" result="pass"/><test-case name="25606attLc004.v tokoe:valid" result="pass"/><test-case name="25607attLc005 tokoe:valid" result="pass"/><test-case name="25608attLc005.i tokoe:invalid" result="pass"/><test-case name="25609attLc006 tokoe:valid" result="pass"/><test-case name="25610attLc006.v tokoe:valid" result="pass"/><test-case name="25611attO001 tokoe:valid" result="pass"/><test-case name="25612attO001.i tokoe:invalid" result="pass"/><test-case name="25613attO002 tokoe:invalid" result="pass"/><test-case name="25614attO003 tokoe:invalid" result="pass"/><test-case name="25615attO004 tokoe:valid" result="pass"/><test-case name="25616attO004.i tokoe:invalid" result="pass"/><test-case name="25617attO005 tokoe:invalid" result="pass"/><test-case name="25618attO006 tokoe:valid" result="pass"/><test-case name="25619attO006.v tokoe:valid" result="pass"/><test-case name="25620attO007 tokoe:valid" result="pass"/><test-case name="25621attO007.v tokoe:valid" result="pass"/><test-case name="25622attO008 tokoe:valid" result="pass"/><test-case name="25623attO008.i tokoe:invalid" result="pass"/><test-case name="25624attO009 tokoe:valid" result="pass"/><test-case name="25625attO009.v tokoe:valid" result="pass"/><test-case name="25626attO010 tokoe:valid" result="pass"/><test-case name="25627attO010.v tokoe:valid" result="pass"/><test-case name="25628attO011 tokoe:valid" result="pass"/><test-case name="25629attO011.v tokoe:valid" result="pass"/><test-case name="25630attO012 tokoe:valid" result="pass"/><test-case name="25631attO012.i tokoe:invalid" result="pass"/><test-case name="25632attO013 tokoe:invalid" result="pass"/><test-case name="25633attO014 tokoe:invalid" result="pass"/><test-case name="25634attO015 tokoe:invalid" result="pass"/><test-case name="25635attO016 tokoe:invalid" result="pass"/><test-case name="25636attO017 tokoe:invalid" result="pass"/><test-case name="25637attO018 tokoe:valid" result="pass"/><test-case name="25638attO019 tokoe:invalid" result="pass"/><test-case name="25639attO020 tokoe:invalid" result="pass"/><test-case name="25640attO021 tokoe:invalid" result="pass"/><test-case name="25641attO022 tokoe:invalid" result="pass"/><test-case name="25642attO023 tokoe:invalid" result="pass"/><test-case name="25643attO024 tokoe:invalid" result="pass"/><test-case name="25644attO025 tokoe:invalid" result="pass"/><test-case name="25645attMa001 tokoe:valid" result="pass"/><test-case name="25646attMa001.i tokoe:invalid" result="pass"/><test-case name="25647attMa002 tokoe:valid" result="pass"/><test-case name="25648attMa002.i tokoe:invalid" result="pass"/><test-case name="25649attMa003 tokoe:valid" result="pass"/><test-case name="25650attMa003.v tokoe:valid" result="pass"/><test-case name="25651attMa004 tokoe:valid" result="pass"/><test-case name="25652attMa004.v tokoe:valid" result="pass"/><test-case name="25653attMb001 tokoe:valid" result="pass"/><test-case name="25654attMb001.i tokoe:invalid" result="pass"/><test-case name="25655attMb002 tokoe:valid" result="pass"/><test-case name="25656attMb002.i tokoe:invalid" result="pass"/><test-case name="25657attMb003 tokoe:valid" result="pass"/><test-case name="25658attMb003.i tokoe:invalid" result="pass"/><test-case name="25659attMb004 tokoe:valid" result="pass"/><test-case name="25660attMb004.v tokoe:valid" result="pass"/><test-case name="25661attMb005 tokoe:valid" result="pass"/><test-case name="25662attMb005.v tokoe:valid" result="pass"/><test-case name="25663attMb006 tokoe:valid" result="pass"/><test-case name="25664attMb006.v tokoe:valid" result="pass"/><test-case name="25665attMb007 tokoe:valid" result="pass"/><test-case name="25666attMb007.v tokoe:valid" result="pass"/><test-case name="25667attMb008 tokoe:valid" result="pass"/><test-case name="25668attMb008.v tokoe:valid" result="pass"/><test-case name="25669attMb009 tokoe:valid" result="pass"/><test-case name="25670attMb009.v tokoe:valid" result="pass"/><test-case name="25671attMb010 tokoe:valid" result="pass"/><test-case name="25672attMb010.i tokoe:invalid" result="pass"/><test-case name="25673attMb011 tokoe:valid" result="pass"/><test-case name="25674attMb011.i tokoe:invalid" result="pass"/><test-case name="25675attMb012 tokoe:valid" result="pass"/><test-case name="25676attMb012.i tokoe:invalid" result="pass"/><test-case name="25677attMc001 tokoe:valid" result="pass"/><test-case name="25678attMc001.i tokoe:invalid" result="pass"/><test-case name="25679attMc002 tokoe:valid" result="pass"/><test-case name="25680attMc002.i tokoe:invalid" result="pass"/><test-case name="25681attMc003 tokoe:valid" result="pass"/><test-case name="25682attMc003.i tokoe:invalid" result="pass"/><test-case name="25683attMc004 tokoe:valid" result="pass"/><test-case name="25684attMc004.v tokoe:valid" result="pass"/><test-case name="25685attMc005 tokoe:valid" result="pass"/><test-case name="25686attMc005.v tokoe:valid" result="pass"/><test-case name="25687attMc006 tokoe:valid" result="pass"/><test-case name="25688attMc006.v tokoe:valid" result="pass"/><test-case name="25689attMc007 tokoe:valid" result="pass"/><test-case name="25690attMc007.v tokoe:valid" result="pass"/><test-case name="25691attMc008 tokoe:valid" result="pass"/><test-case name="25692attMc008.v tokoe:valid" result="pass"/><test-case name="25693attMc009 tokoe:valid" result="pass"/><test-case name="25694attMc009.v tokoe:valid" result="pass"/><test-case name="25695attMc010 tokoe:valid" result="pass"/><test-case name="25696attMc010.i tokoe:invalid" result="pass"/><test-case name="25697attMc011 tokoe:valid" result="pass"/><test-case name="25698attMc011.i tokoe:invalid" result="pass"/><test-case name="25699attMc012 tokoe:valid" result="pass"/><test-case name="25700attMc012.i tokoe:invalid" result="pass"/><test-case name="25701attMd001.i tokoe:invalid" result="pass"/><test-case name="25702attMd002.i tokoe:invalid" result="pass"/><test-case name="25703attMd003.i tokoe:invalid" result="pass"/><test-case name="25704attMd004.i tokoe:invalid" result="pass"/><test-case name="25705attMd005.i tokoe:invalid" result="pass"/><test-case name="25706attMd006.i tokoe:invalid" result="pass"/><test-case name="25707attMd007.i tokoe:invalid" result="pass"/><test-case name="25708attMd008.i tokoe:invalid" result="pass"/><test-case name="25709attMd009.i tokoe:invalid" result="pass"/><test-case name="25710attMd010.i tokoe:invalid" result="pass"/><test-case name="25711attMd011.i tokoe:invalid" result="pass"/><test-case name="25712attP001 tokoe:invalid" result="pass"/><test-case name="25713attP002 tokoe:invalid" result="pass"/><test-case name="25714attP003 tokoe:invalid" result="pass"/><test-case name="25715attP004 tokoe:valid" result="pass"/><test-case name="25716attP004.v tokoe:valid" result="pass"/><test-case name="25717attP005 tokoe:valid" result="pass"/><test-case name="25718attP005.i tokoe:invalid" result="pass"/><test-case name="25719attP006 tokoe:invalid" result="pass"/><test-case name="25720attP007 tokoe:valid" result="pass"/><test-case name="25721attP007.v tokoe:valid" result="pass"/><test-case name="25722attP008 tokoe:valid" result="pass"/><test-case name="25723attP008.i tokoe:invalid" result="pass"/><test-case name="25724attP009 tokoe:valid" result="pass"/><test-case name="25725attP009.i tokoe:invalid" result="pass"/><test-case name="25726attP010 tokoe:valid" result="pass"/><test-case name="25727attP010.i tokoe:invalid" result="pass"/><test-case name="25728attP011 tokoe:valid" result="pass"/><test-case name="25729attP011.v tokoe:valid" result="pass"/><test-case name="25730attP012 tokoe:valid" result="pass"/><test-case name="25731attP012.i tokoe:invalid" result="pass"/><test-case name="25732attP013 tokoe:valid" result="pass"/><test-case name="25733attP013.v tokoe:valid" result="pass"/><test-case name="25734attP014 tokoe:valid" result="pass"/><test-case name="25735attP014.i tokoe:invalid" result="pass"/><test-case name="25736attP015 tokoe:valid" result="pass"/><test-case name="25737attP015.v tokoe:valid" result="pass"/><test-case name="25738attP016 tokoe:valid" result="pass"/><test-case name="25739attP016.i tokoe:invalid" result="pass"/><test-case name="25740attP017 tokoe:valid" result="pass"/><test-case name="25741attP017.v tokoe:valid" result="pass"/><test-case name="25742attP018 tokoe:valid" result="pass"/><test-case name="25743attP018.i tokoe:invalid" result="pass"/><test-case name="25744attP019 tokoe:valid" result="pass"/><test-case name="25745attP019.v tokoe:valid" result="pass"/><test-case name="25746attP020 tokoe:valid" result="pass"/><test-case name="25747attP020.i tokoe:invalid" result="pass"/><test-case name="25748attP021 tokoe:valid" result="pass"/><test-case name="25749attP021.v tokoe:valid" result="pass"/><test-case name="25750attP022 tokoe:valid" result="pass"/><test-case name="25751attP022.v tokoe:valid" result="pass"/><test-case name="25752attP023 tokoe:valid" result="pass"/><test-case name="25753attP023.v tokoe:valid" result="pass"/><test-case name="25754attP024 tokoe:valid" result="pass"/><test-case name="25755attP024.v tokoe:valid" result="pass"/><test-case name="25756attP025 tokoe:valid" result="pass"/><test-case name="25757attP025.v tokoe:valid" result="pass"/><test-case name="25758attP026 tokoe:valid" result="pass"/><test-case name="25759attP026.v tokoe:valid" result="pass"/><test-case name="25760attP027 tokoe:valid" result="pass"/><test-case name="25761attP027.i tokoe:invalid" result="pass"/><test-case name="25762attP028 tokoe:valid" result="pass"/><test-case name="25763attP028.v tokoe:valid" result="pass"/><test-case name="25764attP029 tokoe:valid" result="pass"/><test-case name="25765attP029.v tokoe:valid" result="pass"/><test-case name="25766attP030 tokoe:invalid" result="pass"/><test-case name="25767attP031 tokoe:valid" result="pass"/><test-case name="25768attP031.i tokoe:invalid" result="pass"/><test-case name="25769attP032 tokoe:valid" result="pass"/><test-case name="25770attP032.v tokoe:valid" result="pass"/><test-case name="25771attQ001 tokoe:invalid" result="pass"/><test-case name="25772attQ002 tokoe:invalid" result="pass"/><test-case name="25773attQ003 tokoe:valid" result="pass"/><test-case name="25774attQ003.v tokoe:valid" result="pass"/><test-case name="25775attQ004 tokoe:invalid" result="pass"/><test-case name="25776attQ005 tokoe:invalid" result="pass"/><test-case name="25777attQ006 tokoe:invalid" result="pass"/><test-case name="25778attQ007 tokoe:invalid" result="pass"/><test-case name="25779attQ008 tokoe:invalid" result="pass"/><test-case name="25780attQ009 tokoe:invalid" result="pass"/><test-case name="25781attQ010 tokoe:valid" result="pass"/><test-case name="25782attQ011 tokoe:invalid" result="pass"/><test-case name="25783attQ012 tokoe:invalid" result="pass"/><test-case name="25784attQ013 tokoe:invalid" result="pass"/><test-case name="25785attQ014 tokoe:valid" result="pass"/><test-case name="25786attQ014.v tokoe:valid" result="pass"/><test-case name="25787attQ015 tokoe:invalid" result="pass"/><test-case name="25788attQ016 tokoe:invalid" result="pass"/><test-case name="25789attQ017 tokoe:invalid" result="pass"/><test-case name="25790attQ018 tokoe:invalid" result="pass"/><test-case name="25791attQ019 tokoe:valid" result="pass"/><test-case name="25792attQ019.v tokoe:valid" result="pass"/><test-case name="25793attZ001 tokoe:valid" result="pass"/><test-case name="25794attZ001.i tokoe:invalid" result="pass"/><test-case name="25795attZ002 tokoe:valid" result="pass"/><test-case name="25796attZ002.v tokoe:valid" result="pass"/><test-case name="25797attZ004 tokoe:invalid" result="pass"/><test-case name="25798attZ005 tokoe:valid" result="pass"/><test-case name="25799attZ005.v tokoe:valid" result="pass"/><test-case name="25800attZ006 tokoe:invalid" result="pass"/><test-case name="25801attZ007v tokoe:valid" result="pass"/><test-case name="25802attZ007v.v tokoe:valid" result="pass"/><test-case name="25803attZ007i tokoe:valid" result="pass"/><test-case name="25804attZ007i.i tokoe:invalid" result="pass"/><test-case name="25805attZ008_a tokoe:valid" result="pass"/><test-case name="25806attZ008_b tokoe:valid" result="pass"/><test-case name="25807attZ008_c tokoe:valid" result="pass"/><test-case name="25808attZ008_d tokoe:valid" result="pass"/><test-case name="25809attZ008_e tokoe:invalid" result="pass"/><test-case name="25810attZ008_f tokoe:invalid" result="pass"/><test-case name="25811attZ008_g tokoe:valid" result="pass"/><test-case name="25812attZ008_h tokoe:invalid" result="pass"/><test-case name="25813attZ009 tokoe:valid" result="pass"/><test-case name="25814attZ009.i tokoe:invalid" result="pass"/><test-case name="25815attZ010a tokoe:valid" result="pass"/><test-case name="25816attZ010b tokoe:valid" result="pass"/><test-case name="25817attZ010c tokoe:valid" result="pass"/><test-case name="25818attZ011 tokoe:invalid" result="pass"/><test-case name="25819attZ012 tokoe:invalid" result="pass"/><test-case name="25820attZ013a tokoe:invalid" result="pass"/><test-case name="25821attZ013b tokoe:invalid" result="pass"/><test-case name="25822attZ014a tokoe:valid" result="pass"/><test-case name="25823attZ014a.i tokoe:invalid" result="pass"/><test-case name="25824attZ014b tokoe:valid" result="pass"/><test-case name="25825attZ014b.i tokoe:invalid" result="pass"/><test-case name="25826attZ015 tokoe:valid" result="pass"/><test-case name="25827attZ015.v tokoe:valid" result="pass"/><test-case name="25828ctA001 tokoe:valid" result="pass"/><test-case name="25829ctA001.v tokoe:valid" result="pass"/><test-case name="25830ctA002 tokoe:valid" result="pass"/><test-case name="25831ctA002.v tokoe:valid" result="pass"/><test-case name="25832ctA003 tokoe:valid" result="pass"/><test-case name="25833ctA003.v tokoe:valid" result="pass"/><test-case name="25834ctA004 tokoe:invalid" result="pass"/><test-case name="25835ctA005 tokoe:valid" result="pass"/><test-case name="25836ctA005.v tokoe:valid" result="pass"/><test-case name="25837ctA006 tokoe:invalid" result="pass"/><test-case name="25838ctA007 tokoe:invalid" result="pass"/><test-case name="25839ctA008 tokoe:invalid" result="pass"/><test-case name="25840ctA009 tokoe:valid" result="pass"/><test-case name="25841ctA009.v tokoe:valid" result="pass"/><test-case name="25842ctA010 tokoe:valid" result="pass"/><test-case name="25843ctA010.v tokoe:valid" result="pass"/><test-case name="25844ctA011 tokoe:valid" result="pass"/><test-case name="25845ctA011.v tokoe:valid" result="pass"/><test-case name="25846ctA012 tokoe:valid" result="pass"/><test-case name="25847ctA012.v tokoe:valid" result="pass"/><test-case name="25848ctA013 tokoe:valid" result="pass"/><test-case name="25849ctA013.v tokoe:valid" result="pass"/><test-case name="25850ctA014 tokoe:valid" result="pass"/><test-case name="25851ctA015 tokoe:valid" result="pass"/><test-case name="25852ctA016 tokoe:invalid" result="pass"/><test-case name="25853ctA017 tokoe:valid" result="pass"/><test-case name="25854ctA017.v tokoe:valid" result="pass"/><test-case name="25855ctA018 tokoe:valid" result="pass"/><test-case name="25856ctA018.v tokoe:valid" result="pass"/><test-case name="25857ctA019 tokoe:valid" result="pass"/><test-case name="25858ctA019.v tokoe:valid" result="pass"/><test-case name="25859ctA020 tokoe:valid" result="pass"/><test-case name="25860ctA020.v tokoe:valid" result="pass"/><test-case name="25861ctA021 tokoe:valid" result="pass"/><test-case name="25862ctA021.v tokoe:valid" result="pass"/><test-case name="25863ctA022 tokoe:valid" result="pass"/><test-case name="25864ctA022.v tokoe:valid" result="pass"/><test-case name="25865ctA023 tokoe:valid" result="pass"/><test-case name="25866ctA024 tokoe:valid" result="pass"/><test-case name="25867ctA025 tokoe:invalid" result="pass"/><test-case name="25868ctA026 tokoe:valid" result="pass"/><test-case name="25869ctA026.v tokoe:valid" result="pass"/><test-case name="25870ctA027 tokoe:valid" result="pass"/><test-case name="25871ctA027.v tokoe:valid" result="pass"/><test-case name="25872ctA028 tokoe:invalid" result="pass"/><test-case name="25873ctA029 tokoe:valid" result="pass"/><test-case name="25874ctA030 tokoe:invalid" result="pass"/><test-case name="25875ctA031 tokoe:invalid" result="pass"/><test-case name="25876ctA032 tokoe:valid" result="pass"/><test-case name="25877ctA032.v tokoe:valid" result="pass"/><test-case name="25878ctA033 tokoe:valid" result="pass"/><test-case name="25879ctA033.v tokoe:valid" result="pass"/><test-case name="25880ctA034 tokoe:valid" result="pass"/><test-case name="25881ctA034.v tokoe:valid" result="pass"/><test-case name="25882ctA035 tokoe:valid" result="pass"/><test-case name="25883ctA035.v tokoe:valid" result="pass"/><test-case name="25884ctA036 tokoe:invalid" result="pass"/><test-case name="25885ctA037 tokoe:valid" result="pass"/><test-case name="25886ctA037.v tokoe:valid" result="pass"/><test-case name="25887ctA038 tokoe:invalid" result="pass"/><test-case name="25888ctA039 tokoe:invalid" result="pass"/><test-case name="25889ctA040 tokoe:invalid" result="pass"/><test-case name="25890ctA041 tokoe:valid" result="pass"/><test-case name="25891ctA041.v tokoe:valid" result="pass"/><test-case name="25892ctA042 tokoe:invalid" result="pass"/><test-case name="25893ctA043 tokoe:invalid" result="pass"/><test-case name="25894ctA044 tokoe:invalid" result="pass"/><test-case name="25895ctA045 tokoe:valid" result="pass"/><test-case name="25896ctA045.v tokoe:valid" result="pass"/><test-case name="25897ctA046 tokoe:invalid" result="pass"/><test-case name="25898ctA047 tokoe:valid" result="pass"/><test-case name="25899ctA047.v tokoe:valid" result="pass"/><test-case name="25900ctA048 tokoe:valid" result="pass"/><test-case name="25901ctA048.v tokoe:valid" result="pass"/><test-case name="25902ctA049 tokoe:valid" result="pass"/><test-case name="25903ctA049.v tokoe:valid" result="pass"/><test-case name="25904ctB001 tokoe:valid" result="pass"/><test-case name="25905ctB001.v tokoe:valid" result="pass"/><test-case name="25906ctB002 tokoe:invalid" result="pass"/><test-case name="25907ctB003 tokoe:valid" result="pass"/><test-case name="25908ctB003.v tokoe:valid" result="pass"/><test-case name="25909ctB004 tokoe:invalid" result="pass"/><test-case name="25910ctB005 tokoe:invalid" result="pass"/><test-case name="25911ctB006 tokoe:invalid" result="pass"/><test-case name="25912ctB007 tokoe:invalid" result="pass"/><test-case name="25913ctB008 tokoe:invalid" result="pass"/><test-case name="25914ctB009 tokoe:invalid" result="pass"/><test-case name="25915ctB010 tokoe:invalid" result="pass"/><test-case name="25916ctB011 tokoe:invalid" result="pass"/><test-case name="25917ctB012 tokoe:invalid" result="pass"/><test-case name="25918ctB013 tokoe:invalid" result="pass"/><test-case name="25919ctB014 tokoe:invalid" result="pass"/><test-case name="25920ctB015 tokoe:invalid" result="pass"/><test-case name="25921ctB016 tokoe:invalid" result="pass"/><test-case name="25922ctB017 tokoe:valid" result="pass"/><test-case name="25923ctB017.v tokoe:valid" result="pass"/><test-case name="25924ctB018 tokoe:invalid" result="pass"/><test-case name="25925ctB019 tokoe:invalid" result="pass"/><test-case name="25926ctB020 tokoe:invalid" result="pass"/><test-case name="25927ctB021 tokoe:invalid" result="pass"/><test-case name="25928ctB022 tokoe:invalid" result="pass"/><test-case name="25929ctB023 tokoe:invalid" result="pass"/><test-case name="25930ctB024 tokoe:invalid" result="pass"/><test-case name="25931ctB025 tokoe:invalid" result="pass"/><test-case name="25932ctB026 tokoe:invalid" result="pass"/><test-case name="25933ctB027 tokoe:invalid" result="pass"/><test-case name="25934ctB028 tokoe:invalid" result="pass"/><test-case name="25935ctB029 tokoe:invalid" result="pass"/><test-case name="25936ctB030 tokoe:invalid" result="pass"/><test-case name="25937ctB031 tokoe:valid" result="pass"/><test-case name="25938ctB031.v tokoe:valid" result="pass"/><test-case name="25939ctB032 tokoe:invalid" result="pass"/><test-case name="25940ctB033 tokoe:invalid" result="pass"/><test-case name="25941ctB034 tokoe:invalid" result="pass"/><test-case name="25942ctB035 tokoe:invalid" result="pass"/><test-case name="25943ctB036 tokoe:invalid" result="pass"/><test-case name="25944ctB037 tokoe:invalid" result="pass"/><test-case name="25945ctB038 tokoe:invalid" result="pass"/><test-case name="25946ctB039 tokoe:valid" result="pass"/><test-case name="25947ctB039.v tokoe:valid" result="pass"/><test-case name="25948ctB040 tokoe:valid" result="pass"/><test-case name="25949ctB040.v tokoe:valid" result="pass"/><test-case name="25950ctB041 tokoe:valid" result="pass"/><test-case name="25951ctB041.v tokoe:valid" result="pass"/><test-case name="25952ctB042 tokoe:valid" result="pass"/><test-case name="25953ctB042.v tokoe:valid" result="pass"/><test-case name="25954ctB043 tokoe:valid" result="pass"/><test-case name="25955ctB043.v tokoe:valid" result="pass"/><test-case name="25956ctB044 tokoe:invalid" result="pass"/><test-case name="25957ctB045 tokoe:valid" result="pass"/><test-case name="25958ctB045.v tokoe:valid" result="pass"/><test-case name="25959ctB046 tokoe:invalid" result="pass"/><test-case name="25960ctB047 tokoe:invalid" result="pass"/><test-case name="25961ctB048 tokoe:invalid" result="pass"/><test-case name="25962ctB049 tokoe:invalid" result="pass"/><test-case name="25963ctB050 tokoe:invalid" result="pass"/><test-case name="25964ctB051 tokoe:invalid" result="pass"/><test-case name="25965ctB052 tokoe:invalid" result="pass"/><test-case name="25966ctB053 tokoe:valid" result="pass"/><test-case name="25967ctB053.v tokoe:valid" result="pass"/><test-case name="25968ctB054 tokoe:valid" result="pass"/><test-case name="25969ctB054.v tokoe:valid" result="pass"/><test-case name="25970ctB055 tokoe:valid" result="pass"/><test-case name="25971ctB055.v tokoe:valid" result="pass"/><test-case name="25972ctB056 tokoe:valid" result="pass"/><test-case name="25973ctB056.v tokoe:valid" result="pass"/><test-case name="25974ctB057 tokoe:valid" result="pass"/><test-case name="25975ctB057.v tokoe:valid" result="pass"/><test-case name="25976ctB058 tokoe:invalid" result="pass"/><test-case name="25977ctB059 tokoe:valid" result="pass"/><test-case name="25978ctB059.v tokoe:valid" result="pass"/><test-case name="25979ctB060 tokoe:invalid" result="pass"/><test-case name="25980ctB061 tokoe:invalid" result="pass"/><test-case name="25981ctB062 tokoe:invalid" result="pass"/><test-case name="25982ctB063 tokoe:invalid" result="pass"/><test-case name="25983ctB064 tokoe:invalid" result="pass"/><test-case name="25984ctB065 tokoe:invalid" result="pass"/><test-case name="25985ctB066 tokoe:invalid" result="pass"/><test-case name="25986ctB067 tokoe:valid" result="pass"/><test-case name="25987ctB067.v tokoe:valid" result="pass"/><test-case name="25988ctB068 tokoe:valid" result="pass"/><test-case name="25989ctB068.v tokoe:valid" result="pass"/><test-case name="25990ctB069 tokoe:valid" result="pass"/><test-case name="25991ctB069.v tokoe:valid" result="pass"/><test-case name="25992ctB070 tokoe:valid" result="pass"/><test-case name="25993ctB070.v tokoe:valid" result="pass"/><test-case name="25994ctB071 tokoe:valid" result="pass"/><test-case name="25995ctB071.v tokoe:valid" result="pass"/><test-case name="25996ctB072 tokoe:invalid" result="pass"/><test-case name="25997ctB073 tokoe:valid" result="pass"/><test-case name="25998ctB073.v tokoe:valid" result="pass"/><test-case name="25999ctB074 tokoe:invalid" result="pass"/><test-case name="26000ctB075 tokoe:invalid" result="pass"/><test-case name="26001ctB076 tokoe:invalid" result="pass"/><test-case name="26002ctB077 tokoe:invalid" result="pass"/><test-case name="26003ctB078 tokoe:invalid" result="pass"/><test-case name="26004ctB079 tokoe:invalid" result="pass"/><test-case name="26005ctB080 tokoe:invalid" result="pass"/><test-case name="26006ctB081 tokoe:valid" result="pass"/><test-case name="26007ctB081.v tokoe:valid" result="pass"/><test-case name="26008ctB082 tokoe:valid" result="pass"/><test-case name="26009ctB082.v tokoe:valid" result="pass"/><test-case name="26010ctB083 tokoe:valid" result="pass"/><test-case name="26011ctB083.v tokoe:valid" result="pass"/><test-case name="26012ctB084 tokoe:valid" result="pass"/><test-case name="26013ctB084.v tokoe:valid" result="pass"/><test-case name="26014ctB085 tokoe:valid" result="pass"/><test-case name="26015ctB085.v tokoe:valid" result="pass"/><test-case name="26016ctB086 tokoe:invalid" result="pass"/><test-case name="26017ctB087 tokoe:valid" result="pass"/><test-case name="26018ctB087.v tokoe:valid" result="pass"/><test-case name="26019ctB088 tokoe:invalid" result="pass"/><test-case name="26020ctB089 tokoe:invalid" result="pass"/><test-case name="26021ctB090 tokoe:invalid" result="pass"/><test-case name="26022ctB091 tokoe:invalid" result="pass"/><test-case name="26023ctB092 tokoe:invalid" result="pass"/><test-case name="26024ctB093 tokoe:invalid" result="pass"/><test-case name="26025ctB094 tokoe:invalid" result="pass"/><test-case name="26026ctB095 tokoe:valid" result="pass"/><test-case name="26027ctB095.v tokoe:valid" result="pass"/><test-case name="26028ctB096 tokoe:valid" result="pass"/><test-case name="26029ctB096.v tokoe:valid" result="pass"/><test-case name="26030ctB097 tokoe:valid" result="pass"/><test-case name="26031ctB097.v tokoe:valid" result="pass"/><test-case name="26032ctB098 tokoe:valid" result="pass"/><test-case name="26033ctB098.v tokoe:valid" result="pass"/><test-case name="26034ctB099 tokoe:invalid" result="pass"/><test-case name="26035ctB100 tokoe:valid" result="pass"/><test-case name="26036ctB100.v tokoe:valid" result="pass"/><test-case name="26037ctB101 tokoe:invalid" result="pass"/><test-case name="26038ctB102 tokoe:invalid" result="pass"/><test-case name="26039ctB103 tokoe:invalid" result="pass"/><test-case name="26040ctB104 tokoe:invalid" result="pass"/><test-case name="26041ctB105 tokoe:invalid" result="pass"/><test-case name="26042ctB106 tokoe:invalid" result="pass"/><test-case name="26043ctB107 tokoe:invalid" result="pass"/><test-case name="26044ctB108 tokoe:valid" result="pass"/><test-case name="26045ctB108.v tokoe:valid" result="pass"/><test-case name="26046ctB109 tokoe:valid" result="pass"/><test-case name="26047ctB109.v tokoe:valid" result="pass"/><test-case name="26048ctB110 tokoe:valid" result="pass"/><test-case name="26049ctB110.v tokoe:valid" result="pass"/><test-case name="26050ctB111 tokoe:valid" result="pass"/><test-case name="26051ctB111.v tokoe:valid" result="pass"/><test-case name="26052ctB112 tokoe:invalid" result="pass"/><test-case name="26053ctB113 tokoe:valid" result="pass"/><test-case name="26054ctB113.v tokoe:valid" result="pass"/><test-case name="26055ctB114 tokoe:invalid" result="pass"/><test-case name="26056ctB115 tokoe:invalid" result="pass"/><test-case name="26057ctB116 tokoe:invalid" result="pass"/><test-case name="26058ctB117 tokoe:invalid" result="pass"/><test-case name="26059ctB118 tokoe:invalid" result="pass"/><test-case name="26060ctB119 tokoe:invalid" result="pass"/><test-case name="26061ctB120 tokoe:invalid" result="pass"/><test-case name="26062ctB121 tokoe:invalid" result="pass"/><test-case name="26063ctB122 tokoe:invalid" result="pass"/><test-case name="26064ctB123 tokoe:invalid" result="pass"/><test-case name="26065ctB124 tokoe:invalid" result="pass"/><test-case name="26066ctB125 tokoe:invalid" result="pass"/><test-case name="26067ctC001 tokoe:valid" result="pass"/><test-case name="26068ctC001.v tokoe:valid" result="pass"/><test-case name="26069ctC002 tokoe:invalid" result="pass"/><test-case name="26070ctC003 tokoe:valid" result="pass"/><test-case name="26071ctC004 tokoe:invalid" result="pass"/><test-case name="26072ctC005 tokoe:invalid" result="pass"/><test-case name="26073ctC006 tokoe:valid" result="pass"/><test-case name="26074ctC006.v tokoe:valid" result="pass"/><test-case name="26075ctC007 tokoe:valid" result="pass"/><test-case name="26076ctC007.v tokoe:valid" result="pass"/><test-case name="26077ctC008 tokoe:valid" result="pass"/><test-case name="26078ctC008.v tokoe:valid" result="pass"/><test-case name="26079ctC009 tokoe:invalid" result="pass"/><test-case name="26080ctC010 tokoe:invalid" result="pass"/><test-case name="26081ctC011 tokoe:invalid" result="pass"/><test-case name="26082ctC012 tokoe:valid" result="pass"/><test-case name="26083ctC012.v tokoe:valid" result="pass"/><test-case name="26084ctD001 tokoe:invalid" result="pass"/><test-case name="26085ctD002 tokoe:valid" result="pass"/><test-case name="26086ctD002.v tokoe:valid" result="pass"/><test-case name="26087ctD003 tokoe:invalid" result="pass"/><test-case name="26088ctD004 tokoe:invalid" result="pass"/><test-case name="26089ctD005 tokoe:valid" result="pass"/><test-case name="26090ctD005.v tokoe:valid" result="pass"/><test-case name="26091ctD006 tokoe:valid" result="pass"/><test-case name="26092ctD006.v tokoe:valid" result="pass"/><test-case name="26093ctD007 tokoe:invalid" result="pass"/><test-case name="26094ctD008 tokoe:valid" result="pass"/><test-case name="26095ctD008.v tokoe:valid" result="pass"/><test-case name="26096ctD009 tokoe:invalid" result="pass"/><test-case name="26097ctD010 tokoe:valid" result="pass"/><test-case name="26098ctD010.v tokoe:valid" result="pass"/><test-case name="26099ctD011 tokoe:invalid" result="pass"/><test-case name="26100ctD012 tokoe:valid" result="pass"/><test-case name="26101ctD012.v tokoe:valid" result="pass"/><test-case name="26102ctD013 tokoe:invalid" result="pass"/><test-case name="26103ctD014 tokoe:invalid" result="pass"/><test-case name="26104ctD015 tokoe:valid" result="pass"/><test-case name="26105ctD015.v tokoe:valid" result="pass"/><test-case name="26106ctD016 tokoe:valid" result="pass"/><test-case name="26107ctD016.v tokoe:valid" result="pass"/><test-case name="26108ctD017 tokoe:valid" result="pass"/><test-case name="26109ctD017.v tokoe:valid" result="pass"/><test-case name="26110ctD018 tokoe:valid" result="pass"/><test-case name="26111ctD018.v tokoe:valid" result="pass"/><test-case name="26112ctD019 tokoe:valid" result="pass"/><test-case name="26113ctD019.v tokoe:valid" result="pass"/><test-case name="26114ctD020 tokoe:valid" result="pass"/><test-case name="26115ctD020.v tokoe:valid" result="pass"/><test-case name="26116ctD021 tokoe:valid" result="pass"/><test-case name="26117ctD021.v tokoe:valid" result="pass"/><test-case name="26118ctD022 tokoe:valid" result="pass"/><test-case name="26119ctD022.v tokoe:valid" result="pass"/><test-case name="26120ctD023 tokoe:valid" result="pass"/><test-case name="26121ctD023.v tokoe:valid" result="pass"/><test-case name="26122ctD024 tokoe:invalid" result="pass"/><test-case name="26123ctD025 tokoe:valid" result="pass"/><test-case name="26124ctD025.v tokoe:valid" result="pass"/><test-case name="26125ctD026 tokoe:valid" result="pass"/><test-case name="26126ctD026.v tokoe:valid" result="pass"/><test-case name="26127ctD027 tokoe:valid" result="pass"/><test-case name="26128ctD027.v tokoe:valid" result="pass"/><test-case name="26129ctD028 tokoe:valid" result="pass"/><test-case name="26130ctD028.v tokoe:valid" result="pass"/><test-case name="26131ctD029 tokoe:valid" result="pass"/><test-case name="26132ctD029.v tokoe:valid" result="pass"/><test-case name="26133ctD030 tokoe:valid" result="pass"/><test-case name="26134ctD030.v tokoe:valid" result="pass"/><test-case name="26135ctD031 tokoe:valid" result="pass"/><test-case name="26136ctD031.v tokoe:valid" result="pass"/><test-case name="26137ctD032 tokoe:valid" result="pass"/><test-case name="26138ctD032.v tokoe:valid" result="pass"/><test-case name="26139ctD033 tokoe:valid" result="pass"/><test-case name="26140ctD033.v tokoe:valid" result="pass"/><test-case name="26141ctD034 tokoe:invalid" result="pass"/><test-case name="26142ctD035 tokoe:valid" result="pass"/><test-case name="26143ctD035.v tokoe:valid" result="pass"/><test-case name="26144ctD036 tokoe:invalid" result="pass"/><test-case name="26145ctD037 tokoe:invalid" result="pass"/><test-case name="26146ctD038 tokoe:invalid" result="pass"/><test-case name="26147ctD039 tokoe:invalid" result="pass"/><test-case name="26148ctD040 tokoe:invalid" result="pass"/><test-case name="26149ctD041 tokoe:invalid" result="pass"/><test-case name="26150ctD042 tokoe:invalid" result="pass"/><test-case name="26151ctD043 tokoe:invalid" result="pass"/><test-case name="26152ctE001 tokoe:valid" result="pass"/><test-case name="26153ctE001.v tokoe:valid" result="pass"/><test-case name="26154ctE002 tokoe:valid" result="pass"/><test-case name="26155ctE002.v tokoe:valid" result="pass"/><test-case name="26156ctE003 tokoe:invalid" result="pass"/><test-case name="26157ctE004 tokoe:invalid" result="pass"/><test-case name="26158ctE005 tokoe:invalid" result="pass"/><test-case name="26159ctE006 tokoe:valid" result="pass"/><test-case name="26160ctE006.v tokoe:valid" result="pass"/><test-case name="26161ctE007 tokoe:valid" result="pass"/><test-case name="26162ctE007.v tokoe:valid" result="pass"/><test-case name="26163ctE008 tokoe:valid" result="pass"/><test-case name="26164ctE008.v tokoe:valid" result="pass"/><test-case name="26165ctE009 tokoe:invalid" result="pass"/><test-case name="26166ctE010 tokoe:valid" result="pass"/><test-case name="26167ctE010.v tokoe:valid" result="pass"/><test-case name="26168ctE011 tokoe:invalid" result="pass"/><test-case name="26169ctE012 tokoe:invalid" result="pass"/><test-case name="26170ctE013 tokoe:invalid" result="pass"/><test-case name="26171ctE014 tokoe:invalid" result="pass"/><test-case name="26172ctE015 tokoe:invalid" result="pass"/><test-case name="26173ctE016 tokoe:invalid" result="pass"/><test-case name="26174ctE017 tokoe:valid" result="pass"/><test-case name="26175ctE017.v tokoe:valid" result="pass"/><test-case name="26176ctE018 tokoe:valid" result="pass"/><test-case name="26177ctE018.v tokoe:valid" result="pass"/><test-case name="26178ctE019 tokoe:valid" result="pass"/><test-case name="26179ctE019.v tokoe:valid" result="pass"/><test-case name="26180ctF001 tokoe:valid" result="pass"/><test-case name="26181ctF001.v tokoe:valid" result="pass"/><test-case name="26182ctF002 tokoe:invalid" result="pass"/><test-case name="26183ctF003 tokoe:valid" result="pass"/><test-case name="26184ctF004 tokoe:invalid" result="pass"/><test-case name="26185ctF005 tokoe:invalid" result="pass"/><test-case name="26186ctF006 tokoe:invalid" result="pass"/><test-case name="26187ctF007 tokoe:valid" result="pass"/><test-case name="26188ctF007.v tokoe:valid" result="pass"/><test-case name="26189ctF008 tokoe:invalid" result="pass"/><test-case name="26190ctF009 tokoe:invalid" result="pass"/><test-case name="26191ctF010 tokoe:valid" result="pass"/><test-case name="26192ctF010.v tokoe:valid" result="pass"/><test-case name="26193ctF011 tokoe:valid" result="pass"/><test-case name="26194ctF011.v tokoe:valid" result="pass"/><test-case name="26195ctF012 tokoe:invalid" result="pass"/><test-case name="26196ctF013 tokoe:valid" result="pass"/><test-case name="26197ctF013.v tokoe:valid" result="pass"/><test-case name="26198ctF014 tokoe:valid" result="pass"/><test-case name="26199ctF014.v tokoe:valid" result="pass"/><test-case name="26200ctF015 tokoe:invalid" result="pass"/><test-case name="26201ctF016 tokoe:invalid" result="pass"/><test-case name="26202ctF017 tokoe:invalid" result="pass"/><test-case name="26203ctG001 tokoe:valid" result="pass"/><test-case name="26204ctG001.v tokoe:valid" result="pass"/><test-case name="26205ctG002 tokoe:invalid" result="pass"/><test-case name="26206ctG003 tokoe:invalid" result="pass"/><test-case name="26207ctG004 tokoe:invalid" result="pass"/><test-case name="26208ctG005 tokoe:invalid" result="pass"/><test-case name="26209ctG006 tokoe:invalid" result="pass"/><test-case name="26210ctG007 tokoe:valid" result="pass"/><test-case name="26211ctG007.v tokoe:valid" result="pass"/><test-case name="26212ctG008 tokoe:valid" result="pass"/><test-case name="26213ctG008.v tokoe:valid" result="pass"/><test-case name="26214ctG009 tokoe:valid" result="pass"/><test-case name="26215ctG009.v tokoe:valid" result="pass"/><test-case name="26216ctG010 tokoe:valid" result="pass"/><test-case name="26217ctG010.v tokoe:valid" result="pass"/><test-case name="26218ctG011 tokoe:valid" result="pass"/><test-case name="26219ctG011.v tokoe:valid" result="pass"/><test-case name="26220ctG012 tokoe:invalid" result="pass"/><test-case name="26221ctG013 tokoe:valid" result="pass"/><test-case name="26222ctG013.v tokoe:valid" result="pass"/><test-case name="26223ctG014 tokoe:invalid" result="pass"/><test-case name="26224ctG015 tokoe:invalid" result="pass"/><test-case name="26225ctG016 tokoe:invalid" result="pass"/><test-case name="26226ctG017 tokoe:invalid" result="pass"/><test-case name="26227ctG018 tokoe:invalid" result="pass"/><test-case name="26228ctG019 tokoe:valid" result="pass"/><test-case name="26229ctG019.v tokoe:valid" result="pass"/><test-case name="26230ctG020 tokoe:valid" result="pass"/><test-case name="26231ctG020.v tokoe:valid" result="pass"/><test-case name="26232ctG021 tokoe:valid" result="pass"/><test-case name="26233ctG021.v tokoe:valid" result="pass"/><test-case name="26234ctG022 tokoe:valid" result="pass"/><test-case name="26235ctG022.v tokoe:valid" result="pass"/><test-case name="26236ctG023 tokoe:valid" result="pass"/><test-case name="26237ctG023.v tokoe:valid" result="pass"/><test-case name="26238ctG024 tokoe:invalid" result="pass"/><test-case name="26239ctG025 tokoe:valid" result="pass"/><test-case name="26240ctG025.v tokoe:valid" result="pass"/><test-case name="26241ctG026 tokoe:invalid" result="pass"/><test-case name="26242ctG027 tokoe:invalid" result="pass"/><test-case name="26243ctG028 tokoe:invalid" result="pass"/><test-case name="26244ctG029 tokoe:invalid" result="pass"/><test-case name="26245ctG030 tokoe:invalid" result="pass"/><test-case name="26246ctG031 tokoe:valid" result="pass"/><test-case name="26247ctG031.v tokoe:valid" result="pass"/><test-case name="26248ctG032 tokoe:valid" result="pass"/><test-case name="26249ctG032.v tokoe:valid" result="pass"/><test-case name="26250ctG033 tokoe:valid" result="pass"/><test-case name="26251ctG033.v tokoe:valid" result="pass"/><test-case name="26252ctG034 tokoe:valid" result="pass"/><test-case name="26253ctG034.v tokoe:valid" result="pass"/><test-case name="26254ctG035 tokoe:valid" result="pass"/><test-case name="26255ctG035.v tokoe:valid" result="pass"/><test-case name="26256ctG036 tokoe:invalid" result="pass"/><test-case name="26257ctG037 tokoe:valid" result="pass"/><test-case name="26258ctG037.v tokoe:valid" result="pass"/><test-case name="26259ctG038 tokoe:invalid" result="pass"/><test-case name="26260ctG039 tokoe:invalid" result="pass"/><test-case name="26261ctG040 tokoe:invalid" result="pass"/><test-case name="26262ctG041 tokoe:invalid" result="pass"/><test-case name="26263ctG042 tokoe:invalid" result="pass"/><test-case name="26264ctG043 tokoe:valid" result="pass"/><test-case name="26265ctG043.v tokoe:valid" result="pass"/><test-case name="26266ctG044 tokoe:valid" result="pass"/><test-case name="26267ctG044.v tokoe:valid" result="pass"/><test-case name="26268ctG045 tokoe:valid" result="pass"/><test-case name="26269ctG045.v tokoe:valid" result="pass"/><test-case name="26270ctG046 tokoe:valid" result="pass"/><test-case name="26271ctG046.v tokoe:valid" result="pass"/><test-case name="26272ctG047 tokoe:valid" result="pass"/><test-case name="26273ctG047.v tokoe:valid" result="pass"/><test-case name="26274ctG048 tokoe:invalid" result="pass"/><test-case name="26275ctG049 tokoe:valid" result="pass"/><test-case name="26276ctG049.v tokoe:valid" result="pass"/><test-case name="26277ctG050 tokoe:invalid" result="pass"/><test-case name="26278ctG051 tokoe:invalid" result="pass"/><test-case name="26279ctG052 tokoe:invalid" result="pass"/><test-case name="26280ctG053 tokoe:invalid" result="pass"/><test-case name="26281ctG054 tokoe:invalid" result="pass"/><test-case name="26282ctG055 tokoe:valid" result="pass"/><test-case name="26283ctG055.v tokoe:valid" result="pass"/><test-case name="26284ctG056 tokoe:valid" result="pass"/><test-case name="26285ctG056.v tokoe:valid" result="pass"/><test-case name="26286ctG057 tokoe:valid" result="pass"/><test-case name="26287ctG057.v tokoe:valid" result="pass"/><test-case name="26288ctG058 tokoe:valid" result="pass"/><test-case name="26289ctG058.v tokoe:valid" result="pass"/><test-case name="26290ctG059 tokoe:invalid" result="pass"/><test-case name="26291ctG060 tokoe:valid" result="pass"/><test-case name="26292ctG060.v tokoe:valid" result="pass"/><test-case name="26293ctG061 tokoe:invalid" result="pass"/><test-case name="26294ctG062 tokoe:invalid" result="pass"/><test-case name="26295ctG063 tokoe:invalid" result="pass"/><test-case name="26296ctG064 tokoe:invalid" result="pass"/><test-case name="26297ctG065 tokoe:invalid" result="pass"/><test-case name="26298ctG066 tokoe:valid" result="pass"/><test-case name="26299ctG066.v tokoe:valid" result="pass"/><test-case name="26300ctG067 tokoe:valid" result="pass"/><test-case name="26301ctG067.v tokoe:valid" result="pass"/><test-case name="26302ctG068 tokoe:valid" result="pass"/><test-case name="26303ctG068.v tokoe:valid" result="pass"/><test-case name="26304ctG069 tokoe:valid" result="pass"/><test-case name="26305ctG069.v tokoe:valid" result="pass"/><test-case name="26306ctG070 tokoe:invalid" result="pass"/><test-case name="26307ctG071 tokoe:valid" result="pass"/><test-case name="26308ctG071.v tokoe:valid" result="pass"/><test-case name="26309ctG072 tokoe:invalid" result="pass"/><test-case name="26310ctG073 tokoe:invalid" result="pass"/><test-case name="26311ctG074 tokoe:invalid" result="pass"/><test-case name="26312ctG075 tokoe:invalid" result="pass"/><test-case name="26313ctG076 tokoe:invalid" result="pass"/><test-case name="26314ctG077 tokoe:invalid" result="pass"/><test-case name="26315ctG078 tokoe:invalid" result="pass"/><test-case name="26316ctG079 tokoe:invalid" result="pass"/><test-case name="26317ctG080 tokoe:invalid" result="pass"/><test-case name="26318ctG081 tokoe:invalid" result="pass"/><test-case name="26319ctH001 tokoe:valid" result="pass"/><test-case name="26320ctH001.v tokoe:valid" result="pass"/><test-case name="26321ctH002 tokoe:invalid" result="pass"/><test-case name="26322ctH003 tokoe:invalid" result="pass"/><test-case name="26323ctH004 tokoe:invalid" result="pass"/><test-case name="26324ctH005 tokoe:invalid" result="pass"/><test-case name="26325ctH006 tokoe:invalid" result="pass"/><test-case name="26326ctH007 tokoe:valid" result="pass"/><test-case name="26327ctH007.v tokoe:valid" result="pass"/><test-case name="26328ctH008 tokoe:valid" result="pass"/><test-case name="26329ctH008.v tokoe:valid" result="pass"/><test-case name="26330ctH009 tokoe:valid" result="pass"/><test-case name="26331ctH009.v tokoe:valid" result="pass"/><test-case name="26332ctH010 tokoe:valid" result="pass"/><test-case name="26333ctH010.v tokoe:valid" result="pass"/><test-case name="26334ctH011 tokoe:valid" result="pass"/><test-case name="26335ctH011.v tokoe:valid" result="pass"/><test-case name="26336ctH012 tokoe:invalid" result="pass"/><test-case name="26337ctH013 tokoe:invalid" result="pass"/><test-case name="26338ctH014 tokoe:invalid" result="pass"/><test-case name="26339ctH015 tokoe:invalid" result="pass"/><test-case name="26340ctH016 tokoe:invalid" result="pass"/><test-case name="26341ctH017 tokoe:invalid" result="pass"/><test-case name="26342ctH018 tokoe:invalid" result="pass"/><test-case name="26343ctH019 tokoe:invalid" result="pass"/><test-case name="26344ctH020 tokoe:invalid" result="pass"/><test-case name="26345ctH021 tokoe:invalid" result="pass"/><test-case name="26346ctH022 tokoe:invalid" result="pass"/><test-case name="26347ctH023 tokoe:invalid" result="pass"/><test-case name="26348ctH024 tokoe:invalid" result="pass"/><test-case name="26349ctH025 tokoe:valid" result="pass"/><test-case name="26350ctH025.v tokoe:valid" result="pass"/><test-case name="26351ctH026 tokoe:invalid" result="pass"/><test-case name="26352ctH027 tokoe:invalid" result="pass"/><test-case name="26353ctH028 tokoe:invalid" result="pass"/><test-case name="26354ctH029 tokoe:invalid" result="pass"/><test-case name="26355ctH030 tokoe:invalid" result="pass"/><test-case name="26356ctH031 tokoe:valid" result="pass"/><test-case name="26357ctH031.v tokoe:valid" result="pass"/><test-case name="26358ctH032 tokoe:valid" result="pass"/><test-case name="26359ctH032.v tokoe:valid" result="pass"/><test-case name="26360ctH033 tokoe:valid" result="pass"/><test-case name="26361ctH033.v tokoe:valid" result="pass"/><test-case name="26362ctH034 tokoe:valid" result="pass"/><test-case name="26363ctH034.v tokoe:valid" result="pass"/><test-case name="26364ctH035 tokoe:valid" result="pass"/><test-case name="26365ctH035.v tokoe:valid" result="pass"/><test-case name="26366ctH036 tokoe:invalid" result="pass"/><test-case name="26367ctH037 tokoe:valid" result="pass"/><test-case name="26368ctH037.v tokoe:valid" result="pass"/><test-case name="26369ctH038 tokoe:invalid" result="pass"/><test-case name="26370ctH039 tokoe:invalid" result="pass"/><test-case name="26371ctH040 tokoe:invalid" result="pass"/><test-case name="26372ctH041 tokoe:invalid" result="pass"/><test-case name="26373ctH042 tokoe:invalid" result="pass"/><test-case name="26374ctH043 tokoe:valid" result="pass"/><test-case name="26375ctH043.v tokoe:valid" result="pass"/><test-case name="26376ctH044 tokoe:valid" result="pass"/><test-case name="26377ctH044.v tokoe:valid" result="pass"/><test-case name="26378ctH045 tokoe:valid" result="pass"/><test-case name="26379ctH045.v tokoe:valid" result="pass"/><test-case name="26380ctH046 tokoe:valid" result="pass"/><test-case name="26381ctH046.v tokoe:valid" result="pass"/><test-case name="26382ctH047 tokoe:valid" result="pass"/><test-case name="26383ctH047.v tokoe:valid" result="pass"/><test-case name="26384ctH048 tokoe:invalid" result="pass"/><test-case name="26385ctH049 tokoe:valid" result="pass"/><test-case name="26386ctH049.v tokoe:valid" result="pass"/><test-case name="26387ctH050 tokoe:invalid" result="pass"/><test-case name="26388ctH051 tokoe:invalid" result="pass"/><test-case name="26389ctH052 tokoe:invalid" result="pass"/><test-case name="26390ctH053 tokoe:invalid" result="pass"/><test-case name="26391ctH054 tokoe:invalid" result="pass"/><test-case name="26392ctH055 tokoe:valid" result="pass"/><test-case name="26393ctH055.v tokoe:valid" result="pass"/><test-case name="26394ctH056 tokoe:valid" result="pass"/><test-case name="26395ctH056.v tokoe:valid" result="pass"/><test-case name="26396ctH057 tokoe:valid" result="pass"/><test-case name="26397ctH057.v tokoe:valid" result="pass"/><test-case name="26398ctH058 tokoe:valid" result="pass"/><test-case name="26399ctH058.v tokoe:valid" result="pass"/><test-case name="26400ctH059 tokoe:invalid" result="pass"/><test-case name="26401ctH060 tokoe:valid" result="pass"/><test-case name="26402ctH060.v tokoe:valid" result="pass"/><test-case name="26403ctH061 tokoe:invalid" result="pass"/><test-case name="26404ctH062 tokoe:invalid" result="pass"/><test-case name="26405ctH063 tokoe:invalid" result="pass"/><test-case name="26406ctH064 tokoe:invalid" result="pass"/><test-case name="26407ctH065 tokoe:invalid" result="pass"/><test-case name="26408ctH066 tokoe:valid" result="pass"/><test-case name="26409ctH066.v tokoe:valid" result="pass"/><test-case name="26410ctH067 tokoe:valid" result="pass"/><test-case name="26411ctH067.v tokoe:valid" result="pass"/><test-case name="26412ctH068 tokoe:valid" result="pass"/><test-case name="26413ctH068.v tokoe:valid" result="pass"/><test-case name="26414ctH069 tokoe:valid" result="pass"/><test-case name="26415ctH069.v tokoe:valid" result="pass"/><test-case name="26416ctH070 tokoe:invalid" result="pass"/><test-case name="26417ctH071 tokoe:valid" result="pass"/><test-case name="26418ctH071.v tokoe:valid" result="pass"/><test-case name="26419ctH072 tokoe:invalid" result="pass"/><test-case name="26420ctH073 tokoe:invalid" result="pass"/><test-case name="26421ctH074 tokoe:invalid" result="pass"/><test-case name="26422ctH075 tokoe:invalid" result="pass"/><test-case name="26423ctH076 tokoe:invalid" result="pass"/><test-case name="26424ctH077 tokoe:invalid" result="pass"/><test-case name="26425ctH078 tokoe:invalid" result="pass"/><test-case name="26426ctH079 tokoe:invalid" result="pass"/><test-case name="26427ctH080 tokoe:invalid" result="pass"/><test-case name="26428ctH081 tokoe:invalid" result="pass"/><test-case name="26429ctH082 tokoe:valid" result="pass"/><test-case name="26430ctH082.v tokoe:valid" result="pass"/><test-case name="26431ctI001 tokoe:invalid" result="pass"/><test-case name="26432ctI002 tokoe:invalid" result="pass"/><test-case name="26433ctI003 tokoe:valid" result="pass"/><test-case name="26434ctI003.v tokoe:valid" result="pass"/><test-case name="26435ctI004 tokoe:valid" result="pass"/><test-case name="26436ctI004.v tokoe:valid" result="pass"/><test-case name="26437ctI005 tokoe:valid" result="pass"/><test-case name="26438ctI005.v tokoe:valid" result="pass"/><test-case name="26439ctI006 tokoe:invalid" result="pass"/><test-case name="26440ctI007 tokoe:invalid" result="pass"/><test-case name="26441ctI008 tokoe:invalid" result="pass"/><test-case name="26442ctI009 tokoe:valid" result="pass"/><test-case name="26443ctI009.v tokoe:valid" result="pass"/><test-case name="26444ctI010 tokoe:valid" result="pass"/><test-case name="26445ctI010.v tokoe:valid" result="pass"/><test-case name="26446ctI011 tokoe:invalid" result="pass"/><test-case name="26447ctI012 tokoe:invalid" result="pass"/><test-case name="26448ctI013 tokoe:invalid" result="pass"/><test-case name="26449ctI014 tokoe:valid" result="pass"/><test-case name="26450ctI014.v tokoe:valid" result="pass"/><test-case name="26451ctI015 tokoe:valid" result="pass"/><test-case name="26452ctI015.v tokoe:valid" result="pass"/><test-case name="26453ctI016 tokoe:invalid" result="pass"/><test-case name="26454ctI017 tokoe:invalid" result="pass"/><test-case name="26455ctI018 tokoe:valid" result="pass"/><test-case name="26456ctI018.v tokoe:valid" result="pass"/><test-case name="26457ctI019 tokoe:valid" result="pass"/><test-case name="26458ctI019.v tokoe:valid" result="pass"/><test-case name="26459ctI020 tokoe:invalid" result="pass"/><test-case name="26460ctI021 tokoe:valid" result="pass"/><test-case name="26461ctI021.v tokoe:valid" result="pass"/><test-case name="26462ctI022 tokoe:valid" result="pass"/><test-case name="26463ctI022.v tokoe:valid" result="pass"/><test-case name="26464ctI023 tokoe:valid" result="pass"/><test-case name="26465ctI023.v tokoe:valid" result="pass"/><test-case name="26466ctI024 tokoe:invalid" result="pass"/><test-case name="26467ctI025 tokoe:valid" result="pass"/><test-case name="26468ctI025.v tokoe:valid" result="pass"/><test-case name="26469ctI026 tokoe:valid" result="pass"/><test-case name="26470ctI026.v tokoe:valid" result="pass"/><test-case name="26471ctI027 tokoe:valid" result="pass"/><test-case name="26472ctI027.v tokoe:valid" result="pass"/><test-case name="26473ctI028 tokoe:valid" result="pass"/><test-case name="26474ctI028.v tokoe:valid" result="pass"/><test-case name="26475ctI029 tokoe:valid" result="pass"/><test-case name="26476ctI029.v tokoe:valid" result="pass"/><test-case name="26477ctI030 tokoe:valid" result="pass"/><test-case name="26478ctI030.i tokoe:invalid" result="pass"/><test-case name="26479ctI031 tokoe:valid" result="pass"/><test-case name="26480ctI031.i tokoe:invalid" result="pass"/><test-case name="26481ctI032 tokoe:valid" result="pass"/><test-case name="26482ctI032.i tokoe:invalid" result="pass"/><test-case name="26483ctI033 tokoe:valid" result="pass"/><test-case name="26484ctI033.v tokoe:valid" result="pass"/><test-case name="26485ctI034 tokoe:valid" result="pass"/><test-case name="26486ctI034.v tokoe:valid" result="pass"/><test-case name="26487ctI035 tokoe:valid" result="pass"/><test-case name="26488ctI035.i tokoe:invalid" result="pass"/><test-case name="26489ctI036 tokoe:valid" result="pass"/><test-case name="26490ctI036.v tokoe:valid" result="pass"/><test-case name="26491ctI037 tokoe:valid" result="pass"/><test-case name="26492ctI037.v tokoe:valid" result="pass"/><test-case name="26493ctI038 tokoe:valid" result="pass"/><test-case name="26494ctI038.i tokoe:invalid" result="pass"/><test-case name="26495ctI039 tokoe:valid" result="pass"/><test-case name="26496ctI039.i tokoe:invalid" result="pass"/><test-case name="26497ctI040 tokoe:valid" result="pass"/><test-case name="26498ctI040.v tokoe:valid" result="pass"/><test-case name="26499ctI041 tokoe:valid" result="pass"/><test-case name="26500ctI041.v tokoe:valid" result="pass"/><test-case name="26501ctI042 tokoe:valid" result="pass"/><test-case name="26502ctI042.i tokoe:invalid" result="pass"/><test-case name="26503ctI043 tokoe:valid" result="pass"/><test-case name="26504ctI043.v tokoe:valid" result="pass"/><test-case name="26505ctI044 tokoe:valid" result="pass"/><test-case name="26506ctI044.v tokoe:valid" result="pass"/><test-case name="26507ctI045 tokoe:valid" result="pass"/><test-case name="26508ctI045.i tokoe:invalid" result="pass"/><test-case name="26509ctI046 tokoe:valid" result="pass"/><test-case name="26510ctI046.v tokoe:valid" result="pass"/><test-case name="26511ctI047 tokoe:valid" result="pass"/><test-case name="26512ctI047.v tokoe:valid" result="pass"/><test-case name="26513ctI048 tokoe:valid" result="pass"/><test-case name="26514ctI048.i tokoe:invalid" result="pass"/><test-case name="26515ctI049 tokoe:valid" result="pass"/><test-case name="26516ctI049.i tokoe:invalid" result="pass"/><test-case name="26517ctI050 tokoe:valid" result="pass"/><test-case name="26518ctI050.v tokoe:valid" result="pass"/><test-case name="26519ctJ001 tokoe:valid" result="pass"/><test-case name="26520ctJ001.v tokoe:valid" result="pass"/><test-case name="26521ctJ002 tokoe:invalid" result="pass"/><test-case name="26522ctJ003 tokoe:invalid" result="pass"/><test-case name="26523ctK001 tokoe:valid" result="pass"/><test-case name="26524ctK001.v tokoe:valid" result="pass"/><test-case name="26525ctK002 tokoe:invalid" result="pass"/><test-case name="26526ctL001 tokoe:valid" result="pass"/><test-case name="26527ctL001.i tokoe:invalid" result="pass"/><test-case name="26528ctL002 tokoe:valid" result="pass"/><test-case name="26529ctL002.i tokoe:invalid" result="pass"/><test-case name="26530ctL003 tokoe:valid" result="pass"/><test-case name="26531ctL003.v tokoe:valid" result="pass"/><test-case name="26532ctL004 tokoe:valid" result="pass"/><test-case name="26533ctL004.i tokoe:invalid" result="pass"/><test-case name="26534ctL005 tokoe:valid" result="pass"/><test-case name="26535ctL005.v tokoe:valid" result="pass"/><test-case name="26536ctL006 tokoe:valid" result="pass"/><test-case name="26537ctL006.i tokoe:invalid" result="pass"/><test-case name="26538ctL007 tokoe:valid" result="pass"/><test-case name="26539ctL007.v tokoe:valid" result="pass"/><test-case name="26540ctL008 tokoe:valid" result="pass"/><test-case name="26541ctL008.v tokoe:valid" result="pass"/><test-case name="26542ctL009 tokoe:valid" result="pass"/><test-case name="26543ctL009.i tokoe:invalid" result="pass"/><test-case name="26544ctL010 tokoe:valid" result="pass"/><test-case name="26545ctL010.i tokoe:invalid" result="pass"/><test-case name="26546ctL011 tokoe:valid" result="pass"/><test-case name="26547ctL011.v tokoe:valid" result="pass"/><test-case name="26548ctL012 tokoe:valid" result="pass"/><test-case name="26549ctL012.i tokoe:invalid" result="pass"/><test-case name="26550ctL013 tokoe:valid" result="pass"/><test-case name="26551ctL013.i tokoe:invalid" result="pass"/><test-case name="26552ctL014 tokoe:valid" result="pass"/><test-case name="26553ctL014.v tokoe:valid" result="pass"/><test-case name="26554ctL015 tokoe:valid" result="pass"/><test-case name="26555ctL015.v tokoe:valid" result="pass"/><test-case name="26556ctL016 tokoe:valid" result="pass"/><test-case name="26557ctL016.v tokoe:valid" result="pass"/><test-case name="26558ctL017 tokoe:valid" result="pass"/><test-case name="26559ctL017.v tokoe:valid" result="pass"/><test-case name="26560ctL018 tokoe:valid" result="pass"/><test-case name="26561ctL018.v tokoe:valid" result="pass"/><test-case name="26562ctL019 tokoe:valid" result="pass"/><test-case name="26563ctL019.v tokoe:valid" result="pass"/><test-case name="26564ctL020 tokoe:valid" result="pass"/><test-case name="26565ctL020.i tokoe:invalid" result="pass"/><test-case name="26566ctL021 tokoe:valid" result="pass"/><test-case name="26567ctL021.v tokoe:valid" result="pass"/><test-case name="26568ctL022 tokoe:valid" result="pass"/><test-case name="26569ctL022.v tokoe:valid" result="pass"/><test-case name="26570ctM001 tokoe:invalid" result="pass"/><test-case name="26571ctM002 tokoe:valid" result="pass"/><test-case name="26572ctM002.v tokoe:valid" result="pass"/><test-case name="26573ctM003 tokoe:invalid" result="pass"/><test-case name="26574ctM004 tokoe:invalid" result="pass"/><test-case name="26575ctN001 tokoe:valid" result="pass"/><test-case name="26576ctN001.v tokoe:valid" result="pass"/><test-case name="26577ctN002 tokoe:invalid" result="pass"/><test-case name="26578ctN003 tokoe:valid" result="pass"/><test-case name="26579ctN003.v tokoe:valid" result="pass"/><test-case name="26580ctN004 tokoe:valid" result="pass"/><test-case name="26581ctN004.v tokoe:valid" result="pass"/><test-case name="26582ctO001 tokoe:valid" result="pass"/><test-case name="26583ctO001.v tokoe:valid" result="pass"/><test-case name="26584ctO002 tokoe:invalid" result="pass"/><test-case name="26585ctO003 tokoe:valid" result="pass"/><test-case name="26586ctO003.v tokoe:valid" result="pass"/><test-case name="26587ctO004 tokoe:invalid" result="pass"/><test-case name="26588ctO005 tokoe:invalid" result="pass"/><test-case name="26589ctO006 tokoe:valid" result="pass"/><test-case name="26590ctO006.v tokoe:valid" result="pass"/><test-case name="26591ctO007 tokoe:invalid" result="pass"/><test-case name="26592ctZ001 tokoe:valid" result="pass"/><test-case name="26593ctZ001.v tokoe:valid" result="pass"/><test-case name="26594ctZ002 tokoe:invalid" result="pass"/><test-case name="26595ctZ003 tokoe:valid" result="pass"/><test-case name="26596ctZ003.v tokoe:valid" result="pass"/><test-case name="26597ctZ004 tokoe:valid" result="pass"/><test-case name="26598ctZ005 tokoe:valid" result="pass"/><test-case name="26599ctZ005.i tokoe:invalid" result="pass"/><test-case name="26600ctZ006 tokoe:valid" result="pass"/><test-case name="26601ctZ006.v tokoe:valid" result="pass"/><test-case name="26602ctZ007 tokoe:valid" result="pass"/><test-case name="26603ctZ007.v tokoe:valid" result="fail"/><test-case name="26604ctZ008 tokoe:valid" result="pass"/><test-case name="26605ctZ008.v tokoe:valid" result="pass"/><test-case name="26606ctZ009 tokoe:valid" result="pass"/><test-case name="26607ctZ009.v tokoe:valid" result="pass"/><test-case name="26608ctZ009_a tokoe:valid" result="pass"/><test-case name="26609ctZ009_a.v tokoe:valid" result="pass"/><test-case name="26610ctZ009_b tokoe:valid" result="pass"/><test-case name="26611ctZ009_b.v tokoe:valid" result="pass"/><test-case name="26612ctZ009_c tokoe:valid" result="pass"/><test-case name="26613ctZ009_c.i tokoe:invalid" result="pass"/><test-case name="26614ctZ009_d tokoe:valid" result="pass"/><test-case name="26615ctZ009_d.v tokoe:valid" result="pass"/><test-case name="26616ctZ010 tokoe:valid" result="pass"/><test-case name="26617ctZ010a tokoe:invalid" result="pass"/><test-case name="26618ctZ010b tokoe:valid" result="pass"/><test-case name="26619ctZ010c tokoe:valid" result="pass"/><test-case name="26620ctZ010d tokoe:invalid" result="pass"/><test-case name="26621ctZ010e tokoe:invalid" result="pass"/><test-case name="26622ctZ010f tokoe:valid" result="pass"/><test-case name="26623ctZ010g tokoe:valid" result="pass"/><test-case name="26624ctZ010h tokoe:valid" result="pass"/><test-case name="26625ctZ011_a.v tokoe:valid" result="pass"/><test-case name="26626ctZ011_b tokoe:valid" result="pass"/><test-case name="26627ctZ011_b.v tokoe:valid" result="pass"/><test-case name="26628ctZ012a tokoe:valid" result="pass"/><test-case name="26629ctZ012b tokoe:valid" result="pass"/><test-case name="26630ctZ013a tokoe:valid" result="pass"/><test-case name="26631ctZ013a.v tokoe:valid" result="pass"/><test-case name="26632ctZ013b tokoe:valid" result="pass"/><test-case name="26633ctZ013b.v tokoe:valid" result="pass"/><test-case name="26634ctZ013c tokoe:valid" result="pass"/><test-case name="26635ctZ013c.i tokoe:invalid" result="pass"/><test-case name="26636ctZ013d tokoe:valid" result="pass"/><test-case name="26637ctZ013d.i tokoe:invalid" result="pass"/><test-case name="26638ctZ013e tokoe:valid" result="pass"/><test-case name="26639ctZ013e.i tokoe:invalid" result="pass"/><test-case name="26640string_length001_0 tokoe:invalid" result="pass"/><test-case name="26641string_length002_1 tokoe:invalid" result="pass"/><test-case name="26642string_length003_2 tokoe:valid" result="pass"/><test-case name="26643string_length004_3 tokoe:invalid" result="pass"/><test-case name="26644string_length005_4 tokoe:invalid" result="pass"/><test-case name="26645string_length006_5 tokoe:invalid" result="pass"/><test-case name="26646string_length007_6 tokoe:invalid" result="pass"/><test-case name="26647string_minLength001_7 tokoe:invalid" result="pass"/><test-case name="26648string_minLength002_8 tokoe:invalid" result="pass"/><test-case name="26649string_minLength003_9 tokoe:valid" result="pass"/><test-case name="26650string_minLength004_10 tokoe:invalid" result="pass"/><test-case name="26651string_minLength005_11 tokoe:invalid" result="pass"/><test-case name="26652string_minLength006_12 tokoe:invalid" result="pass"/><test-case name="26653string_minLength007_13 tokoe:valid" result="pass"/><test-case name="26654string_minLength008_14 tokoe:valid" result="pass"/><test-case name="26655string_maxLength001_15 tokoe:invalid" result="pass"/><test-case name="26656string_maxLength002_16 tokoe:invalid" result="pass"/><test-case name="26657string_maxLength003_17 tokoe:valid" result="pass"/><test-case name="26658string_maxLength004_18 tokoe:invalid" result="pass"/><test-case name="26659string_maxLength005_19 tokoe:invalid" result="pass"/><test-case name="26660string_pattern001_20 tokoe:valid" result="pass"/><test-case name="26661string_enumeration001_21 tokoe:valid" result="pass"/><test-case name="26662string_enumeration002_22 tokoe:valid" result="pass"/><test-case name="26663decimal_pattern001_23 tokoe:valid" result="pass"/><test-case name="26664decimal_enumeration001_24 tokoe:invalid" result="pass"/><test-case name="26665decimal_enumeration002_25 tokoe:valid" result="pass"/><test-case name="26666decimal_maxInclusive001_26 tokoe:invalid" result="pass"/><test-case name="26667decimal_maxInclusive002_27 tokoe:valid" result="pass"/><test-case name="26668decimal_maxInclusive003_28 tokoe:invalid" result="pass"/><test-case name="26669decimal_maxExclusive001_29 tokoe:invalid" result="pass"/><test-case name="26670decimal_maxExclusive002_30 tokoe:valid" result="pass"/><test-case name="26671decimal_minInclusive001_31 tokoe:invalid" result="pass"/><test-case name="26672decimal_minInclusive002_32 tokoe:valid" result="pass"/><test-case name="26673decimal_minInclusive003_33 tokoe:invalid" result="pass"/><test-case name="26674decimal_minExclusive001_34 tokoe:invalid" result="pass"/><test-case name="26675decimal_minExclusive002_35 tokoe:valid" result="pass"/><test-case name="26676decimal_minExclusive003_36 tokoe:invalid" result="pass"/><test-case name="26677decimal_totalDigits001_37 tokoe:invalid" result="pass"/><test-case name="26678decimal_totalDigits002_38 tokoe:invalid" result="pass"/><test-case name="26679decimal_totalDigits003_39 tokoe:invalid" result="pass"/><test-case name="26680decimal_totalDigits004_40 tokoe:valid" result="pass"/><test-case name="26681decimal_totalDigits005_41 tokoe:invalid" result="pass"/><test-case name="26682decimal_totalDigits006_42 tokoe:invalid" result="pass"/><test-case name="26683decimal_totalDigits007_43 tokoe:valid" result="pass"/><test-case name="26684decimal_fractionDigits001_44 tokoe:invalid" result="pass"/><test-case name="26685decimal_fractionDigits002_45 tokoe:invalid" result="pass"/><test-case name="26686decimal_fractionDigits003_46 tokoe:valid" result="pass"/><test-case name="26687decimal_fractionDigits004_47 tokoe:valid" result="pass"/><test-case name="26688decimal_fractionDigits005_48 tokoe:invalid" result="pass"/><test-case name="26689decimal_fractionDigits006_49 tokoe:invalid" result="pass"/><test-case name="26690decimal_fractionDigits007_50 tokoe:valid" result="pass"/><test-case name="26691decimal_fractionDigits008_51 tokoe:invalid" result="pass"/><test-case name="26692float_pattern001_52 tokoe:valid" result="pass"/><test-case name="26693float_enumeration001_53 tokoe:invalid" result="pass"/><test-case name="26694float_enumeration002_54 tokoe:valid" result="pass"/><test-case name="26695float_maxInclusive001_55 tokoe:invalid" result="pass"/><test-case name="26696float_maxInclusive002_56 tokoe:valid" result="pass"/><test-case name="26697float_maxInclusive003_57 tokoe:invalid" result="pass"/><test-case name="26698float_maxExclusive001_58 tokoe:invalid" result="pass"/><test-case name="26699float_maxExclusive002_59 tokoe:valid" result="pass"/><test-case name="26700float_minInclusive001_60 tokoe:invalid" result="pass"/><test-case name="26701float_minInclusive002_61 tokoe:valid" result="pass"/><test-case name="26702float_minInclusive003_62 tokoe:invalid" result="pass"/><test-case name="26703float_minExclusive001_63 tokoe:invalid" result="pass"/><test-case name="26704float_minExclusive002_64 tokoe:valid" result="pass"/><test-case name="26705float_minExclusive003_65 tokoe:invalid" result="pass"/><test-case name="26706double_pattern001_66 tokoe:valid" result="pass"/><test-case name="26707double_enumeration001_67 tokoe:invalid" result="pass"/><test-case name="26708double_enumeration002_68 tokoe:valid" result="pass"/><test-case name="26709double_maxInclusive001_69 tokoe:invalid" result="pass"/><test-case name="26710double_maxInclusive002_70 tokoe:valid" result="pass"/><test-case name="26711double_maxInclusive003_71 tokoe:invalid" result="pass"/><test-case name="26712double_maxExclusive001_72 tokoe:invalid" result="pass"/><test-case name="26713double_maxExclusive002_73 tokoe:valid" result="pass"/><test-case name="26714double_minInclusive001_74 tokoe:invalid" result="pass"/><test-case name="26715double_minInclusive002_75 tokoe:valid" result="pass"/><test-case name="26716double_minInclusive003_76 tokoe:invalid" result="pass"/><test-case name="26717double_minExclusive001_77 tokoe:invalid" result="pass"/><test-case name="26718double_minExclusive002_78 tokoe:valid" result="pass"/><test-case name="26719double_minExclusive003_79 tokoe:invalid" result="pass"/><test-case name="26720duration_pattern001_80 tokoe:valid" result="pass"/><test-case name="26721duration_enumeration001_81 tokoe:invalid" result="pass"/><test-case name="26722duration_enumeration002_82 tokoe:valid" result="pass"/><test-case name="26723duration_enumeration003_83 tokoe:valid" result="pass"/><test-case name="26724duration_enumeration004_84 tokoe:valid" result="pass"/><test-case name="26725duration_maxInclusive001_85 tokoe:invalid" result="pass"/><test-case name="26726duration_maxInclusive002_86 tokoe:valid" result="pass"/><test-case name="26727duration_maxInclusive003_87 tokoe:invalid" result="pass"/><test-case name="26728duration_maxExclusive001_88 tokoe:invalid" result="pass"/><test-case name="26729duration_maxExclusive002_89 tokoe:valid" result="pass"/><test-case name="26730duration_minInclusive001_90 tokoe:invalid" result="pass"/><test-case name="26731duration_minInclusive002_91 tokoe:valid" result="pass"/><test-case name="26732duration_minInclusive003_92 tokoe:invalid" result="pass"/><test-case name="26733duration_minInclusive004_93 tokoe:valid" result="fail"/><test-case name="26734duration_minExclusive001_94 tokoe:invalid" result="pass"/><test-case name="26735duration_minExclusive002_95 tokoe:valid" result="pass"/><test-case name="26736duration_minExclusive003_96 tokoe:invalid" result="pass"/><test-case name="26737dateTime_pattern001_97 tokoe:valid" result="pass"/><test-case name="26738dateTime_enumeration001_98 tokoe:invalid" result="pass"/><test-case name="26739dateTime_enumeration002_99 tokoe:valid" result="pass"/><test-case name="26740dateTime_enumeration003_100 tokoe:valid" result="fail"/><test-case name="26741dateTime_maxInclusive001_101 tokoe:invalid" result="pass"/><test-case name="26742dateTime_maxInclusive002_102 tokoe:valid" result="pass"/><test-case name="26743dateTime_maxInclusive003_103 tokoe:invalid" result="pass"/><test-case name="26744dateTime_maxInclusive004_104 tokoe:valid" result="pass"/><test-case name="26745dateTime_maxExclusive001_105 tokoe:invalid" result="pass"/><test-case name="26746dateTime_maxExclusive002_106 tokoe:valid" result="pass"/><test-case name="26747dateTime_minInclusive001_107 tokoe:invalid" result="pass"/><test-case name="26748dateTime_minInclusive002_108 tokoe:valid" result="pass"/><test-case name="26749dateTime_minInclusive003_109 tokoe:invalid" result="pass"/><test-case name="26750dateTime_minExclusive001_110 tokoe:invalid" result="pass"/><test-case name="26751dateTime_minExclusive002_111 tokoe:valid" result="pass"/><test-case name="26752dateTime_minExclusive003_112 tokoe:invalid" result="pass"/><test-case name="26753time_pattern001_113 tokoe:valid" result="pass"/><test-case name="26754time_enumeration001_114 tokoe:invalid" result="pass"/><test-case name="26755time_enumeration002_115 tokoe:valid" result="pass"/><test-case name="26756time_maxInclusive001_116 tokoe:invalid" result="pass"/><test-case name="26757time_maxInclusive002_117 tokoe:valid" result="pass"/><test-case name="26758time_maxInclusive003_118 tokoe:invalid" result="pass"/><test-case name="26759time_maxInclusive007_119 tokoe:invalid" result="pass"/><test-case name="26760time_maxExclusive001_120 tokoe:invalid" result="pass"/><test-case name="26761time_maxExclusive002_121 tokoe:valid" result="pass"/><test-case name="26762time_minInclusive001_122 tokoe:invalid" result="pass"/><test-case name="26763time_minInclusive002_123 tokoe:valid" result="pass"/><test-case name="26764time_minInclusive003_124 tokoe:invalid" result="pass"/><test-case name="26765time_minExclusive001_125 tokoe:invalid" result="pass"/><test-case name="26766time_minExclusive002_126 tokoe:valid" result="pass"/><test-case name="26767time_minExclusive003_127 tokoe:invalid" result="pass"/><test-case name="26768date_pattern001_128 tokoe:valid" result="pass"/><test-case name="26769date_enumeration001_129 tokoe:invalid" result="pass"/><test-case name="26770date_enumeration002_130 tokoe:valid" result="pass"/><test-case name="26771date_maxInclusive001_131 tokoe:invalid" result="pass"/><test-case name="26772date_maxInclusive002_132 tokoe:valid" result="pass"/><test-case name="26773date_maxInclusive003_133 tokoe:invalid" result="pass"/><test-case name="26774date_maxInclusive007_134 tokoe:invalid" result="pass"/><test-case name="26775date_maxInclusive008_135 tokoe:invalid" result="pass"/><test-case name="26776date_maxInclusive009_136 tokoe:valid" result="pass"/><test-case name="26777date_maxExclusive001_137 tokoe:invalid" result="pass"/><test-case name="26778date_maxExclusive002_138 tokoe:valid" result="pass"/><test-case name="26779date_minInclusive001_139 tokoe:invalid" result="pass"/><test-case name="26780date_minInclusive002_140 tokoe:valid" result="pass"/><test-case name="26781date_minInclusive003_141 tokoe:invalid" result="pass"/><test-case name="26782date_minExclusive001_142 tokoe:invalid" result="pass"/><test-case name="26783date_minExclusive002_143 tokoe:valid" result="pass"/><test-case name="26784date_minExclusive003_144 tokoe:invalid" result="pass"/><test-case name="26785gYearMonth_pattern001_145 tokoe:valid" result="pass"/><test-case name="26786gYearMonth_enumeration001_146 tokoe:invalid" result="pass"/><test-case name="26787gYearMonth_enumeration002_147 tokoe:valid" result="pass"/><test-case name="26788gYearMonth_maxInclusive001_148 tokoe:invalid" result="pass"/><test-case name="26789gYearMonth_maxInclusive002_149 tokoe:valid" result="pass"/><test-case name="26790gYearMonth_maxInclusive003_150 tokoe:invalid" result="pass"/><test-case name="26791gYearMonth_maxExclusive001_151 tokoe:invalid" result="pass"/><test-case name="26792gYearMonth_maxExclusive002_152 tokoe:valid" result="pass"/><test-case name="26793gYearMonth_minInclusive001_153 tokoe:invalid" result="pass"/><test-case name="26794gYearMonth_minInclusive002_154 tokoe:valid" result="pass"/><test-case name="26795gYearMonth_minInclusive003_155 tokoe:invalid" result="pass"/><test-case name="26796gYearMonth_minExclusive001_156 tokoe:invalid" result="pass"/><test-case name="26797gYearMonth_minExclusive002_157 tokoe:valid" result="pass"/><test-case name="26798gYearMonth_minExclusive003_158 tokoe:invalid" result="pass"/><test-case name="26799gYear_pattern001_159 tokoe:valid" result="pass"/><test-case name="26800gYear_enumeration001_160 tokoe:invalid" result="pass"/><test-case name="26801gYear_enumeration002_161 tokoe:valid" result="pass"/><test-case name="26802gYear_maxInclusive001_162 tokoe:invalid" result="pass"/><test-case name="26803gYear_maxInclusive002_163 tokoe:valid" result="pass"/><test-case name="26804gYear_maxInclusive003_164 tokoe:invalid" result="pass"/><test-case name="26805gYear_maxExclusive001_165 tokoe:invalid" result="pass"/><test-case name="26806gYear_maxExclusive002_166 tokoe:valid" result="pass"/><test-case name="26807gYear_minInclusive001_167 tokoe:invalid" result="pass"/><test-case name="26808gYear_minInclusive002_168 tokoe:valid" result="pass"/><test-case name="26809gYear_minInclusive003_169 tokoe:invalid" result="pass"/><test-case name="26810gYear_minExclusive001_170 tokoe:invalid" result="pass"/><test-case name="26811gYear_minExclusive002_171 tokoe:valid" result="pass"/><test-case name="26812gYear_minExclusive003_172 tokoe:invalid" result="pass"/><test-case name="26813gMonthDay_pattern001_173 tokoe:valid" result="pass"/><test-case name="26814gMonthDay_enumeration001_174 tokoe:invalid" result="pass"/><test-case name="26815gMonthDay_enumeration002_175 tokoe:valid" result="pass"/><test-case name="26816gMonthDay_maxInclusive001_176 tokoe:invalid" result="pass"/><test-case name="26817gMonthDay_maxInclusive002_177 tokoe:valid" result="pass"/><test-case name="26818gMonthDay_maxInclusive003_178 tokoe:invalid" result="pass"/><test-case name="26819gMonthDay_maxExclusive001_179 tokoe:invalid" result="pass"/><test-case name="26820gMonthDay_maxExclusive002_180 tokoe:valid" result="pass"/><test-case name="26821gMonthDay_minInclusive001_181 tokoe:invalid" result="pass"/><test-case name="26822gMonthDay_minInclusive002_182 tokoe:valid" result="pass"/><test-case name="26823gMonthDay_minInclusive003_183 tokoe:invalid" result="pass"/><test-case name="26824gMonthDay_minExclusive001_184 tokoe:invalid" result="pass"/><test-case name="26825gMonthDay_minExclusive002_185 tokoe:valid" result="pass"/><test-case name="26826gMonthDay_minExclusive003_186 tokoe:invalid" result="pass"/><test-case name="26827gDay_pattern001_187 tokoe:valid" result="pass"/><test-case name="26828gDay_enumeration001_188 tokoe:invalid" result="pass"/><test-case name="26829gDay_enumeration002_189 tokoe:valid" result="pass"/><test-case name="26830gDay_maxInclusive001_190 tokoe:invalid" result="pass"/><test-case name="26831gDay_maxInclusive002_191 tokoe:valid" result="pass"/><test-case name="26832gDay_maxInclusive003_192 tokoe:invalid" result="pass"/><test-case name="26833gDay_maxExclusive001_193 tokoe:invalid" result="pass"/><test-case name="26834gDay_maxExclusive002_194 tokoe:valid" result="pass"/><test-case name="26835gDay_minInclusive001_195 tokoe:invalid" result="pass"/><test-case name="26836gDay_minInclusive002_196 tokoe:valid" result="pass"/><test-case name="26837gDay_minInclusive003_197 tokoe:invalid" result="pass"/><test-case name="26838gDay_minExclusive001_198 tokoe:invalid" result="pass"/><test-case name="26839gDay_minExclusive002_199 tokoe:valid" result="pass"/><test-case name="26840gDay_minExclusive003_200 tokoe:invalid" result="pass"/><test-case name="26841gMonth_pattern001_201 tokoe:valid" result="pass"/><test-case name="26842gMonth_enumeration001_202 tokoe:invalid" result="pass"/><test-case name="26843gMonth_enumeration002_203 tokoe:valid" result="fail"/><test-case name="26844gMonth_maxInclusive001_204 tokoe:invalid" result="pass"/><test-case name="26845gMonth_maxInclusive002_205 tokoe:valid" result="fail"/><test-case name="26846gMonth_maxInclusive003_206 tokoe:invalid" result="pass"/><test-case name="26847gMonth_maxExclusive001_207 tokoe:invalid" result="pass"/><test-case name="26848gMonth_maxExclusive002_208 tokoe:valid" result="fail"/><test-case name="26849gMonth_minInclusive001_209 tokoe:invalid" result="pass"/><test-case name="26850gMonth_minInclusive002_210 tokoe:valid" result="fail"/><test-case name="26851gMonth_minInclusive003_211 tokoe:invalid" result="pass"/><test-case name="26852gMonth_minExclusive001_212 tokoe:invalid" result="pass"/><test-case name="26853gMonth_minExclusive002_213 tokoe:valid" result="fail"/><test-case name="26854gMonth_minExclusive003_214 tokoe:invalid" result="pass"/><test-case name="26855hexBinary_length001_215 tokoe:invalid" result="pass"/><test-case name="26856hexBinary_length002_216 tokoe:invalid" result="pass"/><test-case name="26857hexBinary_length003_217 tokoe:valid" result="pass"/><test-case name="26858hexBinary_length004_218 tokoe:invalid" result="pass"/><test-case name="26859hexBinary_length005_219 tokoe:invalid" result="pass"/><test-case name="26860hexBinary_length006_220 tokoe:invalid" result="pass"/><test-case name="26861hexBinary_length007_221 tokoe:invalid" result="pass"/><test-case name="26862hexBinary_minLength001_222 tokoe:invalid" result="pass"/><test-case name="26863hexBinary_minLength002_223 tokoe:invalid" result="pass"/><test-case name="26864hexBinary_minLength003_224 tokoe:valid" result="pass"/><test-case name="26865hexBinary_minLength004_225 tokoe:invalid" result="pass"/><test-case name="26866hexBinary_minLength005_226 tokoe:invalid" result="pass"/><test-case name="26867hexBinary_minLength006_227 tokoe:invalid" result="pass"/><test-case name="26868hexBinary_minLength007_228 tokoe:valid" result="pass"/><test-case name="26869hexBinary_maxLength001_229 tokoe:invalid" result="pass"/><test-case name="26870hexBinary_maxLength002_230 tokoe:invalid" result="pass"/><test-case name="26871hexBinary_maxLength003_231 tokoe:valid" result="pass"/><test-case name="26872hexBinary_maxLength004_232 tokoe:invalid" result="pass"/><test-case name="26873hexBinary_maxLength005_233 tokoe:invalid" result="pass"/><test-case name="26874hexBinary_enumeration001_234 tokoe:valid" result="pass"/><test-case name="26875hexBinary_enumeration002_235 tokoe:valid" result="pass"/><test-case name="26876base64Binary_length001_236 tokoe:invalid" result="pass"/><test-case name="26877base64Binary_length002_237 tokoe:invalid" result="pass"/><test-case name="26878base64Binary_length003_238 tokoe:valid" result="pass"/><test-case name="26879base64Binary_length004_239 tokoe:invalid" result="pass"/><test-case name="26880base64Binary_length005_240 tokoe:invalid" result="pass"/><test-case name="26881base64Binary_length006_241 tokoe:invalid" result="pass"/><test-case name="26882base64Binary_length007_242 tokoe:invalid" result="pass"/><test-case name="26883base64Binary_minLength001_243 tokoe:invalid" result="pass"/><test-case name="26884base64Binary_minLength002_244 tokoe:invalid" result="pass"/><test-case name="26885base64Binary_minLength003_245 tokoe:valid" result="pass"/><test-case name="26886base64Binary_minLength004_246 tokoe:invalid" result="pass"/><test-case name="26887base64Binary_minLength005_247 tokoe:invalid" result="pass"/><test-case name="26888base64Binary_minLength006_248 tokoe:invalid" result="pass"/><test-case name="26889base64Binary_minLength007_249 tokoe:valid" result="pass"/><test-case name="26890base64Binary_maxLength001_250 tokoe:invalid" result="pass"/><test-case name="26891base64Binary_maxLength002_251 tokoe:invalid" result="pass"/><test-case name="26892base64Binary_maxLength003_252 tokoe:valid" result="pass"/><test-case name="26893base64Binary_maxLength004_253 tokoe:invalid" result="pass"/><test-case name="26894base64Binary_maxLength005_254 tokoe:invalid" result="pass"/><test-case name="26895base64Binary_enumeration001_255 tokoe:valid" result="pass"/><test-case name="26896base64Binary_enumeration002_256 tokoe:valid" result="pass"/><test-case name="26897base64Binary_enumeration003_257 tokoe:valid" result="pass"/><test-case name="26898anyURI_length002_258 tokoe:invalid" result="pass"/><test-case name="26899anyURI_length003_259 tokoe:valid" result="pass"/><test-case name="26900anyURI_length004_260 tokoe:invalid" result="pass"/><test-case name="26901anyURI_length005_261 tokoe:invalid" result="pass"/><test-case name="26902anyURI_length006_262 tokoe:invalid" result="pass"/><test-case name="26903anyURI_length007_263 tokoe:invalid" result="pass"/><test-case name="26904anyURI_minLength001_264 tokoe:invalid" result="pass"/><test-case name="26905anyURI_minLength002_265 tokoe:invalid" result="pass"/><test-case name="26906anyURI_minLength003_266 tokoe:valid" result="pass"/><test-case name="26907anyURI_minLength004_267 tokoe:invalid" result="pass"/><test-case name="26908anyURI_minLength005_268 tokoe:invalid" result="pass"/><test-case name="26909anyURI_minLength006_269 tokoe:invalid" result="pass"/><test-case name="26910anyURI_minLength007_270 tokoe:valid" result="pass"/><test-case name="26911anyURI_maxLength001_271 tokoe:invalid" result="pass"/><test-case name="26912anyURI_maxLength002_272 tokoe:invalid" result="pass"/><test-case name="26913anyURI_maxLength003_273 tokoe:valid" result="pass"/><test-case name="26914anyURI_maxLength004_274 tokoe:invalid" result="pass"/><test-case name="26915anyURI_maxLength005_275 tokoe:invalid" result="pass"/><test-case name="26916anyURI_enumeration001_276 tokoe:valid" result="pass"/><test-case name="26917anyURI_enumeration002_277 tokoe:valid" result="pass"/><test-case name="26918QName_length001_278 tokoe:invalid" result="pass"/><test-case name="26919QName_length002_279 tokoe:invalid" result="pass"/><test-case name="26920QName_length003_280 tokoe:valid" result="pass"/><test-case name="26921QName_length004_281 tokoe:invalid" result="pass"/><test-case name="26922QName_length005_282 tokoe:invalid" result="pass"/><test-case name="26923QName_length006_283 tokoe:invalid" result="pass"/><test-case name="26924QName_length007_284 tokoe:invalid" result="pass"/><test-case name="26925QName_minLength001_285 tokoe:invalid" result="pass"/><test-case name="26926QName_minLength002_286 tokoe:invalid" result="pass"/><test-case name="26927QName_minLength003_287 tokoe:valid" result="pass"/><test-case name="26928QName_minLength004_288 tokoe:invalid" result="pass"/><test-case name="26929QName_minLength005_289 tokoe:invalid" result="pass"/><test-case name="26930QName_minLength006_290 tokoe:invalid" result="pass"/><test-case name="26931QName_minLength007_291 tokoe:valid" result="pass"/><test-case name="26932QName_maxLength001_292 tokoe:invalid" result="pass"/><test-case name="26933QName_maxLength002_293 tokoe:invalid" result="pass"/><test-case name="26934QName_maxLength003_294 tokoe:valid" result="pass"/><test-case name="26935QName_maxLength004_295 tokoe:invalid" result="pass"/><test-case name="26936QName_maxLength005_296 tokoe:invalid" result="pass"/><test-case name="26937QName_pattern001_297 tokoe:valid" result="pass"/><test-case name="26938QName_enumeration001_298 tokoe:invalid" result="pass"/><test-case name="26939QName_enumeration002_299 tokoe:valid" result="pass"/><test-case name="26940NOTATION_length001_300 tokoe:invalid" result="pass"/><test-case name="26941NOTATION_length002_301 tokoe:invalid" result="pass"/><test-case name="26942NOTATION_length003_302 tokoe:valid" result="pass"/><test-case name="26943NOTATION_length004_303 tokoe:invalid" result="pass"/><test-case name="26944NOTATION_length005_304 tokoe:invalid" result="pass"/><test-case name="26945NOTATION_length006_305 tokoe:invalid" result="pass"/><test-case name="26946NOTATION_length007_306 tokoe:invalid" result="pass"/><test-case name="26947NOTATION_minLength001_307 tokoe:invalid" result="pass"/><test-case name="26948NOTATION_minLength002_308 tokoe:invalid" result="pass"/><test-case name="26949NOTATION_minLength003_309 tokoe:valid" result="pass"/><test-case name="26950NOTATION_minLength004_310 tokoe:invalid" result="pass"/><test-case name="26951NOTATION_minLength005_311 tokoe:invalid" result="pass"/><test-case name="26952NOTATION_minLength006_312 tokoe:invalid" result="pass"/><test-case name="26953NOTATION_minLength007_313 tokoe:valid" result="pass"/><test-case name="26954NOTATION_maxLength001_314 tokoe:invalid" result="pass"/><test-case name="26955NOTATION_maxLength002_315 tokoe:invalid" result="pass"/><test-case name="26956NOTATION_maxLength003_316 tokoe:valid" result="pass"/><test-case name="26957NOTATION_maxLength004_317 tokoe:invalid" result="pass"/><test-case name="26958NOTATION_maxLength005_318 tokoe:invalid" result="pass"/><test-case name="26959NOTATION_pattern001_319 tokoe:valid" result="pass"/><test-case name="26960NOTATION_enumeration001_320 tokoe:invalid" result="pass"/><test-case name="26961NOTATION_enumeration002_321 tokoe:valid" result="pass"/><test-case name="26962normalizedString_length001_322 tokoe:invalid" result="pass"/><test-case name="26963normalizedString_length002_323 tokoe:invalid" result="pass"/><test-case name="26964normalizedString_length003_324 tokoe:valid" result="pass"/><test-case name="26965normalizedString_length004_325 tokoe:invalid" result="pass"/><test-case name="26966normalizedString_length005_326 tokoe:invalid" result="pass"/><test-case name="26967normalizedString_length006_327 tokoe:invalid" result="pass"/><test-case name="26968normalizedString_length007_328 tokoe:invalid" result="pass"/><test-case name="26969normalizedString_minLength001_329 tokoe:invalid" result="pass"/><test-case name="26970normalizedString_minLength002_330 tokoe:invalid" result="pass"/><test-case name="26971normalizedString_minLength003_331 tokoe:valid" result="pass"/><test-case name="26972normalizedString_minLength004_332 tokoe:invalid" result="pass"/><test-case name="26973normalizedString_minLength005_333 tokoe:invalid" result="pass"/><test-case name="26974normalizedString_minLength006_334 tokoe:invalid" result="pass"/><test-case name="26975normalizedString_minLength007_335 tokoe:valid" result="pass"/><test-case name="26976normalizedString_maxLength001_336 tokoe:invalid" result="pass"/><test-case name="26977normalizedString_maxLength002_337 tokoe:invalid" result="pass"/><test-case name="26978normalizedString_maxLength003_338 tokoe:valid" result="pass"/><test-case name="26979normalizedString_maxLength004_339 tokoe:invalid" result="pass"/><test-case name="26980normalizedString_maxLength005_340 tokoe:invalid" result="pass"/><test-case name="26981normalizedString_pattern001_341 tokoe:valid" result="pass"/><test-case name="26982normalizedString_enumeration001_342 tokoe:valid" result="pass"/><test-case name="26983normalizedString_enumeration002_343 tokoe:valid" result="pass"/><test-case name="26984normalizedString_whitespace001_344 tokoe:invalid" result="pass"/><test-case name="26985token_length001_345 tokoe:invalid" result="pass"/><test-case name="26986token_length002_346 tokoe:invalid" result="pass"/><test-case name="26987token_length003_347 tokoe:valid" result="pass"/><test-case name="26988token_length004_348 tokoe:invalid" result="pass"/><test-case name="26989token_length005_349 tokoe:invalid" result="pass"/><test-case name="26990token_length006_350 tokoe:invalid" result="pass"/><test-case name="26991token_length007_351 tokoe:invalid" result="pass"/><test-case name="26992token_minLength001_352 tokoe:invalid" result="pass"/><test-case name="26993token_minLength002_353 tokoe:invalid" result="pass"/><test-case name="26994token_minLength003_354 tokoe:valid" result="pass"/><test-case name="26995token_minLength004_355 tokoe:invalid" result="pass"/><test-case name="26996token_minLength005_356 tokoe:invalid" result="pass"/><test-case name="26997token_minLength006_357 tokoe:invalid" result="pass"/><test-case name="26998token_minLength007_358 tokoe:valid" result="pass"/><test-case name="26999token_maxLength001_359 tokoe:invalid" result="pass"/><test-case name="27000token_maxLength002_360 tokoe:invalid" result="pass"/><test-case name="27001token_maxLength003_361 tokoe:valid" result="pass"/><test-case name="27002token_maxLength004_362 tokoe:invalid" result="pass"/><test-case name="27003token_maxLength005_363 tokoe:invalid" result="pass"/><test-case name="27004token_pattern001_364 tokoe:valid" result="pass"/><test-case name="27005token_enumeration001_365 tokoe:valid" result="pass"/><test-case name="27006token_enumeration002_366 tokoe:valid" result="pass"/><test-case name="27007token_whitespace001_367 tokoe:invalid" result="pass"/><test-case name="27008language_length001_368 tokoe:invalid" result="pass"/><test-case name="27009language_length002_369 tokoe:invalid" result="pass"/><test-case name="27010language_length003_370 tokoe:valid" result="pass"/><test-case name="27011language_length004_371 tokoe:invalid" result="pass"/><test-case name="27012language_length005_372 tokoe:invalid" result="pass"/><test-case name="27013language_length006_373 tokoe:invalid" result="pass"/><test-case name="27014language_length007_374 tokoe:invalid" result="pass"/><test-case name="27015language_minLength001_375 tokoe:invalid" result="pass"/><test-case name="27016language_minLength002_376 tokoe:invalid" result="pass"/><test-case name="27017language_minLength003_377 tokoe:valid" result="pass"/><test-case name="27018language_minLength004_378 tokoe:invalid" result="pass"/><test-case name="27019language_minLength005_379 tokoe:invalid" result="pass"/><test-case name="27020language_minLength006_380 tokoe:invalid" result="pass"/><test-case name="27021language_minLength007_381 tokoe:valid" result="pass"/><test-case name="27022language_maxLength001_382 tokoe:invalid" result="pass"/><test-case name="27023language_maxLength002_383 tokoe:invalid" result="pass"/><test-case name="27024language_maxLength003_384 tokoe:valid" result="pass"/><test-case name="27025language_maxLength004_385 tokoe:invalid" result="pass"/><test-case name="27026language_maxLength005_386 tokoe:invalid" result="pass"/><test-case name="27027language_pattern001_387 tokoe:valid" result="pass"/><test-case name="27028language_enumeration001_388 tokoe:invalid" result="pass"/><test-case name="27029language_enumeration002_389 tokoe:valid" result="pass"/><test-case name="27030IDREFS_length001_390 tokoe:invalid" result="pass"/><test-case name="27031IDREFS_length002_391 tokoe:invalid" result="pass"/><test-case name="27032IDREFS_length003_392 tokoe:valid" result="pass"/><test-case name="27033IDREFS_length004_393 tokoe:invalid" result="pass"/><test-case name="27034IDREFS_length005_394 tokoe:invalid" result="pass"/><test-case name="27035IDREFS_length006_395 tokoe:invalid" result="fail"/><test-case name="27036IDREFS_length007_396 tokoe:invalid" result="pass"/><test-case name="27037IDREFS_minLength001_397 tokoe:invalid" result="pass"/><test-case name="27038IDREFS_minLength002_398 tokoe:invalid" result="pass"/><test-case name="27039IDREFS_minLength003_399 tokoe:valid" result="pass"/><test-case name="27040IDREFS_minLength004_400 tokoe:invalid" result="pass"/><test-case name="27041IDREFS_minLength005_401 tokoe:invalid" result="pass"/><test-case name="27042IDREFS_minLength006_402 tokoe:invalid" result="pass"/><test-case name="27043IDREFS_minLength007_403 tokoe:valid" result="pass"/><test-case name="27044IDREFS_maxLength001_404 tokoe:invalid" result="pass"/><test-case name="27045IDREFS_maxLength002_405 tokoe:invalid" result="pass"/><test-case name="27046IDREFS_maxLength003_406 tokoe:valid" result="pass"/><test-case name="27047IDREFS_maxLength004_407 tokoe:invalid" result="pass"/><test-case name="27048IDREFS_maxLength005_408 tokoe:invalid" result="pass"/><test-case name="27049IDREFS_enumeration001_409 tokoe:invalid" result="pass"/><test-case name="27050IDREFS_enumeration002_410 tokoe:valid" result="pass"/><test-case name="27051NMTOKEN_length001_411 tokoe:invalid" result="pass"/><test-case name="27052NMTOKEN_length002_412 tokoe:invalid" result="pass"/><test-case name="27053NMTOKEN_length003_413 tokoe:valid" result="pass"/><test-case name="27054NMTOKEN_length004_414 tokoe:invalid" result="pass"/><test-case name="27055NMTOKEN_length005_415 tokoe:invalid" result="pass"/><test-case name="27056NMTOKEN_length006_416 tokoe:invalid" result="pass"/><test-case name="27057NMTOKEN_length007_417 tokoe:invalid" result="pass"/><test-case name="27058NMTOKEN_minLength001_418 tokoe:invalid" result="pass"/><test-case name="27059NMTOKEN_minLength002_419 tokoe:invalid" result="pass"/><test-case name="27060NMTOKEN_minLength003_420 tokoe:valid" result="pass"/><test-case name="27061NMTOKEN_minLength004_421 tokoe:invalid" result="pass"/><test-case name="27062NMTOKEN_minLength005_422 tokoe:invalid" result="pass"/><test-case name="27063NMTOKEN_minLength006_423 tokoe:invalid" result="pass"/><test-case name="27064NMTOKEN_minLength007_424 tokoe:valid" result="pass"/><test-case name="27065NMTOKEN_maxLength001_425 tokoe:invalid" result="pass"/><test-case name="27066NMTOKEN_maxLength002_426 tokoe:invalid" result="pass"/><test-case name="27067NMTOKEN_maxLength003_427 tokoe:valid" result="pass"/><test-case name="27068NMTOKEN_maxLength004_428 tokoe:invalid" result="pass"/><test-case name="27069NMTOKEN_maxLength005_429 tokoe:invalid" result="pass"/><test-case name="27070NMTOKEN_pattern001_430 tokoe:valid" result="pass"/><test-case name="27071NMTOKEN_enumeration001_431 tokoe:invalid" result="pass"/><test-case name="27072NMTOKEN_enumeration002_432 tokoe:valid" result="pass"/><test-case name="27073NMTOKENS_length001_433 tokoe:invalid" result="pass"/><test-case name="27074NMTOKENS_length002_434 tokoe:invalid" result="pass"/><test-case name="27075NMTOKENS_length003_435 tokoe:valid" result="pass"/><test-case name="27076NMTOKENS_length004_436 tokoe:invalid" result="pass"/><test-case name="27077NMTOKENS_length005_437 tokoe:invalid" result="pass"/><test-case name="27078NMTOKENS_length006_438 tokoe:invalid" result="fail"/><test-case name="27079NMTOKENS_length007_439 tokoe:invalid" result="pass"/><test-case name="27080NMTOKENS_minLength001_440 tokoe:invalid" result="pass"/><test-case name="27081NMTOKENS_minLength002_441 tokoe:invalid" result="pass"/><test-case name="27082NMTOKENS_minLength003_442 tokoe:valid" result="pass"/><test-case name="27083NMTOKENS_minLength004_443 tokoe:invalid" result="pass"/><test-case name="27084NMTOKENS_minLength005_444 tokoe:invalid" result="pass"/><test-case name="27085NMTOKENS_minLength006_445 tokoe:invalid" result="pass"/><test-case name="27086NMTOKENS_minLength007_446 tokoe:valid" result="pass"/><test-case name="27087NMTOKENS_maxLength001_447 tokoe:invalid" result="pass"/><test-case name="27088NMTOKENS_maxLength002_448 tokoe:invalid" result="pass"/><test-case name="27089NMTOKENS_maxLength003_449 tokoe:valid" result="pass"/><test-case name="27090NMTOKENS_maxLength004_450 tokoe:invalid" result="pass"/><test-case name="27091NMTOKENS_maxLength005_451 tokoe:invalid" result="pass"/><test-case name="27092NMTOKENS_enumeration001_452 tokoe:invalid" result="pass"/><test-case name="27093NMTOKENS_enumeration002_453 tokoe:valid" result="pass"/><test-case name="27094Name_length001_454 tokoe:invalid" result="pass"/><test-case name="27095Name_length002_455 tokoe:invalid" result="pass"/><test-case name="27096Name_length003_456 tokoe:valid" result="pass"/><test-case name="27097Name_length004_457 tokoe:invalid" result="pass"/><test-case name="27098Name_length005_458 tokoe:invalid" result="pass"/><test-case name="27099Name_length006_459 tokoe:invalid" result="pass"/><test-case name="27100Name_length007_460 tokoe:invalid" result="pass"/><test-case name="27101Name_minLength001_461 tokoe:invalid" result="pass"/><test-case name="27102Name_minLength002_462 tokoe:invalid" result="pass"/><test-case name="27103Name_minLength003_463 tokoe:valid" result="pass"/><test-case name="27104Name_minLength004_464 tokoe:invalid" result="pass"/><test-case name="27105Name_minLength005_465 tokoe:invalid" result="pass"/><test-case name="27106Name_minLength006_466 tokoe:invalid" result="pass"/><test-case name="27107Name_minLength007_467 tokoe:valid" result="pass"/><test-case name="27108Name_maxLength001_468 tokoe:invalid" result="pass"/><test-case name="27109Name_maxLength002_469 tokoe:invalid" result="pass"/><test-case name="27110Name_maxLength003_470 tokoe:valid" result="pass"/><test-case name="27111Name_maxLength004_471 tokoe:invalid" result="pass"/><test-case name="27112Name_maxLength005_472 tokoe:invalid" result="pass"/><test-case name="27113Name_pattern001_473 tokoe:valid" result="pass"/><test-case name="27114Name_enumeration001_474 tokoe:invalid" result="pass"/><test-case name="27115Name_enumeration002_475 tokoe:valid" result="pass"/><test-case name="27116NCName_length001_476 tokoe:invalid" result="pass"/><test-case name="27117NCName_length002_477 tokoe:invalid" result="pass"/><test-case name="27118NCName_length003_478 tokoe:valid" result="pass"/><test-case name="27119NCName_length004_479 tokoe:invalid" result="pass"/><test-case name="27120NCName_length005_480 tokoe:invalid" result="pass"/><test-case name="27121NCName_length006_481 tokoe:invalid" result="pass"/><test-case name="27122NCName_length007_482 tokoe:invalid" result="pass"/><test-case name="27123NCName_minLength001_483 tokoe:invalid" result="pass"/><test-case name="27124NCName_minLength002_484 tokoe:invalid" result="pass"/><test-case name="27125NCName_minLength003_485 tokoe:valid" result="pass"/><test-case name="27126NCName_minLength004_486 tokoe:invalid" result="pass"/><test-case name="27127NCName_minLength005_487 tokoe:invalid" result="pass"/><test-case name="27128NCName_minLength006_488 tokoe:invalid" result="pass"/><test-case name="27129NCName_minLength007_489 tokoe:valid" result="pass"/><test-case name="27130NCName_maxLength001_490 tokoe:invalid" result="pass"/><test-case name="27131NCName_maxLength002_491 tokoe:invalid" result="pass"/><test-case name="27132NCName_maxLength003_492 tokoe:valid" result="pass"/><test-case name="27133NCName_maxLength004_493 tokoe:invalid" result="pass"/><test-case name="27134NCName_maxLength005_494 tokoe:invalid" result="pass"/><test-case name="27135NCName_pattern001_495 tokoe:valid" result="pass"/><test-case name="27136NCName_enumeration001_496 tokoe:invalid" result="pass"/><test-case name="27137NCName_enumeration002_497 tokoe:valid" result="pass"/><test-case name="27138ID_length001_498 tokoe:invalid" result="pass"/><test-case name="27139ID_length002_499 tokoe:invalid" result="pass"/><test-case name="27140ID_length003_500 tokoe:valid" result="pass"/><test-case name="27141ID_length004_501 tokoe:invalid" result="pass"/><test-case name="27142ID_length005_502 tokoe:invalid" result="pass"/><test-case name="27143ID_length006_503 tokoe:invalid" result="pass"/><test-case name="27144ID_length007_504 tokoe:invalid" result="pass"/><test-case name="27145ID_minLength001_505 tokoe:invalid" result="pass"/><test-case name="27146ID_minLength002_506 tokoe:invalid" result="pass"/><test-case name="27147ID_minLength003_507 tokoe:valid" result="pass"/><test-case name="27148ID_minLength004_508 tokoe:invalid" result="pass"/><test-case name="27149ID_minLength005_509 tokoe:invalid" result="pass"/><test-case name="27150ID_minLength006_510 tokoe:invalid" result="pass"/><test-case name="27151ID_minLength007_511 tokoe:valid" result="pass"/><test-case name="27152ID_maxLength001_512 tokoe:invalid" result="pass"/><test-case name="27153ID_maxLength002_513 tokoe:invalid" result="pass"/><test-case name="27154ID_maxLength003_514 tokoe:valid" result="pass"/><test-case name="27155ID_maxLength004_515 tokoe:invalid" result="pass"/><test-case name="27156ID_maxLength005_516 tokoe:invalid" result="pass"/><test-case name="27157ID_pattern001_517 tokoe:valid" result="pass"/><test-case name="27158ID_enumeration001_518 tokoe:invalid" result="pass"/><test-case name="27159ID_enumeration002_519 tokoe:valid" result="pass"/><test-case name="27160IDREF_length001_520 tokoe:invalid" result="pass"/><test-case name="27161IDREF_length002_521 tokoe:invalid" result="pass"/><test-case name="27162IDREF_length003_522 tokoe:valid" result="pass"/><test-case name="27163IDREF_length004_523 tokoe:invalid" result="pass"/><test-case name="27164IDREF_length005_524 tokoe:invalid" result="pass"/><test-case name="27165IDREF_length006_525 tokoe:invalid" result="pass"/><test-case name="27166IDREF_length007_526 tokoe:invalid" result="pass"/><test-case name="27167IDREF_minLength001_527 tokoe:invalid" result="pass"/><test-case name="27168IDREF_minLength002_528 tokoe:invalid" result="pass"/><test-case name="27169IDREF_minLength003_529 tokoe:valid" result="pass"/><test-case name="27170IDREF_minLength004_530 tokoe:invalid" result="pass"/><test-case name="27171IDREF_minLength005_531 tokoe:invalid" result="pass"/><test-case name="27172IDREF_minLength006_532 tokoe:invalid" result="pass"/><test-case name="27173IDREF_minLength007_533 tokoe:valid" result="pass"/><test-case name="27174IDREF_maxLength001_534 tokoe:invalid" result="pass"/><test-case name="27175IDREF_maxLength002_535 tokoe:invalid" result="pass"/><test-case name="27176IDREF_maxLength003_536 tokoe:valid" result="pass"/><test-case name="27177IDREF_maxLength004_537 tokoe:invalid" result="pass"/><test-case name="27178IDREF_maxLength005_538 tokoe:invalid" result="pass"/><test-case name="27179IDREF_pattern001_539 tokoe:valid" result="pass"/><test-case name="27180IDREF_enumeration001_540 tokoe:invalid" result="pass"/><test-case name="27181IDREF_enumeration002_541 tokoe:valid" result="pass"/><test-case name="27182integer_pattern001_542 tokoe:valid" result="pass"/><test-case name="27183integer_enumeration001_543 tokoe:invalid" result="pass"/><test-case name="27184integer_enumeration002_544 tokoe:valid" result="pass"/><test-case name="27185integer_maxInclusive001_545 tokoe:invalid" result="pass"/><test-case name="27186integer_maxInclusive002_546 tokoe:valid" result="pass"/><test-case name="27187integer_maxInclusive003_547 tokoe:invalid" result="pass"/><test-case name="27188integer_maxExclusive001_548 tokoe:invalid" result="pass"/><test-case name="27189integer_maxExclusive002_549 tokoe:valid" result="pass"/><test-case name="27190integer_minInclusive001_550 tokoe:invalid" result="pass"/><test-case name="27191integer_minInclusive002_551 tokoe:valid" result="pass"/><test-case name="27192integer_minInclusive003_552 tokoe:invalid" result="pass"/><test-case name="27193integer_minInclusive004_553 tokoe:invalid" result="pass"/><test-case name="27194integer_minExclusive001_554 tokoe:invalid" result="pass"/><test-case name="27195integer_minExclusive002_555 tokoe:valid" result="pass"/><test-case name="27196integer_minExclusive003_556 tokoe:invalid" result="pass"/><test-case name="27197integer_minExclusive004_557 tokoe:invalid" result="pass"/><test-case name="27198integer_totalDigits001_558 tokoe:invalid" result="pass"/><test-case name="27199integer_totalDigits002_559 tokoe:invalid" result="pass"/><test-case name="27200integer_totalDigits003_560 tokoe:invalid" result="pass"/><test-case name="27201integer_totalDigits004_561 tokoe:valid" result="pass"/><test-case name="27202integer_totalDigits005_562 tokoe:invalid" result="pass"/><test-case name="27203integer_totalDigits006_563 tokoe:invalid" result="pass"/><test-case name="27204integer_fractionDigits001_564 tokoe:invalid" result="pass"/><test-case name="27205integer_fractionDigits002_565 tokoe:invalid" result="pass"/><test-case name="27206integer_fractionDigits003_566 tokoe:valid" result="pass"/><test-case name="27207integer_fractionDigits004_567 tokoe:invalid" result="pass"/><test-case name="27208integer_fractionDigits005_568 tokoe:invalid" result="pass"/><test-case name="27209integer_fractionDigits006_569 tokoe:invalid" result="pass"/><test-case name="27210integer_fractionDigits007_570 tokoe:invalid" result="pass"/><test-case name="27211integer_fractionDigits008_571 tokoe:invalid" result="pass"/><test-case name="27212nonPositiveInteger_pattern001_572 tokoe:valid" result="pass"/><test-case name="27213nonPositiveInteger_enumeration001_573 tokoe:invalid" result="pass"/><test-case name="27214nonPositiveInteger_enumeration002_574 tokoe:valid" result="pass"/><test-case name="27215nonPositiveInteger_maxInclusive001_575 tokoe:invalid" result="pass"/><test-case name="27216nonPositiveInteger_maxInclusive002_576 tokoe:valid" result="pass"/><test-case name="27217nonPositiveInteger_maxInclusive003_577 tokoe:invalid" result="pass"/><test-case name="27218nonPositiveInteger_maxInclusive004_578 tokoe:invalid" result="pass"/><test-case name="27219nonPositiveInteger_maxExclusive001_579 tokoe:invalid" result="pass"/><test-case name="27220nonPositiveInteger_maxExclusive002_580 tokoe:valid" result="pass"/><test-case name="27221nonPositiveInteger_maxExclusive003_581 tokoe:invalid" result="pass"/><test-case name="27222nonPositiveInteger_minInclusive001_582 tokoe:invalid" result="pass"/><test-case name="27223nonPositiveInteger_minInclusive002_583 tokoe:valid" result="pass"/><test-case name="27224nonPositiveInteger_minInclusive003_584 tokoe:invalid" result="pass"/><test-case name="27225nonPositiveInteger_minInclusive004_585 tokoe:invalid" result="pass"/><test-case name="27226nonPositiveInteger_minExclusive001_586 tokoe:invalid" result="pass"/><test-case name="27227nonPositiveInteger_minExclusive002_587 tokoe:valid" result="pass"/><test-case name="27228nonPositiveInteger_minExclusive003_588 tokoe:invalid" result="pass"/><test-case name="27229nonPositiveInteger_minExclusive004_589 tokoe:invalid" result="pass"/><test-case name="27230nonPositiveInteger_totalDigits001_590 tokoe:invalid" result="pass"/><test-case name="27231nonPositiveInteger_totalDigits002_591 tokoe:invalid" result="pass"/><test-case name="27232nonPositiveInteger_totalDigits003_592 tokoe:invalid" result="pass"/><test-case name="27233nonPositiveInteger_totalDigits004_593 tokoe:valid" result="pass"/><test-case name="27234nonPositiveInteger_totalDigits005_594 tokoe:invalid" result="pass"/><test-case name="27235nonPositiveInteger_totalDigits006_595 tokoe:invalid" result="pass"/><test-case name="27236nonPositiveInteger_fractionDigits001_596 tokoe:invalid" result="pass"/><test-case name="27237nonPositiveInteger_fractionDigits002_597 tokoe:invalid" result="pass"/><test-case name="27238nonPositiveInteger_fractionDigits003_598 tokoe:valid" result="pass"/><test-case name="27239nonPositiveInteger_fractionDigits004_599 tokoe:invalid" result="pass"/><test-case name="27240nonPositiveInteger_fractionDigits005_600 tokoe:invalid" result="pass"/><test-case name="27241nonPositiveInteger_fractionDigits006_601 tokoe:invalid" result="pass"/><test-case name="27242nonPositiveInteger_fractionDigits007_602 tokoe:invalid" result="pass"/><test-case name="27243nonPositiveInteger_fractionDigits008_603 tokoe:invalid" result="pass"/><test-case name="27244negativeInteger_pattern001_604 tokoe:valid" result="pass"/><test-case name="27245negativeInteger_enumeration001_605 tokoe:invalid" result="pass"/><test-case name="27246negativeInteger_enumeration002_606 tokoe:valid" result="pass"/><test-case name="27247negativeInteger_maxInclusive001_607 tokoe:invalid" result="pass"/><test-case name="27248negativeInteger_maxInclusive002_608 tokoe:valid" result="pass"/><test-case name="27249negativeInteger_maxInclusive003_609 tokoe:invalid" result="pass"/><test-case name="27250negativeInteger_maxInclusive004_610 tokoe:invalid" result="pass"/><test-case name="27251negativeInteger_maxExclusive001_611 tokoe:invalid" result="pass"/><test-case name="27252negativeInteger_maxExclusive002_612 tokoe:valid" result="pass"/><test-case name="27253negativeInteger_maxExclusive003_613 tokoe:invalid" result="pass"/><test-case name="27254negativeInteger_minInclusive001_614 tokoe:invalid" result="pass"/><test-case name="27255negativeInteger_minInclusive002_615 tokoe:valid" result="pass"/><test-case name="27256negativeInteger_minInclusive003_616 tokoe:invalid" result="pass"/><test-case name="27257negativeInteger_minInclusive004_617 tokoe:invalid" result="pass"/><test-case name="27258negativeInteger_minExclusive001_618 tokoe:invalid" result="pass"/><test-case name="27259negativeInteger_minExclusive002_619 tokoe:valid" result="pass"/><test-case name="27260negativeInteger_minExclusive003_620 tokoe:invalid" result="pass"/><test-case name="27261negativeInteger_minExclusive004_621 tokoe:invalid" result="pass"/><test-case name="27262negativeInteger_totalDigits001_622 tokoe:invalid" result="pass"/><test-case name="27263negativeInteger_totalDigits002_623 tokoe:invalid" result="pass"/><test-case name="27264negativeInteger_totalDigits003_624 tokoe:invalid" result="pass"/><test-case name="27265negativeInteger_totalDigits004_625 tokoe:valid" result="pass"/><test-case name="27266negativeInteger_totalDigits005_626 tokoe:invalid" result="pass"/><test-case name="27267negativeInteger_totalDigits006_627 tokoe:invalid" result="pass"/><test-case name="27268negativeInteger_fractionDigits001_628 tokoe:invalid" result="pass"/><test-case name="27269negativeInteger_fractionDigits002_629 tokoe:invalid" result="pass"/><test-case name="27270negativeInteger_fractionDigits003_630 tokoe:valid" result="pass"/><test-case name="27271negativeInteger_fractionDigits004_631 tokoe:invalid" result="pass"/><test-case name="27272negativeInteger_fractionDigits005_632 tokoe:invalid" result="pass"/><test-case name="27273negativeInteger_fractionDigits006_633 tokoe:invalid" result="pass"/><test-case name="27274negativeInteger_fractionDigits007_634 tokoe:invalid" result="pass"/><test-case name="27275negativeInteger_fractionDigits008_635 tokoe:invalid" result="pass"/><test-case name="27276long_pattern001_636 tokoe:valid" result="pass"/><test-case name="27277long_enumeration001_637 tokoe:invalid" result="pass"/><test-case name="27278long_enumeration002_638 tokoe:valid" result="pass"/><test-case name="27279long_maxInclusive001_639 tokoe:invalid" result="pass"/><test-case name="27280long_maxInclusive002_640 tokoe:valid" result="pass"/><test-case name="27281long_maxInclusive003_641 tokoe:invalid" result="pass"/><test-case name="27282long_maxInclusive004_642 tokoe:invalid" result="pass"/><test-case name="27283long_maxInclusive005_643 tokoe:invalid" result="pass"/><test-case name="27284long_maxExclusive001_644 tokoe:invalid" result="pass"/><test-case name="27285long_maxExclusive002_645 tokoe:valid" result="pass"/><test-case name="27286long_maxExclusive003_646 tokoe:invalid" result="pass"/><test-case name="27287long_maxExclusive004_647 tokoe:invalid" result="pass"/><test-case name="27288long_minInclusive001_648 tokoe:invalid" result="pass"/><test-case name="27289long_minInclusive002_649 tokoe:valid" result="pass"/><test-case name="27290long_minInclusive003_650 tokoe:invalid" result="pass"/><test-case name="27291long_minInclusive004_651 tokoe:invalid" result="pass"/><test-case name="27292long_minInclusive005_652 tokoe:invalid" result="pass"/><test-case name="27293long_minExclusive001_653 tokoe:invalid" result="pass"/><test-case name="27294long_minExclusive002_654 tokoe:valid" result="pass"/><test-case name="27295long_minExclusive003_655 tokoe:invalid" result="pass"/><test-case name="27296long_minExclusive004_656 tokoe:invalid" result="pass"/><test-case name="27297long_minExclusive005_657 tokoe:invalid" result="pass"/><test-case name="27298long_totalDigits001_658 tokoe:invalid" result="pass"/><test-case name="27299long_totalDigits002_659 tokoe:invalid" result="pass"/><test-case name="27300long_totalDigits003_660 tokoe:invalid" result="pass"/><test-case name="27301long_totalDigits004_661 tokoe:valid" result="pass"/><test-case name="27302long_totalDigits005_662 tokoe:invalid" result="pass"/><test-case name="27303long_totalDigits006_663 tokoe:invalid" result="pass"/><test-case name="27304long_fractionDigits001_664 tokoe:invalid" result="pass"/><test-case name="27305long_fractionDigits002_665 tokoe:invalid" result="pass"/><test-case name="27306long_fractionDigits003_666 tokoe:valid" result="pass"/><test-case name="27307long_fractionDigits004_667 tokoe:invalid" result="pass"/><test-case name="27308long_fractionDigits005_668 tokoe:invalid" result="pass"/><test-case name="27309long_fractionDigits006_669 tokoe:invalid" result="pass"/><test-case name="27310long_fractionDigits007_670 tokoe:invalid" result="pass"/><test-case name="27311long_fractionDigits008_671 tokoe:invalid" result="pass"/><test-case name="27312int_pattern001_672 tokoe:valid" result="pass"/><test-case name="27313int_enumeration001_673 tokoe:invalid" result="pass"/><test-case name="27314int_enumeration002_674 tokoe:valid" result="pass"/><test-case name="27315int_maxInclusive001_675 tokoe:invalid" result="pass"/><test-case name="27316int_maxInclusive002_676 tokoe:valid" result="pass"/><test-case name="27317int_maxInclusive003_677 tokoe:invalid" result="pass"/><test-case name="27318int_maxInclusive004_678 tokoe:invalid" result="pass"/><test-case name="27319int_maxInclusive004a_679 tokoe:valid" result="pass"/><test-case name="27320int_maxInclusive004b_680 tokoe:invalid" result="pass"/><test-case name="27321int_maxInclusive004c_681 tokoe:invalid" result="pass"/><test-case name="27322int_maxInclusive004d_682 tokoe:invalid" result="pass"/><test-case name="27323int_maxInclusive004e_683 tokoe:valid" result="pass"/><test-case name="27324int_maxInclusive004f_684 tokoe:invalid" result="fail"/><test-case name="27325int_maxInclusive004g_685 tokoe:valid" result="pass"/><test-case name="27326int_maxInclusive004h_686 tokoe:valid" result="pass"/><test-case name="27327int_maxInclusive004i_687 tokoe:valid" result="pass"/><test-case name="27328int_maxInclusive005_688 tokoe:invalid" result="pass"/><test-case name="27329int_maxExclusive001_689 tokoe:invalid" result="pass"/><test-case name="27330int_maxExclusive002_690 tokoe:valid" result="pass"/><test-case name="27331int_maxExclusive003_691 tokoe:invalid" result="pass"/><test-case name="27332int_maxExclusive004b_692 tokoe:invalid" result="pass"/><test-case name="27333int_maxExclusive004c_693 tokoe:invalid" result="pass"/><test-case name="27334int_maxExclusive004d_694 tokoe:valid" result="pass"/><test-case name="27335int_maxExclusive004e_695 tokoe:valid" result="pass"/><test-case name="27336int_maxExclusive004f_696 tokoe:invalid" result="pass"/><test-case name="27337int_maxExclusive004h_697 tokoe:valid" result="pass"/><test-case name="27338int_maxExclusive004i_698 tokoe:invalid" result="pass"/><test-case name="27339int_minInclusive001_699 tokoe:invalid" result="pass"/><test-case name="27340int_minInclusive002_700 tokoe:valid" result="pass"/><test-case name="27341int_minInclusive003_701 tokoe:invalid" result="pass"/><test-case name="27342int_minInclusive004_702 tokoe:invalid" result="pass"/><test-case name="27343int_minInclusive005_703 tokoe:invalid" result="pass"/><test-case name="27344int_minInclusive006a_704 tokoe:valid" result="pass"/><test-case name="27345int_minInclusive006b_705 tokoe:invalid" result="pass"/><test-case name="27346int_minInclusive006c_706 tokoe:valid" result="pass"/><test-case name="27347int_minInclusive006d_707 tokoe:invalid" result="pass"/><test-case name="27348int_minInclusive006f_708 tokoe:invalid" result="pass"/><test-case name="27349int_minInclusive006g_709 tokoe:valid" result="pass"/><test-case name="27350int_minInclusive006h_710 tokoe:invalid" result="pass"/><test-case name="27351int_minInclusive006i_711 tokoe:invalid" result="pass"/><test-case name="27352int_minExclusive001_712 tokoe:invalid" result="pass"/><test-case name="27353int_minExclusive002_713 tokoe:valid" result="pass"/><test-case name="27354int_minExclusive003_714 tokoe:invalid" result="pass"/><test-case name="27355int_minExclusive004_715 tokoe:invalid" result="pass"/><test-case name="27356int_minExclusive005_716 tokoe:invalid" result="pass"/><test-case name="27357int_minExclusive006a_717 tokoe:invalid" result="fail"/><test-case name="27358int_minExclusive006c_718 tokoe:valid" result="pass"/><test-case name="27359int_minExclusive006e_719 tokoe:valid" result="pass"/><test-case name="27360int_minExclusive006f_720 tokoe:valid" result="pass"/><test-case name="27361int_minExclusive006g_721 tokoe:valid" result="pass"/><test-case name="27362int_minExclusive006h_722 tokoe:invalid" result="pass"/><test-case name="27363int_minExclusive006i_723 tokoe:invalid" result="pass"/><test-case name="27364int_minExclusive006j_724 tokoe:valid" result="pass"/><test-case name="27365int_totalDigits001_725 tokoe:invalid" result="pass"/><test-case name="27366int_totalDigits002_726 tokoe:invalid" result="pass"/><test-case name="27367int_totalDigits003_727 tokoe:invalid" result="pass"/><test-case name="27368int_totalDigits004_728 tokoe:valid" result="pass"/><test-case name="27369int_totalDigits005_729 tokoe:invalid" result="pass"/><test-case name="27370int_totalDigits006_730 tokoe:invalid" result="pass"/><test-case name="27371int_fractionDigits001_731 tokoe:invalid" result="pass"/><test-case name="27372int_fractionDigits002_732 tokoe:invalid" result="pass"/><test-case name="27373int_fractionDigits003_733 tokoe:valid" result="pass"/><test-case name="27374int_fractionDigits004_734 tokoe:invalid" result="pass"/><test-case name="27375int_fractionDigits005_735 tokoe:invalid" result="pass"/><test-case name="27376int_fractionDigits006_736 tokoe:invalid" result="pass"/><test-case name="27377int_fractionDigits007_737 tokoe:invalid" result="pass"/><test-case name="27378int_fractionDigits008_738 tokoe:invalid" result="pass"/><test-case name="27379short_pattern001_739 tokoe:valid" result="pass"/><test-case name="27380short_enumeration001_740 tokoe:invalid" result="pass"/><test-case name="27381short_enumeration002_741 tokoe:valid" result="pass"/><test-case name="27382short_maxInclusive001_742 tokoe:invalid" result="pass"/><test-case name="27383short_maxInclusive002_743 tokoe:valid" result="pass"/><test-case name="27384short_maxInclusive003_744 tokoe:invalid" result="pass"/><test-case name="27385short_maxInclusive004_745 tokoe:invalid" result="pass"/><test-case name="27386short_maxInclusive005_746 tokoe:invalid" result="pass"/><test-case name="27387short_maxExclusive001_747 tokoe:invalid" result="pass"/><test-case name="27388short_maxExclusive002_748 tokoe:valid" result="pass"/><test-case name="27389short_maxExclusive003_749 tokoe:invalid" result="pass"/><test-case name="27390short_maxExclusive004_750 tokoe:invalid" result="pass"/><test-case name="27391short_minInclusive001_751 tokoe:invalid" result="pass"/><test-case name="27392short_minInclusive002_752 tokoe:valid" result="pass"/><test-case name="27393short_minInclusive003_753 tokoe:invalid" result="pass"/><test-case name="27394short_minInclusive004_754 tokoe:invalid" result="pass"/><test-case name="27395short_minInclusive005_755 tokoe:invalid" result="pass"/><test-case name="27396short_minExclusive001_756 tokoe:invalid" result="pass"/><test-case name="27397short_minExclusive002_757 tokoe:valid" result="pass"/><test-case name="27398short_minExclusive003_758 tokoe:invalid" result="pass"/><test-case name="27399short_minExclusive004_759 tokoe:invalid" result="pass"/><test-case name="27400short_minExclusive005_760 tokoe:invalid" result="pass"/><test-case name="27401short_totalDigits001_761 tokoe:invalid" result="pass"/><test-case name="27402short_totalDigits002_762 tokoe:invalid" result="pass"/><test-case name="27403short_totalDigits003_763 tokoe:invalid" result="pass"/><test-case name="27404short_totalDigits004_764 tokoe:valid" result="pass"/><test-case name="27405short_totalDigits005_765 tokoe:invalid" result="pass"/><test-case name="27406short_totalDigits006_766 tokoe:invalid" result="pass"/><test-case name="27407short_fractionDigits001_767 tokoe:invalid" result="pass"/><test-case name="27408short_fractionDigits002_768 tokoe:invalid" result="pass"/><test-case name="27409short_fractionDigits003_769 tokoe:valid" result="pass"/><test-case name="27410short_fractionDigits004_770 tokoe:invalid" result="pass"/><test-case name="27411short_fractionDigits005_771 tokoe:invalid" result="pass"/><test-case name="27412short_fractionDigits006_772 tokoe:invalid" result="pass"/><test-case name="27413short_fractionDigits007_773 tokoe:invalid" result="pass"/><test-case name="27414short_fractionDigits008_774 tokoe:invalid" result="pass"/><test-case name="27415byte_pattern001_775 tokoe:valid" result="pass"/><test-case name="27416byte_enumeration001_776 tokoe:invalid" result="pass"/><test-case name="27417byte_enumeration002_777 tokoe:valid" result="pass"/><test-case name="27418byte_maxInclusive001_778 tokoe:invalid" result="pass"/><test-case name="27419byte_maxInclusive002_779 tokoe:valid" result="pass"/><test-case name="27420byte_maxInclusive003_780 tokoe:invalid" result="pass"/><test-case name="27421byte_maxInclusive004_781 tokoe:invalid" result="pass"/><test-case name="27422byte_maxInclusive005_782 tokoe:invalid" result="pass"/><test-case name="27423byte_maxExclusive001_783 tokoe:invalid" result="pass"/><test-case name="27424byte_maxExclusive002_784 tokoe:valid" result="pass"/><test-case name="27425byte_maxExclusive003_785 tokoe:invalid" result="pass"/><test-case name="27426byte_maxExclusive004_786 tokoe:invalid" result="pass"/><test-case name="27427byte_minInclusive001_787 tokoe:invalid" result="pass"/><test-case name="27428byte_minInclusive002_788 tokoe:valid" result="pass"/><test-case name="27429byte_minInclusive003_789 tokoe:invalid" result="pass"/><test-case name="27430byte_minInclusive004_790 tokoe:invalid" result="pass"/><test-case name="27431byte_minInclusive005_791 tokoe:invalid" result="pass"/><test-case name="27432byte_minExclusive001_792 tokoe:invalid" result="pass"/><test-case name="27433byte_minExclusive002_793 tokoe:valid" result="pass"/><test-case name="27434byte_minExclusive003_794 tokoe:invalid" result="pass"/><test-case name="27435byte_minExclusive004_795 tokoe:invalid" result="pass"/><test-case name="27436byte_minExclusive005_796 tokoe:invalid" result="pass"/><test-case name="27437byte_totalDigits001_797 tokoe:invalid" result="pass"/><test-case name="27438byte_totalDigits002_798 tokoe:invalid" result="pass"/><test-case name="27439byte_totalDigits003_799 tokoe:invalid" result="pass"/><test-case name="27440byte_totalDigits004_800 tokoe:valid" result="pass"/><test-case name="27441byte_totalDigits005_801 tokoe:invalid" result="pass"/><test-case name="27442byte_totalDigits006_802 tokoe:invalid" result="pass"/><test-case name="27443byte_fractionDigits001_803 tokoe:invalid" result="pass"/><test-case name="27444byte_fractionDigits002_804 tokoe:invalid" result="pass"/><test-case name="27445byte_fractionDigits003_805 tokoe:valid" result="pass"/><test-case name="27446byte_fractionDigits004_806 tokoe:invalid" result="pass"/><test-case name="27447byte_fractionDigits005_807 tokoe:invalid" result="pass"/><test-case name="27448byte_fractionDigits006_808 tokoe:invalid" result="pass"/><test-case name="27449byte_fractionDigits007_809 tokoe:invalid" result="pass"/><test-case name="27450byte_fractionDigits008_810 tokoe:invalid" result="pass"/><test-case name="27451nonNegativeInteger_pattern001_811 tokoe:valid" result="pass"/><test-case name="27452nonNegativeInteger_enumeration001_812 tokoe:invalid" result="pass"/><test-case name="27453nonNegativeInteger_enumeration002_813 tokoe:valid" result="pass"/><test-case name="27454nonNegativeInteger_maxInclusive001_814 tokoe:invalid" result="pass"/><test-case name="27455nonNegativeInteger_maxInclusive002_815 tokoe:valid" result="pass"/><test-case name="27456nonNegativeInteger_maxInclusive003_816 tokoe:invalid" result="pass"/><test-case name="27457nonNegativeInteger_maxInclusive004_817 tokoe:invalid" result="pass"/><test-case name="27458nonNegativeInteger_maxExclusive001_818 tokoe:invalid" result="pass"/><test-case name="27459nonNegativeInteger_maxExclusive002_819 tokoe:valid" result="pass"/><test-case name="27460nonNegativeInteger_maxExclusive003_820 tokoe:invalid" result="pass"/><test-case name="27461nonNegativeInteger_minInclusive001_821 tokoe:invalid" result="pass"/><test-case name="27462nonNegativeInteger_minInclusive002_822 tokoe:valid" result="pass"/><test-case name="27463nonNegativeInteger_minInclusive003_823 tokoe:invalid" result="pass"/><test-case name="27464nonNegativeInteger_minInclusive004_824 tokoe:invalid" result="pass"/><test-case name="27465nonNegativeInteger_minExclusive001_825 tokoe:invalid" result="pass"/><test-case name="27466nonNegativeInteger_minExclusive002_826 tokoe:valid" result="pass"/><test-case name="27467nonNegativeInteger_minExclusive003_827 tokoe:invalid" result="pass"/><test-case name="27468nonNegativeInteger_minExclusive004_828 tokoe:invalid" result="pass"/><test-case name="27469nonNegativeInteger_totalDigits001_829 tokoe:invalid" result="pass"/><test-case name="27470nonNegativeInteger_totalDigits002_830 tokoe:invalid" result="pass"/><test-case name="27471nonNegativeInteger_totalDigits003_831 tokoe:invalid" result="pass"/><test-case name="27472nonNegativeInteger_totalDigits004_832 tokoe:valid" result="pass"/><test-case name="27473nonNegativeInteger_totalDigits005_833 tokoe:invalid" result="pass"/><test-case name="27474nonNegativeInteger_totalDigits006_834 tokoe:invalid" result="pass"/><test-case name="27475nonNegativeInteger_fractionDigits001_835 tokoe:invalid" result="pass"/><test-case name="27476nonNegativeInteger_fractionDigits002_836 tokoe:invalid" result="pass"/><test-case name="27477nonNegativeInteger_fractionDigits003_837 tokoe:valid" result="pass"/><test-case name="27478nonNegativeInteger_fractionDigits004_838 tokoe:invalid" result="pass"/><test-case name="27479nonNegativeInteger_fractionDigits005_839 tokoe:invalid" result="pass"/><test-case name="27480nonNegativeInteger_fractionDigits006_840 tokoe:invalid" result="pass"/><test-case name="27481nonNegativeInteger_fractionDigits007_841 tokoe:invalid" result="pass"/><test-case name="27482nonNegativeInteger_fractionDigits008_842 tokoe:invalid" result="pass"/><test-case name="27483unsignedLong_pattern001_843 tokoe:valid" result="pass"/><test-case name="27484unsignedLong_enumeration001_844 tokoe:invalid" result="pass"/><test-case name="27485unsignedLong_enumeration002_845 tokoe:valid" result="pass"/><test-case name="27486unsignedLong_maxInclusive001_846 tokoe:invalid" result="pass"/><test-case name="27487unsignedLong_maxInclusive002_847 tokoe:valid" result="pass"/><test-case name="27488unsignedLong_maxInclusive003_848 tokoe:invalid" result="pass"/><test-case name="27489unsignedLong_maxInclusive004_849 tokoe:invalid" result="pass"/><test-case name="27490unsignedLong_maxInclusive005_850 tokoe:invalid" result="pass"/><test-case name="27491unsignedLong_maxExclusive001_851 tokoe:invalid" result="pass"/><test-case name="27492unsignedLong_maxExclusive002_852 tokoe:valid" result="pass"/><test-case name="27493unsignedLong_maxExclusive003_853 tokoe:invalid" result="pass"/><test-case name="27494unsignedLong_maxExclusive004_854 tokoe:invalid" result="pass"/><test-case name="27495unsignedLong_minInclusive001_855 tokoe:invalid" result="pass"/><test-case name="27496unsignedLong_minInclusive002_856 tokoe:valid" result="pass"/><test-case name="27497unsignedLong_minInclusive003_857 tokoe:invalid" result="pass"/><test-case name="27498unsignedLong_minInclusive004_858 tokoe:invalid" result="pass"/><test-case name="27499unsignedLong_minInclusive005_859 tokoe:invalid" result="pass"/><test-case name="27500unsignedLong_minExclusive001_860 tokoe:invalid" result="pass"/><test-case name="27501unsignedLong_minExclusive002_861 tokoe:valid" result="pass"/><test-case name="27502unsignedLong_minExclusive003_862 tokoe:invalid" result="pass"/><test-case name="27503unsignedLong_minExclusive004_863 tokoe:invalid" result="pass"/><test-case name="27504unsignedLong_minExclusive005_864 tokoe:invalid" result="pass"/><test-case name="27505unsignedLong_totalDigits001_865 tokoe:invalid" result="pass"/><test-case name="27506unsignedLong_totalDigits002_866 tokoe:invalid" result="pass"/><test-case name="27507unsignedLong_totalDigits003_867 tokoe:invalid" result="pass"/><test-case name="27508unsignedLong_totalDigits004_868 tokoe:valid" result="pass"/><test-case name="27509unsignedLong_totalDigits005_869 tokoe:invalid" result="pass"/><test-case name="27510unsignedLong_totalDigits006_870 tokoe:invalid" result="pass"/><test-case name="27511unsignedLong_fractionDigits001_871 tokoe:invalid" result="pass"/><test-case name="27512unsignedLong_fractionDigits002_872 tokoe:invalid" result="pass"/><test-case name="27513unsignedLong_fractionDigits003_873 tokoe:valid" result="pass"/><test-case name="27514unsignedLong_fractionDigits004_874 tokoe:invalid" result="pass"/><test-case name="27515unsignedLong_fractionDigits005_875 tokoe:invalid" result="pass"/><test-case name="27516unsignedLong_fractionDigits006_876 tokoe:invalid" result="pass"/><test-case name="27517unsignedLong_fractionDigits007_877 tokoe:invalid" result="pass"/><test-case name="27518unsignedLong_fractionDigits008_878 tokoe:invalid" result="pass"/><test-case name="27519unsignedInt_pattern001_879 tokoe:valid" result="pass"/><test-case name="27520unsignedInt_enumeration001_880 tokoe:invalid" result="pass"/><test-case name="27521unsignedInt_enumeration002_881 tokoe:valid" result="pass"/><test-case name="27522unsignedInt_maxInclusive001_882 tokoe:invalid" result="pass"/><test-case name="27523unsignedInt_maxInclusive002_883 tokoe:valid" result="pass"/><test-case name="27524unsignedInt_maxInclusive003_884 tokoe:invalid" result="pass"/><test-case name="27525unsignedInt_maxInclusive004_885 tokoe:invalid" result="pass"/><test-case name="27526unsignedInt_maxInclusive005_886 tokoe:invalid" result="pass"/><test-case name="27527unsignedInt_maxExclusive001_887 tokoe:invalid" result="pass"/><test-case name="27528unsignedInt_maxExclusive002_888 tokoe:valid" result="pass"/><test-case name="27529unsignedInt_maxExclusive003_889 tokoe:invalid" result="pass"/><test-case name="27530unsignedInt_maxExclusive004_890 tokoe:invalid" result="pass"/><test-case name="27531unsignedInt_minInclusive001_891 tokoe:invalid" result="pass"/><test-case name="27532unsignedInt_minInclusive002_892 tokoe:valid" result="pass"/><test-case name="27533unsignedInt_minInclusive003_893 tokoe:invalid" result="pass"/><test-case name="27534unsignedInt_minInclusive004_894 tokoe:invalid" result="pass"/><test-case name="27535unsignedInt_minInclusive005_895 tokoe:invalid" result="pass"/><test-case name="27536unsignedInt_minExclusive001_896 tokoe:invalid" result="pass"/><test-case name="27537unsignedInt_minExclusive002_897 tokoe:valid" result="pass"/><test-case name="27538unsignedInt_minExclusive003_898 tokoe:invalid" result="pass"/><test-case name="27539unsignedInt_minExclusive004_899 tokoe:invalid" result="pass"/><test-case name="27540unsignedInt_minExclusive005_900 tokoe:invalid" result="pass"/><test-case name="27541unsignedInt_totalDigits001_901 tokoe:invalid" result="pass"/><test-case name="27542unsignedInt_totalDigits002_902 tokoe:invalid" result="pass"/><test-case name="27543unsignedInt_totalDigits003_903 tokoe:invalid" result="pass"/><test-case name="27544unsignedInt_totalDigits004_904 tokoe:valid" result="pass"/><test-case name="27545unsignedInt_totalDigits005_905 tokoe:invalid" result="pass"/><test-case name="27546unsignedInt_totalDigits006_906 tokoe:invalid" result="pass"/><test-case name="27547unsignedInt_fractionDigits001_907 tokoe:invalid" result="pass"/><test-case name="27548unsignedInt_fractionDigits002_908 tokoe:invalid" result="pass"/><test-case name="27549unsignedInt_fractionDigits003_909 tokoe:valid" result="pass"/><test-case name="27550unsignedInt_fractionDigits004_910 tokoe:invalid" result="pass"/><test-case name="27551unsignedInt_fractionDigits005_911 tokoe:invalid" result="pass"/><test-case name="27552unsignedInt_fractionDigits006_912 tokoe:invalid" result="pass"/><test-case name="27553unsignedInt_fractionDigits007_913 tokoe:invalid" result="pass"/><test-case name="27554unsignedInt_fractionDigits008_914 tokoe:invalid" result="pass"/><test-case name="27555unsignedShort_pattern001_915 tokoe:valid" result="pass"/><test-case name="27556unsignedShort_enumeration001_916 tokoe:invalid" result="pass"/><test-case name="27557unsignedShort_enumeration002_917 tokoe:valid" result="pass"/><test-case name="27558unsignedShort_maxInclusive001_918 tokoe:invalid" result="pass"/><test-case name="27559unsignedShort_maxInclusive002_919 tokoe:valid" result="pass"/><test-case name="27560unsignedShort_maxInclusive003_920 tokoe:invalid" result="pass"/><test-case name="27561unsignedShort_maxInclusive004_921 tokoe:invalid" result="pass"/><test-case name="27562unsignedShort_maxInclusive005_922 tokoe:invalid" result="pass"/><test-case name="27563unsignedShort_maxExclusive001_923 tokoe:invalid" result="pass"/><test-case name="27564unsignedShort_maxExclusive002_924 tokoe:valid" result="pass"/><test-case name="27565unsignedShort_maxExclusive003_925 tokoe:invalid" result="pass"/><test-case name="27566unsignedShort_maxExclusive004_926 tokoe:invalid" result="pass"/><test-case name="27567unsignedShort_minInclusive001_927 tokoe:invalid" result="pass"/><test-case name="27568unsignedShort_minInclusive002_928 tokoe:valid" result="pass"/><test-case name="27569unsignedShort_minInclusive003_929 tokoe:invalid" result="pass"/><test-case name="27570unsignedShort_minInclusive004_930 tokoe:invalid" result="pass"/><test-case name="27571unsignedShort_minInclusive005_931 tokoe:invalid" result="pass"/><test-case name="27572unsignedShort_minExclusive001_932 tokoe:invalid" result="pass"/><test-case name="27573unsignedShort_minExclusive002_933 tokoe:valid" result="pass"/><test-case name="27574unsignedShort_minExclusive003_934 tokoe:invalid" result="pass"/><test-case name="27575unsignedShort_minExclusive004_935 tokoe:invalid" result="pass"/><test-case name="27576unsignedShort_minExclusive005_936 tokoe:invalid" result="pass"/><test-case name="27577unsignedShort_totalDigits001_937 tokoe:invalid" result="pass"/><test-case name="27578unsignedShort_totalDigits002_938 tokoe:invalid" result="pass"/><test-case name="27579unsignedShort_totalDigits003_939 tokoe:invalid" result="pass"/><test-case name="27580unsignedShort_totalDigits004_940 tokoe:valid" result="pass"/><test-case name="27581unsignedShort_totalDigits005_941 tokoe:invalid" result="pass"/><test-case name="27582unsignedShort_totalDigits006_942 tokoe:invalid" result="pass"/><test-case name="27583unsignedShort_fractionDigits001_943 tokoe:invalid" result="pass"/><test-case name="27584unsignedShort_fractionDigits002_944 tokoe:invalid" result="pass"/><test-case name="27585unsignedShort_fractionDigits003_945 tokoe:valid" result="pass"/><test-case name="27586unsignedShort_fractionDigits004_946 tokoe:invalid" result="pass"/><test-case name="27587unsignedShort_fractionDigits005_947 tokoe:invalid" result="pass"/><test-case name="27588unsignedShort_fractionDigits006_948 tokoe:invalid" result="pass"/><test-case name="27589unsignedShort_fractionDigits007_949 tokoe:invalid" result="pass"/><test-case name="27590unsignedShort_fractionDigits008_950 tokoe:invalid" result="pass"/><test-case name="27591unsignedByte_pattern001_951 tokoe:valid" result="pass"/><test-case name="27592unsignedByte_enumeration001_952 tokoe:invalid" result="pass"/><test-case name="27593unsignedByte_enumeration002_953 tokoe:valid" result="pass"/><test-case name="27594unsignedByte_maxInclusive001_954 tokoe:invalid" result="pass"/><test-case name="27595unsignedByte_maxInclusive002_955 tokoe:valid" result="pass"/><test-case name="27596unsignedByte_maxInclusive003_956 tokoe:invalid" result="pass"/><test-case name="27597unsignedByte_maxInclusive004_957 tokoe:invalid" result="pass"/><test-case name="27598unsignedByte_maxInclusive005_958 tokoe:invalid" result="pass"/><test-case name="27599unsignedByte_maxExclusive001_959 tokoe:invalid" result="pass"/><test-case name="27600unsignedByte_maxExclusive002_960 tokoe:valid" result="pass"/><test-case name="27601unsignedByte_maxExclusive003_961 tokoe:invalid" result="pass"/><test-case name="27602unsignedByte_maxExclusive004_962 tokoe:invalid" result="pass"/><test-case name="27603unsignedByte_minInclusive001_963 tokoe:invalid" result="pass"/><test-case name="27604unsignedByte_minInclusive002_964 tokoe:valid" result="pass"/><test-case name="27605unsignedByte_minInclusive003_965 tokoe:invalid" result="pass"/><test-case name="27606unsignedByte_minInclusive004_966 tokoe:invalid" result="pass"/><test-case name="27607unsignedByte_minInclusive005_967 tokoe:invalid" result="pass"/><test-case name="27608unsignedByte_minExclusive001_968 tokoe:invalid" result="pass"/><test-case name="27609unsignedByte_minExclusive002_969 tokoe:valid" result="pass"/><test-case name="27610unsignedByte_minExclusive003_970 tokoe:invalid" result="pass"/><test-case name="27611unsignedByte_minExclusive004_971 tokoe:invalid" result="pass"/><test-case name="27612unsignedByte_minExclusive005_972 tokoe:invalid" result="pass"/><test-case name="27613unsignedByte_totalDigits001_973 tokoe:invalid" result="pass"/><test-case name="27614unsignedByte_totalDigits002_974 tokoe:invalid" result="pass"/><test-case name="27615unsignedByte_totalDigits003_975 tokoe:invalid" result="pass"/><test-case name="27616unsignedByte_totalDigits004_976 tokoe:valid" result="pass"/><test-case name="27617unsignedByte_totalDigits005_977 tokoe:invalid" result="pass"/><test-case name="27618unsignedByte_totalDigits006_978 tokoe:invalid" result="pass"/><test-case name="27619unsignedByte_fractionDigits001_979 tokoe:invalid" result="pass"/><test-case name="27620unsignedByte_fractionDigits002_980 tokoe:invalid" result="pass"/><test-case name="27621unsignedByte_fractionDigits003_981 tokoe:valid" result="pass"/><test-case name="27622unsignedByte_fractionDigits004_982 tokoe:invalid" result="pass"/><test-case name="27623unsignedByte_fractionDigits005_983 tokoe:invalid" result="pass"/><test-case name="27624unsignedByte_fractionDigits006_984 tokoe:invalid" result="pass"/><test-case name="27625unsignedByte_fractionDigits007_985 tokoe:invalid" result="pass"/><test-case name="27626unsignedByte_fractionDigits008_986 tokoe:invalid" result="pass"/><test-case name="27627positiveInteger_pattern001_987 tokoe:valid" result="pass"/><test-case name="27628positiveInteger_enumeration001_988 tokoe:invalid" result="pass"/><test-case name="27629positiveInteger_enumeration002_989 tokoe:valid" result="pass"/><test-case name="27630positiveInteger_maxInclusive001_990 tokoe:invalid" result="pass"/><test-case name="27631positiveInteger_maxInclusive002_991 tokoe:valid" result="pass"/><test-case name="27632positiveInteger_maxInclusive003_992 tokoe:invalid" result="pass"/><test-case name="27633positiveInteger_maxInclusive004_993 tokoe:invalid" result="pass"/><test-case name="27634positiveInteger_maxExclusive001_994 tokoe:invalid" result="pass"/><test-case name="27635positiveInteger_maxExclusive002_995 tokoe:valid" result="pass"/><test-case name="27636positiveInteger_maxExclusive003_996 tokoe:invalid" result="pass"/><test-case name="27637positiveInteger_minInclusive001_997 tokoe:invalid" result="pass"/><test-case name="27638positiveInteger_minInclusive002_998 tokoe:valid" result="pass"/><test-case name="27639positiveInteger_minInclusive003_999 tokoe:invalid" result="pass"/><test-case name="27640positiveInteger_minInclusive004_1000 tokoe:invalid" result="pass"/><test-case name="27641positiveInteger_minExclusive001_1001 tokoe:invalid" result="pass"/><test-case name="27642positiveInteger_minExclusive002_1002 tokoe:valid" result="pass"/><test-case name="27643positiveInteger_minExclusive003_1003 tokoe:invalid" result="pass"/><test-case name="27644positiveInteger_minExclusive004_1004 tokoe:invalid" result="pass"/><test-case name="27645positiveInteger_totalDigits001_1005 tokoe:invalid" result="pass"/><test-case name="27646positiveInteger_totalDigits002_1006 tokoe:invalid" result="pass"/><test-case name="27647positiveInteger_totalDigits003_1007 tokoe:invalid" result="pass"/><test-case name="27648positiveInteger_totalDigits004_1008 tokoe:valid" result="pass"/><test-case name="27649positiveInteger_totalDigits005_1009 tokoe:invalid" result="pass"/><test-case name="27650positiveInteger_totalDigits006_1010 tokoe:invalid" result="pass"/><test-case name="27651positiveInteger_fractionDigits001_1011 tokoe:invalid" result="pass"/><test-case name="27652positiveInteger_fractionDigits002_1012 tokoe:invalid" result="pass"/><test-case name="27653positiveInteger_fractionDigits003_1013 tokoe:valid" result="pass"/><test-case name="27654positiveInteger_fractionDigits004_1014 tokoe:invalid" result="pass"/><test-case name="27655positiveInteger_fractionDigits005_1015 tokoe:invalid" result="pass"/><test-case name="27656positiveInteger_fractionDigits006_1016 tokoe:invalid" result="pass"/><test-case name="27657positiveInteger_fractionDigits007_1017 tokoe:invalid" result="pass"/><test-case name="27658positiveInteger_fractionDigits008_1018 tokoe:invalid" result="pass"/><test-case name="27659union_minInclisive_1019 tokoe:invalid" result="pass"/><test-case name="27660string_length001_1020 tokoe:valid" result="pass"/><test-case name="27661string_length001_1020.i tokoe:invalid" result="pass"/><test-case name="27662string_length002_1021 tokoe:valid" result="pass"/><test-case name="27663string_length002_1021.v tokoe:valid" result="pass"/><test-case name="27664string_length003_1022 tokoe:valid" result="pass"/><test-case name="27665string_length003_1022.i tokoe:invalid" result="pass"/><test-case name="27666string_minLength001_1023 tokoe:valid" result="pass"/><test-case name="27667string_minLength001_1023.v tokoe:valid" result="pass"/><test-case name="27668string_minLength002_1024 tokoe:valid" result="pass"/><test-case name="27669string_minLength002_1024.v tokoe:valid" result="pass"/><test-case name="27670string_minLength003_1025 tokoe:valid" result="pass"/><test-case name="27671string_minLength003_1025.i tokoe:invalid" result="pass"/><test-case name="27672string_minLength004_1026 tokoe:valid" result="pass"/><test-case name="27673string_minLength004_1026.v tokoe:valid" result="pass"/><test-case name="27674string_maxLength001_1027 tokoe:valid" result="pass"/><test-case name="27675string_maxLength001_1027.i tokoe:invalid" result="pass"/><test-case name="27676string_maxLength002_1028 tokoe:valid" result="pass"/><test-case name="27677string_maxLength002_1028.v tokoe:valid" result="pass"/><test-case name="27678string_maxLength003_1029 tokoe:valid" result="pass"/><test-case name="27679string_maxLength003_1029.v tokoe:valid" result="pass"/><test-case name="27680string_pattern001_1030 tokoe:valid" result="pass"/><test-case name="27681string_pattern001_1030.v tokoe:valid" result="pass"/><test-case name="27682string_pattern002_1031 tokoe:valid" result="pass"/><test-case name="27683string_pattern002_1031.i tokoe:invalid" result="pass"/><test-case name="27684string_enumeration001_1032 tokoe:valid" result="pass"/><test-case name="27685string_enumeration001_1032.i tokoe:invalid" result="pass"/><test-case name="27686string_enumeration002_1033 tokoe:valid" result="pass"/><test-case name="27687string_enumeration002_1033.v tokoe:valid" result="pass"/><test-case name="27688string_enumeration003_1034 tokoe:valid" result="pass"/><test-case name="27689string_enumeration003_1034.i tokoe:invalid" result="pass"/><test-case name="27690string_enumeration004_1035 tokoe:valid" result="pass"/><test-case name="27691string_enumeration004_1035.v tokoe:valid" result="pass"/><test-case name="27692decimal_pattern001_1036 tokoe:valid" result="pass"/><test-case name="27693decimal_pattern001_1036.v tokoe:valid" result="pass"/><test-case name="27694decimal_enumeration001_1037 tokoe:valid" result="pass"/><test-case name="27695decimal_enumeration001_1037.i tokoe:invalid" result="pass"/><test-case name="27696decimal_enumeration002_1038 tokoe:valid" result="pass"/><test-case name="27697decimal_enumeration002_1038.v tokoe:valid" result="pass"/><test-case name="27698decimal_enumeration003_1039 tokoe:valid" result="pass"/><test-case name="27699decimal_enumeration003_1039.i tokoe:invalid" result="pass"/><test-case name="27700decimal_enumeration004_1040 tokoe:valid" result="pass"/><test-case name="27701decimal_enumeration004_1040.v tokoe:valid" result="pass"/><test-case name="27702decimal_maxInclusive001_1041 tokoe:valid" result="pass"/><test-case name="27703decimal_maxInclusive001_1041.v tokoe:valid" result="pass"/><test-case name="27704decimal_maxInclusive002_1042 tokoe:valid" result="pass"/><test-case name="27705decimal_maxInclusive002_1042.i tokoe:invalid" result="pass"/><test-case name="27706decimal_maxInclusive003_1043 tokoe:valid" result="pass"/><test-case name="27707decimal_maxInclusive003_1043.v tokoe:valid" result="pass"/><test-case name="27708decimal_maxExclusive001_1044 tokoe:valid" result="pass"/><test-case name="27709decimal_maxExclusive001_1044.i tokoe:invalid" result="pass"/><test-case name="27710decimal_maxExclusive002_1045 tokoe:valid" result="pass"/><test-case name="27711decimal_maxExclusive002_1045.i tokoe:invalid" result="pass"/><test-case name="27712decimal_maxExclusive003_1046 tokoe:valid" result="pass"/><test-case name="27713decimal_maxExclusive003_1046.v tokoe:valid" result="pass"/><test-case name="27714decimal_minInclusive001_1047 tokoe:valid" result="pass"/><test-case name="27715decimal_minInclusive001_1047.v tokoe:valid" result="pass"/><test-case name="27716decimal_minInclusive002_1048 tokoe:valid" result="pass"/><test-case name="27717decimal_minInclusive002_1048.i tokoe:invalid" result="pass"/><test-case name="27718decimal_minInclusive003_1049 tokoe:valid" result="pass"/><test-case name="27719decimal_minInclusive003_1049.v tokoe:valid" result="pass"/><test-case name="27720decimal_minInclusive004_1050 tokoe:valid" result="pass"/><test-case name="27721decimal_minInclusive004_1050.v tokoe:valid" result="pass"/><test-case name="27722decimal_minInclusive005_1051 tokoe:valid" result="pass"/><test-case name="27723decimal_minInclusive005_1051.v tokoe:valid" result="pass"/><test-case name="27724decimal_minExclusive001_1052 tokoe:valid" result="pass"/><test-case name="27725decimal_minExclusive001_1052.i tokoe:invalid" result="pass"/><test-case name="27726decimal_minExclusive002_1053 tokoe:valid" result="pass"/><test-case name="27727decimal_minExclusive002_1053.i tokoe:invalid" result="pass"/><test-case name="27728decimal_minExclusive003_1054 tokoe:valid" result="pass"/><test-case name="27729decimal_minExclusive003_1054.v tokoe:valid" result="pass"/><test-case name="27730decimal_minExclusive004_1055 tokoe:valid" result="pass"/><test-case name="27731decimal_minExclusive004_1055.v tokoe:valid" result="pass"/><test-case name="27732decimal_minExclusive005_1056 tokoe:valid" result="pass"/><test-case name="27733decimal_minExclusive005_1056.v tokoe:valid" result="pass"/><test-case name="27734decimal_totalDigits001_1057 tokoe:valid" result="pass"/><test-case name="27735decimal_totalDigits001_1057.i tokoe:invalid" result="pass"/><test-case name="27736decimal_totalDigits002_1058 tokoe:valid" result="pass"/><test-case name="27737decimal_totalDigits002_1058.v tokoe:valid" result="pass"/><test-case name="27738decimal_totalDigits003_1059 tokoe:valid" result="pass"/><test-case name="27739decimal_totalDigits003_1059.v tokoe:valid" result="pass"/><test-case name="27740decimal_totalDigits004_1060 tokoe:valid" result="pass"/><test-case name="27741decimal_totalDigits004_1060.v tokoe:valid" result="pass"/><test-case name="27742float_pattern001_1061 tokoe:valid" result="pass"/><test-case name="27743float_pattern001_1061.v tokoe:valid" result="pass"/><test-case name="27744float_enumeration001_1062 tokoe:valid" result="pass"/><test-case name="27745float_enumeration001_1062.i tokoe:invalid" result="pass"/><test-case name="27746float_enumeration002_1063 tokoe:valid" result="pass"/><test-case name="27747float_enumeration002_1063.v tokoe:valid" result="pass"/><test-case name="27748float_enumeration003_1064 tokoe:valid" result="pass"/><test-case name="27749float_enumeration003_1064.i tokoe:invalid" result="pass"/><test-case name="27750float_enumeration004_1065 tokoe:valid" result="pass"/><test-case name="27751float_enumeration004_1065.v tokoe:valid" result="pass"/><test-case name="27752float_maxInclusive001_1066 tokoe:valid" result="pass"/><test-case name="27753float_maxInclusive001_1066.v tokoe:valid" result="pass"/><test-case name="27754float_maxInclusive002_1067 tokoe:valid" result="pass"/><test-case name="27755float_maxInclusive002_1067.i tokoe:invalid" result="pass"/><test-case name="27756float_maxInclusive003_1068 tokoe:valid" result="pass"/><test-case name="27757float_maxInclusive003_1068.v tokoe:valid" result="pass"/><test-case name="27758float_maxExclusive001_1069 tokoe:valid" result="pass"/><test-case name="27759float_maxExclusive001_1069.i tokoe:invalid" result="pass"/><test-case name="27760float_maxExclusive002_1070 tokoe:valid" result="pass"/><test-case name="27761float_maxExclusive002_1070.i tokoe:invalid" result="pass"/><test-case name="27762float_maxExclusive003_1071 tokoe:valid" result="pass"/><test-case name="27763float_maxExclusive003_1071.v tokoe:valid" result="pass"/><test-case name="27764float_minInclusive001_1072 tokoe:valid" result="pass"/><test-case name="27765float_minInclusive001_1072.v tokoe:valid" result="pass"/><test-case name="27766float_minInclusive002_1073 tokoe:valid" result="pass"/><test-case name="27767float_minInclusive002_1073.i tokoe:invalid" result="pass"/><test-case name="27768float_minInclusive003_1074 tokoe:valid" result="pass"/><test-case name="27769float_minInclusive003_1074.v tokoe:valid" result="pass"/><test-case name="27770float_minInclusive004_1075 tokoe:valid" result="pass"/><test-case name="27771float_minInclusive004_1075.v tokoe:valid" result="pass"/><test-case name="27772float_minInclusive005_1076 tokoe:valid" result="pass"/><test-case name="27773float_minInclusive005_1076.v tokoe:valid" result="pass"/><test-case name="27774float_minExclusive001_1077 tokoe:valid" result="pass"/><test-case name="27775float_minExclusive001_1077.i tokoe:invalid" result="pass"/><test-case name="27776float_minExclusive002_1078 tokoe:valid" result="pass"/><test-case name="27777float_minExclusive002_1078.i tokoe:invalid" result="pass"/><test-case name="27778float_minExclusive003_1079 tokoe:valid" result="pass"/><test-case name="27779float_minExclusive003_1079.v tokoe:valid" result="pass"/><test-case name="27780float_minExclusive004_1080 tokoe:valid" result="pass"/><test-case name="27781float_minExclusive004_1080.v tokoe:valid" result="pass"/><test-case name="27782float_minExclusive005_1081 tokoe:valid" result="pass"/><test-case name="27783float_minExclusive005_1081.v tokoe:valid" result="pass"/><test-case name="27784double_pattern001_1082 tokoe:valid" result="pass"/><test-case name="27785double_pattern001_1082.v tokoe:valid" result="pass"/><test-case name="27786double_enumeration001_1083 tokoe:valid" result="pass"/><test-case name="27787double_enumeration001_1083.i tokoe:invalid" result="pass"/><test-case name="27788double_enumeration002_1084 tokoe:valid" result="pass"/><test-case name="27789double_enumeration002_1084.v tokoe:valid" result="pass"/><test-case name="27790double_enumeration003_1085 tokoe:valid" result="pass"/><test-case name="27791double_enumeration003_1085.i tokoe:invalid" result="pass"/><test-case name="27792double_enumeration004_1086 tokoe:valid" result="pass"/><test-case name="27793double_enumeration004_1086.v tokoe:valid" result="pass"/><test-case name="27794double_maxInclusive001_1087 tokoe:valid" result="pass"/><test-case name="27795double_maxInclusive001_1087.v tokoe:valid" result="pass"/><test-case name="27796double_maxInclusive002_1088 tokoe:valid" result="pass"/><test-case name="27797double_maxInclusive002_1088.i tokoe:invalid" result="pass"/><test-case name="27798double_maxInclusive003_1089 tokoe:valid" result="pass"/><test-case name="27799double_maxInclusive003_1089.v tokoe:valid" result="pass"/><test-case name="27800double_maxExclusive001_1090 tokoe:valid" result="pass"/><test-case name="27801double_maxExclusive001_1090.i tokoe:invalid" result="pass"/><test-case name="27802double_maxExclusive002_1091 tokoe:valid" result="pass"/><test-case name="27803double_maxExclusive002_1091.i tokoe:invalid" result="pass"/><test-case name="27804double_maxExclusive003_1092 tokoe:valid" result="pass"/><test-case name="27805double_maxExclusive003_1092.v tokoe:valid" result="pass"/><test-case name="27806double_minInclusive001_1093 tokoe:valid" result="pass"/><test-case name="27807double_minInclusive001_1093.v tokoe:valid" result="pass"/><test-case name="27808double_minInclusive002_1094 tokoe:valid" result="pass"/><test-case name="27809double_minInclusive002_1094.i tokoe:invalid" result="pass"/><test-case name="27810double_minInclusive003_1095 tokoe:valid" result="pass"/><test-case name="27811double_minInclusive003_1095.v tokoe:valid" result="pass"/><test-case name="27812double_minInclusive004_1096 tokoe:valid" result="pass"/><test-case name="27813double_minInclusive004_1096.v tokoe:valid" result="pass"/><test-case name="27814double_minInclusive005_1097 tokoe:valid" result="pass"/><test-case name="27815double_minInclusive005_1097.v tokoe:valid" result="pass"/><test-case name="27816double_minExclusive001_1098 tokoe:valid" result="pass"/><test-case name="27817double_minExclusive001_1098.i tokoe:invalid" result="pass"/><test-case name="27818double_minExclusive002_1099 tokoe:valid" result="pass"/><test-case name="27819double_minExclusive002_1099.i tokoe:invalid" result="pass"/><test-case name="27820double_minExclusive003_1100 tokoe:valid" result="pass"/><test-case name="27821double_minExclusive003_1100.v tokoe:valid" result="pass"/><test-case name="27822double_minExclusive004_1101 tokoe:valid" result="pass"/><test-case name="27823double_minExclusive004_1101.v tokoe:valid" result="pass"/><test-case name="27824double_minExclusive005_1102 tokoe:valid" result="pass"/><test-case name="27825double_minExclusive005_1102.v tokoe:valid" result="pass"/><test-case name="27826duration_pattern001_1103 tokoe:valid" result="pass"/><test-case name="27827duration_pattern001_1103.v tokoe:valid" result="pass"/><test-case name="27828duration_enumeration001_1104 tokoe:valid" result="pass"/><test-case name="27829duration_enumeration001_1104.i tokoe:invalid" result="pass"/><test-case name="27830duration_enumeration002_1105 tokoe:valid" result="pass"/><test-case name="27831duration_enumeration002_1105.v tokoe:valid" result="pass"/><test-case name="27832duration_enumeration003_1106 tokoe:valid" result="pass"/><test-case name="27833duration_enumeration003_1106.i tokoe:invalid" result="pass"/><test-case name="27834duration_enumeration004_1107 tokoe:valid" result="pass"/><test-case name="27835duration_enumeration004_1107.v tokoe:valid" result="pass"/><test-case name="27836duration_maxInclusive001_1108 tokoe:valid" result="pass"/><test-case name="27837duration_maxInclusive001_1108.v tokoe:valid" result="pass"/><test-case name="27838duration_maxInclusive002_1109 tokoe:valid" result="pass"/><test-case name="27839duration_maxInclusive002_1109.i tokoe:invalid" result="pass"/><test-case name="27840duration_maxInclusive003_1110 tokoe:valid" result="pass"/><test-case name="27841duration_maxInclusive003_1110.v tokoe:valid" result="pass"/><test-case name="27842duration_maxExclusive001_1111 tokoe:valid" result="pass"/><test-case name="27843duration_maxExclusive001_1111.i tokoe:invalid" result="pass"/><test-case name="27844duration_maxExclusive002_1112 tokoe:valid" result="pass"/><test-case name="27845duration_maxExclusive002_1112.i tokoe:invalid" result="pass"/><test-case name="27846duration_maxExclusive003_1113 tokoe:valid" result="pass"/><test-case name="27847duration_maxExclusive003_1113.v tokoe:valid" result="pass"/><test-case name="27848duration_minInclusive001_1114 tokoe:valid" result="pass"/><test-case name="27849duration_minInclusive001_1114.v tokoe:valid" result="pass"/><test-case name="27850duration_minInclusive002_1115 tokoe:valid" result="pass"/><test-case name="27851duration_minInclusive002_1115.i tokoe:invalid" result="pass"/><test-case name="27852duration_minInclusive003_1116 tokoe:valid" result="pass"/><test-case name="27853duration_minInclusive003_1116.v tokoe:valid" result="pass"/><test-case name="27854duration_minInclusive004_1117 tokoe:valid" result="pass"/><test-case name="27855duration_minInclusive004_1117.v tokoe:valid" result="pass"/><test-case name="27856duration_minInclusive005_1118 tokoe:valid" result="pass"/><test-case name="27857duration_minInclusive005_1118.v tokoe:valid" result="pass"/><test-case name="27858duration_minExclusive001_1119 tokoe:valid" result="pass"/><test-case name="27859duration_minExclusive001_1119.i tokoe:invalid" result="pass"/><test-case name="27860duration_minExclusive002_1120 tokoe:valid" result="pass"/><test-case name="27861duration_minExclusive002_1120.i tokoe:invalid" result="pass"/><test-case name="27862duration_minExclusive003_1121 tokoe:valid" result="pass"/><test-case name="27863duration_minExclusive003_1121.v tokoe:valid" result="pass"/><test-case name="27864duration_minExclusive004_1122 tokoe:valid" result="pass"/><test-case name="27865duration_minExclusive004_1122.v tokoe:valid" result="pass"/><test-case name="27866duration_minExclusive005_1123 tokoe:valid" result="pass"/><test-case name="27867duration_minExclusive005_1123.v tokoe:valid" result="pass"/><test-case name="27868dateTime_pattern001_1124 tokoe:valid" result="pass"/><test-case name="27869dateTime_pattern001_1124.v tokoe:valid" result="pass"/><test-case name="27870dateTime_enumeration001_1125 tokoe:valid" result="pass"/><test-case name="27871dateTime_enumeration001_1125.i tokoe:invalid" result="pass"/><test-case name="27872dateTime_enumeration002_1126 tokoe:valid" result="pass"/><test-case name="27873dateTime_enumeration002_1126.v tokoe:valid" result="pass"/><test-case name="27874dateTime_enumeration003_1127 tokoe:valid" result="pass"/><test-case name="27875dateTime_enumeration003_1127.i tokoe:invalid" result="pass"/><test-case name="27876dateTime_enumeration004_1128 tokoe:valid" result="pass"/><test-case name="27877dateTime_enumeration004_1128.v tokoe:valid" result="pass"/><test-case name="27878dateTime_enumeration005a_1129 tokoe:valid" result="pass"/><test-case name="27879dateTime_enumeration005a_1129.v tokoe:valid" result="pass"/><test-case name="27880dateTime_enumeration005b_1130 tokoe:valid" result="pass"/><test-case name="27881dateTime_enumeration005b_1130.v tokoe:valid" result="pass"/><test-case name="27882dateTime_maxInclusive001_1131 tokoe:valid" result="pass"/><test-case name="27883dateTime_maxInclusive001_1131.v tokoe:valid" result="pass"/><test-case name="27884dateTime_maxInclusive002_1132 tokoe:valid" result="pass"/><test-case name="27885dateTime_maxInclusive002_1132.i tokoe:invalid" result="pass"/><test-case name="27886dateTime_maxInclusive003_1133 tokoe:valid" result="pass"/><test-case name="27887dateTime_maxInclusive003_1133.v tokoe:valid" result="pass"/><test-case name="27888dateTime_maxExclusive001_1134 tokoe:valid" result="pass"/><test-case name="27889dateTime_maxExclusive001_1134.i tokoe:invalid" result="pass"/><test-case name="27890dateTime_maxExclusive002_1135 tokoe:valid" result="pass"/><test-case name="27891dateTime_maxExclusive002_1135.i tokoe:invalid" result="pass"/><test-case name="27892dateTime_maxExclusive003_1136 tokoe:valid" result="pass"/><test-case name="27893dateTime_maxExclusive003_1136.v tokoe:valid" result="pass"/><test-case name="27894dateTime_minInclusive001_1137 tokoe:valid" result="pass"/><test-case name="27895dateTime_minInclusive001_1137.v tokoe:valid" result="pass"/><test-case name="27896dateTime_minInclusive002_1138 tokoe:valid" result="pass"/><test-case name="27897dateTime_minInclusive002_1138.i tokoe:invalid" result="pass"/><test-case name="27898dateTime_minInclusive003_1139 tokoe:valid" result="pass"/><test-case name="27899dateTime_minInclusive003_1139.v tokoe:valid" result="pass"/><test-case name="27900dateTime_minInclusive004_1140 tokoe:valid" result="pass"/><test-case name="27901dateTime_minInclusive004_1140.v tokoe:valid" result="pass"/><test-case name="27902dateTime_minInclusive005_1141 tokoe:valid" result="pass"/><test-case name="27903dateTime_minInclusive005_1141.v tokoe:valid" result="pass"/><test-case name="27904dateTime_minExclusive001_1142 tokoe:valid" result="pass"/><test-case name="27905dateTime_minExclusive001_1142.i tokoe:invalid" result="pass"/><test-case name="27906dateTime_minExclusive002_1143 tokoe:valid" result="pass"/><test-case name="27907dateTime_minExclusive002_1143.i tokoe:invalid" result="pass"/><test-case name="27908dateTime_minExclusive003_1144 tokoe:valid" result="pass"/><test-case name="27909dateTime_minExclusive003_1144.v tokoe:valid" result="pass"/><test-case name="27910dateTime_minExclusive004_1145 tokoe:valid" result="pass"/><test-case name="27911dateTime_minExclusive004_1145.v tokoe:valid" result="pass"/><test-case name="27912dateTime_minExclusive005_1146 tokoe:valid" result="pass"/><test-case name="27913dateTime_minExclusive005_1146.v tokoe:valid" result="pass"/><test-case name="27914time_pattern001_1147 tokoe:valid" result="pass"/><test-case name="27915time_pattern001_1147.v tokoe:valid" result="pass"/><test-case name="27916time_enumeration001_1148 tokoe:valid" result="pass"/><test-case name="27917time_enumeration001_1148.i tokoe:invalid" result="pass"/><test-case name="27918time_enumeration002_1149 tokoe:valid" result="pass"/><test-case name="27919time_enumeration002_1149.v tokoe:valid" result="pass"/><test-case name="27920time_enumeration003_1150 tokoe:valid" result="pass"/><test-case name="27921time_enumeration003_1150.i tokoe:invalid" result="pass"/><test-case name="27922time_enumeration004_1151 tokoe:valid" result="pass"/><test-case name="27923time_enumeration004_1151.v tokoe:valid" result="pass"/><test-case name="27924time_maxInclusive001_1152 tokoe:valid" result="pass"/><test-case name="27925time_maxInclusive001_1152.v tokoe:valid" result="pass"/><test-case name="27926time_maxInclusive002_1153 tokoe:valid" result="pass"/><test-case name="27927time_maxInclusive002_1153.i tokoe:invalid" result="pass"/><test-case name="27928time_maxInclusive003_1154 tokoe:valid" result="pass"/><test-case name="27929time_maxInclusive003_1154.v tokoe:valid" result="pass"/><test-case name="27930time_maxExclusive001_1155 tokoe:valid" result="pass"/><test-case name="27931time_maxExclusive001_1155.i tokoe:invalid" result="pass"/><test-case name="27932time_maxExclusive002_1156 tokoe:valid" result="pass"/><test-case name="27933time_maxExclusive002_1156.i tokoe:invalid" result="pass"/><test-case name="27934time_maxExclusive003_1157 tokoe:valid" result="pass"/><test-case name="27935time_maxExclusive003_1157.v tokoe:valid" result="pass"/><test-case name="27936time_minInclusive001_1158 tokoe:valid" result="pass"/><test-case name="27937time_minInclusive001_1158.v tokoe:valid" result="pass"/><test-case name="27938time_minInclusive002_1159 tokoe:valid" result="pass"/><test-case name="27939time_minInclusive002_1159.i tokoe:invalid" result="pass"/><test-case name="27940time_minInclusive003_1160 tokoe:valid" result="pass"/><test-case name="27941time_minInclusive003_1160.v tokoe:valid" result="pass"/><test-case name="27942time_minInclusive004_1161 tokoe:valid" result="pass"/><test-case name="27943time_minInclusive004_1161.v tokoe:valid" result="pass"/><test-case name="27944time_minInclusive005_1162 tokoe:valid" result="pass"/><test-case name="27945time_minInclusive005_1162.v tokoe:valid" result="pass"/><test-case name="27946time_minInclusive006_1163 tokoe:valid" result="pass"/><test-case name="27947time_minInclusive006_1163.i tokoe:invalid" result="pass"/><test-case name="27948time_minExclusive001_1164 tokoe:valid" result="pass"/><test-case name="27949time_minExclusive001_1164.i tokoe:invalid" result="pass"/><test-case name="27950time_minExclusive002_1165 tokoe:valid" result="pass"/><test-case name="27951time_minExclusive002_1165.i tokoe:invalid" result="pass"/><test-case name="27952time_minExclusive003_1166 tokoe:valid" result="pass"/><test-case name="27953time_minExclusive003_1166.v tokoe:valid" result="pass"/><test-case name="27954time_minExclusive004_1167 tokoe:valid" result="pass"/><test-case name="27955time_minExclusive004_1167.v tokoe:valid" result="pass"/><test-case name="27956time_minExclusive005_1168 tokoe:valid" result="pass"/><test-case name="27957time_minExclusive005_1168.v tokoe:valid" result="pass"/><test-case name="27958date_pattern001_1169 tokoe:valid" result="pass"/><test-case name="27959date_pattern001_1169.v tokoe:valid" result="pass"/><test-case name="27960date_enumeration001_1170 tokoe:valid" result="pass"/><test-case name="27961date_enumeration001_1170.i tokoe:invalid" result="pass"/><test-case name="27962date_enumeration002_1171 tokoe:valid" result="pass"/><test-case name="27963date_enumeration002_1171.v tokoe:valid" result="pass"/><test-case name="27964date_enumeration003_1172 tokoe:valid" result="pass"/><test-case name="27965date_enumeration003_1172.i tokoe:invalid" result="pass"/><test-case name="27966date_enumeration004_1173 tokoe:valid" result="pass"/><test-case name="27967date_enumeration004_1173.v tokoe:valid" result="pass"/><test-case name="27968date_maxInclusive001_1174 tokoe:valid" result="pass"/><test-case name="27969date_maxInclusive001_1174.v tokoe:valid" result="pass"/><test-case name="27970date_maxInclusive002_1175 tokoe:valid" result="pass"/><test-case name="27971date_maxInclusive002_1175.i tokoe:invalid" result="pass"/><test-case name="27972date_maxInclusive003_1176 tokoe:valid" result="pass"/><test-case name="27973date_maxInclusive003_1176.v tokoe:valid" result="pass"/><test-case name="27974date_maxExclusive001_1177 tokoe:valid" result="pass"/><test-case name="27975date_maxExclusive001_1177.i tokoe:invalid" result="pass"/><test-case name="27976date_maxExclusive002_1178 tokoe:valid" result="pass"/><test-case name="27977date_maxExclusive002_1178.i tokoe:invalid" result="pass"/><test-case name="27978date_maxExclusive003_1179 tokoe:valid" result="pass"/><test-case name="27979date_maxExclusive003_1179.v tokoe:valid" result="pass"/><test-case name="27980date_minInclusive001_1180 tokoe:valid" result="pass"/><test-case name="27981date_minInclusive001_1180.v tokoe:valid" result="pass"/><test-case name="27982date_minInclusive002_1181 tokoe:valid" result="pass"/><test-case name="27983date_minInclusive002_1181.i tokoe:invalid" result="pass"/><test-case name="27984date_minInclusive003_1182 tokoe:valid" result="pass"/><test-case name="27985date_minInclusive003_1182.v tokoe:valid" result="pass"/><test-case name="27986date_minInclusive004_1183 tokoe:valid" result="pass"/><test-case name="27987date_minInclusive004_1183.v tokoe:valid" result="pass"/><test-case name="27988date_minInclusive005_1184 tokoe:valid" result="pass"/><test-case name="27989date_minInclusive005_1184.v tokoe:valid" result="pass"/><test-case name="27990date_minExclusive001_1185 tokoe:valid" result="pass"/><test-case name="27991date_minExclusive001_1185.i tokoe:invalid" result="pass"/><test-case name="27992date_minExclusive002_1186 tokoe:valid" result="pass"/><test-case name="27993date_minExclusive002_1186.i tokoe:invalid" result="pass"/><test-case name="27994date_minExclusive003_1187 tokoe:valid" result="pass"/><test-case name="27995date_minExclusive003_1187.v tokoe:valid" result="pass"/><test-case name="27996date_minExclusive004_1188 tokoe:valid" result="pass"/><test-case name="27997date_minExclusive004_1188.v tokoe:valid" result="pass"/><test-case name="27998date_minExclusive005_1189 tokoe:valid" result="pass"/><test-case name="27999date_minExclusive005_1189.v tokoe:valid" result="pass"/><test-case name="28000gYearMonth_pattern001_1190 tokoe:valid" result="pass"/><test-case name="28001gYearMonth_pattern001_1190.v tokoe:valid" result="pass"/><test-case name="28002gYearMonth_enumeration001_1191 tokoe:valid" result="pass"/><test-case name="28003gYearMonth_enumeration001_1191.i tokoe:invalid" result="pass"/><test-case name="28004gYearMonth_enumeration002_1192 tokoe:valid" result="pass"/><test-case name="28005gYearMonth_enumeration002_1192.v tokoe:valid" result="pass"/><test-case name="28006gYearMonth_enumeration003_1193 tokoe:valid" result="pass"/><test-case name="28007gYearMonth_enumeration003_1193.i tokoe:invalid" result="pass"/><test-case name="28008gYearMonth_enumeration004_1194 tokoe:valid" result="pass"/><test-case name="28009gYearMonth_enumeration004_1194.v tokoe:valid" result="pass"/><test-case name="28010gYearMonth_maxInclusive001_1195 tokoe:valid" result="pass"/><test-case name="28011gYearMonth_maxInclusive001_1195.v tokoe:valid" result="pass"/><test-case name="28012gYearMonth_maxInclusive002_1196 tokoe:valid" result="pass"/><test-case name="28013gYearMonth_maxInclusive002_1196.i tokoe:invalid" result="pass"/><test-case name="28014gYearMonth_maxInclusive003_1197 tokoe:valid" result="pass"/><test-case name="28015gYearMonth_maxInclusive003_1197.v tokoe:valid" result="pass"/><test-case name="28016gYearMonth_maxExclusive001_1198 tokoe:valid" result="pass"/><test-case name="28017gYearMonth_maxExclusive001_1198.i tokoe:invalid" result="pass"/><test-case name="28018gYearMonth_maxExclusive002_1199 tokoe:valid" result="pass"/><test-case name="28019gYearMonth_maxExclusive002_1199.i tokoe:invalid" result="pass"/><test-case name="28020gYearMonth_maxExclusive003_1200 tokoe:valid" result="pass"/><test-case name="28021gYearMonth_maxExclusive003_1200.v tokoe:valid" result="pass"/><test-case name="28022gYearMonth_minInclusive001_1201 tokoe:valid" result="pass"/><test-case name="28023gYearMonth_minInclusive001_1201.v tokoe:valid" result="pass"/><test-case name="28024gYearMonth_minInclusive002_1202 tokoe:valid" result="pass"/><test-case name="28025gYearMonth_minInclusive002_1202.i tokoe:invalid" result="pass"/><test-case name="28026gYearMonth_minInclusive003_1203 tokoe:valid" result="pass"/><test-case name="28027gYearMonth_minInclusive003_1203.v tokoe:valid" result="pass"/><test-case name="28028gYearMonth_minInclusive004_1204 tokoe:valid" result="pass"/><test-case name="28029gYearMonth_minInclusive004_1204.v tokoe:valid" result="pass"/><test-case name="28030gYearMonth_minInclusive005_1205 tokoe:valid" result="pass"/><test-case name="28031gYearMonth_minInclusive005_1205.v tokoe:valid" result="pass"/><test-case name="28032gYearMonth_minExclusive001_1206 tokoe:valid" result="pass"/><test-case name="28033gYearMonth_minExclusive001_1206.i tokoe:invalid" result="pass"/><test-case name="28034gYearMonth_minExclusive002_1207 tokoe:valid" result="pass"/><test-case name="28035gYearMonth_minExclusive002_1207.i tokoe:invalid" result="pass"/><test-case name="28036gYearMonth_minExclusive003_1208 tokoe:valid" result="pass"/><test-case name="28037gYearMonth_minExclusive003_1208.v tokoe:valid" result="pass"/><test-case name="28038gYearMonth_minExclusive004_1209 tokoe:valid" result="pass"/><test-case name="28039gYearMonth_minExclusive004_1209.v tokoe:valid" result="pass"/><test-case name="28040gYearMonth_minExclusive005_1210 tokoe:valid" result="pass"/><test-case name="28041gYearMonth_minExclusive005_1210.v tokoe:valid" result="pass"/><test-case name="28042gYear_pattern001_1211 tokoe:valid" result="pass"/><test-case name="28043gYear_pattern001_1211.v tokoe:valid" result="pass"/><test-case name="28044gYear_enumeration001_1212 tokoe:valid" result="pass"/><test-case name="28045gYear_enumeration001_1212.i tokoe:invalid" result="pass"/><test-case name="28046gYear_enumeration002_1213 tokoe:valid" result="pass"/><test-case name="28047gYear_enumeration002_1213.v tokoe:valid" result="pass"/><test-case name="28048gYear_enumeration003_1214 tokoe:valid" result="pass"/><test-case name="28049gYear_enumeration003_1214.i tokoe:invalid" result="pass"/><test-case name="28050gYear_enumeration004_1215 tokoe:valid" result="pass"/><test-case name="28051gYear_enumeration004_1215.v tokoe:valid" result="pass"/><test-case name="28052gYear_maxInclusive001_1216 tokoe:valid" result="pass"/><test-case name="28053gYear_maxInclusive001_1216.v tokoe:valid" result="pass"/><test-case name="28054gYear_maxInclusive002_1217 tokoe:valid" result="pass"/><test-case name="28055gYear_maxInclusive002_1217.i tokoe:invalid" result="pass"/><test-case name="28056gYear_maxInclusive003_1218 tokoe:valid" result="pass"/><test-case name="28057gYear_maxInclusive003_1218.v tokoe:valid" result="pass"/><test-case name="28058gYear_maxExclusive001_1219 tokoe:valid" result="pass"/><test-case name="28059gYear_maxExclusive001_1219.i tokoe:invalid" result="pass"/><test-case name="28060gYear_maxExclusive002_1220 tokoe:valid" result="pass"/><test-case name="28061gYear_maxExclusive002_1220.i tokoe:invalid" result="pass"/><test-case name="28062gYear_maxExclusive003_1221 tokoe:valid" result="pass"/><test-case name="28063gYear_maxExclusive003_1221.v tokoe:valid" result="pass"/><test-case name="28064gYear_minInclusive001_1222 tokoe:valid" result="pass"/><test-case name="28065gYear_minInclusive001_1222.v tokoe:valid" result="pass"/><test-case name="28066gYear_minInclusive002_1223 tokoe:valid" result="pass"/><test-case name="28067gYear_minInclusive002_1223.i tokoe:invalid" result="pass"/><test-case name="28068gYear_minInclusive003_1224 tokoe:valid" result="pass"/><test-case name="28069gYear_minInclusive003_1224.v tokoe:valid" result="pass"/><test-case name="28070gYear_minInclusive004_1225 tokoe:valid" result="pass"/><test-case name="28071gYear_minInclusive004_1225.v tokoe:valid" result="pass"/><test-case name="28072gYear_minInclusive005_1226 tokoe:valid" result="pass"/><test-case name="28073gYear_minInclusive005_1226.v tokoe:valid" result="pass"/><test-case name="28074gYear_minExclusive001_1227 tokoe:valid" result="pass"/><test-case name="28075gYear_minExclusive001_1227.i tokoe:invalid" result="pass"/><test-case name="28076gYear_minExclusive002_1228 tokoe:valid" result="pass"/><test-case name="28077gYear_minExclusive002_1228.i tokoe:invalid" result="pass"/><test-case name="28078gYear_minExclusive003_1229 tokoe:valid" result="pass"/><test-case name="28079gYear_minExclusive003_1229.v tokoe:valid" result="pass"/><test-case name="28080gYear_minExclusive004_1230 tokoe:valid" result="pass"/><test-case name="28081gYear_minExclusive004_1230.v tokoe:valid" result="pass"/><test-case name="28082gYear_minExclusive005_1231 tokoe:valid" result="pass"/><test-case name="28083gYear_minExclusive005_1231.v tokoe:valid" result="pass"/><test-case name="28084gMonthDay_pattern001_1232 tokoe:valid" result="pass"/><test-case name="28085gMonthDay_pattern001_1232.v tokoe:valid" result="pass"/><test-case name="28086gMonthDay_enumeration001_1233 tokoe:valid" result="pass"/><test-case name="28087gMonthDay_enumeration001_1233.i tokoe:invalid" result="pass"/><test-case name="28088gMonthDay_enumeration002_1234 tokoe:valid" result="pass"/><test-case name="28089gMonthDay_enumeration002_1234.v tokoe:valid" result="pass"/><test-case name="28090gMonthDay_enumeration003_1235 tokoe:valid" result="pass"/><test-case name="28091gMonthDay_enumeration003_1235.i tokoe:invalid" result="pass"/><test-case name="28092gMonthDay_enumeration004_1236 tokoe:valid" result="pass"/><test-case name="28093gMonthDay_enumeration004_1236.v tokoe:valid" result="pass"/><test-case name="28094gMonthDay_maxInclusive001_1237 tokoe:valid" result="pass"/><test-case name="28095gMonthDay_maxInclusive001_1237.v tokoe:valid" result="pass"/><test-case name="28096gMonthDay_maxInclusive002_1238 tokoe:valid" result="pass"/><test-case name="28097gMonthDay_maxInclusive002_1238.i tokoe:invalid" result="pass"/><test-case name="28098gMonthDay_maxInclusive003_1239 tokoe:valid" result="pass"/><test-case name="28099gMonthDay_maxInclusive003_1239.v tokoe:valid" result="pass"/><test-case name="28100gMonthDay_maxExclusive001_1240 tokoe:valid" result="pass"/><test-case name="28101gMonthDay_maxExclusive001_1240.i tokoe:invalid" result="pass"/><test-case name="28102gMonthDay_maxExclusive002_1241 tokoe:valid" result="pass"/><test-case name="28103gMonthDay_maxExclusive002_1241.i tokoe:invalid" result="pass"/><test-case name="28104gMonthDay_maxExclusive003_1242 tokoe:valid" result="pass"/><test-case name="28105gMonthDay_maxExclusive003_1242.v tokoe:valid" result="pass"/><test-case name="28106gMonthDay_minInclusive001_1243 tokoe:valid" result="pass"/><test-case name="28107gMonthDay_minInclusive001_1243.v tokoe:valid" result="pass"/><test-case name="28108gMonthDay_minInclusive002_1244 tokoe:valid" result="pass"/><test-case name="28109gMonthDay_minInclusive002_1244.i tokoe:invalid" result="pass"/><test-case name="28110gMonthDay_minInclusive003_1245 tokoe:valid" result="pass"/><test-case name="28111gMonthDay_minInclusive003_1245.v tokoe:valid" result="pass"/><test-case name="28112gMonthDay_minInclusive004_1246 tokoe:valid" result="pass"/><test-case name="28113gMonthDay_minInclusive004_1246.v tokoe:valid" result="pass"/><test-case name="28114gMonthDay_minInclusive005_1247 tokoe:valid" result="pass"/><test-case name="28115gMonthDay_minInclusive005_1247.v tokoe:valid" result="pass"/><test-case name="28116gMonthDay_minExclusive001_1248 tokoe:valid" result="pass"/><test-case name="28117gMonthDay_minExclusive001_1248.i tokoe:invalid" result="pass"/><test-case name="28118gMonthDay_minExclusive002_1249 tokoe:valid" result="pass"/><test-case name="28119gMonthDay_minExclusive002_1249.i tokoe:invalid" result="pass"/><test-case name="28120gMonthDay_minExclusive003_1250 tokoe:valid" result="pass"/><test-case name="28121gMonthDay_minExclusive003_1250.v tokoe:valid" result="pass"/><test-case name="28122gMonthDay_minExclusive004_1251 tokoe:valid" result="pass"/><test-case name="28123gMonthDay_minExclusive004_1251.v tokoe:valid" result="pass"/><test-case name="28124gMonthDay_minExclusive005_1252 tokoe:valid" result="pass"/><test-case name="28125gMonthDay_minExclusive005_1252.v tokoe:valid" result="pass"/><test-case name="28126gDay_pattern001_1253 tokoe:valid" result="pass"/><test-case name="28127gDay_pattern001_1253.v tokoe:valid" result="pass"/><test-case name="28128gDay_enumeration001_1254 tokoe:valid" result="pass"/><test-case name="28129gDay_enumeration001_1254.i tokoe:invalid" result="pass"/><test-case name="28130gDay_enumeration002_1255 tokoe:valid" result="pass"/><test-case name="28131gDay_enumeration002_1255.v tokoe:valid" result="pass"/><test-case name="28132gDay_enumeration003_1256 tokoe:valid" result="pass"/><test-case name="28133gDay_enumeration003_1256.i tokoe:invalid" result="pass"/><test-case name="28134gDay_enumeration004_1257 tokoe:valid" result="pass"/><test-case name="28135gDay_enumeration004_1257.v tokoe:valid" result="pass"/><test-case name="28136gDay_maxInclusive001_1258 tokoe:valid" result="pass"/><test-case name="28137gDay_maxInclusive001_1258.v tokoe:valid" result="pass"/><test-case name="28138gDay_maxInclusive002_1259 tokoe:valid" result="pass"/><test-case name="28139gDay_maxInclusive002_1259.i tokoe:invalid" result="pass"/><test-case name="28140gDay_maxInclusive003_1260 tokoe:valid" result="pass"/><test-case name="28141gDay_maxInclusive003_1260.v tokoe:valid" result="pass"/><test-case name="28142gDay_maxExclusive001_1261 tokoe:valid" result="pass"/><test-case name="28143gDay_maxExclusive001_1261.i tokoe:invalid" result="pass"/><test-case name="28144gDay_maxExclusive002_1262 tokoe:valid" result="pass"/><test-case name="28145gDay_maxExclusive002_1262.i tokoe:invalid" result="pass"/><test-case name="28146gDay_maxExclusive003_1263 tokoe:valid" result="pass"/><test-case name="28147gDay_maxExclusive003_1263.v tokoe:valid" result="pass"/><test-case name="28148gDay_minInclusive001_1264 tokoe:valid" result="pass"/><test-case name="28149gDay_minInclusive001_1264.v tokoe:valid" result="pass"/><test-case name="28150gDay_minInclusive002_1265 tokoe:valid" result="pass"/><test-case name="28151gDay_minInclusive002_1265.i tokoe:invalid" result="pass"/><test-case name="28152gDay_minInclusive003_1266 tokoe:valid" result="pass"/><test-case name="28153gDay_minInclusive003_1266.v tokoe:valid" result="pass"/><test-case name="28154gDay_minInclusive004_1267 tokoe:valid" result="pass"/><test-case name="28155gDay_minInclusive004_1267.v tokoe:valid" result="pass"/><test-case name="28156gDay_minInclusive005_1268 tokoe:valid" result="pass"/><test-case name="28157gDay_minInclusive005_1268.v tokoe:valid" result="pass"/><test-case name="28158gDay_minExclusive001_1269 tokoe:valid" result="pass"/><test-case name="28159gDay_minExclusive001_1269.i tokoe:invalid" result="pass"/><test-case name="28160gDay_minExclusive002_1270 tokoe:valid" result="pass"/><test-case name="28161gDay_minExclusive002_1270.i tokoe:invalid" result="pass"/><test-case name="28162gDay_minExclusive003_1271 tokoe:valid" result="pass"/><test-case name="28163gDay_minExclusive003_1271.v tokoe:valid" result="pass"/><test-case name="28164gDay_minExclusive004_1272 tokoe:valid" result="pass"/><test-case name="28165gDay_minExclusive004_1272.v tokoe:valid" result="pass"/><test-case name="28166gDay_minExclusive005_1273 tokoe:valid" result="pass"/><test-case name="28167gDay_minExclusive005_1273.v tokoe:valid" result="pass"/><test-case name="28168gMonth_pattern001_1274 tokoe:valid" result="pass"/><test-case name="28169gMonth_pattern001_1274.v tokoe:valid" result="fail"/><test-case name="28170gMonth_enumeration001_1275 tokoe:valid" result="fail"/><test-case name="28171gMonth_enumeration001_1275.i tokoe:invalid" result="pass"/><test-case name="28172gMonth_enumeration002_1276 tokoe:valid" result="fail"/><test-case name="28173gMonth_enumeration002_1276.v tokoe:valid" result="fail"/><test-case name="28174gMonth_enumeration003_1277 tokoe:valid" result="fail"/><test-case name="28175gMonth_enumeration003_1277.i tokoe:invalid" result="pass"/><test-case name="28176gMonth_enumeration004_1278 tokoe:valid" result="fail"/><test-case name="28177gMonth_enumeration004_1278.v tokoe:valid" result="fail"/><test-case name="28178gMonth_maxInclusive001_1279 tokoe:valid" result="fail"/><test-case name="28179gMonth_maxInclusive001_1279.v tokoe:valid" result="fail"/><test-case name="28180gMonth_maxInclusive002_1280 tokoe:valid" result="fail"/><test-case name="28181gMonth_maxInclusive002_1280.i tokoe:invalid" result="pass"/><test-case name="28182gMonth_maxInclusive003_1281 tokoe:valid" result="fail"/><test-case name="28183gMonth_maxInclusive003_1281.v tokoe:valid" result="fail"/><test-case name="28184gMonth_maxExclusive001_1282 tokoe:valid" result="fail"/><test-case name="28185gMonth_maxExclusive001_1282.i tokoe:invalid" result="pass"/><test-case name="28186gMonth_maxExclusive002_1283 tokoe:valid" result="fail"/><test-case name="28187gMonth_maxExclusive002_1283.i tokoe:invalid" result="pass"/><test-case name="28188gMonth_maxExclusive003_1284 tokoe:valid" result="fail"/><test-case name="28189gMonth_maxExclusive003_1284.v tokoe:valid" result="fail"/><test-case name="28190gMonth_minInclusive001_1285 tokoe:valid" result="fail"/><test-case name="28191gMonth_minInclusive001_1285.v tokoe:valid" result="fail"/><test-case name="28192gMonth_minInclusive002_1286 tokoe:valid" result="fail"/><test-case name="28193gMonth_minInclusive002_1286.i tokoe:invalid" result="pass"/><test-case name="28194gMonth_minInclusive003_1287 tokoe:valid" result="fail"/><test-case name="28195gMonth_minInclusive003_1287.v tokoe:valid" result="fail"/><test-case name="28196gMonth_minInclusive004_1288 tokoe:valid" result="fail"/><test-case name="28197gMonth_minInclusive004_1288.v tokoe:valid" result="fail"/><test-case name="28198gMonth_minInclusive005_1289 tokoe:valid" result="fail"/><test-case name="28199gMonth_minInclusive005_1289.v tokoe:valid" result="fail"/><test-case name="28200gMonth_minExclusive001_1290 tokoe:valid" result="fail"/><test-case name="28201gMonth_minExclusive001_1290.i tokoe:invalid" result="pass"/><test-case name="28202gMonth_minExclusive002_1291 tokoe:valid" result="fail"/><test-case name="28203gMonth_minExclusive002_1291.i tokoe:invalid" result="pass"/><test-case name="28204gMonth_minExclusive003_1292 tokoe:valid" result="fail"/><test-case name="28205gMonth_minExclusive003_1292.v tokoe:valid" result="fail"/><test-case name="28206gMonth_minExclusive004_1293 tokoe:valid" result="fail"/><test-case name="28207gMonth_minExclusive004_1293.v tokoe:valid" result="fail"/><test-case name="28208gMonth_minExclusive005_1294 tokoe:valid" result="fail"/><test-case name="28209gMonth_minExclusive005_1294.v tokoe:valid" result="fail"/><test-case name="28210hexBinary_length001_1295 tokoe:valid" result="pass"/><test-case name="28211hexBinary_length001_1295.i tokoe:invalid" result="pass"/><test-case name="28212hexBinary_length002_1296 tokoe:valid" result="pass"/><test-case name="28213hexBinary_length002_1296.v tokoe:valid" result="pass"/><test-case name="28214hexBinary_length003_1297 tokoe:valid" result="pass"/><test-case name="28215hexBinary_length003_1297.i tokoe:invalid" result="pass"/><test-case name="28216hexBinary_minLength001_1298 tokoe:valid" result="pass"/><test-case name="28217hexBinary_minLength001_1298.v tokoe:valid" result="pass"/><test-case name="28218hexBinary_minLength002_1299 tokoe:valid" result="pass"/><test-case name="28219hexBinary_minLength002_1299.v tokoe:valid" result="pass"/><test-case name="28220hexBinary_minLength003_1300 tokoe:valid" result="pass"/><test-case name="28221hexBinary_minLength003_1300.i tokoe:invalid" result="pass"/><test-case name="28222hexBinary_minLength004_1301 tokoe:valid" result="pass"/><test-case name="28223hexBinary_minLength004_1301.v tokoe:valid" result="pass"/><test-case name="28224hexBinary_maxLength001_1302 tokoe:valid" result="pass"/><test-case name="28225hexBinary_maxLength001_1302.v tokoe:valid" result="pass"/><test-case name="28226hexBinary_maxLength002_1303 tokoe:valid" result="pass"/><test-case name="28227hexBinary_maxLength002_1303.v tokoe:valid" result="pass"/><test-case name="28228hexBinary_maxLength003_1304 tokoe:valid" result="pass"/><test-case name="28229hexBinary_maxLength003_1304.v tokoe:valid" result="pass"/><test-case name="28230hexBinary_enumeration001_1305 tokoe:valid" result="pass"/><test-case name="28231hexBinary_enumeration001_1305.i tokoe:invalid" result="pass"/><test-case name="28232hexBinary_enumeration002_1306 tokoe:valid" result="pass"/><test-case name="28233hexBinary_enumeration002_1306.v tokoe:valid" result="pass"/><test-case name="28234hexBinary_enumeration003_1307 tokoe:valid" result="pass"/><test-case name="28235hexBinary_enumeration003_1307.i tokoe:invalid" result="pass"/><test-case name="28236hexBinary_enumeration004_1308 tokoe:valid" result="pass"/><test-case name="28237hexBinary_enumeration004_1308.v tokoe:valid" result="pass"/><test-case name="28238base64Binary_length001_1309 tokoe:valid" result="pass"/><test-case name="28239base64Binary_length001_1309.i tokoe:invalid" result="pass"/><test-case name="28240base64Binary_length002_1310 tokoe:valid" result="pass"/><test-case name="28241base64Binary_length002_1310.v tokoe:valid" result="pass"/><test-case name="28242base64Binary_length003_1311 tokoe:valid" result="pass"/><test-case name="28243base64Binary_length003_1311.i tokoe:invalid" result="pass"/><test-case name="28244base64Binary_minLength001_1312 tokoe:valid" result="pass"/><test-case name="28245base64Binary_minLength001_1312.v tokoe:valid" result="pass"/><test-case name="28246base64Binary_minLength002_1313 tokoe:valid" result="pass"/><test-case name="28247base64Binary_minLength002_1313.v tokoe:valid" result="pass"/><test-case name="28248base64Binary_minLength003_1314 tokoe:valid" result="pass"/><test-case name="28249base64Binary_minLength003_1314.i tokoe:invalid" result="pass"/><test-case name="28250base64Binary_minLength004_1315 tokoe:valid" result="pass"/><test-case name="28251base64Binary_minLength004_1315.v tokoe:valid" result="pass"/><test-case name="28252base64Binary_maxLength001_1316 tokoe:valid" result="pass"/><test-case name="28253base64Binary_maxLength001_1316.i tokoe:invalid" result="pass"/><test-case name="28254base64Binary_maxLength002_1317 tokoe:valid" result="pass"/><test-case name="28255base64Binary_maxLength002_1317.i tokoe:invalid" result="pass"/><test-case name="28256base64Binary_maxLength003_1318 tokoe:valid" result="pass"/><test-case name="28257base64Binary_maxLength003_1318.i tokoe:invalid" result="pass"/><test-case name="28258base64Binary_enumeration001_1319 tokoe:valid" result="pass"/><test-case name="28259base64Binary_enumeration001_1319.i tokoe:invalid" result="pass"/><test-case name="28260base64Binary_enumeration002_1320 tokoe:valid" result="pass"/><test-case name="28261base64Binary_enumeration002_1320.v tokoe:valid" result="pass"/><test-case name="28262anyURI_length001_1322 tokoe:valid" result="pass"/><test-case name="28263anyURI_length001_1322.i tokoe:invalid" result="pass"/><test-case name="28264anyURI_length002_1323 tokoe:valid" result="pass"/><test-case name="28265anyURI_length002_1323.v tokoe:valid" result="pass"/><test-case name="28266anyURI_length003_1324 tokoe:valid" result="pass"/><test-case name="28267anyURI_length003_1324.i tokoe:invalid" result="pass"/><test-case name="28268anyURI_minLength001_1325 tokoe:valid" result="pass"/><test-case name="28269anyURI_minLength001_1325.v tokoe:valid" result="pass"/><test-case name="28270anyURI_minLength002_1326 tokoe:valid" result="pass"/><test-case name="28271anyURI_minLength002_1326.v tokoe:valid" result="pass"/><test-case name="28272anyURI_minLength003_1327 tokoe:valid" result="pass"/><test-case name="28273anyURI_minLength003_1327.i tokoe:invalid" result="pass"/><test-case name="28274anyURI_minLength004_1328 tokoe:valid" result="pass"/><test-case name="28275anyURI_minLength004_1328.v tokoe:valid" result="pass"/><test-case name="28276anyURI_maxLength001_1329 tokoe:valid" result="pass"/><test-case name="28277anyURI_maxLength001_1329.i tokoe:invalid" result="pass"/><test-case name="28278anyURI_maxLength002_1330 tokoe:valid" result="pass"/><test-case name="28279anyURI_maxLength002_1330.v tokoe:valid" result="pass"/><test-case name="28280anyURI_maxLength003_1331 tokoe:valid" result="pass"/><test-case name="28281anyURI_maxLength003_1331.v tokoe:valid" result="pass"/><test-case name="28282anyURI_enumeration001_1332 tokoe:valid" result="pass"/><test-case name="28283anyURI_enumeration001_1332.i tokoe:invalid" result="pass"/><test-case name="28284anyURI_enumeration002_1333 tokoe:valid" result="pass"/><test-case name="28285anyURI_enumeration002_1333.v tokoe:valid" result="pass"/><test-case name="28286anyURI_enumeration003_1334 tokoe:valid" result="pass"/><test-case name="28287anyURI_enumeration003_1334.i tokoe:invalid" result="pass"/><test-case name="28288anyURI_enumeration004_1335 tokoe:valid" result="pass"/><test-case name="28289anyURI_enumeration004_1335.v tokoe:valid" result="pass"/><test-case name="28290anyURI_a002_1337 tokoe:valid" result="pass"/><test-case name="28291anyURI_a002_1337.v tokoe:valid" result="pass"/><test-case name="28292anyURI_a005_1340 tokoe:valid" result="pass"/><test-case name="28293anyURI_a006_1341 tokoe:valid" result="pass"/><test-case name="28294anyURI_a007_1342 tokoe:valid" result="pass"/><test-case name="28295anyURI_a008_1343 tokoe:valid" result="pass"/><test-case name="28296anyURI_a009_1344 tokoe:valid" result="pass"/><test-case name="28297anyURI_a010_1345 tokoe:valid" result="pass"/><test-case name="28298anyURI_a011_1346 tokoe:valid" result="pass"/><test-case name="28299anyURI_a012_1347 tokoe:valid" result="pass"/><test-case name="28300anyURI_a013_1348 tokoe:valid" result="pass"/><test-case name="28301anyURI_a014_1349 tokoe:valid" result="pass"/><test-case name="28302anyURI_a015_1350 tokoe:valid" result="pass"/><test-case name="28303anyURI_a016_1351 tokoe:valid" result="pass"/><test-case name="28304anyURI_b001_1352 tokoe:valid" result="pass"/><test-case name="28305anyURI_b001_1352.i tokoe:invalid" result="pass"/><test-case name="28306anyURI_b002_1353 tokoe:valid" result="pass"/><test-case name="28307anyURI_b002_1353.v tokoe:valid" result="pass"/><test-case name="28308anyURI_b005_1355 tokoe:valid" result="pass"/><test-case name="28309anyURI_b005_1355.i tokoe:invalid" result="pass"/><test-case name="28310QName_length002_1358 tokoe:valid" result="pass"/><test-case name="28311QName_length002_1358.v tokoe:valid" result="pass"/><test-case name="28312QName_minLength001_1360 tokoe:valid" result="pass"/><test-case name="28313QName_minLength001_1360.v tokoe:valid" result="pass"/><test-case name="28314QName_minLength002_1361 tokoe:valid" result="pass"/><test-case name="28315QName_minLength002_1361.v tokoe:valid" result="pass"/><test-case name="28316QName_minLength004_1363 tokoe:valid" result="pass"/><test-case name="28317QName_minLength004_1363.v tokoe:valid" result="pass"/><test-case name="28318QName_maxLength002_1365 tokoe:valid" result="pass"/><test-case name="28319QName_maxLength002_1365.v tokoe:valid" result="pass"/><test-case name="28320QName_maxLength003_1366 tokoe:valid" result="pass"/><test-case name="28321QName_maxLength003_1366.v tokoe:valid" result="pass"/><test-case name="28322QName_pattern001_1367 tokoe:valid" result="pass"/><test-case name="28323QName_pattern001_1367.v tokoe:valid" result="pass"/><test-case name="28324QName_enumeration001_1368 tokoe:valid" result="pass"/><test-case name="28325QName_enumeration001_1368.i tokoe:invalid" result="pass"/><test-case name="28326QName_enumeration002_1369 tokoe:valid" result="pass"/><test-case name="28327QName_enumeration002_1369.v tokoe:valid" result="pass"/><test-case name="28328QName_enumeration003_1370 tokoe:valid" result="pass"/><test-case name="28329QName_enumeration003_1370.i tokoe:invalid" result="pass"/><test-case name="28330QName_enumeration004_1371 tokoe:valid" result="pass"/><test-case name="28331QName_enumeration004_1371.v tokoe:valid" result="pass"/><test-case name="28332NOTATION_length002_1373 tokoe:valid" result="pass"/><test-case name="28333NOTATION_length002_1373.v tokoe:valid" result="pass"/><test-case name="28334NOTATION_minLength001_1375 tokoe:valid" result="pass"/><test-case name="28335NOTATION_minLength001_1375.v tokoe:valid" result="pass"/><test-case name="28336NOTATION_minLength002_1376 tokoe:valid" result="pass"/><test-case name="28337NOTATION_minLength002_1376.v tokoe:valid" result="pass"/><test-case name="28338NOTATION_minLength004_1378 tokoe:valid" result="pass"/><test-case name="28339NOTATION_minLength004_1378.v tokoe:valid" result="pass"/><test-case name="28340NOTATION_maxLength002_1380 tokoe:valid" result="pass"/><test-case name="28341NOTATION_maxLength002_1380.v tokoe:valid" result="pass"/><test-case name="28342NOTATION_maxLength003_1381 tokoe:valid" result="pass"/><test-case name="28343NOTATION_maxLength003_1381.v tokoe:valid" result="pass"/><test-case name="28344NOTATION_pattern001_1382 tokoe:valid" result="pass"/><test-case name="28345NOTATION_pattern001_1382.v tokoe:valid" result="pass"/><test-case name="28346NOTATION_enumeration001_1383 tokoe:valid" result="pass"/><test-case name="28347NOTATION_enumeration001_1383.i tokoe:invalid" result="pass"/><test-case name="28348NOTATION_enumeration002_1384 tokoe:valid" result="pass"/><test-case name="28349NOTATION_enumeration002_1384.v tokoe:valid" result="pass"/><test-case name="28350NOTATION_enumeration003_1385 tokoe:valid" result="pass"/><test-case name="28351NOTATION_enumeration003_1385.i tokoe:invalid" result="pass"/><test-case name="28352NOTATION_enumeration004_1386 tokoe:valid" result="pass"/><test-case name="28353NOTATION_enumeration004_1386.v tokoe:valid" result="pass"/><test-case name="28354normalizedString_length001_1387 tokoe:valid" result="pass"/><test-case name="28355normalizedString_length001_1387.i tokoe:invalid" result="pass"/><test-case name="28356normalizedString_length002_1388 tokoe:valid" result="pass"/><test-case name="28357normalizedString_length002_1388.v tokoe:valid" result="pass"/><test-case name="28358normalizedString_length003_1389 tokoe:valid" result="pass"/><test-case name="28359normalizedString_length003_1389.i tokoe:invalid" result="pass"/><test-case name="28360normalizedString_minLength001_1390 tokoe:valid" result="pass"/><test-case name="28361normalizedString_minLength001_1390.v tokoe:valid" result="pass"/><test-case name="28362normalizedString_minLength002_1391 tokoe:valid" result="pass"/><test-case name="28363normalizedString_minLength002_1391.v tokoe:valid" result="pass"/><test-case name="28364normalizedString_minLength003_1392 tokoe:valid" result="pass"/><test-case name="28365normalizedString_minLength003_1392.i tokoe:invalid" result="pass"/><test-case name="28366normalizedString_minLength004_1393 tokoe:valid" result="pass"/><test-case name="28367normalizedString_minLength004_1393.v tokoe:valid" result="pass"/><test-case name="28368normalizedString_maxLength001_1394 tokoe:valid" result="pass"/><test-case name="28369normalizedString_maxLength001_1394.i tokoe:invalid" result="pass"/><test-case name="28370normalizedString_maxLength002_1395 tokoe:valid" result="pass"/><test-case name="28371normalizedString_maxLength002_1395.v tokoe:valid" result="pass"/><test-case name="28372normalizedString_maxLength003_1396 tokoe:valid" result="pass"/><test-case name="28373normalizedString_maxLength003_1396.v tokoe:valid" result="pass"/><test-case name="28374normalizedString_pattern001_1397 tokoe:valid" result="pass"/><test-case name="28375normalizedString_pattern001_1397.v tokoe:valid" result="pass"/><test-case name="28376normalizedString_enumeration001_1398 tokoe:valid" result="pass"/><test-case name="28377normalizedString_enumeration001_1398.i tokoe:invalid" result="pass"/><test-case name="28378normalizedString_enumeration002_1399 tokoe:valid" result="pass"/><test-case name="28379normalizedString_enumeration002_1399.v tokoe:valid" result="pass"/><test-case name="28380normalizedString_enumeration003_1400 tokoe:valid" result="pass"/><test-case name="28381normalizedString_enumeration003_1400.i tokoe:invalid" result="pass"/><test-case name="28382normalizedString_enumeration004_1401 tokoe:valid" result="pass"/><test-case name="28383normalizedString_enumeration004_1401.v tokoe:valid" result="pass"/><test-case name="28384token_length001_1402 tokoe:valid" result="pass"/><test-case name="28385token_length001_1402.i tokoe:invalid" result="pass"/><test-case name="28386token_length002_1403 tokoe:valid" result="pass"/><test-case name="28387token_length002_1403.v tokoe:valid" result="pass"/><test-case name="28388token_length003_1404 tokoe:valid" result="pass"/><test-case name="28389token_length003_1404.i tokoe:invalid" result="pass"/><test-case name="28390token_minLength001_1405 tokoe:valid" result="pass"/><test-case name="28391token_minLength001_1405.v tokoe:valid" result="pass"/><test-case name="28392token_minLength002_1406 tokoe:valid" result="pass"/><test-case name="28393token_minLength002_1406.v tokoe:valid" result="pass"/><test-case name="28394token_minLength003_1407 tokoe:valid" result="pass"/><test-case name="28395token_minLength003_1407.i tokoe:invalid" result="pass"/><test-case name="28396token_minLength004_1408 tokoe:valid" result="pass"/><test-case name="28397token_minLength004_1408.v tokoe:valid" result="pass"/><test-case name="28398token_maxLength001_1409 tokoe:valid" result="pass"/><test-case name="28399token_maxLength001_1409.i tokoe:invalid" result="pass"/><test-case name="28400token_maxLength002_1410 tokoe:valid" result="pass"/><test-case name="28401token_maxLength002_1410.v tokoe:valid" result="pass"/><test-case name="28402token_maxLength003_1411 tokoe:valid" result="pass"/><test-case name="28403token_maxLength003_1411.v tokoe:valid" result="pass"/><test-case name="28404token_pattern001_1412 tokoe:valid" result="pass"/><test-case name="28405token_pattern001_1412.v tokoe:valid" result="pass"/><test-case name="28406token_enumeration001_1413 tokoe:valid" result="pass"/><test-case name="28407token_enumeration001_1413.i tokoe:invalid" result="pass"/><test-case name="28408token_enumeration002_1414 tokoe:valid" result="pass"/><test-case name="28409token_enumeration002_1414.v tokoe:valid" result="pass"/><test-case name="28410token_enumeration003_1415 tokoe:valid" result="pass"/><test-case name="28411token_enumeration003_1415.i tokoe:invalid" result="pass"/><test-case name="28412token_enumeration004_1416 tokoe:valid" result="pass"/><test-case name="28413token_enumeration004_1416.v tokoe:valid" result="pass"/><test-case name="28414language_length001_1417 tokoe:valid" result="pass"/><test-case name="28415language_length001_1417.i tokoe:invalid" result="pass"/><test-case name="28416language_length002_1418 tokoe:valid" result="pass"/><test-case name="28417language_length002_1418.v tokoe:valid" result="pass"/><test-case name="28418language_length003_1419 tokoe:valid" result="pass"/><test-case name="28419language_length003_1419.i tokoe:invalid" result="pass"/><test-case name="28420language_minLength001_1420 tokoe:valid" result="pass"/><test-case name="28421language_minLength001_1420.v tokoe:valid" result="pass"/><test-case name="28422language_minLength002_1421 tokoe:valid" result="pass"/><test-case name="28423language_minLength002_1421.v tokoe:valid" result="pass"/><test-case name="28424language_minLength003_1422 tokoe:valid" result="pass"/><test-case name="28425language_minLength003_1422.i tokoe:invalid" result="pass"/><test-case name="28426language_minLength004_1423 tokoe:valid" result="pass"/><test-case name="28427language_minLength004_1423.v tokoe:valid" result="pass"/><test-case name="28428language_maxLength001_1424 tokoe:valid" result="pass"/><test-case name="28429language_maxLength001_1424.i tokoe:invalid" result="pass"/><test-case name="28430language_maxLength002_1425 tokoe:valid" result="pass"/><test-case name="28431language_maxLength002_1425.v tokoe:valid" result="pass"/><test-case name="28432language_maxLength003_1426 tokoe:valid" result="pass"/><test-case name="28433language_maxLength003_1426.v tokoe:valid" result="pass"/><test-case name="28434language_pattern001_1427 tokoe:valid" result="pass"/><test-case name="28435language_pattern001_1427.v tokoe:valid" result="pass"/><test-case name="28436language_enumeration001_1428 tokoe:valid" result="pass"/><test-case name="28437language_enumeration001_1428.i tokoe:invalid" result="pass"/><test-case name="28438language_enumeration002_1429 tokoe:valid" result="pass"/><test-case name="28439language_enumeration002_1429.v tokoe:valid" result="pass"/><test-case name="28440language_enumeration003_1430 tokoe:valid" result="pass"/><test-case name="28441language_enumeration003_1430.i tokoe:invalid" result="pass"/><test-case name="28442language_enumeration004_1431 tokoe:valid" result="pass"/><test-case name="28443language_enumeration004_1431.v tokoe:valid" result="pass"/><test-case name="28444IDREFS_length001_1432 tokoe:valid" result="pass"/><test-case name="28445IDREFS_length001_1432.i tokoe:invalid" result="pass"/><test-case name="28446IDREFS_length002_1433 tokoe:valid" result="pass"/><test-case name="28447IDREFS_length002_1433.v tokoe:valid" result="pass"/><test-case name="28448IDREFS_length003_1434 tokoe:valid" result="pass"/><test-case name="28449IDREFS_length003_1434.i tokoe:invalid" result="pass"/><test-case name="28450IDREFS_minLength001_1435 tokoe:valid" result="pass"/><test-case name="28451IDREFS_minLength001_1435.v tokoe:valid" result="pass"/><test-case name="28452IDREFS_minLength002_1436 tokoe:valid" result="pass"/><test-case name="28453IDREFS_minLength002_1436.v tokoe:valid" result="pass"/><test-case name="28454IDREFS_minLength003_1437 tokoe:valid" result="pass"/><test-case name="28455IDREFS_minLength003_1437.i tokoe:invalid" result="pass"/><test-case name="28456IDREFS_minLength004_1438 tokoe:valid" result="pass"/><test-case name="28457IDREFS_minLength004_1438.v tokoe:valid" result="pass"/><test-case name="28458IDREFS_maxLength001_1439 tokoe:valid" result="pass"/><test-case name="28459IDREFS_maxLength001_1439.i tokoe:invalid" result="pass"/><test-case name="28460IDREFS_maxLength002_1440 tokoe:valid" result="pass"/><test-case name="28461IDREFS_maxLength002_1440.v tokoe:valid" result="pass"/><test-case name="28462IDREFS_maxLength003_1441 tokoe:valid" result="pass"/><test-case name="28463IDREFS_maxLength003_1441.v tokoe:valid" result="pass"/><test-case name="28464IDREFS_enumeration001_1442 tokoe:valid" result="pass"/><test-case name="28465IDREFS_enumeration001_1442.i tokoe:invalid" result="pass"/><test-case name="28466IDREFS_enumeration002_1443 tokoe:valid" result="pass"/><test-case name="28467IDREFS_enumeration002_1443.v tokoe:valid" result="pass"/><test-case name="28468IDREFS_enumeration003_1444 tokoe:valid" result="pass"/><test-case name="28469IDREFS_enumeration003_1444.i tokoe:invalid" result="pass"/><test-case name="28470IDREFS_enumeration004_1445 tokoe:valid" result="pass"/><test-case name="28471IDREFS_enumeration004_1445.v tokoe:valid" result="pass"/><test-case name="28472NMTOKEN_length001_1446 tokoe:valid" result="pass"/><test-case name="28473NMTOKEN_length001_1446.i tokoe:invalid" result="pass"/><test-case name="28474NMTOKEN_length002_1447 tokoe:valid" result="pass"/><test-case name="28475NMTOKEN_length002_1447.v tokoe:valid" result="pass"/><test-case name="28476NMTOKEN_length003_1448 tokoe:valid" result="pass"/><test-case name="28477NMTOKEN_length003_1448.i tokoe:invalid" result="pass"/><test-case name="28478NMTOKEN_minLength001_1449 tokoe:valid" result="pass"/><test-case name="28479NMTOKEN_minLength001_1449.v tokoe:valid" result="pass"/><test-case name="28480NMTOKEN_minLength002_1450 tokoe:valid" result="pass"/><test-case name="28481NMTOKEN_minLength002_1450.v tokoe:valid" result="pass"/><test-case name="28482NMTOKEN_minLength003_1451 tokoe:valid" result="pass"/><test-case name="28483NMTOKEN_minLength003_1451.i tokoe:invalid" result="pass"/><test-case name="28484NMTOKEN_minLength004_1452 tokoe:valid" result="pass"/><test-case name="28485NMTOKEN_minLength004_1452.v tokoe:valid" result="pass"/><test-case name="28486NMTOKEN_maxLength001_1453 tokoe:valid" result="pass"/><test-case name="28487NMTOKEN_maxLength001_1453.i tokoe:invalid" result="pass"/><test-case name="28488NMTOKEN_maxLength002_1454 tokoe:valid" result="pass"/><test-case name="28489NMTOKEN_maxLength002_1454.v tokoe:valid" result="pass"/><test-case name="28490NMTOKEN_maxLength003_1455 tokoe:valid" result="pass"/><test-case name="28491NMTOKEN_maxLength003_1455.v tokoe:valid" result="pass"/><test-case name="28492NMTOKEN_pattern001_1456 tokoe:valid" result="pass"/><test-case name="28493NMTOKEN_pattern001_1456.v tokoe:valid" result="pass"/><test-case name="28494NMTOKEN_enumeration001_1457 tokoe:valid" result="pass"/><test-case name="28495NMTOKEN_enumeration001_1457.i tokoe:invalid" result="pass"/><test-case name="28496NMTOKEN_enumeration002_1458 tokoe:valid" result="pass"/><test-case name="28497NMTOKEN_enumeration002_1458.v tokoe:valid" result="pass"/><test-case name="28498NMTOKEN_enumeration003_1459 tokoe:valid" result="pass"/><test-case name="28499NMTOKEN_enumeration003_1459.i tokoe:invalid" result="pass"/><test-case name="28500NMTOKEN_enumeration004_1460 tokoe:valid" result="pass"/><test-case name="28501NMTOKEN_enumeration004_1460.v tokoe:valid" result="pass"/><test-case name="28502NMTOKENS_length001_1461 tokoe:valid" result="pass"/><test-case name="28503NMTOKENS_length001_1461.i tokoe:invalid" result="pass"/><test-case name="28504NMTOKENS_length002_1462 tokoe:valid" result="pass"/><test-case name="28505NMTOKENS_length002_1462.v tokoe:valid" result="pass"/><test-case name="28506NMTOKENS_length003_1463 tokoe:valid" result="pass"/><test-case name="28507NMTOKENS_length003_1463.i tokoe:invalid" result="pass"/><test-case name="28508NMTOKENS_minLength001_1464 tokoe:valid" result="fail"/><test-case name="28509NMTOKENS_minLength001_1464.v tokoe:valid" result="fail"/><test-case name="28510NMTOKENS_minLength002_1465 tokoe:valid" result="pass"/><test-case name="28511NMTOKENS_minLength002_1465.v tokoe:valid" result="pass"/><test-case name="28512NMTOKENS_minLength003_1466 tokoe:valid" result="pass"/><test-case name="28513NMTOKENS_minLength003_1466.i tokoe:invalid" result="pass"/><test-case name="28514NMTOKENS_minLength004_1467 tokoe:valid" result="fail"/><test-case name="28515NMTOKENS_minLength004_1467.v tokoe:valid" result="fail"/><test-case name="28516NMTOKENS_maxLength001_1468 tokoe:valid" result="pass"/><test-case name="28517NMTOKENS_maxLength001_1468.i tokoe:invalid" result="pass"/><test-case name="28518NMTOKENS_maxLength002_1469 tokoe:valid" result="pass"/><test-case name="28519NMTOKENS_maxLength002_1469.v tokoe:valid" result="pass"/><test-case name="28520NMTOKENS_maxLength003_1470 tokoe:valid" result="pass"/><test-case name="28521NMTOKENS_maxLength003_1470.v tokoe:valid" result="pass"/><test-case name="28522NMTOKENS_enumeration001_1471 tokoe:valid" result="pass"/><test-case name="28523NMTOKENS_enumeration001_1471.i tokoe:invalid" result="pass"/><test-case name="28524NMTOKENS_enumeration002_1472 tokoe:valid" result="pass"/><test-case name="28525NMTOKENS_enumeration002_1472.v tokoe:valid" result="pass"/><test-case name="28526NMTOKENS_enumeration003_1473 tokoe:valid" result="pass"/><test-case name="28527NMTOKENS_enumeration003_1473.i tokoe:invalid" result="pass"/><test-case name="28528NMTOKENS_enumeration004_1474 tokoe:valid" result="pass"/><test-case name="28529NMTOKENS_enumeration004_1474.v tokoe:valid" result="pass"/><test-case name="28530NMTOKENS_pattern001_1475 tokoe:valid" result="pass"/><test-case name="28531NMTOKENS_pattern001_1475.v tokoe:valid" result="pass"/><test-case name="28532NMTOKENS_pattern002_1476 tokoe:valid" result="pass"/><test-case name="28533NMTOKENS_pattern002_1476.i tokoe:invalid" result="pass"/><test-case name="28534Name_length001_1477 tokoe:valid" result="pass"/><test-case name="28535Name_length001_1477.i tokoe:invalid" result="pass"/><test-case name="28536Name_length002_1478 tokoe:valid" result="pass"/><test-case name="28537Name_length002_1478.v tokoe:valid" result="pass"/><test-case name="28538Name_length003_1479 tokoe:valid" result="pass"/><test-case name="28539Name_length003_1479.i tokoe:invalid" result="pass"/><test-case name="28540Name_minLength001_1480 tokoe:valid" result="pass"/><test-case name="28541Name_minLength001_1480.v tokoe:valid" result="pass"/><test-case name="28542Name_minLength002_1481 tokoe:valid" result="pass"/><test-case name="28543Name_minLength002_1481.v tokoe:valid" result="pass"/><test-case name="28544Name_minLength003_1482 tokoe:valid" result="pass"/><test-case name="28545Name_minLength003_1482.i tokoe:invalid" result="pass"/><test-case name="28546Name_minLength004_1483 tokoe:valid" result="pass"/><test-case name="28547Name_minLength004_1483.v tokoe:valid" result="pass"/><test-case name="28548Name_maxLength001_1484 tokoe:valid" result="pass"/><test-case name="28549Name_maxLength001_1484.i tokoe:invalid" result="pass"/><test-case name="28550Name_maxLength002_1485 tokoe:valid" result="pass"/><test-case name="28551Name_maxLength002_1485.v tokoe:valid" result="pass"/><test-case name="28552Name_maxLength003_1486 tokoe:valid" result="pass"/><test-case name="28553Name_maxLength003_1486.v tokoe:valid" result="pass"/><test-case name="28554Name_pattern001_1487 tokoe:valid" result="pass"/><test-case name="28555Name_pattern001_1487.v tokoe:valid" result="pass"/><test-case name="28556Name_enumeration001_1488 tokoe:valid" result="pass"/><test-case name="28557Name_enumeration001_1488.i tokoe:invalid" result="pass"/><test-case name="28558Name_enumeration002_1489 tokoe:valid" result="pass"/><test-case name="28559Name_enumeration002_1489.v tokoe:valid" result="pass"/><test-case name="28560Name_enumeration003_1490 tokoe:valid" result="pass"/><test-case name="28561Name_enumeration003_1490.i tokoe:invalid" result="pass"/><test-case name="28562Name_enumeration004_1491 tokoe:valid" result="pass"/><test-case name="28563Name_enumeration004_1491.v tokoe:valid" result="pass"/><test-case name="28564NCName_length001_1492 tokoe:valid" result="pass"/><test-case name="28565NCName_length001_1492.i tokoe:invalid" result="pass"/><test-case name="28566NCName_length002_1493 tokoe:valid" result="pass"/><test-case name="28567NCName_length002_1493.v tokoe:valid" result="pass"/><test-case name="28568NCName_length003_1494 tokoe:valid" result="pass"/><test-case name="28569NCName_length003_1494.i tokoe:invalid" result="pass"/><test-case name="28570NCName_minLength001_1495 tokoe:valid" result="pass"/><test-case name="28571NCName_minLength001_1495.v tokoe:valid" result="pass"/><test-case name="28572NCName_minLength002_1496 tokoe:valid" result="pass"/><test-case name="28573NCName_minLength002_1496.v tokoe:valid" result="pass"/><test-case name="28574NCName_minLength003_1497 tokoe:valid" result="pass"/><test-case name="28575NCName_minLength003_1497.i tokoe:invalid" result="pass"/><test-case name="28576NCName_minLength004_1498 tokoe:valid" result="pass"/><test-case name="28577NCName_minLength004_1498.v tokoe:valid" result="pass"/><test-case name="28578NCName_maxLength001_1499 tokoe:valid" result="pass"/><test-case name="28579NCName_maxLength001_1499.i tokoe:invalid" result="pass"/><test-case name="28580NCName_maxLength002_1500 tokoe:valid" result="pass"/><test-case name="28581NCName_maxLength002_1500.v tokoe:valid" result="pass"/><test-case name="28582NCName_maxLength003_1501 tokoe:valid" result="pass"/><test-case name="28583NCName_maxLength003_1501.v tokoe:valid" result="pass"/><test-case name="28584NCName_pattern001_1502 tokoe:valid" result="pass"/><test-case name="28585NCName_pattern001_1502.v tokoe:valid" result="pass"/><test-case name="28586NCName_enumeration001_1503 tokoe:valid" result="pass"/><test-case name="28587NCName_enumeration001_1503.i tokoe:invalid" result="pass"/><test-case name="28588NCName_enumeration002_1504 tokoe:valid" result="pass"/><test-case name="28589NCName_enumeration002_1504.v tokoe:valid" result="pass"/><test-case name="28590NCName_enumeration003_1505 tokoe:valid" result="pass"/><test-case name="28591NCName_enumeration003_1505.i tokoe:invalid" result="pass"/><test-case name="28592NCName_enumeration004_1506 tokoe:valid" result="pass"/><test-case name="28593NCName_enumeration004_1506.v tokoe:valid" result="pass"/><test-case name="28594ID_length001_1507 tokoe:valid" result="pass"/><test-case name="28595ID_length001_1507.i tokoe:invalid" result="pass"/><test-case name="28596ID_length002_1508 tokoe:valid" result="pass"/><test-case name="28597ID_length002_1508.v tokoe:valid" result="pass"/><test-case name="28598ID_length003_1509 tokoe:valid" result="pass"/><test-case name="28599ID_length003_1509.i tokoe:invalid" result="pass"/><test-case name="28600ID_minLength001_1510 tokoe:valid" result="pass"/><test-case name="28601ID_minLength001_1510.v tokoe:valid" result="pass"/><test-case name="28602ID_minLength002_1511 tokoe:valid" result="pass"/><test-case name="28603ID_minLength002_1511.v tokoe:valid" result="pass"/><test-case name="28604ID_minLength003_1512 tokoe:valid" result="pass"/><test-case name="28605ID_minLength003_1512.i tokoe:invalid" result="pass"/><test-case name="28606ID_minLength004_1513 tokoe:valid" result="pass"/><test-case name="28607ID_minLength004_1513.v tokoe:valid" result="pass"/><test-case name="28608ID_maxLength001_1514 tokoe:valid" result="pass"/><test-case name="28609ID_maxLength001_1514.i tokoe:invalid" result="pass"/><test-case name="28610ID_maxLength002_1515 tokoe:valid" result="pass"/><test-case name="28611ID_maxLength002_1515.v tokoe:valid" result="pass"/><test-case name="28612ID_maxLength003_1516 tokoe:valid" result="pass"/><test-case name="28613ID_maxLength003_1516.v tokoe:valid" result="pass"/><test-case name="28614ID_pattern001_1517 tokoe:valid" result="pass"/><test-case name="28615ID_pattern001_1517.v tokoe:valid" result="pass"/><test-case name="28616ID_enumeration001_1518 tokoe:valid" result="pass"/><test-case name="28617ID_enumeration001_1518.i tokoe:invalid" result="pass"/><test-case name="28618ID_enumeration002_1519 tokoe:valid" result="pass"/><test-case name="28619ID_enumeration002_1519.v tokoe:valid" result="pass"/><test-case name="28620ID_enumeration003_1520 tokoe:valid" result="pass"/><test-case name="28621ID_enumeration003_1520.i tokoe:invalid" result="pass"/><test-case name="28622ID_enumeration004_1521 tokoe:valid" result="pass"/><test-case name="28623ID_enumeration004_1521.v tokoe:valid" result="pass"/><test-case name="28624IDREF_length001_1522 tokoe:valid" result="pass"/><test-case name="28625IDREF_length001_1522.i tokoe:invalid" result="pass"/><test-case name="28626IDREF_length002_1523 tokoe:valid" result="pass"/><test-case name="28627IDREF_length002_1523.v tokoe:valid" result="pass"/><test-case name="28628IDREF_length003_1524 tokoe:valid" result="pass"/><test-case name="28629IDREF_length003_1524.i tokoe:invalid" result="pass"/><test-case name="28630IDREF_minLength001_1525 tokoe:valid" result="pass"/><test-case name="28631IDREF_minLength001_1525.v tokoe:valid" result="pass"/><test-case name="28632IDREF_minLength002_1526 tokoe:valid" result="pass"/><test-case name="28633IDREF_minLength002_1526.v tokoe:valid" result="pass"/><test-case name="28634IDREF_minLength003_1527 tokoe:valid" result="pass"/><test-case name="28635IDREF_minLength003_1527.i tokoe:invalid" result="pass"/><test-case name="28636IDREF_minLength004_1528 tokoe:valid" result="pass"/><test-case name="28637IDREF_minLength004_1528.v tokoe:valid" result="pass"/><test-case name="28638IDREF_maxLength001_1529 tokoe:valid" result="pass"/><test-case name="28639IDREF_maxLength001_1529.i tokoe:invalid" result="pass"/><test-case name="28640IDREF_maxLength002_1530 tokoe:valid" result="pass"/><test-case name="28641IDREF_maxLength002_1530.v tokoe:valid" result="pass"/><test-case name="28642IDREF_maxLength003_1531 tokoe:valid" result="pass"/><test-case name="28643IDREF_maxLength003_1531.v tokoe:valid" result="pass"/><test-case name="28644IDREF_pattern001_1532 tokoe:valid" result="pass"/><test-case name="28645IDREF_pattern001_1532.v tokoe:valid" result="pass"/><test-case name="28646IDREF_enumeration001_1533 tokoe:valid" result="pass"/><test-case name="28647IDREF_enumeration001_1533.i tokoe:invalid" result="pass"/><test-case name="28648IDREF_enumeration002_1534 tokoe:valid" result="pass"/><test-case name="28649IDREF_enumeration002_1534.v tokoe:valid" result="pass"/><test-case name="28650IDREF_enumeration003_1535 tokoe:valid" result="pass"/><test-case name="28651IDREF_enumeration003_1535.i tokoe:invalid" result="pass"/><test-case name="28652IDREF_enumeration004_1536 tokoe:valid" result="pass"/><test-case name="28653IDREF_enumeration004_1536.v tokoe:valid" result="pass"/><test-case name="28654integer_pattern001_1537 tokoe:valid" result="pass"/><test-case name="28655integer_pattern001_1537.v tokoe:valid" result="pass"/><test-case name="28656integer_enumeration001_1538 tokoe:valid" result="pass"/><test-case name="28657integer_enumeration001_1538.i tokoe:invalid" result="pass"/><test-case name="28658integer_enumeration002_1539 tokoe:valid" result="pass"/><test-case name="28659integer_enumeration002_1539.v tokoe:valid" result="pass"/><test-case name="28660integer_enumeration003_1540 tokoe:valid" result="pass"/><test-case name="28661integer_enumeration003_1540.i tokoe:invalid" result="pass"/><test-case name="28662integer_enumeration004_1541 tokoe:valid" result="pass"/><test-case name="28663integer_enumeration004_1541.v tokoe:valid" result="pass"/><test-case name="28664integer_maxInclusive001_1542 tokoe:valid" result="pass"/><test-case name="28665integer_maxInclusive001_1542.v tokoe:valid" result="pass"/><test-case name="28666integer_maxInclusive002_1543 tokoe:valid" result="pass"/><test-case name="28667integer_maxInclusive002_1543.i tokoe:invalid" result="pass"/><test-case name="28668integer_maxInclusive003_1544 tokoe:valid" result="pass"/><test-case name="28669integer_maxInclusive003_1544.v tokoe:valid" result="pass"/><test-case name="28670integer_maxExclusive001_1545 tokoe:valid" result="pass"/><test-case name="28671integer_maxExclusive001_1545.i tokoe:invalid" result="pass"/><test-case name="28672integer_maxExclusive002_1546 tokoe:valid" result="pass"/><test-case name="28673integer_maxExclusive002_1546.i tokoe:invalid" result="pass"/><test-case name="28674integer_maxExclusive003_1547 tokoe:valid" result="pass"/><test-case name="28675integer_maxExclusive003_1547.v tokoe:valid" result="pass"/><test-case name="28676integer_minInclusive001_1548 tokoe:valid" result="pass"/><test-case name="28677integer_minInclusive001_1548.v tokoe:valid" result="pass"/><test-case name="28678integer_minInclusive002_1549 tokoe:valid" result="pass"/><test-case name="28679integer_minInclusive002_1549.i tokoe:invalid" result="pass"/><test-case name="28680integer_minInclusive003_1550 tokoe:valid" result="pass"/><test-case name="28681integer_minInclusive003_1550.v tokoe:valid" result="pass"/><test-case name="28682integer_minInclusive004_1551 tokoe:valid" result="pass"/><test-case name="28683integer_minInclusive004_1551.v tokoe:valid" result="pass"/><test-case name="28684integer_minInclusive005_1552 tokoe:valid" result="pass"/><test-case name="28685integer_minInclusive005_1552.v tokoe:valid" result="pass"/><test-case name="28686integer_minExclusive001_1553 tokoe:valid" result="pass"/><test-case name="28687integer_minExclusive001_1553.i tokoe:invalid" result="pass"/><test-case name="28688integer_minExclusive002_1554 tokoe:valid" result="pass"/><test-case name="28689integer_minExclusive002_1554.i tokoe:invalid" result="pass"/><test-case name="28690integer_minExclusive003_1555 tokoe:valid" result="pass"/><test-case name="28691integer_minExclusive003_1555.v tokoe:valid" result="pass"/><test-case name="28692integer_minExclusive004_1556 tokoe:valid" result="pass"/><test-case name="28693integer_minExclusive004_1556.v tokoe:valid" result="pass"/><test-case name="28694integer_minExclusive005_1557 tokoe:valid" result="pass"/><test-case name="28695integer_minExclusive005_1557.v tokoe:valid" result="pass"/><test-case name="28696integer_totalDigits001_1558 tokoe:valid" result="pass"/><test-case name="28697integer_totalDigits001_1558.i tokoe:invalid" result="pass"/><test-case name="28698integer_totalDigits002_1559 tokoe:valid" result="pass"/><test-case name="28699integer_totalDigits002_1559.v tokoe:valid" result="pass"/><test-case name="28700integer_totalDigits003_1560 tokoe:valid" result="pass"/><test-case name="28701integer_totalDigits003_1560.v tokoe:valid" result="pass"/><test-case name="28702nonPositiveInteger_pattern001_1561 tokoe:valid" result="pass"/><test-case name="28703nonPositiveInteger_pattern001_1561.v tokoe:valid" result="pass"/><test-case name="28704nonPositiveInteger_enumeration001_1562 tokoe:valid" result="pass"/><test-case name="28705nonPositiveInteger_enumeration001_1562.i tokoe:invalid" result="pass"/><test-case name="28706nonPositiveInteger_enumeration002_1563 tokoe:valid" result="pass"/><test-case name="28707nonPositiveInteger_enumeration002_1563.v tokoe:valid" result="pass"/><test-case name="28708nonPositiveInteger_enumeration003_1564 tokoe:valid" result="pass"/><test-case name="28709nonPositiveInteger_enumeration003_1564.i tokoe:invalid" result="pass"/><test-case name="28710nonPositiveInteger_enumeration004_1565 tokoe:valid" result="pass"/><test-case name="28711nonPositiveInteger_enumeration004_1565.v tokoe:valid" result="pass"/><test-case name="28712nonPositiveInteger_maxInclusive001_1566 tokoe:valid" result="pass"/><test-case name="28713nonPositiveInteger_maxInclusive001_1566.v tokoe:valid" result="pass"/><test-case name="28714nonPositiveInteger_maxInclusive002_1567 tokoe:valid" result="pass"/><test-case name="28715nonPositiveInteger_maxInclusive002_1567.i tokoe:invalid" result="pass"/><test-case name="28716nonPositiveInteger_maxInclusive003_1568 tokoe:valid" result="pass"/><test-case name="28717nonPositiveInteger_maxInclusive003_1568.v tokoe:valid" result="pass"/><test-case name="28718nonPositiveInteger_maxExclusive001_1569 tokoe:valid" result="pass"/><test-case name="28719nonPositiveInteger_maxExclusive001_1569.i tokoe:invalid" result="pass"/><test-case name="28720nonPositiveInteger_maxExclusive002_1570 tokoe:valid" result="pass"/><test-case name="28721nonPositiveInteger_maxExclusive002_1570.i tokoe:invalid" result="pass"/><test-case name="28722nonPositiveInteger_maxExclusive003_1571 tokoe:valid" result="pass"/><test-case name="28723nonPositiveInteger_maxExclusive003_1571.v tokoe:valid" result="pass"/><test-case name="28724nonPositiveInteger_minInclusive001_1572 tokoe:valid" result="pass"/><test-case name="28725nonPositiveInteger_minInclusive001_1572.v tokoe:valid" result="pass"/><test-case name="28726nonPositiveInteger_minInclusive002_1573 tokoe:valid" result="pass"/><test-case name="28727nonPositiveInteger_minInclusive002_1573.i tokoe:invalid" result="pass"/><test-case name="28728nonPositiveInteger_minInclusive003_1574 tokoe:valid" result="pass"/><test-case name="28729nonPositiveInteger_minInclusive003_1574.v tokoe:valid" result="pass"/><test-case name="28730nonPositiveInteger_minInclusive004_1575 tokoe:valid" result="pass"/><test-case name="28731nonPositiveInteger_minInclusive004_1575.v tokoe:valid" result="pass"/><test-case name="28732nonPositiveInteger_minInclusive005_1576 tokoe:valid" result="pass"/><test-case name="28733nonPositiveInteger_minInclusive005_1576.v tokoe:valid" result="pass"/><test-case name="28734nonPositiveInteger_minExclusive001_1577 tokoe:valid" result="pass"/><test-case name="28735nonPositiveInteger_minExclusive001_1577.i tokoe:invalid" result="pass"/><test-case name="28736nonPositiveInteger_minExclusive002_1578 tokoe:valid" result="pass"/><test-case name="28737nonPositiveInteger_minExclusive002_1578.i tokoe:invalid" result="pass"/><test-case name="28738nonPositiveInteger_minExclusive003_1579 tokoe:valid" result="pass"/><test-case name="28739nonPositiveInteger_minExclusive003_1579.v tokoe:valid" result="pass"/><test-case name="28740nonPositiveInteger_minExclusive004_1580 tokoe:valid" result="pass"/><test-case name="28741nonPositiveInteger_minExclusive004_1580.v tokoe:valid" result="pass"/><test-case name="28742nonPositiveInteger_minExclusive005_1581 tokoe:valid" result="pass"/><test-case name="28743nonPositiveInteger_minExclusive005_1581.v tokoe:valid" result="pass"/><test-case name="28744nonPositiveInteger_totalDigits001_1582 tokoe:valid" result="pass"/><test-case name="28745nonPositiveInteger_totalDigits001_1582.i tokoe:invalid" result="pass"/><test-case name="28746nonPositiveInteger_totalDigits002_1583 tokoe:valid" result="pass"/><test-case name="28747nonPositiveInteger_totalDigits002_1583.v tokoe:valid" result="pass"/><test-case name="28748nonPositiveInteger_totalDigits003_1584 tokoe:valid" result="pass"/><test-case name="28749nonPositiveInteger_totalDigits003_1584.v tokoe:valid" result="pass"/><test-case name="28750negativeInteger_pattern001_1585 tokoe:valid" result="pass"/><test-case name="28751negativeInteger_pattern001_1585.v tokoe:valid" result="pass"/><test-case name="28752negativeInteger_enumeration001_1586 tokoe:valid" result="pass"/><test-case name="28753negativeInteger_enumeration001_1586.i tokoe:invalid" result="pass"/><test-case name="28754negativeInteger_enumeration002_1587 tokoe:valid" result="pass"/><test-case name="28755negativeInteger_enumeration002_1587.v tokoe:valid" result="pass"/><test-case name="28756negativeInteger_enumeration003_1588 tokoe:valid" result="pass"/><test-case name="28757negativeInteger_enumeration003_1588.i tokoe:invalid" result="pass"/><test-case name="28758negativeInteger_enumeration004_1589 tokoe:valid" result="pass"/><test-case name="28759negativeInteger_enumeration004_1589.v tokoe:valid" result="pass"/><test-case name="28760negativeInteger_maxInclusive001_1590 tokoe:valid" result="pass"/><test-case name="28761negativeInteger_maxInclusive001_1590.v tokoe:valid" result="pass"/><test-case name="28762negativeInteger_maxInclusive002_1591 tokoe:valid" result="pass"/><test-case name="28763negativeInteger_maxInclusive002_1591.i tokoe:invalid" result="pass"/><test-case name="28764negativeInteger_maxInclusive003_1592 tokoe:valid" result="pass"/><test-case name="28765negativeInteger_maxInclusive003_1592.v tokoe:valid" result="pass"/><test-case name="28766negativeInteger_maxExclusive001_1593 tokoe:valid" result="pass"/><test-case name="28767negativeInteger_maxExclusive001_1593.i tokoe:invalid" result="pass"/><test-case name="28768negativeInteger_maxExclusive002_1594 tokoe:valid" result="pass"/><test-case name="28769negativeInteger_maxExclusive002_1594.i tokoe:invalid" result="pass"/><test-case name="28770negativeInteger_maxExclusive003_1595 tokoe:valid" result="pass"/><test-case name="28771negativeInteger_maxExclusive003_1595.v tokoe:valid" result="pass"/><test-case name="28772negativeInteger_minInclusive001_1596 tokoe:valid" result="pass"/><test-case name="28773negativeInteger_minInclusive001_1596.v tokoe:valid" result="pass"/><test-case name="28774negativeInteger_minInclusive002_1597 tokoe:valid" result="pass"/><test-case name="28775negativeInteger_minInclusive002_1597.i tokoe:invalid" result="pass"/><test-case name="28776negativeInteger_minInclusive003_1598 tokoe:valid" result="pass"/><test-case name="28777negativeInteger_minInclusive003_1598.v tokoe:valid" result="pass"/><test-case name="28778negativeInteger_minInclusive004_1599 tokoe:valid" result="pass"/><test-case name="28779negativeInteger_minInclusive004_1599.v tokoe:valid" result="pass"/><test-case name="28780negativeInteger_minInclusive005_1600 tokoe:valid" result="pass"/><test-case name="28781negativeInteger_minInclusive005_1600.v tokoe:valid" result="pass"/><test-case name="28782negativeInteger_minExclusive001_1601 tokoe:valid" result="pass"/><test-case name="28783negativeInteger_minExclusive001_1601.i tokoe:invalid" result="pass"/><test-case name="28784negativeInteger_minExclusive002_1602 tokoe:valid" result="pass"/><test-case name="28785negativeInteger_minExclusive002_1602.i tokoe:invalid" result="pass"/><test-case name="28786negativeInteger_minExclusive003_1603 tokoe:valid" result="pass"/><test-case name="28787negativeInteger_minExclusive003_1603.v tokoe:valid" result="pass"/><test-case name="28788negativeInteger_minExclusive004_1604 tokoe:valid" result="pass"/><test-case name="28789negativeInteger_minExclusive004_1604.v tokoe:valid" result="pass"/><test-case name="28790negativeInteger_minExclusive005_1605 tokoe:valid" result="pass"/><test-case name="28791negativeInteger_minExclusive005_1605.v tokoe:valid" result="pass"/><test-case name="28792negativeInteger_totalDigits001_1606 tokoe:valid" result="pass"/><test-case name="28793negativeInteger_totalDigits001_1606.i tokoe:invalid" result="pass"/><test-case name="28794negativeInteger_totalDigits002_1607 tokoe:valid" result="pass"/><test-case name="28795negativeInteger_totalDigits002_1607.v tokoe:valid" result="pass"/><test-case name="28796negativeInteger_totalDigits003_1608 tokoe:valid" result="pass"/><test-case name="28797negativeInteger_totalDigits003_1608.v tokoe:valid" result="pass"/><test-case name="28798long_pattern001_1609 tokoe:valid" result="pass"/><test-case name="28799long_pattern001_1609.v tokoe:valid" result="pass"/><test-case name="28800long_enumeration001_1610 tokoe:valid" result="pass"/><test-case name="28801long_enumeration001_1610.i tokoe:invalid" result="pass"/><test-case name="28802long_enumeration002_1611 tokoe:valid" result="pass"/><test-case name="28803long_enumeration002_1611.v tokoe:valid" result="pass"/><test-case name="28804long_enumeration003_1612 tokoe:valid" result="pass"/><test-case name="28805long_enumeration003_1612.i tokoe:invalid" result="pass"/><test-case name="28806long_enumeration004_1613 tokoe:valid" result="pass"/><test-case name="28807long_enumeration004_1613.v tokoe:valid" result="pass"/><test-case name="28808long_maxInclusive001_1614 tokoe:valid" result="pass"/><test-case name="28809long_maxInclusive001_1614.v tokoe:valid" result="pass"/><test-case name="28810long_maxInclusive002_1615 tokoe:valid" result="pass"/><test-case name="28811long_maxInclusive002_1615.i tokoe:invalid" result="pass"/><test-case name="28812long_maxInclusive003_1616 tokoe:valid" result="pass"/><test-case name="28813long_maxInclusive003_1616.v tokoe:valid" result="pass"/><test-case name="28814long_maxExclusive001_1617 tokoe:valid" result="pass"/><test-case name="28815long_maxExclusive001_1617.i tokoe:invalid" result="pass"/><test-case name="28816long_maxExclusive002_1618 tokoe:valid" result="pass"/><test-case name="28817long_maxExclusive002_1618.i tokoe:invalid" result="pass"/><test-case name="28818long_maxExclusive003_1619 tokoe:valid" result="pass"/><test-case name="28819long_maxExclusive003_1619.v tokoe:valid" result="pass"/><test-case name="28820long_minInclusive001_1620 tokoe:valid" result="pass"/><test-case name="28821long_minInclusive001_1620.v tokoe:valid" result="pass"/><test-case name="28822long_minInclusive002_1621 tokoe:valid" result="pass"/><test-case name="28823long_minInclusive002_1621.i tokoe:invalid" result="pass"/><test-case name="28824long_minInclusive003_1622 tokoe:valid" result="pass"/><test-case name="28825long_minInclusive003_1622.v tokoe:valid" result="pass"/><test-case name="28826long_minInclusive004_1623 tokoe:valid" result="pass"/><test-case name="28827long_minInclusive004_1623.v tokoe:valid" result="pass"/><test-case name="28828long_minInclusive005_1624 tokoe:valid" result="pass"/><test-case name="28829long_minInclusive005_1624.v tokoe:valid" result="pass"/><test-case name="28830long_minExclusive001_1625 tokoe:valid" result="pass"/><test-case name="28831long_minExclusive001_1625.i tokoe:invalid" result="pass"/><test-case name="28832long_minExclusive002_1626 tokoe:valid" result="pass"/><test-case name="28833long_minExclusive002_1626.i tokoe:invalid" result="pass"/><test-case name="28834long_minExclusive003_1627 tokoe:valid" result="pass"/><test-case name="28835long_minExclusive003_1627.v tokoe:valid" result="pass"/><test-case name="28836long_minExclusive004_1628 tokoe:valid" result="pass"/><test-case name="28837long_minExclusive004_1628.v tokoe:valid" result="pass"/><test-case name="28838long_minExclusive005_1629 tokoe:valid" result="pass"/><test-case name="28839long_minExclusive005_1629.v tokoe:valid" result="pass"/><test-case name="28840long_totalDigits001_1630 tokoe:valid" result="pass"/><test-case name="28841long_totalDigits001_1630.i tokoe:invalid" result="pass"/><test-case name="28842long_totalDigits002_1631 tokoe:valid" result="pass"/><test-case name="28843long_totalDigits002_1631.v tokoe:valid" result="pass"/><test-case name="28844long_totalDigits003_1632 tokoe:valid" result="pass"/><test-case name="28845long_totalDigits003_1632.v tokoe:valid" result="pass"/><test-case name="28846int_pattern001_1633 tokoe:valid" result="pass"/><test-case name="28847int_pattern001_1633.v tokoe:valid" result="pass"/><test-case name="28848int_enumeration001_1634 tokoe:valid" result="pass"/><test-case name="28849int_enumeration001_1634.i tokoe:invalid" result="pass"/><test-case name="28850int_enumeration002_1635 tokoe:valid" result="pass"/><test-case name="28851int_enumeration002_1635.v tokoe:valid" result="pass"/><test-case name="28852int_enumeration003_1636 tokoe:valid" result="pass"/><test-case name="28853int_enumeration003_1636.i tokoe:invalid" result="pass"/><test-case name="28854int_enumeration004_1637 tokoe:valid" result="pass"/><test-case name="28855int_enumeration004_1637.v tokoe:valid" result="pass"/><test-case name="28856int_maxInclusive001_1638 tokoe:valid" result="pass"/><test-case name="28857int_maxInclusive001_1638.v tokoe:valid" result="pass"/><test-case name="28858int_maxInclusive002_1639 tokoe:valid" result="pass"/><test-case name="28859int_maxInclusive002_1639.i tokoe:invalid" result="pass"/><test-case name="28860int_maxInclusive003_1640 tokoe:valid" result="pass"/><test-case name="28861int_maxInclusive003_1640.v tokoe:valid" result="pass"/><test-case name="28862int_maxExclusive001_1641 tokoe:valid" result="pass"/><test-case name="28863int_maxExclusive001_1641.i tokoe:invalid" result="pass"/><test-case name="28864int_maxExclusive002_1642 tokoe:valid" result="pass"/><test-case name="28865int_maxExclusive002_1642.i tokoe:invalid" result="pass"/><test-case name="28866int_maxExclusive003_1643 tokoe:valid" result="pass"/><test-case name="28867int_maxExclusive003_1643.v tokoe:valid" result="pass"/><test-case name="28868int_minInclusive001_1644 tokoe:valid" result="pass"/><test-case name="28869int_minInclusive001_1644.v tokoe:valid" result="pass"/><test-case name="28870int_minInclusive002_1645 tokoe:valid" result="pass"/><test-case name="28871int_minInclusive002_1645.i tokoe:invalid" result="pass"/><test-case name="28872int_minInclusive003_1646 tokoe:valid" result="pass"/><test-case name="28873int_minInclusive003_1646.v tokoe:valid" result="pass"/><test-case name="28874int_minInclusive004_1647 tokoe:valid" result="pass"/><test-case name="28875int_minInclusive004_1647.v tokoe:valid" result="pass"/><test-case name="28876int_minInclusive005_1648 tokoe:valid" result="pass"/><test-case name="28877int_minInclusive005_1648.v tokoe:valid" result="pass"/><test-case name="28878int_minExclusive001_1649 tokoe:valid" result="pass"/><test-case name="28879int_minExclusive001_1649.i tokoe:invalid" result="pass"/><test-case name="28880int_minExclusive002_1650 tokoe:valid" result="pass"/><test-case name="28881int_minExclusive002_1650.i tokoe:invalid" result="pass"/><test-case name="28882int_minExclusive003_1651 tokoe:valid" result="pass"/><test-case name="28883int_minExclusive003_1651.v tokoe:valid" result="pass"/><test-case name="28884int_minExclusive004_1652 tokoe:valid" result="pass"/><test-case name="28885int_minExclusive004_1652.v tokoe:valid" result="pass"/><test-case name="28886int_minExclusive005_1653 tokoe:valid" result="pass"/><test-case name="28887int_minExclusive005_1653.v tokoe:valid" result="pass"/><test-case name="28888int_totalDigits001_1654 tokoe:valid" result="pass"/><test-case name="28889int_totalDigits001_1654.i tokoe:invalid" result="pass"/><test-case name="28890int_totalDigits002_1655 tokoe:valid" result="pass"/><test-case name="28891int_totalDigits002_1655.v tokoe:valid" result="pass"/><test-case name="28892int_totalDigits003_1656 tokoe:valid" result="pass"/><test-case name="28893int_totalDigits003_1656.v tokoe:valid" result="pass"/><test-case name="28894test111092_1657 tokoe:valid" result="pass"/><test-case name="28895test111092_1657.i tokoe:invalid" result="pass"/><test-case name="28896short_pattern001_1658 tokoe:valid" result="pass"/><test-case name="28897short_pattern001_1658.v tokoe:valid" result="pass"/><test-case name="28898short_enumeration001_1659 tokoe:valid" result="pass"/><test-case name="28899short_enumeration001_1659.i tokoe:invalid" result="pass"/><test-case name="28900short_enumeration002_1660 tokoe:valid" result="pass"/><test-case name="28901short_enumeration002_1660.v tokoe:valid" result="pass"/><test-case name="28902short_enumeration003_1661 tokoe:valid" result="pass"/><test-case name="28903short_enumeration003_1661.i tokoe:invalid" result="pass"/><test-case name="28904short_enumeration004_1662 tokoe:valid" result="pass"/><test-case name="28905short_enumeration004_1662.v tokoe:valid" result="pass"/><test-case name="28906short_maxInclusive001_1663 tokoe:valid" result="pass"/><test-case name="28907short_maxInclusive001_1663.v tokoe:valid" result="pass"/><test-case name="28908short_maxInclusive002_1664 tokoe:valid" result="pass"/><test-case name="28909short_maxInclusive002_1664.i tokoe:invalid" result="pass"/><test-case name="28910short_maxInclusive003_1665 tokoe:valid" result="pass"/><test-case name="28911short_maxInclusive003_1665.v tokoe:valid" result="pass"/><test-case name="28912short_maxExclusive001_1666 tokoe:valid" result="pass"/><test-case name="28913short_maxExclusive001_1666.i tokoe:invalid" result="pass"/><test-case name="28914short_maxExclusive002_1667 tokoe:valid" result="pass"/><test-case name="28915short_maxExclusive002_1667.i tokoe:invalid" result="pass"/><test-case name="28916short_maxExclusive003_1668 tokoe:valid" result="pass"/><test-case name="28917short_maxExclusive003_1668.v tokoe:valid" result="pass"/><test-case name="28918short_minInclusive001_1669 tokoe:valid" result="pass"/><test-case name="28919short_minInclusive001_1669.v tokoe:valid" result="pass"/><test-case name="28920short_minInclusive002_1670 tokoe:valid" result="pass"/><test-case name="28921short_minInclusive002_1670.i tokoe:invalid" result="pass"/><test-case name="28922short_minInclusive003_1671 tokoe:valid" result="pass"/><test-case name="28923short_minInclusive003_1671.v tokoe:valid" result="pass"/><test-case name="28924short_minInclusive004_1672 tokoe:valid" result="pass"/><test-case name="28925short_minInclusive004_1672.v tokoe:valid" result="pass"/><test-case name="28926short_minInclusive005_1673 tokoe:valid" result="pass"/><test-case name="28927short_minInclusive005_1673.v tokoe:valid" result="pass"/><test-case name="28928short_minExclusive001_1674 tokoe:valid" result="pass"/><test-case name="28929short_minExclusive001_1674.i tokoe:invalid" result="pass"/><test-case name="28930short_minExclusive002_1675 tokoe:valid" result="pass"/><test-case name="28931short_minExclusive002_1675.i tokoe:invalid" result="pass"/><test-case name="28932short_minExclusive003_1676 tokoe:valid" result="pass"/><test-case name="28933short_minExclusive003_1676.v tokoe:valid" result="pass"/><test-case name="28934short_minExclusive004_1677 tokoe:valid" result="pass"/><test-case name="28935short_minExclusive004_1677.v tokoe:valid" result="pass"/><test-case name="28936short_minExclusive005_1678 tokoe:valid" result="pass"/><test-case name="28937short_minExclusive005_1678.v tokoe:valid" result="pass"/><test-case name="28938short_totalDigits001_1679 tokoe:valid" result="pass"/><test-case name="28939short_totalDigits001_1679.i tokoe:invalid" result="pass"/><test-case name="28940short_totalDigits002_1680 tokoe:valid" result="pass"/><test-case name="28941short_totalDigits002_1680.v tokoe:valid" result="pass"/><test-case name="28942short_totalDigits003_1681 tokoe:valid" result="pass"/><test-case name="28943short_totalDigits003_1681.v tokoe:valid" result="pass"/><test-case name="28944byte_pattern001_1682 tokoe:valid" result="pass"/><test-case name="28945byte_pattern001_1682.v tokoe:valid" result="pass"/><test-case name="28946byte_enumeration001_1683 tokoe:valid" result="pass"/><test-case name="28947byte_enumeration001_1683.i tokoe:invalid" result="pass"/><test-case name="28948byte_enumeration002_1684 tokoe:valid" result="pass"/><test-case name="28949byte_enumeration002_1684.v tokoe:valid" result="pass"/><test-case name="28950byte_enumeration003_1685 tokoe:valid" result="pass"/><test-case name="28951byte_enumeration003_1685.i tokoe:invalid" result="pass"/><test-case name="28952byte_enumeration004_1686 tokoe:valid" result="pass"/><test-case name="28953byte_enumeration004_1686.v tokoe:valid" result="pass"/><test-case name="28954byte_maxInclusive001_1687 tokoe:valid" result="pass"/><test-case name="28955byte_maxInclusive001_1687.v tokoe:valid" result="pass"/><test-case name="28956byte_maxInclusive002_1688 tokoe:valid" result="pass"/><test-case name="28957byte_maxInclusive002_1688.i tokoe:invalid" result="pass"/><test-case name="28958byte_maxInclusive003_1689 tokoe:valid" result="pass"/><test-case name="28959byte_maxInclusive003_1689.v tokoe:valid" result="pass"/><test-case name="28960byte_maxExclusive001_1690 tokoe:valid" result="pass"/><test-case name="28961byte_maxExclusive001_1690.i tokoe:invalid" result="pass"/><test-case name="28962byte_maxExclusive002_1691 tokoe:valid" result="pass"/><test-case name="28963byte_maxExclusive002_1691.i tokoe:invalid" result="pass"/><test-case name="28964byte_maxExclusive003_1692 tokoe:valid" result="pass"/><test-case name="28965byte_maxExclusive003_1692.v tokoe:valid" result="pass"/><test-case name="28966byte_minInclusive001_1693 tokoe:valid" result="pass"/><test-case name="28967byte_minInclusive001_1693.v tokoe:valid" result="pass"/><test-case name="28968byte_minInclusive002_1694 tokoe:valid" result="pass"/><test-case name="28969byte_minInclusive002_1694.i tokoe:invalid" result="pass"/><test-case name="28970byte_minInclusive003_1695 tokoe:valid" result="pass"/><test-case name="28971byte_minInclusive003_1695.v tokoe:valid" result="pass"/><test-case name="28972byte_minInclusive004_1696 tokoe:valid" result="pass"/><test-case name="28973byte_minInclusive004_1696.v tokoe:valid" result="pass"/><test-case name="28974byte_minInclusive005_1697 tokoe:valid" result="pass"/><test-case name="28975byte_minInclusive005_1697.v tokoe:valid" result="pass"/><test-case name="28976byte_minExclusive001_1698 tokoe:valid" result="pass"/><test-case name="28977byte_minExclusive001_1698.i tokoe:invalid" result="pass"/><test-case name="28978byte_minExclusive002_1699 tokoe:valid" result="pass"/><test-case name="28979byte_minExclusive002_1699.i tokoe:invalid" result="pass"/><test-case name="28980byte_minExclusive003_1700 tokoe:valid" result="pass"/><test-case name="28981byte_minExclusive003_1700.v tokoe:valid" result="pass"/><test-case name="28982byte_minExclusive004_1701 tokoe:valid" result="pass"/><test-case name="28983byte_minExclusive004_1701.v tokoe:valid" result="pass"/><test-case name="28984byte_minExclusive005_1702 tokoe:valid" result="pass"/><test-case name="28985byte_minExclusive005_1702.v tokoe:valid" result="pass"/><test-case name="28986byte_totalDigits001_1703 tokoe:valid" result="pass"/><test-case name="28987byte_totalDigits001_1703.i tokoe:invalid" result="pass"/><test-case name="28988byte_totalDigits002_1704 tokoe:valid" result="pass"/><test-case name="28989byte_totalDigits002_1704.v tokoe:valid" result="pass"/><test-case name="28990byte_totalDigits003_1705 tokoe:valid" result="pass"/><test-case name="28991byte_totalDigits003_1705.v tokoe:valid" result="pass"/><test-case name="28992nonNegativeInteger_pattern001_1706 tokoe:valid" result="pass"/><test-case name="28993nonNegativeInteger_pattern001_1706.v tokoe:valid" result="pass"/><test-case name="28994nonNegativeInteger_enumeration001_1707 tokoe:valid" result="pass"/><test-case name="28995nonNegativeInteger_enumeration001_1707.i tokoe:invalid" result="pass"/><test-case name="28996nonNegativeInteger_enumeration002_1708 tokoe:valid" result="pass"/><test-case name="28997nonNegativeInteger_enumeration002_1708.v tokoe:valid" result="pass"/><test-case name="28998nonNegativeInteger_enumeration003_1709 tokoe:valid" result="pass"/><test-case name="28999nonNegativeInteger_enumeration003_1709.i tokoe:invalid" result="pass"/><test-case name="29000nonNegativeInteger_enumeration004_1710 tokoe:valid" result="pass"/><test-case name="29001nonNegativeInteger_enumeration004_1710.v tokoe:valid" result="pass"/><test-case name="29002nonNegativeInteger_maxInclusive001_1711 tokoe:valid" result="pass"/><test-case name="29003nonNegativeInteger_maxInclusive001_1711.v tokoe:valid" result="pass"/><test-case name="29004nonNegativeInteger_maxInclusive002_1712 tokoe:valid" result="pass"/><test-case name="29005nonNegativeInteger_maxInclusive002_1712.i tokoe:invalid" result="pass"/><test-case name="29006nonNegativeInteger_maxInclusive003_1713 tokoe:valid" result="pass"/><test-case name="29007nonNegativeInteger_maxInclusive003_1713.v tokoe:valid" result="pass"/><test-case name="29008nonNegativeInteger_maxExclusive001_1714 tokoe:valid" result="pass"/><test-case name="29009nonNegativeInteger_maxExclusive001_1714.i tokoe:invalid" result="pass"/><test-case name="29010nonNegativeInteger_maxExclusive002_1715 tokoe:valid" result="pass"/><test-case name="29011nonNegativeInteger_maxExclusive002_1715.i tokoe:invalid" result="pass"/><test-case name="29012nonNegativeInteger_maxExclusive003_1716 tokoe:valid" result="pass"/><test-case name="29013nonNegativeInteger_maxExclusive003_1716.v tokoe:valid" result="pass"/><test-case name="29014nonNegativeInteger_minInclusive001_1717 tokoe:valid" result="pass"/><test-case name="29015nonNegativeInteger_minInclusive001_1717.v tokoe:valid" result="pass"/><test-case name="29016nonNegativeInteger_minInclusive002_1718 tokoe:valid" result="pass"/><test-case name="29017nonNegativeInteger_minInclusive002_1718.i tokoe:invalid" result="pass"/><test-case name="29018nonNegativeInteger_minInclusive003_1719 tokoe:valid" result="pass"/><test-case name="29019nonNegativeInteger_minInclusive003_1719.v tokoe:valid" result="pass"/><test-case name="29020nonNegativeInteger_minInclusive004_1720 tokoe:valid" result="pass"/><test-case name="29021nonNegativeInteger_minInclusive004_1720.v tokoe:valid" result="pass"/><test-case name="29022nonNegativeInteger_minInclusive005_1721 tokoe:valid" result="pass"/><test-case name="29023nonNegativeInteger_minInclusive005_1721.v tokoe:valid" result="pass"/><test-case name="29024nonNegativeInteger_minExclusive001_1722 tokoe:valid" result="pass"/><test-case name="29025nonNegativeInteger_minExclusive001_1722.i tokoe:invalid" result="pass"/><test-case name="29026nonNegativeInteger_minExclusive002_1723 tokoe:valid" result="pass"/><test-case name="29027nonNegativeInteger_minExclusive002_1723.i tokoe:invalid" result="pass"/><test-case name="29028nonNegativeInteger_minExclusive003_1724 tokoe:valid" result="pass"/><test-case name="29029nonNegativeInteger_minExclusive003_1724.v tokoe:valid" result="pass"/><test-case name="29030nonNegativeInteger_minExclusive004_1725 tokoe:valid" result="pass"/><test-case name="29031nonNegativeInteger_minExclusive004_1725.v tokoe:valid" result="pass"/><test-case name="29032nonNegativeInteger_minExclusive005_1726 tokoe:valid" result="pass"/><test-case name="29033nonNegativeInteger_minExclusive005_1726.v tokoe:valid" result="pass"/><test-case name="29034nonNegativeInteger_totalDigits001_1727 tokoe:valid" result="pass"/><test-case name="29035nonNegativeInteger_totalDigits001_1727.i tokoe:invalid" result="pass"/><test-case name="29036nonNegativeInteger_totalDigits002_1728 tokoe:valid" result="pass"/><test-case name="29037nonNegativeInteger_totalDigits002_1728.v tokoe:valid" result="pass"/><test-case name="29038nonNegativeInteger_totalDigits003_1729 tokoe:valid" result="pass"/><test-case name="29039nonNegativeInteger_totalDigits003_1729.v tokoe:valid" result="pass"/><test-case name="29040unsignedLong_pattern001_1730 tokoe:valid" result="pass"/><test-case name="29041unsignedLong_pattern001_1730.v tokoe:valid" result="pass"/><test-case name="29042unsignedLong_enumeration001_1731 tokoe:valid" result="pass"/><test-case name="29043unsignedLong_enumeration001_1731.i tokoe:invalid" result="pass"/><test-case name="29044unsignedLong_enumeration002_1732 tokoe:valid" result="pass"/><test-case name="29045unsignedLong_enumeration002_1732.v tokoe:valid" result="pass"/><test-case name="29046unsignedLong_enumeration003_1733 tokoe:valid" result="pass"/><test-case name="29047unsignedLong_enumeration003_1733.i tokoe:invalid" result="pass"/><test-case name="29048unsignedLong_enumeration004_1734 tokoe:valid" result="pass"/><test-case name="29049unsignedLong_enumeration004_1734.v tokoe:valid" result="pass"/><test-case name="29050unsignedLong_maxInclusive001_1735 tokoe:valid" result="pass"/><test-case name="29051unsignedLong_maxInclusive001_1735.v tokoe:valid" result="pass"/><test-case name="29052unsignedLong_maxInclusive002_1736 tokoe:valid" result="pass"/><test-case name="29053unsignedLong_maxInclusive002_1736.i tokoe:invalid" result="pass"/><test-case name="29054unsignedLong_maxInclusive003_1737 tokoe:valid" result="pass"/><test-case name="29055unsignedLong_maxInclusive003_1737.v tokoe:valid" result="pass"/><test-case name="29056unsignedLong_maxExclusive001_1738 tokoe:valid" result="pass"/><test-case name="29057unsignedLong_maxExclusive001_1738.i tokoe:invalid" result="pass"/><test-case name="29058unsignedLong_maxExclusive002_1739 tokoe:valid" result="pass"/><test-case name="29059unsignedLong_maxExclusive002_1739.i tokoe:invalid" result="pass"/><test-case name="29060unsignedLong_maxExclusive003_1740 tokoe:valid" result="pass"/><test-case name="29061unsignedLong_maxExclusive003_1740.v tokoe:valid" result="pass"/><test-case name="29062unsignedLong_minInclusive001_1741 tokoe:valid" result="pass"/><test-case name="29063unsignedLong_minInclusive001_1741.v tokoe:valid" result="pass"/><test-case name="29064unsignedLong_minInclusive002_1742 tokoe:valid" result="pass"/><test-case name="29065unsignedLong_minInclusive002_1742.i tokoe:invalid" result="pass"/><test-case name="29066unsignedLong_minInclusive003_1743 tokoe:valid" result="pass"/><test-case name="29067unsignedLong_minInclusive003_1743.v tokoe:valid" result="pass"/><test-case name="29068unsignedLong_minInclusive004_1744 tokoe:valid" result="pass"/><test-case name="29069unsignedLong_minInclusive004_1744.v tokoe:valid" result="pass"/><test-case name="29070unsignedLong_minInclusive005_1745 tokoe:valid" result="pass"/><test-case name="29071unsignedLong_minInclusive005_1745.v tokoe:valid" result="pass"/><test-case name="29072unsignedLong_minExclusive001_1746 tokoe:valid" result="pass"/><test-case name="29073unsignedLong_minExclusive001_1746.i tokoe:invalid" result="pass"/><test-case name="29074unsignedLong_minExclusive002_1747 tokoe:valid" result="pass"/><test-case name="29075unsignedLong_minExclusive002_1747.i tokoe:invalid" result="pass"/><test-case name="29076unsignedLong_minExclusive003_1748 tokoe:valid" result="pass"/><test-case name="29077unsignedLong_minExclusive003_1748.v tokoe:valid" result="pass"/><test-case name="29078unsignedLong_minExclusive004_1749 tokoe:valid" result="pass"/><test-case name="29079unsignedLong_minExclusive004_1749.v tokoe:valid" result="pass"/><test-case name="29080unsignedLong_minExclusive005_1750 tokoe:valid" result="pass"/><test-case name="29081unsignedLong_minExclusive005_1750.v tokoe:valid" result="pass"/><test-case name="29082unsignedLong_totalDigits001_1751 tokoe:valid" result="pass"/><test-case name="29083unsignedLong_totalDigits001_1751.i tokoe:invalid" result="pass"/><test-case name="29084unsignedLong_totalDigits002_1752 tokoe:valid" result="pass"/><test-case name="29085unsignedLong_totalDigits002_1752.v tokoe:valid" result="pass"/><test-case name="29086unsignedLong_totalDigits003_1753 tokoe:valid" result="pass"/><test-case name="29087unsignedLong_totalDigits003_1753.v tokoe:valid" result="pass"/><test-case name="29088unsignedInt_pattern001_1754 tokoe:valid" result="pass"/><test-case name="29089unsignedInt_pattern001_1754.v tokoe:valid" result="pass"/><test-case name="29090unsignedInt_enumeration001_1755 tokoe:valid" result="pass"/><test-case name="29091unsignedInt_enumeration001_1755.i tokoe:invalid" result="pass"/><test-case name="29092unsignedInt_enumeration002_1756 tokoe:valid" result="pass"/><test-case name="29093unsignedInt_enumeration002_1756.v tokoe:valid" result="pass"/><test-case name="29094unsignedInt_enumeration003_1757 tokoe:valid" result="pass"/><test-case name="29095unsignedInt_enumeration003_1757.i tokoe:invalid" result="pass"/><test-case name="29096unsignedInt_enumeration004_1758 tokoe:valid" result="pass"/><test-case name="29097unsignedInt_enumeration004_1758.v tokoe:valid" result="pass"/><test-case name="29098unsignedInt_maxInclusive001_1759 tokoe:valid" result="pass"/><test-case name="29099unsignedInt_maxInclusive001_1759.v tokoe:valid" result="pass"/><test-case name="29100unsignedInt_maxInclusive002_1760 tokoe:valid" result="pass"/><test-case name="29101unsignedInt_maxInclusive002_1760.i tokoe:invalid" result="pass"/><test-case name="29102unsignedInt_maxInclusive003_1761 tokoe:valid" result="pass"/><test-case name="29103unsignedInt_maxInclusive003_1761.v tokoe:valid" result="pass"/><test-case name="29104unsignedInt_maxExclusive001_1762 tokoe:valid" result="pass"/><test-case name="29105unsignedInt_maxExclusive001_1762.i tokoe:invalid" result="pass"/><test-case name="29106unsignedInt_maxExclusive002_1763 tokoe:valid" result="pass"/><test-case name="29107unsignedInt_maxExclusive002_1763.i tokoe:invalid" result="pass"/><test-case name="29108unsignedInt_maxExclusive003_1764 tokoe:valid" result="pass"/><test-case name="29109unsignedInt_maxExclusive003_1764.v tokoe:valid" result="pass"/><test-case name="29110unsignedInt_minInclusive001_1765 tokoe:valid" result="pass"/><test-case name="29111unsignedInt_minInclusive001_1765.v tokoe:valid" result="pass"/><test-case name="29112unsignedInt_minInclusive002_1766 tokoe:valid" result="pass"/><test-case name="29113unsignedInt_minInclusive002_1766.i tokoe:invalid" result="pass"/><test-case name="29114unsignedInt_minInclusive003_1767 tokoe:valid" result="pass"/><test-case name="29115unsignedInt_minInclusive003_1767.v tokoe:valid" result="pass"/><test-case name="29116unsignedInt_minInclusive004_1768 tokoe:valid" result="pass"/><test-case name="29117unsignedInt_minInclusive004_1768.v tokoe:valid" result="pass"/><test-case name="29118unsignedInt_minInclusive005_1769 tokoe:valid" result="pass"/><test-case name="29119unsignedInt_minInclusive005_1769.v tokoe:valid" result="pass"/><test-case name="29120unsignedInt_minExclusive001_1770 tokoe:valid" result="pass"/><test-case name="29121unsignedInt_minExclusive001_1770.i tokoe:invalid" result="pass"/><test-case name="29122unsignedInt_minExclusive002_1771 tokoe:valid" result="pass"/><test-case name="29123unsignedInt_minExclusive002_1771.i tokoe:invalid" result="pass"/><test-case name="29124unsignedInt_minExclusive003_1772 tokoe:valid" result="pass"/><test-case name="29125unsignedInt_minExclusive003_1772.v tokoe:valid" result="pass"/><test-case name="29126unsignedInt_minExclusive004_1773 tokoe:valid" result="pass"/><test-case name="29127unsignedInt_minExclusive004_1773.v tokoe:valid" result="pass"/><test-case name="29128unsignedInt_minExclusive005_1774 tokoe:valid" result="pass"/><test-case name="29129unsignedInt_minExclusive005_1774.v tokoe:valid" result="pass"/><test-case name="29130unsignedInt_totalDigits001_1775 tokoe:valid" result="pass"/><test-case name="29131unsignedInt_totalDigits001_1775.i tokoe:invalid" result="pass"/><test-case name="29132unsignedInt_totalDigits002_1776 tokoe:valid" result="pass"/><test-case name="29133unsignedInt_totalDigits002_1776.v tokoe:valid" result="pass"/><test-case name="29134unsignedInt_totalDigits003_1777 tokoe:valid" result="pass"/><test-case name="29135unsignedInt_totalDigits003_1777.v tokoe:valid" result="pass"/><test-case name="29136unsignedShort_pattern001_1778 tokoe:valid" result="pass"/><test-case name="29137unsignedShort_pattern001_1778.v tokoe:valid" result="pass"/><test-case name="29138unsignedShort_enumeration001_1779 tokoe:valid" result="pass"/><test-case name="29139unsignedShort_enumeration001_1779.i tokoe:invalid" result="pass"/><test-case name="29140unsignedShort_enumeration002_1780 tokoe:valid" result="pass"/><test-case name="29141unsignedShort_enumeration002_1780.v tokoe:valid" result="pass"/><test-case name="29142unsignedShort_enumeration003_1781 tokoe:valid" result="pass"/><test-case name="29143unsignedShort_enumeration003_1781.i tokoe:invalid" result="pass"/><test-case name="29144unsignedShort_enumeration004_1782 tokoe:valid" result="pass"/><test-case name="29145unsignedShort_enumeration004_1782.v tokoe:valid" result="pass"/><test-case name="29146unsignedShort_maxInclusive001_1783 tokoe:valid" result="pass"/><test-case name="29147unsignedShort_maxInclusive001_1783.v tokoe:valid" result="pass"/><test-case name="29148unsignedShort_maxInclusive002_1784 tokoe:valid" result="pass"/><test-case name="29149unsignedShort_maxInclusive002_1784.i tokoe:invalid" result="pass"/><test-case name="29150unsignedShort_maxInclusive003_1785 tokoe:valid" result="pass"/><test-case name="29151unsignedShort_maxInclusive003_1785.v tokoe:valid" result="pass"/><test-case name="29152unsignedShort_maxExclusive001_1786 tokoe:valid" result="pass"/><test-case name="29153unsignedShort_maxExclusive001_1786.i tokoe:invalid" result="pass"/><test-case name="29154unsignedShort_maxExclusive002_1787 tokoe:valid" result="pass"/><test-case name="29155unsignedShort_maxExclusive002_1787.i tokoe:invalid" result="pass"/><test-case name="29156unsignedShort_maxExclusive003_1788 tokoe:valid" result="pass"/><test-case name="29157unsignedShort_maxExclusive003_1788.v tokoe:valid" result="pass"/><test-case name="29158unsignedShort_minInclusive001_1789 tokoe:valid" result="pass"/><test-case name="29159unsignedShort_minInclusive001_1789.v tokoe:valid" result="pass"/><test-case name="29160unsignedShort_minInclusive002_1790 tokoe:valid" result="pass"/><test-case name="29161unsignedShort_minInclusive002_1790.i tokoe:invalid" result="pass"/><test-case name="29162unsignedShort_minInclusive003_1791 tokoe:valid" result="pass"/><test-case name="29163unsignedShort_minInclusive003_1791.v tokoe:valid" result="pass"/><test-case name="29164unsignedShort_minInclusive004_1792 tokoe:valid" result="pass"/><test-case name="29165unsignedShort_minInclusive004_1792.v tokoe:valid" result="pass"/><test-case name="29166unsignedShort_minInclusive005_1793 tokoe:valid" result="pass"/><test-case name="29167unsignedShort_minInclusive005_1793.v tokoe:valid" result="pass"/><test-case name="29168unsignedShort_minExclusive001_1794 tokoe:valid" result="pass"/><test-case name="29169unsignedShort_minExclusive001_1794.i tokoe:invalid" result="pass"/><test-case name="29170unsignedShort_minExclusive002_1795 tokoe:valid" result="pass"/><test-case name="29171unsignedShort_minExclusive002_1795.i tokoe:invalid" result="pass"/><test-case name="29172unsignedShort_minExclusive003_1796 tokoe:valid" result="pass"/><test-case name="29173unsignedShort_minExclusive003_1796.v tokoe:valid" result="pass"/><test-case name="29174unsignedShort_minExclusive004_1797 tokoe:valid" result="pass"/><test-case name="29175unsignedShort_minExclusive004_1797.v tokoe:valid" result="pass"/><test-case name="29176unsignedShort_minExclusive005_1798 tokoe:valid" result="pass"/><test-case name="29177unsignedShort_minExclusive005_1798.v tokoe:valid" result="pass"/><test-case name="29178unsignedShort_totalDigits001_1799 tokoe:valid" result="pass"/><test-case name="29179unsignedShort_totalDigits001_1799.i tokoe:invalid" result="pass"/><test-case name="29180unsignedShort_totalDigits002_1800 tokoe:valid" result="pass"/><test-case name="29181unsignedShort_totalDigits002_1800.v tokoe:valid" result="pass"/><test-case name="29182unsignedShort_totalDigits003_1801 tokoe:valid" result="pass"/><test-case name="29183unsignedShort_totalDigits003_1801.v tokoe:valid" result="pass"/><test-case name="29184unsignedByte_pattern001_1802 tokoe:valid" result="pass"/><test-case name="29185unsignedByte_pattern001_1802.v tokoe:valid" result="pass"/><test-case name="29186unsignedByte_enumeration001_1803 tokoe:valid" result="pass"/><test-case name="29187unsignedByte_enumeration001_1803.i tokoe:invalid" result="pass"/><test-case name="29188unsignedByte_enumeration002_1804 tokoe:valid" result="pass"/><test-case name="29189unsignedByte_enumeration002_1804.v tokoe:valid" result="pass"/><test-case name="29190unsignedByte_enumeration003_1805 tokoe:valid" result="pass"/><test-case name="29191unsignedByte_enumeration003_1805.i tokoe:invalid" result="pass"/><test-case name="29192unsignedByte_enumeration004_1806 tokoe:valid" result="pass"/><test-case name="29193unsignedByte_enumeration004_1806.v tokoe:valid" result="pass"/><test-case name="29194unsignedByte_maxInclusive001_1807 tokoe:valid" result="pass"/><test-case name="29195unsignedByte_maxInclusive001_1807.v tokoe:valid" result="pass"/><test-case name="29196unsignedByte_maxInclusive002_1808 tokoe:valid" result="pass"/><test-case name="29197unsignedByte_maxInclusive002_1808.i tokoe:invalid" result="pass"/><test-case name="29198unsignedByte_maxInclusive003_1809 tokoe:valid" result="pass"/><test-case name="29199unsignedByte_maxInclusive003_1809.v tokoe:valid" result="pass"/><test-case name="29200unsignedByte_maxExclusive001_1810 tokoe:valid" result="pass"/><test-case name="29201unsignedByte_maxExclusive001_1810.i tokoe:invalid" result="pass"/><test-case name="29202unsignedByte_maxExclusive002_1811 tokoe:valid" result="pass"/><test-case name="29203unsignedByte_maxExclusive002_1811.i tokoe:invalid" result="pass"/><test-case name="29204unsignedByte_maxExclusive003_1812 tokoe:valid" result="pass"/><test-case name="29205unsignedByte_maxExclusive003_1812.v tokoe:valid" result="pass"/><test-case name="29206unsignedByte_minInclusive001_1813 tokoe:valid" result="pass"/><test-case name="29207unsignedByte_minInclusive001_1813.v tokoe:valid" result="pass"/><test-case name="29208unsignedByte_minInclusive002_1814 tokoe:valid" result="pass"/><test-case name="29209unsignedByte_minInclusive002_1814.i tokoe:invalid" result="pass"/><test-case name="29210unsignedByte_minInclusive003_1815 tokoe:valid" result="pass"/><test-case name="29211unsignedByte_minInclusive003_1815.v tokoe:valid" result="pass"/><test-case name="29212unsignedByte_minInclusive004_1816 tokoe:valid" result="pass"/><test-case name="29213unsignedByte_minInclusive004_1816.v tokoe:valid" result="pass"/><test-case name="29214unsignedByte_minInclusive005_1817 tokoe:valid" result="pass"/><test-case name="29215unsignedByte_minInclusive005_1817.v tokoe:valid" result="pass"/><test-case name="29216unsignedByte_minExclusive001_1818 tokoe:valid" result="pass"/><test-case name="29217unsignedByte_minExclusive001_1818.i tokoe:invalid" result="pass"/><test-case name="29218unsignedByte_minExclusive002_1819 tokoe:valid" result="pass"/><test-case name="29219unsignedByte_minExclusive002_1819.i tokoe:invalid" result="pass"/><test-case name="29220unsignedByte_minExclusive003_1820 tokoe:valid" result="pass"/><test-case name="29221unsignedByte_minExclusive003_1820.v tokoe:valid" result="pass"/><test-case name="29222unsignedByte_minExclusive004_1821 tokoe:valid" result="pass"/><test-case name="29223unsignedByte_minExclusive004_1821.v tokoe:valid" result="pass"/><test-case name="29224unsignedByte_minExclusive005_1822 tokoe:valid" result="pass"/><test-case name="29225unsignedByte_minExclusive005_1822.v tokoe:valid" result="pass"/><test-case name="29226unsignedByte_totalDigits001_1823 tokoe:valid" result="pass"/><test-case name="29227unsignedByte_totalDigits001_1823.i tokoe:invalid" result="pass"/><test-case name="29228unsignedByte_totalDigits002_1824 tokoe:valid" result="pass"/><test-case name="29229unsignedByte_totalDigits002_1824.v tokoe:valid" result="pass"/><test-case name="29230unsignedByte_totalDigits003_1825 tokoe:valid" result="pass"/><test-case name="29231unsignedByte_totalDigits003_1825.v tokoe:valid" result="pass"/><test-case name="29232positiveInteger_pattern001_1826 tokoe:valid" result="pass"/><test-case name="29233positiveInteger_pattern001_1826.v tokoe:valid" result="pass"/><test-case name="29234positiveInteger_enumeration001_1827 tokoe:valid" result="pass"/><test-case name="29235positiveInteger_enumeration001_1827.i tokoe:invalid" result="pass"/><test-case name="29236positiveInteger_enumeration002_1828 tokoe:valid" result="pass"/><test-case name="29237positiveInteger_enumeration002_1828.v tokoe:valid" result="pass"/><test-case name="29238positiveInteger_enumeration003_1829 tokoe:valid" result="pass"/><test-case name="29239positiveInteger_enumeration003_1829.i tokoe:invalid" result="pass"/><test-case name="29240positiveInteger_enumeration004_1830 tokoe:valid" result="pass"/><test-case name="29241positiveInteger_enumeration004_1830.v tokoe:valid" result="pass"/><test-case name="29242positiveInteger_maxInclusive001_1831 tokoe:valid" result="pass"/><test-case name="29243positiveInteger_maxInclusive001_1831.v tokoe:valid" result="pass"/><test-case name="29244positiveInteger_maxInclusive002_1832 tokoe:valid" result="pass"/><test-case name="29245positiveInteger_maxInclusive002_1832.i tokoe:invalid" result="pass"/><test-case name="29246positiveInteger_maxInclusive003_1833 tokoe:valid" result="pass"/><test-case name="29247positiveInteger_maxInclusive003_1833.v tokoe:valid" result="pass"/><test-case name="29248positiveInteger_maxExclusive001_1834 tokoe:valid" result="fail"/><test-case name="29249positiveInteger_maxExclusive001_1834.i tokoe:invalid" result="pass"/><test-case name="29250positiveInteger_maxExclusive002_1835 tokoe:valid" result="fail"/><test-case name="29251positiveInteger_maxExclusive002_1835.i tokoe:invalid" result="pass"/><test-case name="29252positiveInteger_maxExclusive003_1836 tokoe:valid" result="pass"/><test-case name="29253positiveInteger_maxExclusive003_1836.v tokoe:valid" result="pass"/><test-case name="29254positiveInteger_minInclusive001_1837 tokoe:valid" result="pass"/><test-case name="29255positiveInteger_minInclusive001_1837.v tokoe:valid" result="pass"/><test-case name="29256positiveInteger_minInclusive002_1838 tokoe:valid" result="pass"/><test-case name="29257positiveInteger_minInclusive002_1838.i tokoe:invalid" result="pass"/><test-case name="29258positiveInteger_minInclusive003_1839 tokoe:valid" result="pass"/><test-case name="29259positiveInteger_minInclusive003_1839.v tokoe:valid" result="pass"/><test-case name="29260positiveInteger_minInclusive004_1840 tokoe:valid" result="pass"/><test-case name="29261positiveInteger_minInclusive004_1840.v tokoe:valid" result="pass"/><test-case name="29262positiveInteger_minInclusive005_1841 tokoe:valid" result="pass"/><test-case name="29263positiveInteger_minInclusive005_1841.v tokoe:valid" result="pass"/><test-case name="29264positiveInteger_minExclusive001_1842 tokoe:valid" result="pass"/><test-case name="29265positiveInteger_minExclusive001_1842.i tokoe:invalid" result="pass"/><test-case name="29266positiveInteger_minExclusive002_1843 tokoe:valid" result="pass"/><test-case name="29267positiveInteger_minExclusive002_1843.i tokoe:invalid" result="pass"/><test-case name="29268positiveInteger_minExclusive003_1844 tokoe:valid" result="pass"/><test-case name="29269positiveInteger_minExclusive003_1844.v tokoe:valid" result="pass"/><test-case name="29270positiveInteger_minExclusive004_1845 tokoe:valid" result="pass"/><test-case name="29271positiveInteger_minExclusive004_1845.v tokoe:valid" result="pass"/><test-case name="29272positiveInteger_minExclusive005_1846 tokoe:valid" result="pass"/><test-case name="29273positiveInteger_minExclusive005_1846.v tokoe:valid" result="pass"/><test-case name="29274positiveInteger_totalDigits001_1847 tokoe:valid" result="pass"/><test-case name="29275positiveInteger_totalDigits001_1847.i tokoe:invalid" result="pass"/><test-case name="29276positiveInteger_totalDigits002_1848 tokoe:valid" result="pass"/><test-case name="29277positiveInteger_totalDigits002_1848.v tokoe:valid" result="pass"/><test-case name="29278positiveInteger_totalDigits003_1849 tokoe:valid" result="pass"/><test-case name="29279positiveInteger_totalDigits003_1849.v tokoe:valid" result="pass"/><test-case name="29280list_minInclusive_1850 tokoe:invalid" result="pass"/><test-case name="29281string001_1851 tokoe:valid" result="pass"/><test-case name="29282string001_1851.v tokoe:valid" result="pass"/><test-case name="29283string002_1852 tokoe:valid" result="pass"/><test-case name="29284string002_1852.v tokoe:valid" result="pass"/><test-case name="29285string003_1853 tokoe:valid" result="pass"/><test-case name="29286string003_1853.v tokoe:valid" result="pass"/><test-case name="29287string004_1854 tokoe:valid" result="pass"/><test-case name="29288string004_1854.v tokoe:valid" result="pass"/><test-case name="29289string005_1855 tokoe:valid" result="pass"/><test-case name="29290string005_1855.v tokoe:valid" result="pass"/><test-case name="29291string006_1856 tokoe:valid" result="pass"/><test-case name="29292string006_1856.v tokoe:valid" result="pass"/><test-case name="29293boolean001_1857 tokoe:valid" result="pass"/><test-case name="29294boolean001_1857.i tokoe:invalid" result="pass"/><test-case name="29295boolean002_1858 tokoe:valid" result="pass"/><test-case name="29296boolean002_1858.v tokoe:valid" result="pass"/><test-case name="29297boolean003_1859 tokoe:valid" result="pass"/><test-case name="29298boolean003_1859.v tokoe:valid" result="pass"/><test-case name="29299boolean004_1860 tokoe:valid" result="pass"/><test-case name="29300boolean004_1860.v tokoe:valid" result="pass"/><test-case name="29301boolean005_1861 tokoe:valid" result="pass"/><test-case name="29302boolean005_1861.v tokoe:valid" result="pass"/><test-case name="29303boolean006_1862 tokoe:valid" result="pass"/><test-case name="29304boolean006_1862.i tokoe:invalid" result="pass"/><test-case name="29305boolean007_1863 tokoe:valid" result="pass"/><test-case name="29306boolean007_1863.i tokoe:invalid" result="pass"/><test-case name="29307boolean008_1864 tokoe:valid" result="pass"/><test-case name="29308boolean008_1864.i tokoe:invalid" result="pass"/><test-case name="29309boolean009_1865 tokoe:valid" result="pass"/><test-case name="29310boolean009_1865.i tokoe:invalid" result="pass"/><test-case name="29311boolean010_1866 tokoe:valid" result="pass"/><test-case name="29312boolean010_1866.i tokoe:invalid" result="pass"/><test-case name="29313boolean011_1867 tokoe:valid" result="pass"/><test-case name="29314boolean011_1867.i tokoe:invalid" result="pass"/><test-case name="29315boolean012_1868 tokoe:valid" result="pass"/><test-case name="29316boolean012_1868.i tokoe:invalid" result="pass"/><test-case name="29317boolean013_1869 tokoe:valid" result="pass"/><test-case name="29318boolean013_1869.i tokoe:invalid" result="pass"/><test-case name="29319boolean014_1870 tokoe:valid" result="pass"/><test-case name="29320boolean014_1870.i tokoe:invalid" result="pass"/><test-case name="29321boolean015_1871 tokoe:valid" result="pass"/><test-case name="29322boolean015_1871.i tokoe:invalid" result="pass"/><test-case name="29323boolean016_1872 tokoe:valid" result="pass"/><test-case name="29324boolean016_1872.i tokoe:invalid" result="pass"/><test-case name="29325boolean017_1873 tokoe:valid" result="pass"/><test-case name="29326boolean017_1873.i tokoe:invalid" result="pass"/><test-case name="29327boolean018_1874 tokoe:valid" result="pass"/><test-case name="29328boolean018_1874.v tokoe:valid" result="pass"/><test-case name="29329decimal001_1875 tokoe:valid" result="pass"/><test-case name="29330decimal001_1875.i tokoe:invalid" result="pass"/><test-case name="29331decimal002_1876 tokoe:valid" result="pass"/><test-case name="29332decimal002_1876.v tokoe:valid" result="pass"/><test-case name="29333decimal003_1877 tokoe:valid" result="pass"/><test-case name="29334decimal003_1877.v tokoe:valid" result="pass"/><test-case name="29335decimal004_1878 tokoe:valid" result="pass"/><test-case name="29336decimal004_1878.v tokoe:valid" result="pass"/><test-case name="29337decimal005_1879 tokoe:valid" result="pass"/><test-case name="29338decimal005_1879.v tokoe:valid" result="pass"/><test-case name="29339decimal006_1880 tokoe:valid" result="pass"/><test-case name="29340decimal006_1880.v tokoe:valid" result="pass"/><test-case name="29341decimal007_1881 tokoe:valid" result="pass"/><test-case name="29342decimal007_1881.v tokoe:valid" result="pass"/><test-case name="29343decimal008_1882 tokoe:valid" result="pass"/><test-case name="29344decimal008_1882.v tokoe:valid" result="pass"/><test-case name="29345decimal009_1883 tokoe:valid" result="pass"/><test-case name="29346decimal009_1883.v tokoe:valid" result="pass"/><test-case name="29347decimal010_1884 tokoe:valid" result="pass"/><test-case name="29348decimal010_1884.v tokoe:valid" result="pass"/><test-case name="29349decimal011_1885 tokoe:valid" result="pass"/><test-case name="29350decimal011_1885.v tokoe:valid" result="pass"/><test-case name="29351decimal012_1886 tokoe:valid" result="pass"/><test-case name="29352decimal012_1886.v tokoe:valid" result="pass"/><test-case name="29353decimal013_1887 tokoe:valid" result="pass"/><test-case name="29354decimal013_1887.v tokoe:valid" result="pass"/><test-case name="29355decimal014_1888 tokoe:valid" result="pass"/><test-case name="29356decimal014_1888.v tokoe:valid" result="pass"/><test-case name="29357decimal015_1889 tokoe:valid" result="pass"/><test-case name="29358decimal015_1889.v tokoe:valid" result="pass"/><test-case name="29359decimal016_1890 tokoe:valid" result="pass"/><test-case name="29360decimal016_1890.v tokoe:valid" result="pass"/><test-case name="29361decimal017_1891 tokoe:valid" result="pass"/><test-case name="29362decimal017_1891.i tokoe:invalid" result="pass"/><test-case name="29363decimal018_1892 tokoe:valid" result="pass"/><test-case name="29364decimal018_1892.i tokoe:invalid" result="pass"/><test-case name="29365decimal019_1893 tokoe:valid" result="pass"/><test-case name="29366decimal019_1893.i tokoe:invalid" result="pass"/><test-case name="29367decimal020_1894 tokoe:valid" result="pass"/><test-case name="29368decimal020_1894.i tokoe:invalid" result="pass"/><test-case name="29369decimal021_1895 tokoe:valid" result="pass"/><test-case name="29370decimal021_1895.i tokoe:invalid" result="pass"/><test-case name="29371decimal022_1896 tokoe:valid" result="pass"/><test-case name="29372decimal022_1896.i tokoe:invalid" result="pass"/><test-case name="29373decimal023_1897 tokoe:valid" result="pass"/><test-case name="29374decimal023_1897.i tokoe:invalid" result="pass"/><test-case name="29375decimal024_1898 tokoe:valid" result="pass"/><test-case name="29376decimal024_1898.i tokoe:invalid" result="pass"/><test-case name="29377decimal025_1899 tokoe:valid" result="pass"/><test-case name="29378decimal025_1899.i tokoe:invalid" result="pass"/><test-case name="29379float001_1900 tokoe:valid" result="pass"/><test-case name="29380float001_1900.i tokoe:invalid" result="pass"/><test-case name="29381float002_1901 tokoe:valid" result="pass"/><test-case name="29382float002_1901.v tokoe:valid" result="pass"/><test-case name="29383float003_1902 tokoe:valid" result="pass"/><test-case name="29384float003_1902.v tokoe:valid" result="pass"/><test-case name="29385float004_1903 tokoe:valid" result="pass"/><test-case name="29386float004_1903.v tokoe:valid" result="pass"/><test-case name="29387float005_1904 tokoe:valid" result="pass"/><test-case name="29388float005_1904.v tokoe:valid" result="pass"/><test-case name="29389float006_1905 tokoe:valid" result="pass"/><test-case name="29390float006_1905.v tokoe:valid" result="pass"/><test-case name="29391float007_1906 tokoe:valid" result="pass"/><test-case name="29392float007_1906.v tokoe:valid" result="pass"/><test-case name="29393float008_1907 tokoe:valid" result="pass"/><test-case name="29394float008_1907.v tokoe:valid" result="pass"/><test-case name="29395float009_1908 tokoe:valid" result="pass"/><test-case name="29396float009_1908.v tokoe:valid" result="pass"/><test-case name="29397float010_1909 tokoe:valid" result="pass"/><test-case name="29398float010_1909.v tokoe:valid" result="pass"/><test-case name="29399float011_1910 tokoe:valid" result="pass"/><test-case name="29400float011_1910.v tokoe:valid" result="pass"/><test-case name="29401float012_1911 tokoe:valid" result="pass"/><test-case name="29402float012_1911.v tokoe:valid" result="pass"/><test-case name="29403float013_1912 tokoe:valid" result="pass"/><test-case name="29404float013_1912.v tokoe:valid" result="pass"/><test-case name="29405float014_1913 tokoe:valid" result="pass"/><test-case name="29406float014_1913.v tokoe:valid" result="pass"/><test-case name="29407float015_1914 tokoe:valid" result="pass"/><test-case name="29408float015_1914.i tokoe:invalid" result="pass"/><test-case name="29409float016_1915 tokoe:valid" result="pass"/><test-case name="29410float016_1915.i tokoe:invalid" result="pass"/><test-case name="29411float017_1916 tokoe:valid" result="pass"/><test-case name="29412float017_1916.v tokoe:valid" result="pass"/><test-case name="29413float018_1917 tokoe:valid" result="pass"/><test-case name="29414float018_1917.i tokoe:invalid" result="pass"/><test-case name="29415float019_1918 tokoe:valid" result="pass"/><test-case name="29416float019_1918.v tokoe:valid" result="pass"/><test-case name="29417float020_1919 tokoe:valid" result="pass"/><test-case name="29418float020_1919.v tokoe:valid" result="pass"/><test-case name="29419float021_1920 tokoe:valid" result="pass"/><test-case name="29420float021_1920.v tokoe:valid" result="pass"/><test-case name="29421float022_1921 tokoe:valid" result="pass"/><test-case name="29422float022_1921.i tokoe:invalid" result="pass"/><test-case name="29423float023_1922 tokoe:valid" result="pass"/><test-case name="29424float023_1922.i tokoe:invalid" result="pass"/><test-case name="29425float024_1923 tokoe:valid" result="pass"/><test-case name="29426float024_1923.i tokoe:invalid" result="pass"/><test-case name="29427float025_1924 tokoe:valid" result="pass"/><test-case name="29428float025_1924.i tokoe:invalid" result="pass"/><test-case name="29429float026_1925 tokoe:valid" result="pass"/><test-case name="29430float026_1925.i tokoe:invalid" result="pass"/><test-case name="29431float027_1926 tokoe:valid" result="pass"/><test-case name="29432float027_1926.i tokoe:invalid" result="pass"/><test-case name="29433float028_1927 tokoe:valid" result="pass"/><test-case name="29434float028_1927.v tokoe:valid" result="pass"/><test-case name="29435float029_1928 tokoe:valid" result="pass"/><test-case name="29436float029_1928.v tokoe:valid" result="pass"/><test-case name="29437float030_1929 tokoe:valid" result="pass"/><test-case name="29438float030_1929.v tokoe:valid" result="pass"/><test-case name="29439float031_1930 tokoe:valid" result="pass"/><test-case name="29440float031_1930.v tokoe:valid" result="pass"/><test-case name="29441float032_1931 tokoe:valid" result="pass"/><test-case name="29442float032_1931.v tokoe:valid" result="pass"/><test-case name="29443float033_1932 tokoe:valid" result="pass"/><test-case name="29444float033_1932.v tokoe:valid" result="pass"/><test-case name="29445float034_1933 tokoe:valid" result="pass"/><test-case name="29446float034_1933.v tokoe:valid" result="pass"/><test-case name="29447float035_1934 tokoe:valid" result="pass"/><test-case name="29448float035_1934.i tokoe:invalid" result="pass"/><test-case name="29449float036_1935 tokoe:valid" result="pass"/><test-case name="29450float036_1935.i tokoe:invalid" result="pass"/><test-case name="29451float037_1936 tokoe:valid" result="pass"/><test-case name="29452float037_1936.i tokoe:invalid" result="pass"/><test-case name="29453float038_1937 tokoe:valid" result="pass"/><test-case name="29454float038_1937.v tokoe:valid" result="pass"/><test-case name="29455float039_1938 tokoe:valid" result="pass"/><test-case name="29456float039_1938.v tokoe:valid" result="pass"/><test-case name="29457double001_1939 tokoe:valid" result="pass"/><test-case name="29458double001_1939.i tokoe:invalid" result="pass"/><test-case name="29459double002_1940 tokoe:valid" result="pass"/><test-case name="29460double002_1940.v tokoe:valid" result="pass"/><test-case name="29461double003_1941 tokoe:valid" result="pass"/><test-case name="29462double003_1941.v tokoe:valid" result="pass"/><test-case name="29463double004_1942 tokoe:valid" result="pass"/><test-case name="29464double004_1942.v tokoe:valid" result="pass"/><test-case name="29465double005_1943 tokoe:valid" result="pass"/><test-case name="29466double005_1943.v tokoe:valid" result="pass"/><test-case name="29467double006_1944 tokoe:valid" result="pass"/><test-case name="29468double006_1944.v tokoe:valid" result="pass"/><test-case name="29469double007_1945 tokoe:valid" result="pass"/><test-case name="29470double007_1945.v tokoe:valid" result="pass"/><test-case name="29471double008_1946 tokoe:valid" result="pass"/><test-case name="29472double008_1946.v tokoe:valid" result="pass"/><test-case name="29473double009_1947 tokoe:valid" result="pass"/><test-case name="29474double009_1947.v tokoe:valid" result="pass"/><test-case name="29475double010_1948 tokoe:valid" result="pass"/><test-case name="29476double010_1948.v tokoe:valid" result="pass"/><test-case name="29477double011_1949 tokoe:valid" result="pass"/><test-case name="29478double011_1949.v tokoe:valid" result="pass"/><test-case name="29479double012_1950 tokoe:valid" result="pass"/><test-case name="29480double012_1950.v tokoe:valid" result="pass"/><test-case name="29481double013_1951 tokoe:valid" result="pass"/><test-case name="29482double013_1951.v tokoe:valid" result="pass"/><test-case name="29483double014_1952 tokoe:valid" result="pass"/><test-case name="29484double014_1952.v tokoe:valid" result="pass"/><test-case name="29485double015_1953 tokoe:valid" result="pass"/><test-case name="29486double015_1953.i tokoe:invalid" result="pass"/><test-case name="29487double016_1954 tokoe:valid" result="pass"/><test-case name="29488double016_1954.i tokoe:invalid" result="pass"/><test-case name="29489double017_1955 tokoe:valid" result="pass"/><test-case name="29490double017_1955.v tokoe:valid" result="pass"/><test-case name="29491double018_1956 tokoe:valid" result="pass"/><test-case name="29492double018_1956.i tokoe:invalid" result="pass"/><test-case name="29493double019_1957 tokoe:valid" result="pass"/><test-case name="29494double019_1957.v tokoe:valid" result="pass"/><test-case name="29495double020_1958 tokoe:valid" result="pass"/><test-case name="29496double020_1958.v tokoe:valid" result="pass"/><test-case name="29497double021_1959 tokoe:valid" result="pass"/><test-case name="29498double021_1959.v tokoe:valid" result="pass"/><test-case name="29499double022_1960 tokoe:valid" result="pass"/><test-case name="29500double022_1960.i tokoe:invalid" result="pass"/><test-case name="29501double023_1961 tokoe:valid" result="pass"/><test-case name="29502double023_1961.i tokoe:invalid" result="pass"/><test-case name="29503double024_1962 tokoe:valid" result="pass"/><test-case name="29504double024_1962.i tokoe:invalid" result="pass"/><test-case name="29505double025_1963 tokoe:valid" result="pass"/><test-case name="29506double025_1963.i tokoe:invalid" result="pass"/><test-case name="29507double026_1964 tokoe:valid" result="pass"/><test-case name="29508double026_1964.i tokoe:invalid" result="pass"/><test-case name="29509double027_1965 tokoe:valid" result="pass"/><test-case name="29510double027_1965.v tokoe:valid" result="pass"/><test-case name="29511double028_1966 tokoe:valid" result="pass"/><test-case name="29512double028_1966.v tokoe:valid" result="pass"/><test-case name="29513double029_1967 tokoe:valid" result="pass"/><test-case name="29514double029_1967.i tokoe:invalid" result="pass"/><test-case name="29515double030_1968 tokoe:valid" result="pass"/><test-case name="29516double030_1968.v tokoe:valid" result="pass"/><test-case name="29517duration001_1969 tokoe:valid" result="pass"/><test-case name="29518duration001_1969.i tokoe:invalid" result="pass"/><test-case name="29519duration002_1970 tokoe:valid" result="pass"/><test-case name="29520duration002_1970.v tokoe:valid" result="pass"/><test-case name="29521duration003_1971 tokoe:valid" result="pass"/><test-case name="29522duration003_1971.v tokoe:valid" result="pass"/><test-case name="29523duration004_1972 tokoe:valid" result="pass"/><test-case name="29524duration004_1972.v tokoe:valid" result="pass"/><test-case name="29525duration005_1973 tokoe:valid" result="pass"/><test-case name="29526duration005_1973.v tokoe:valid" result="pass"/><test-case name="29527duration006_1974 tokoe:valid" result="pass"/><test-case name="29528duration006_1974.v tokoe:valid" result="pass"/><test-case name="29529duration007_1975 tokoe:valid" result="pass"/><test-case name="29530duration007_1975.v tokoe:valid" result="pass"/><test-case name="29531duration008_1976 tokoe:valid" result="pass"/><test-case name="29532duration008_1976.i tokoe:invalid" result="pass"/><test-case name="29533duration009_1977 tokoe:valid" result="pass"/><test-case name="29534duration009_1977.v tokoe:valid" result="pass"/><test-case name="29535duration010_1978 tokoe:valid" result="pass"/><test-case name="29536duration010_1978.i tokoe:invalid" result="pass"/><test-case name="29537duration011_1979 tokoe:valid" result="pass"/><test-case name="29538duration011_1979.i tokoe:invalid" result="pass"/><test-case name="29539duration012_1980 tokoe:valid" result="pass"/><test-case name="29540duration012_1980.v tokoe:valid" result="pass"/><test-case name="29541duration013_1981 tokoe:valid" result="pass"/><test-case name="29542duration013_1981.i tokoe:invalid" result="pass"/><test-case name="29543duration014_1982 tokoe:valid" result="pass"/><test-case name="29544duration014_1982.v tokoe:valid" result="pass"/><test-case name="29545duration015_1983 tokoe:valid" result="pass"/><test-case name="29546duration015_1983.i tokoe:invalid" result="pass"/><test-case name="29547duration016_1984 tokoe:valid" result="pass"/><test-case name="29548duration016_1984.v tokoe:valid" result="pass"/><test-case name="29549duration017_1985 tokoe:valid" result="pass"/><test-case name="29550duration017_1985.v tokoe:valid" result="pass"/><test-case name="29551duration018_1986 tokoe:valid" result="pass"/><test-case name="29552duration018_1986.v tokoe:valid" result="pass"/><test-case name="29553duration019_1987 tokoe:valid" result="pass"/><test-case name="29554duration019_1987.v tokoe:valid" result="pass"/><test-case name="29555duration020_1988 tokoe:valid" result="pass"/><test-case name="29556duration020_1988.v tokoe:valid" result="pass"/><test-case name="29557duration021_1989 tokoe:valid" result="pass"/><test-case name="29558duration021_1989.i tokoe:invalid" result="pass"/><test-case name="29559duration022_1990 tokoe:valid" result="pass"/><test-case name="29560duration022_1990.v tokoe:valid" result="pass"/><test-case name="29561duration023_1991 tokoe:valid" result="pass"/><test-case name="29562duration023_1991.v tokoe:valid" result="pass"/><test-case name="29563duration024_1992 tokoe:valid" result="pass"/><test-case name="29564duration024_1992.v tokoe:valid" result="pass"/><test-case name="29565duration025_1993 tokoe:valid" result="pass"/><test-case name="29566duration025_1993.v tokoe:valid" result="pass"/><test-case name="29567duration026_1994 tokoe:valid" result="pass"/><test-case name="29568duration026_1994.v tokoe:valid" result="pass"/><test-case name="29569duration027_1995 tokoe:valid" result="pass"/><test-case name="29570duration027_1995.v tokoe:valid" result="pass"/><test-case name="29571duration028_1996 tokoe:valid" result="pass"/><test-case name="29572duration028_1996.i tokoe:invalid" result="pass"/><test-case name="29573duration029_1997 tokoe:valid" result="pass"/><test-case name="29574duration029_1997.i tokoe:invalid" result="pass"/><test-case name="29575duration030_1998 tokoe:valid" result="pass"/><test-case name="29576duration030_1998.i tokoe:invalid" result="pass"/><test-case name="29577dateTime001_1999 tokoe:valid" result="pass"/><test-case name="29578dateTime001_1999.i tokoe:invalid" result="pass"/><test-case name="29579dateTime002_2000 tokoe:valid" result="pass"/><test-case name="29580dateTime002_2000.v tokoe:valid" result="pass"/><test-case name="29581dateTime003_2001 tokoe:valid" result="pass"/><test-case name="29582dateTime003_2001.v tokoe:valid" result="pass"/><test-case name="29583dateTime004_2002 tokoe:valid" result="pass"/><test-case name="29584dateTime004_2002.i tokoe:invalid" result="pass"/><test-case name="29585dateTime005_2003 tokoe:valid" result="pass"/><test-case name="29586dateTime005_2003.v tokoe:valid" result="pass"/><test-case name="29587dateTime006_2004 tokoe:valid" result="pass"/><test-case name="29588dateTime006_2004.v tokoe:valid" result="pass"/><test-case name="29589dateTime007_2005 tokoe:valid" result="pass"/><test-case name="29590dateTime007_2005.v tokoe:valid" result="pass"/><test-case name="29591dateTime008_2006 tokoe:valid" result="pass"/><test-case name="29592dateTime008_2006.v tokoe:valid" result="pass"/><test-case name="29593dateTime010_2007 tokoe:valid" result="pass"/><test-case name="29594dateTime010_2007.v tokoe:valid" result="pass"/><test-case name="29595dateTime011_2008 tokoe:valid" result="pass"/><test-case name="29596dateTime011_2008.i tokoe:invalid" result="pass"/><test-case name="29597dateTime013_2009 tokoe:valid" result="pass"/><test-case name="29598dateTime013_2009.i tokoe:invalid" result="pass"/><test-case name="29599time001_2010 tokoe:valid" result="pass"/><test-case name="29600time001_2010.i tokoe:invalid" result="pass"/><test-case name="29601time002_2011 tokoe:valid" result="pass"/><test-case name="29602time002_2011.i tokoe:invalid" result="pass"/><test-case name="29603time003_2012 tokoe:valid" result="pass"/><test-case name="29604time003_2012.i tokoe:invalid" result="pass"/><test-case name="29605time004_2013 tokoe:valid" result="pass"/><test-case name="29606time004_2013.v tokoe:valid" result="pass"/><test-case name="29607time005_2014 tokoe:valid" result="pass"/><test-case name="29608time005_2014.v tokoe:valid" result="pass"/><test-case name="29609time006_2015 tokoe:valid" result="pass"/><test-case name="29610time006_2015.v tokoe:valid" result="pass"/><test-case name="29611time007_2016 tokoe:valid" result="pass"/><test-case name="29612time007_2016.v tokoe:valid" result="pass"/><test-case name="29613time008_2017 tokoe:valid" result="pass"/><test-case name="29614time008_2017.v tokoe:valid" result="pass"/><test-case name="29615time009_2018 tokoe:valid" result="pass"/><test-case name="29616time009_2018.v tokoe:valid" result="pass"/><test-case name="29617time011_2019 tokoe:valid" result="pass"/><test-case name="29618time011_2019.v tokoe:valid" result="pass"/><test-case name="29619time012_2020 tokoe:valid" result="pass"/><test-case name="29620time012_2020.v tokoe:valid" result="pass"/><test-case name="29621time013_2021 tokoe:valid" result="pass"/><test-case name="29622time013_2021.v tokoe:valid" result="pass"/><test-case name="29623time014_2022 tokoe:valid" result="pass"/><test-case name="29624time014_2022.i tokoe:invalid" result="pass"/><test-case name="29625time015_2023 tokoe:valid" result="pass"/><test-case name="29626time015_2023.i tokoe:invalid" result="pass"/><test-case name="29627time016_2024 tokoe:valid" result="pass"/><test-case name="29628time016_2024.i tokoe:invalid" result="pass"/><test-case name="29629time017_2025 tokoe:valid" result="pass"/><test-case name="29630time017_2025.i tokoe:invalid" result="pass"/><test-case name="29631time018_2026 tokoe:valid" result="pass"/><test-case name="29632time018_2026.i tokoe:invalid" result="pass"/><test-case name="29633time019_2027 tokoe:valid" result="pass"/><test-case name="29634time019_2027.i tokoe:invalid" result="pass"/><test-case name="29635time020_2028 tokoe:valid" result="pass"/><test-case name="29636time020_2028.i tokoe:invalid" result="pass"/><test-case name="29637time021_2029 tokoe:valid" result="pass"/><test-case name="29638time021_2029.i tokoe:invalid" result="pass"/><test-case name="29639time022_2030 tokoe:valid" result="pass"/><test-case name="29640time022_2030.i tokoe:invalid" result="pass"/><test-case name="29641date001_2031 tokoe:valid" result="pass"/><test-case name="29642date001_2031.i tokoe:invalid" result="pass"/><test-case name="29643date002_2032 tokoe:valid" result="pass"/><test-case name="29644date002_2032.v tokoe:valid" result="pass"/><test-case name="29645date003_2033 tokoe:valid" result="pass"/><test-case name="29646date003_2033.i tokoe:invalid" result="pass"/><test-case name="29647date004_2034 tokoe:valid" result="pass"/><test-case name="29648date004_2034.i tokoe:invalid" result="pass"/><test-case name="29649date005_2035 tokoe:valid" result="pass"/><test-case name="29650date005_2035.v tokoe:valid" result="pass"/><test-case name="29651date006_2036 tokoe:valid" result="pass"/><test-case name="29652date006_2036.i tokoe:invalid" result="pass"/><test-case name="29653date009_2037 tokoe:valid" result="pass"/><test-case name="29654date009_2037.i tokoe:invalid" result="pass"/><test-case name="29655date010_2038 tokoe:valid" result="pass"/><test-case name="29656date010_2038.v tokoe:valid" result="pass"/><test-case name="29657date011_2039 tokoe:valid" result="pass"/><test-case name="29658date011_2039.i tokoe:invalid" result="pass"/><test-case name="29659gYearMonth001_2040 tokoe:valid" result="pass"/><test-case name="29660gYearMonth001_2040.i tokoe:invalid" result="pass"/><test-case name="29661gYearMonth002_2041 tokoe:valid" result="pass"/><test-case name="29662gYearMonth002_2041.v tokoe:valid" result="pass"/><test-case name="29663gYearMonth003_2042 tokoe:valid" result="pass"/><test-case name="29664gYearMonth003_2042.v tokoe:valid" result="pass"/><test-case name="29665gYearMonth004_2043 tokoe:valid" result="pass"/><test-case name="29666gYearMonth004_2043.i tokoe:invalid" result="pass"/><test-case name="29667gYearMonth006_2044 tokoe:valid" result="pass"/><test-case name="29668gYearMonth006_2044.i tokoe:invalid" result="pass"/><test-case name="29669gYear001_2045 tokoe:valid" result="pass"/><test-case name="29670gYear001_2045.i tokoe:invalid" result="pass"/><test-case name="29671gYear002_2046 tokoe:valid" result="pass"/><test-case name="29672gYear002_2046.v tokoe:valid" result="pass"/><test-case name="29673gYear005_2047 tokoe:valid" result="pass"/><test-case name="29674gYear005_2047.i tokoe:invalid" result="pass"/><test-case name="29675gYear006_2048 tokoe:valid" result="pass"/><test-case name="29676gYear006_2048.v tokoe:valid" result="pass"/><test-case name="29677gMonthDay001_2049 tokoe:valid" result="pass"/><test-case name="29678gMonthDay001_2049.i tokoe:invalid" result="pass"/><test-case name="29679gMonthDay002_2050 tokoe:valid" result="pass"/><test-case name="29680gMonthDay002_2050.v tokoe:valid" result="pass"/><test-case name="29681gMonthDay003_2051 tokoe:valid" result="pass"/><test-case name="29682gMonthDay003_2051.v tokoe:valid" result="pass"/><test-case name="29683gMonthDay004_2052 tokoe:valid" result="pass"/><test-case name="29684gMonthDay004_2052.v tokoe:valid" result="pass"/><test-case name="29685gMonthDay005_2053 tokoe:valid" result="pass"/><test-case name="29686gMonthDay005_2053.i tokoe:invalid" result="pass"/><test-case name="29687gMonthDay006_2054 tokoe:valid" result="pass"/><test-case name="29688gMonthDay006_2054.i tokoe:invalid" result="pass"/><test-case name="29689gDay001_2055 tokoe:valid" result="pass"/><test-case name="29690gDay001_2055.v tokoe:valid" result="pass"/><test-case name="29691gDay002_2056 tokoe:valid" result="pass"/><test-case name="29692gDay002_2056.v tokoe:valid" result="pass"/><test-case name="29693gDay003_2057 tokoe:valid" result="pass"/><test-case name="29694gDay003_2057.v tokoe:valid" result="pass"/><test-case name="29695gDay004_2058 tokoe:valid" result="pass"/><test-case name="29696gDay004_2058.i tokoe:invalid" result="pass"/><test-case name="29697gDay005_2059 tokoe:valid" result="pass"/><test-case name="29698gDay005_2059.i tokoe:invalid" result="pass"/><test-case name="29699gMonth001_2060 tokoe:valid" result="pass"/><test-case name="29700gMonth001_2060.i tokoe:invalid" result="pass"/><test-case name="29701gMonth002_2061 tokoe:valid" result="pass"/><test-case name="29702gMonth002_2061.v tokoe:valid" result="fail"/><test-case name="29703gMonth003_2062 tokoe:valid" result="pass"/><test-case name="29704gMonth003_2062.i tokoe:invalid" result="pass"/><test-case name="29705gMonth004_2063 tokoe:valid" result="pass"/><test-case name="29706gMonth004_2063.v tokoe:valid" result="fail"/><test-case name="29707gMonth005_2064 tokoe:valid" result="pass"/><test-case name="29708gMonth005_2064.i tokoe:invalid" result="pass"/><test-case name="29709gMonth006_2065 tokoe:valid" result="pass"/><test-case name="29710gMonth006_2065.i tokoe:invalid" result="pass"/><test-case name="29711gMonth007_2066 tokoe:valid" result="pass"/><test-case name="29712gMonth007_2066.i tokoe:invalid" result="pass"/><test-case name="29713hexBinary001_2067 tokoe:valid" result="pass"/><test-case name="29714hexBinary001_2067.v tokoe:valid" result="pass"/><test-case name="29715hexBinary002_2068 tokoe:valid" result="pass"/><test-case name="29716hexBinary002_2068.v tokoe:valid" result="pass"/><test-case name="29717hexBinary004_2070 tokoe:valid" result="pass"/><test-case name="29718hexBinary004_2070.i tokoe:invalid" result="pass"/><test-case name="29719base64Binary001_2071 tokoe:valid" result="pass"/><test-case name="29720base64Binary001_2071.v tokoe:valid" result="pass"/><test-case name="29721base64Binary002_2072 tokoe:valid" result="pass"/><test-case name="29722base64Binary002_2072.v tokoe:valid" result="pass"/><test-case name="29723anyURI001_2073 tokoe:valid" result="pass"/><test-case name="29724anyURI001_2073.v tokoe:valid" result="pass"/><test-case name="29725anyURI002_2074 tokoe:valid" result="pass"/><test-case name="29726anyURI002_2074.v tokoe:valid" result="pass"/><test-case name="29727anyURI003_2075 tokoe:valid" result="pass"/><test-case name="29728anyURI003_2075.v tokoe:valid" result="pass"/><test-case name="29729anyURI004_2076 tokoe:valid" result="pass"/><test-case name="29730anyURI004_2076.v tokoe:valid" result="pass"/><test-case name="29731anyURI005_2077 tokoe:valid" result="pass"/><test-case name="29732anyURI005_2077.v tokoe:valid" result="pass"/><test-case name="29733anyURI006_2078 tokoe:valid" result="pass"/><test-case name="29734anyURI006_2078.v tokoe:valid" result="pass"/><test-case name="29735anyURI007_2079 tokoe:valid" result="pass"/><test-case name="29736anyURI007_2079.v tokoe:valid" result="pass"/><test-case name="29737anyURI008_2080 tokoe:valid" result="pass"/><test-case name="29738anyURI008_2080.v tokoe:valid" result="pass"/><test-case name="29739anyURI009_2081 tokoe:valid" result="pass"/><test-case name="29740anyURI009_2081.v tokoe:valid" result="pass"/><test-case name="29741anyURI010_2082 tokoe:valid" result="pass"/><test-case name="29742anyURI010_2082.v tokoe:valid" result="pass"/><test-case name="29743anyURI011_2083 tokoe:valid" result="pass"/><test-case name="29744anyURI011_2083.v tokoe:valid" result="pass"/><test-case name="29745QName001_2084 tokoe:valid" result="pass"/><test-case name="29746QName001_2084.i tokoe:invalid" result="pass"/><test-case name="29747QName002_2085 tokoe:valid" result="pass"/><test-case name="29748QName002_2085.v tokoe:valid" result="pass"/><test-case name="29749QName003_2086 tokoe:valid" result="pass"/><test-case name="29750QName003_2086.v tokoe:valid" result="pass"/><test-case name="29751QName004_2087 tokoe:valid" result="pass"/><test-case name="29752QName004_2087.i tokoe:invalid" result="pass"/><test-case name="29753QName005_2088 tokoe:valid" result="pass"/><test-case name="29754QName005_2088.i tokoe:invalid" result="pass"/><test-case name="29755QName006_2089 tokoe:valid" result="pass"/><test-case name="29756QName006_2089.v tokoe:valid" result="pass"/><test-case name="29757QName007_2090 tokoe:valid" result="pass"/><test-case name="29758QName007_2090.i tokoe:invalid" result="pass"/><test-case name="29759QName008_2091 tokoe:valid" result="pass"/><test-case name="29760QName008_2091.i tokoe:invalid" result="pass"/><test-case name="29761QName010_2093 tokoe:valid" result="pass"/><test-case name="29762QName010_2093.i tokoe:invalid" result="pass"/><test-case name="29763QName011_2094 tokoe:valid" result="pass"/><test-case name="29764QName011_2094.i tokoe:invalid" result="pass"/><test-case name="29765normalizedString001_2095 tokoe:valid" result="pass"/><test-case name="29766normalizedString001_2095.v tokoe:valid" result="pass"/><test-case name="29767normalizedString002_2096 tokoe:valid" result="pass"/><test-case name="29768normalizedString002_2096.v tokoe:valid" result="pass"/><test-case name="29769normalizedString003_2097 tokoe:valid" result="pass"/><test-case name="29770normalizedString003_2097.v tokoe:valid" result="pass"/><test-case name="29771token001_2098 tokoe:valid" result="pass"/><test-case name="29772token001_2098.v tokoe:valid" result="pass"/><test-case name="29773token002_2099 tokoe:valid" result="pass"/><test-case name="29774token002_2099.v tokoe:valid" result="pass"/><test-case name="29775token003_2100 tokoe:valid" result="pass"/><test-case name="29776token003_2100.v tokoe:valid" result="pass"/><test-case name="29777token004_2101 tokoe:valid" result="pass"/><test-case name="29778token004_2101.v tokoe:valid" result="pass"/><test-case name="29779language001_2102 tokoe:valid" result="pass"/><test-case name="29780language001_2102.i tokoe:invalid" result="pass"/><test-case name="29781language002_2103 tokoe:valid" result="pass"/><test-case name="29782language002_2103.v tokoe:valid" result="pass"/><test-case name="29783language003_2104 tokoe:valid" result="pass"/><test-case name="29784language003_2104.v tokoe:valid" result="pass"/><test-case name="29785language004_2105 tokoe:valid" result="pass"/><test-case name="29786language004_2105.v tokoe:valid" result="pass"/><test-case name="29787language005_2106 tokoe:valid" result="pass"/><test-case name="29788language005_2106.v tokoe:valid" result="pass"/><test-case name="29789language006_2107 tokoe:valid" result="pass"/><test-case name="29790language006_2107.v tokoe:valid" result="pass"/><test-case name="29791language007_2108 tokoe:valid" result="pass"/><test-case name="29792language007_2108.v tokoe:valid" result="pass"/><test-case name="29793language008_2109 tokoe:valid" result="pass"/><test-case name="29794language008_2109.i tokoe:invalid" result="pass"/><test-case name="29795language009_2110 tokoe:valid" result="pass"/><test-case name="29796language009_2110.v tokoe:valid" result="pass"/><test-case name="29797language010_2111 tokoe:valid" result="pass"/><test-case name="29798language010_2111.i tokoe:invalid" result="pass"/><test-case name="29799Name001_2112 tokoe:valid" result="pass"/><test-case name="29800Name001_2112.i tokoe:invalid" result="pass"/><test-case name="29801Name002_2113 tokoe:valid" result="pass"/><test-case name="29802Name002_2113.v tokoe:valid" result="pass"/><test-case name="29803Name003_2114 tokoe:valid" result="pass"/><test-case name="29804Name003_2114.v tokoe:valid" result="pass"/><test-case name="29805Name004_2115 tokoe:valid" result="pass"/><test-case name="29806Name004_2115.i tokoe:invalid" result="pass"/><test-case name="29807Name005_2116 tokoe:valid" result="pass"/><test-case name="29808Name005_2116.i tokoe:invalid" result="pass"/><test-case name="29809Name006_2117 tokoe:valid" result="pass"/><test-case name="29810Name006_2117.i tokoe:invalid" result="pass"/><test-case name="29811Name007_2118 tokoe:valid" result="pass"/><test-case name="29812Name007_2118.v tokoe:valid" result="pass"/><test-case name="29813Name008_2119 tokoe:valid" result="pass"/><test-case name="29814Name008_2119.v tokoe:valid" result="pass"/><test-case name="29815Name009_2120 tokoe:valid" result="pass"/><test-case name="29816Name009_2120.v tokoe:valid" result="pass"/><test-case name="29817Name010_2121 tokoe:valid" result="pass"/><test-case name="29818Name010_2121.v tokoe:valid" result="pass"/><test-case name="29819Name011_2122 tokoe:valid" result="pass"/><test-case name="29820Name011_2122.v tokoe:valid" result="pass"/><test-case name="29821Name012_2123 tokoe:valid" result="pass"/><test-case name="29822Name012_2123.v tokoe:valid" result="pass"/><test-case name="29823Name013_2124 tokoe:valid" result="pass"/><test-case name="29824Name013_2124.v tokoe:valid" result="pass"/><test-case name="29825Name014_2125 tokoe:valid" result="pass"/><test-case name="29826Name014_2125.i tokoe:invalid" result="pass"/><test-case name="29827Name015_2126 tokoe:valid" result="pass"/><test-case name="29828Name015_2126.v tokoe:valid" result="pass"/><test-case name="29829Name016_2127 tokoe:valid" result="pass"/><test-case name="29830Name016_2127.v tokoe:valid" result="pass"/><test-case name="29831Name017_2128 tokoe:valid" result="pass"/><test-case name="29832Name017_2128.i tokoe:invalid" result="pass"/><test-case name="29833Name018_2129 tokoe:valid" result="pass"/><test-case name="29834Name018_2129.i tokoe:invalid" result="pass"/><test-case name="29835NCName001_2130 tokoe:valid" result="pass"/><test-case name="29836NCName001_2130.i tokoe:invalid" result="pass"/><test-case name="29837NCName002_2131 tokoe:valid" result="pass"/><test-case name="29838NCName002_2131.v tokoe:valid" result="pass"/><test-case name="29839NCName003_2132 tokoe:valid" result="pass"/><test-case name="29840NCName003_2132.v tokoe:valid" result="pass"/><test-case name="29841NCName004_2133 tokoe:valid" result="pass"/><test-case name="29842NCName004_2133.i tokoe:invalid" result="pass"/><test-case name="29843NCName005_2134 tokoe:valid" result="pass"/><test-case name="29844NCName005_2134.i tokoe:invalid" result="pass"/><test-case name="29845NCName006_2135 tokoe:valid" result="pass"/><test-case name="29846NCName006_2135.i tokoe:invalid" result="pass"/><test-case name="29847NCName007_2136 tokoe:valid" result="pass"/><test-case name="29848NCName007_2136.v tokoe:valid" result="pass"/><test-case name="29849NCName008_2137 tokoe:valid" result="pass"/><test-case name="29850NCName008_2137.i tokoe:invalid" result="pass"/><test-case name="29851NCName009_2138 tokoe:valid" result="pass"/><test-case name="29852NCName009_2138.i tokoe:invalid" result="pass"/><test-case name="29853NCName010_2139 tokoe:valid" result="pass"/><test-case name="29854NCName010_2139.i tokoe:invalid" result="pass"/><test-case name="29855NCName011_2140 tokoe:valid" result="pass"/><test-case name="29856NCName011_2140.i tokoe:invalid" result="pass"/><test-case name="29857integer001_2141 tokoe:valid" result="pass"/><test-case name="29858integer001_2141.i tokoe:invalid" result="pass"/><test-case name="29859integer002_2142 tokoe:valid" result="pass"/><test-case name="29860integer002_2142.i tokoe:invalid" result="pass"/><test-case name="29861integer003_2143 tokoe:valid" result="pass"/><test-case name="29862integer003_2143.i tokoe:invalid" result="pass"/><test-case name="29863integer004_2144 tokoe:valid" result="pass"/><test-case name="29864integer004_2144.v tokoe:valid" result="pass"/><test-case name="29865integer005_2145 tokoe:valid" result="pass"/><test-case name="29866integer005_2145.v tokoe:valid" result="pass"/><test-case name="29867integer006_2146 tokoe:valid" result="pass"/><test-case name="29868integer006_2146.i tokoe:invalid" result="pass"/><test-case name="29869integer007_2147 tokoe:valid" result="pass"/><test-case name="29870integer007_2147.v tokoe:valid" result="pass"/><test-case name="29871integer008_2148 tokoe:valid" result="pass"/><test-case name="29872integer008_2148.v tokoe:valid" result="pass"/><test-case name="29873integer009_2149 tokoe:valid" result="pass"/><test-case name="29874integer009_2149.v tokoe:valid" result="pass"/><test-case name="29875integer010_2150 tokoe:valid" result="pass"/><test-case name="29876integer010_2150.v tokoe:valid" result="pass"/><test-case name="29877integer011_2151 tokoe:valid" result="pass"/><test-case name="29878integer011_2151.v tokoe:valid" result="fail"/><test-case name="29879integer012_2152 tokoe:valid" result="pass"/><test-case name="29880integer012_2152.i tokoe:invalid" result="pass"/><test-case name="29881integer013_2153 tokoe:valid" result="pass"/><test-case name="29882integer013_2153.i tokoe:invalid" result="pass"/><test-case name="29883integer014_2154 tokoe:valid" result="pass"/><test-case name="29884integer014_2154.i tokoe:invalid" result="pass"/><test-case name="29885integer015_2155 tokoe:valid" result="pass"/><test-case name="29886integer015_2155.i tokoe:invalid" result="pass"/><test-case name="29887integer016_2156 tokoe:valid" result="pass"/><test-case name="29888integer016_2156.i tokoe:invalid" result="pass"/><test-case name="29889nonPositiveInteger001_2157 tokoe:valid" result="pass"/><test-case name="29890nonPositiveInteger001_2157.i tokoe:invalid" result="pass"/><test-case name="29891nonPositiveInteger002_2158 tokoe:valid" result="pass"/><test-case name="29892nonPositiveInteger002_2158.v tokoe:valid" result="pass"/><test-case name="29893nonPositiveInteger003_2159 tokoe:valid" result="pass"/><test-case name="29894nonPositiveInteger003_2159.v tokoe:valid" result="pass"/><test-case name="29895nonPositiveInteger004_2160 tokoe:valid" result="pass"/><test-case name="29896nonPositiveInteger004_2160.i tokoe:invalid" result="pass"/><test-case name="29897nonPositiveInteger005_2161 tokoe:valid" result="pass"/><test-case name="29898nonPositiveInteger005_2161.v tokoe:valid" result="fail"/><test-case name="29899negativeInteger001_2162 tokoe:valid" result="pass"/><test-case name="29900negativeInteger001_2162.i tokoe:invalid" result="pass"/><test-case name="29901negativeInteger002_2163 tokoe:valid" result="pass"/><test-case name="29902negativeInteger002_2163.v tokoe:valid" result="pass"/><test-case name="29903negativeInteger003_2164 tokoe:valid" result="pass"/><test-case name="29904negativeInteger003_2164.i tokoe:invalid" result="pass"/><test-case name="29905negativeInteger004_2165 tokoe:valid" result="pass"/><test-case name="29906negativeInteger004_2165.i tokoe:invalid" result="pass"/><test-case name="29907negativeInteger005_2166 tokoe:valid" result="pass"/><test-case name="29908negativeInteger005_2166.v tokoe:valid" result="fail"/><test-case name="29909long001_2167 tokoe:valid" result="pass"/><test-case name="29910long001_2167.i tokoe:invalid" result="pass"/><test-case name="29911long002_2168 tokoe:valid" result="pass"/><test-case name="29912long002_2168.v tokoe:valid" result="pass"/><test-case name="29913long003_2169 tokoe:valid" result="pass"/><test-case name="29914long003_2169.v tokoe:valid" result="pass"/><test-case name="29915long004_2170 tokoe:valid" result="pass"/><test-case name="29916long004_2170.v tokoe:valid" result="pass"/><test-case name="29917long005_2171 tokoe:valid" result="pass"/><test-case name="29918long005_2171.v tokoe:valid" result="pass"/><test-case name="29919long006_2172 tokoe:valid" result="pass"/><test-case name="29920long006_2172.i tokoe:invalid" result="pass"/><test-case name="29921long007_2173 tokoe:valid" result="pass"/><test-case name="29922long007_2173.v tokoe:valid" result="pass"/><test-case name="29923long008_2174 tokoe:valid" result="pass"/><test-case name="29924long008_2174.i tokoe:invalid" result="pass"/><test-case name="29925long009_2175 tokoe:valid" result="pass"/><test-case name="29926long009_2175.v tokoe:valid" result="pass"/><test-case name="29927int001_2176 tokoe:valid" result="pass"/><test-case name="29928int001_2176.i tokoe:invalid" result="pass"/><test-case name="29929int002_2177 tokoe:valid" result="pass"/><test-case name="29930int002_2177.v tokoe:valid" result="pass"/><test-case name="29931int003_2178 tokoe:valid" result="pass"/><test-case name="29932int003_2178.v tokoe:valid" result="pass"/><test-case name="29933int004_2179 tokoe:valid" result="pass"/><test-case name="29934int004_2179.v tokoe:valid" result="pass"/><test-case name="29935int005_2180 tokoe:valid" result="pass"/><test-case name="29936int005_2180.v tokoe:valid" result="pass"/><test-case name="29937int006_2181 tokoe:valid" result="pass"/><test-case name="29938int006_2181.i tokoe:invalid" result="pass"/><test-case name="29939int007_2182 tokoe:valid" result="pass"/><test-case name="29940int007_2182.v tokoe:valid" result="pass"/><test-case name="29941int008_2183 tokoe:valid" result="pass"/><test-case name="29942int008_2183.i tokoe:invalid" result="pass"/><test-case name="29943short001_2184 tokoe:valid" result="pass"/><test-case name="29944short001_2184.i tokoe:invalid" result="pass"/><test-case name="29945short002_2185 tokoe:valid" result="pass"/><test-case name="29946short002_2185.v tokoe:valid" result="pass"/><test-case name="29947short003_2186 tokoe:valid" result="pass"/><test-case name="29948short003_2186.v tokoe:valid" result="pass"/><test-case name="29949short004_2187 tokoe:valid" result="pass"/><test-case name="29950short004_2187.v tokoe:valid" result="pass"/><test-case name="29951short005_2188 tokoe:valid" result="pass"/><test-case name="29952short005_2188.v tokoe:valid" result="pass"/><test-case name="29953short006_2189 tokoe:valid" result="pass"/><test-case name="29954short006_2189.i tokoe:invalid" result="pass"/><test-case name="29955short007_2190 tokoe:valid" result="pass"/><test-case name="29956short007_2190.v tokoe:valid" result="pass"/><test-case name="29957short008_2191 tokoe:valid" result="pass"/><test-case name="29958short008_2191.i tokoe:invalid" result="pass"/><test-case name="29959short009_2192 tokoe:valid" result="pass"/><test-case name="29960short009_2192.v tokoe:valid" result="pass"/><test-case name="29961byte001_2193 tokoe:valid" result="pass"/><test-case name="29962byte001_2193.i tokoe:invalid" result="pass"/><test-case name="29963byte002_2194 tokoe:valid" result="pass"/><test-case name="29964byte002_2194.v tokoe:valid" result="pass"/><test-case name="29965byte003_2195 tokoe:valid" result="pass"/><test-case name="29966byte003_2195.v tokoe:valid" result="pass"/><test-case name="29967byte004_2196 tokoe:valid" result="pass"/><test-case name="29968byte004_2196.v tokoe:valid" result="pass"/><test-case name="29969byte005_2197 tokoe:valid" result="pass"/><test-case name="29970byte005_2197.v tokoe:valid" result="pass"/><test-case name="29971byte006_2198 tokoe:valid" result="pass"/><test-case name="29972byte006_2198.i tokoe:invalid" result="pass"/><test-case name="29973byte007_2199 tokoe:valid" result="pass"/><test-case name="29974byte007_2199.v tokoe:valid" result="pass"/><test-case name="29975byte008_2200 tokoe:valid" result="pass"/><test-case name="29976byte008_2200.i tokoe:invalid" result="pass"/><test-case name="29977byte009_2201 tokoe:valid" result="pass"/><test-case name="29978byte009_2201.v tokoe:valid" result="pass"/><test-case name="29979nonNegativeInteger001_2202 tokoe:valid" result="pass"/><test-case name="29980nonNegativeInteger001_2202.i tokoe:invalid" result="pass"/><test-case name="29981nonNegativeInteger002_2203 tokoe:valid" result="pass"/><test-case name="29982nonNegativeInteger002_2203.i tokoe:invalid" result="pass"/><test-case name="29983nonNegativeInteger003_2204 tokoe:valid" result="pass"/><test-case name="29984nonNegativeInteger003_2204.v tokoe:valid" result="pass"/><test-case name="29985nonNegativeInteger004_2205 tokoe:valid" result="pass"/><test-case name="29986nonNegativeInteger004_2205.v tokoe:valid" result="pass"/><test-case name="29987nonNegativeInteger005_2206 tokoe:valid" result="pass"/><test-case name="29988nonNegativeInteger005_2206.v tokoe:valid" result="fail"/><test-case name="29989unsignedLong001_2207 tokoe:valid" result="pass"/><test-case name="29990unsignedLong001_2207.i tokoe:invalid" result="pass"/><test-case name="29991unsignedLong002_2208 tokoe:valid" result="pass"/><test-case name="29992unsignedLong002_2208.i tokoe:invalid" result="pass"/><test-case name="29993unsignedLong003_2209 tokoe:valid" result="pass"/><test-case name="29994unsignedLong003_2209.v tokoe:valid" result="pass"/><test-case name="29995unsignedLong004_2210 tokoe:valid" result="pass"/><test-case name="29996unsignedLong004_2210.v tokoe:valid" result="pass"/><test-case name="29997unsignedLong005_2211 tokoe:valid" result="pass"/><test-case name="29998unsignedLong005_2211.v tokoe:valid" result="pass"/><test-case name="29999unsignedLong006_2212 tokoe:valid" result="pass"/><test-case name="30000unsignedLong006_2212.i tokoe:invalid" result="pass"/><test-case name="30001unsignedLong007_2213 tokoe:valid" result="pass"/><test-case name="30002unsignedLong007_2213.v tokoe:valid" result="pass"/><test-case name="30003unsignedInt001_2214 tokoe:valid" result="pass"/><test-case name="30004unsignedInt001_2214.i tokoe:invalid" result="pass"/><test-case name="30005unsignedInt002_2215 tokoe:valid" result="pass"/><test-case name="30006unsignedInt002_2215.i tokoe:invalid" result="pass"/><test-case name="30007unsignedInt003_2216 tokoe:valid" result="pass"/><test-case name="30008unsignedInt003_2216.v tokoe:valid" result="pass"/><test-case name="30009unsignedInt004_2217 tokoe:valid" result="pass"/><test-case name="30010unsignedInt004_2217.v tokoe:valid" result="pass"/><test-case name="30011unsignedInt005_2218 tokoe:valid" result="pass"/><test-case name="30012unsignedInt005_2218.v tokoe:valid" result="pass"/><test-case name="30013unsignedInt006_2219 tokoe:valid" result="pass"/><test-case name="30014unsignedInt006_2219.i tokoe:invalid" result="pass"/><test-case name="30015unsignedInt007_2220 tokoe:valid" result="pass"/><test-case name="30016unsignedInt007_2220.v tokoe:valid" result="pass"/><test-case name="30017unsignedShort001_2221 tokoe:valid" result="pass"/><test-case name="30018unsignedShort001_2221.i tokoe:invalid" result="pass"/><test-case name="30019unsignedShort002_2222 tokoe:valid" result="pass"/><test-case name="30020unsignedShort002_2222.i tokoe:invalid" result="pass"/><test-case name="30021unsignedShort003_2223 tokoe:valid" result="pass"/><test-case name="30022unsignedShort003_2223.v tokoe:valid" result="pass"/><test-case name="30023unsignedShort004_2224 tokoe:valid" result="pass"/><test-case name="30024unsignedShort004_2224.v tokoe:valid" result="pass"/><test-case name="30025unsignedShort005_2225 tokoe:valid" result="pass"/><test-case name="30026unsignedShort005_2225.v tokoe:valid" result="pass"/><test-case name="30027unsignedShort006_2226 tokoe:valid" result="pass"/><test-case name="30028unsignedShort006_2226.i tokoe:invalid" result="pass"/><test-case name="30029unsignedShort007_2227 tokoe:valid" result="pass"/><test-case name="30030unsignedShort007_2227.v tokoe:valid" result="pass"/><test-case name="30031unsignedByte001_2228 tokoe:valid" result="pass"/><test-case name="30032unsignedByte001_2228.i tokoe:invalid" result="pass"/><test-case name="30033unsignedByte002_2229 tokoe:valid" result="pass"/><test-case name="30034unsignedByte002_2229.i tokoe:invalid" result="pass"/><test-case name="30035unsignedByte003_2230 tokoe:valid" result="pass"/><test-case name="30036unsignedByte003_2230.v tokoe:valid" result="pass"/><test-case name="30037unsignedByte004_2231 tokoe:valid" result="pass"/><test-case name="30038unsignedByte004_2231.v tokoe:valid" result="pass"/><test-case name="30039unsignedByte005_2232 tokoe:valid" result="pass"/><test-case name="30040unsignedByte005_2232.v tokoe:valid" result="pass"/><test-case name="30041unsignedByte006_2233 tokoe:valid" result="pass"/><test-case name="30042unsignedByte006_2233.i tokoe:invalid" result="pass"/><test-case name="30043unsignedByte007_2234 tokoe:valid" result="pass"/><test-case name="30044unsignedByte007_2234.v tokoe:valid" result="pass"/><test-case name="30045positiveInteger001_2235 tokoe:valid" result="pass"/><test-case name="30046positiveInteger001_2235.i tokoe:invalid" result="pass"/><test-case name="30047positiveInteger002_2236 tokoe:valid" result="pass"/><test-case name="30048positiveInteger002_2236.i tokoe:invalid" result="pass"/><test-case name="30049positiveInteger003_2237 tokoe:valid" result="pass"/><test-case name="30050positiveInteger003_2237.i tokoe:invalid" result="pass"/><test-case name="30051positiveInteger004_2238 tokoe:valid" result="pass"/><test-case name="30052positiveInteger004_2238.v tokoe:valid" result="pass"/><test-case name="30053positiveInteger005_2239 tokoe:valid" result="pass"/><test-case name="30054positiveInteger005_2239.v tokoe:valid" result="fail"/><test-case name="30055ID_test64335_2240 tokoe:valid" result="pass"/><test-case name="30056ID_test64335_2240.v tokoe:valid" result="pass"/><test-case name="30057ID_test70681_2241 tokoe:valid" result="pass"/><test-case name="30058ID_test70681_2241.v tokoe:valid" result="pass"/><test-case name="30059dtZ100507_2242 tokoe:valid" result="pass"/><test-case name="30060dtZ100507_2242.i tokoe:invalid" result="pass"/><test-case name="30061dtZ107447_2243 tokoe:valid" result="pass"/><test-case name="30062dtZ107447_2243.v tokoe:valid" result="pass"/><test-case name="30063dtZ107447_1_2244 tokoe:valid" result="pass"/><test-case name="30064dtZ107447_1_2244.v tokoe:valid" result="pass"/><test-case name="30065dtZ86723_2246 tokoe:valid" result="pass"/><test-case name="30066dtZ86723_2246.i tokoe:invalid" result="pass"/><test-case name="30067elemA001 tokoe:invalid" result="pass"/><test-case name="30068elemA002 tokoe:valid" result="pass"/><test-case name="30069elemA003 tokoe:valid" result="pass"/><test-case name="30070elemA004 tokoe:valid" result="pass"/><test-case name="30071elemA005 tokoe:valid" result="pass"/><test-case name="30072elemA006 tokoe:invalid" result="pass"/><test-case name="30073elemA007 tokoe:valid" result="pass"/><test-case name="30074elemA009 tokoe:invalid" result="pass"/><test-case name="30075elemA010 tokoe:invalid" result="pass"/><test-case name="30076elemA011 tokoe:invalid" result="pass"/><test-case name="30077elemA012 tokoe:invalid" result="pass"/><test-case name="30078elemA013 tokoe:invalid" result="pass"/><test-case name="30079elemA014 tokoe:invalid" result="pass"/><test-case name="30080elemA015 tokoe:valid" result="pass"/><test-case name="30081elemA016 tokoe:valid" result="pass"/><test-case name="30082elemA017 tokoe:valid" result="pass"/><test-case name="30083elemB001 tokoe:valid" result="pass"/><test-case name="30084elemB002 tokoe:valid" result="pass"/><test-case name="30085elemB003 tokoe:invalid" result="pass"/><test-case name="30086elemB004 tokoe:invalid" result="pass"/><test-case name="30087elemB005 tokoe:invalid" result="pass"/><test-case name="30088elemB006 tokoe:invalid" result="pass"/><test-case name="30089elemB007 tokoe:valid" result="pass"/><test-case name="30090elemB008 tokoe:valid" result="pass"/><test-case name="30091elemB009 tokoe:invalid" result="pass"/><test-case name="30092elemB010 tokoe:invalid" result="pass"/><test-case name="30093elemC001 tokoe:valid" result="pass"/><test-case name="30094elemC002 tokoe:valid" result="pass"/><test-case name="30095elemC003 tokoe:valid" result="pass"/><test-case name="30096elemC004 tokoe:valid" result="pass"/><test-case name="30097elemC005 tokoe:valid" result="pass"/><test-case name="30098elemC006 tokoe:valid" result="pass"/><test-case name="30099elemC007 tokoe:valid" result="pass"/><test-case name="30100elemC008 tokoe:valid" result="pass"/><test-case name="30101elemC009 tokoe:invalid" result="pass"/><test-case name="30102elemC010 tokoe:invalid" result="pass"/><test-case name="30103elemC011 tokoe:invalid" result="pass"/><test-case name="30104elemC012 tokoe:invalid" result="pass"/><test-case name="30105elemC013 tokoe:invalid" result="pass"/><test-case name="30106elemC014 tokoe:invalid" result="pass"/><test-case name="30107elemC015 tokoe:invalid" result="pass"/><test-case name="30108elemC016 tokoe:invalid" result="pass"/><test-case name="30109elemC017 tokoe:invalid" result="pass"/><test-case name="30110elemC018 tokoe:valid" result="pass"/><test-case name="30111elemC020 tokoe:valid" result="pass"/><test-case name="30112elemD001 tokoe:valid" result="pass"/><test-case name="30113elemD002 tokoe:valid" result="pass"/><test-case name="30114elemD003 tokoe:invalid" result="pass"/><test-case name="30115elemD004 tokoe:invalid" result="pass"/><test-case name="30116elemD005 tokoe:invalid" result="pass"/><test-case name="30117elemD006 tokoe:valid" result="pass"/><test-case name="30118elemE006 tokoe:invalid" result="pass"/><test-case name="30119elemE007 tokoe:invalid" result="pass"/><test-case name="30120elemE008 tokoe:invalid" result="pass"/><test-case name="30121elemE009 tokoe:invalid" result="pass"/><test-case name="30122elemF001 tokoe:valid" result="pass"/><test-case name="30123elemF002 tokoe:valid" result="pass"/><test-case name="30124elemF003 tokoe:valid" result="pass"/><test-case name="30125elemF004 tokoe:invalid" result="pass"/><test-case name="30126elemF005 tokoe:valid" result="pass"/><test-case name="30127elemF006 tokoe:invalid" result="pass"/><test-case name="30128elemF007 tokoe:invalid" result="pass"/><test-case name="30129elemF008 tokoe:invalid" result="pass"/><test-case name="30130elemF009 tokoe:invalid" result="pass"/><test-case name="30131elemF010 tokoe:invalid" result="pass"/><test-case name="30132elemF011 tokoe:invalid" result="pass"/><test-case name="30133elemF012 tokoe:invalid" result="pass"/><test-case name="30134elemF013 tokoe:invalid" result="pass"/><test-case name="30135elemF014 tokoe:invalid" result="pass"/><test-case name="30136elemF015 tokoe:invalid" result="pass"/><test-case name="30137elemF016 tokoe:invalid" result="pass"/><test-case name="30138elemF017 tokoe:invalid" result="pass"/><test-case name="30139elemF018 tokoe:valid" result="pass"/><test-case name="30140elemG001 tokoe:valid" result="pass"/><test-case name="30141elemG002 tokoe:valid" result="pass"/><test-case name="30142elemG003 tokoe:invalid" result="pass"/><test-case name="30143elemG004 tokoe:invalid" result="pass"/><test-case name="30144elemG005 tokoe:valid" result="pass"/><test-case name="30145elemH001 tokoe:valid" result="pass"/><test-case name="30146elemH002 tokoe:valid" result="pass"/><test-case name="30147elemH003 tokoe:invalid" result="pass"/><test-case name="30148elemH004 tokoe:invalid" result="pass"/><test-case name="30149elemH005 tokoe:invalid" result="pass"/><test-case name="30150elemH006 tokoe:invalid" result="pass"/><test-case name="30151elemI001 tokoe:valid" result="pass"/><test-case name="30152elemI002 tokoe:valid" result="pass"/><test-case name="30153elemI003 tokoe:invalid" result="pass"/><test-case name="30154elemI004 tokoe:invalid" result="pass"/><test-case name="30155elemI005 tokoe:invalid" result="pass"/><test-case name="30156elemJ002 tokoe:valid" result="pass"/><test-case name="30157elemJ004 tokoe:valid" result="pass"/><test-case name="30158elemJ005 tokoe:valid" result="pass"/><test-case name="30159elemJ006 tokoe:invalid" result="pass"/><test-case name="30160elemJ007 tokoe:invalid" result="pass"/><test-case name="30161elemJ008 tokoe:invalid" result="pass"/><test-case name="30162elemJ009 tokoe:valid" result="pass"/><test-case name="30163elemJ010 tokoe:valid" result="pass"/><test-case name="30164elemJ012 tokoe:invalid" result="pass"/><test-case name="30165elemJ013 tokoe:valid" result="pass"/><test-case name="30166elemJ014 tokoe:invalid" result="pass"/><test-case name="30167elemJ015 tokoe:invalid" result="pass"/><test-case name="30168elemJ016 tokoe:invalid" result="pass"/><test-case name="30169elemJ017 tokoe:valid" result="pass"/><test-case name="30170elemJ018 tokoe:valid" result="pass"/><test-case name="30171elemJ019 tokoe:invalid" result="pass"/><test-case name="30172elemJ020 tokoe:invalid" result="pass"/><test-case name="30173elemJ021 tokoe:valid" result="pass"/><test-case name="30174elemK001 tokoe:valid" result="pass"/><test-case name="30175elemK002 tokoe:valid" result="pass"/><test-case name="30176elemK003 tokoe:invalid" result="pass"/><test-case name="30177elemK004 tokoe:invalid" result="pass"/><test-case name="30178elemK005 tokoe:invalid" result="pass"/><test-case name="30179elemK006 tokoe:invalid" result="pass"/><test-case name="30180elemK007 tokoe:invalid" result="pass"/><test-case name="30181elemL001 tokoe:valid" result="pass"/><test-case name="30182elemL002 tokoe:invalid" result="pass"/><test-case name="30183elemL003 tokoe:invalid" result="pass"/><test-case name="30184elemL004 tokoe:valid" result="pass"/><test-case name="30185elemL005 tokoe:valid" result="pass"/><test-case name="30186elemM001 tokoe:valid" result="pass"/><test-case name="30187elemM002 tokoe:invalid" result="pass"/><test-case name="30188elemM003 tokoe:invalid" result="pass"/><test-case name="30189elemM004 tokoe:valid" result="pass"/><test-case name="30190elemM005 tokoe:invalid" result="pass"/><test-case name="30191elemN001 tokoe:valid" result="pass"/><test-case name="30192elemN002 tokoe:valid" result="pass"/><test-case name="30193elemN003 tokoe:valid" result="pass"/><test-case name="30194elemN004 tokoe:valid" result="pass"/><test-case name="30195elemN005 tokoe:valid" result="pass"/><test-case name="30196elemN006 tokoe:invalid" result="pass"/><test-case name="30197elemO001 tokoe:valid" result="pass"/><test-case name="30198elemO001.i tokoe:invalid" result="pass"/><test-case name="30199elemO002 tokoe:valid" result="pass"/><test-case name="30200elemO002.v tokoe:valid" result="pass"/><test-case name="30201elemO003 tokoe:valid" result="pass"/><test-case name="30202elemO003.v tokoe:valid" result="pass"/><test-case name="30203elemO004 tokoe:valid" result="pass"/><test-case name="30204elemO004.v tokoe:valid" result="pass"/><test-case name="30205elemO005 tokoe:valid" result="pass"/><test-case name="30206elemO005.v tokoe:valid" result="pass"/><test-case name="30207elemO006 tokoe:valid" result="pass"/><test-case name="30208elemO006.v tokoe:valid" result="pass"/><test-case name="30209elemO007 tokoe:valid" result="pass"/><test-case name="30210elemO007.i tokoe:invalid" result="pass"/><test-case name="30211elemO008 tokoe:valid" result="pass"/><test-case name="30212elemO008.v tokoe:valid" result="pass"/><test-case name="30213elemO009 tokoe:valid" result="pass"/><test-case name="30214elemO009.v tokoe:valid" result="pass"/><test-case name="30215elemO010 tokoe:valid" result="pass"/><test-case name="30216elemO010.i tokoe:invalid" result="pass"/><test-case name="30217elemO011 tokoe:valid" result="pass"/><test-case name="30218elemO011.i tokoe:invalid" result="pass"/><test-case name="30219elemO012 tokoe:valid" result="pass"/><test-case name="30220elemO012.v tokoe:valid" result="pass"/><test-case name="30221elemP001 tokoe:invalid" result="pass"/><test-case name="30222elemP002 tokoe:invalid" result="pass"/><test-case name="30223elemP003 tokoe:valid" result="pass"/><test-case name="30224elemP004 tokoe:valid" result="pass"/><test-case name="30225elemP005 tokoe:invalid" result="pass"/><test-case name="30226elemP006 tokoe:invalid" result="pass"/><test-case name="30227elemP007 tokoe:invalid" result="pass"/><test-case name="30228elemP008 tokoe:invalid" result="pass"/><test-case name="30229elemP009 tokoe:invalid" result="pass"/><test-case name="30230elemQ001 tokoe:valid" result="pass"/><test-case name="30231elemQ002 tokoe:valid" result="pass"/><test-case name="30232elemQ003 tokoe:valid" result="pass"/><test-case name="30233elemQ004 tokoe:invalid" result="pass"/><test-case name="30234elemQ005 tokoe:valid" result="pass"/><test-case name="30235elemQ006 tokoe:invalid" result="pass"/><test-case name="30236elemQ007 tokoe:valid" result="pass"/><test-case name="30237elemQ007.i tokoe:invalid" result="pass"/><test-case name="30238elemQ008 tokoe:valid" result="pass"/><test-case name="30239elemQ008.v tokoe:valid" result="pass"/><test-case name="30240elemQ009 tokoe:valid" result="pass"/><test-case name="30241elemQ009.i tokoe:invalid" result="pass"/><test-case name="30242elemQ010 tokoe:valid" result="pass"/><test-case name="30243elemQ010.i tokoe:invalid" result="pass"/><test-case name="30244elemQ011 tokoe:valid" result="pass"/><test-case name="30245elemQ011.v tokoe:valid" result="pass"/><test-case name="30246elemQ012 tokoe:valid" result="pass"/><test-case name="30247elemQ012.i tokoe:invalid" result="pass"/><test-case name="30248elemQ013 tokoe:valid" result="pass"/><test-case name="30249elemQ013.v tokoe:valid" result="pass"/><test-case name="30250elemQ014 tokoe:valid" result="pass"/><test-case name="30251elemQ014.i tokoe:invalid" result="pass"/><test-case name="30252elemQ015 tokoe:valid" result="pass"/><test-case name="30253elemQ015.v tokoe:valid" result="pass"/><test-case name="30254elemQ016 tokoe:valid" result="pass"/><test-case name="30255elemQ017 tokoe:valid" result="pass"/><test-case name="30256elemQ017.v tokoe:valid" result="pass"/><test-case name="30257elemQ018 tokoe:valid" result="pass"/><test-case name="30258elemQ018.i tokoe:invalid" result="pass"/><test-case name="30259elemQ019 tokoe:valid" result="pass"/><test-case name="30260elemQ019.v tokoe:valid" result="pass"/><test-case name="30261elemQ020 tokoe:valid" result="pass"/><test-case name="30262elemQ020.v tokoe:valid" result="pass"/><test-case name="30263elemQ021 tokoe:valid" result="pass"/><test-case name="30264elemQ021.v tokoe:valid" result="pass"/><test-case name="30265elemQ022 tokoe:valid" result="pass"/><test-case name="30266elemQ022.v tokoe:valid" result="pass"/><test-case name="30267elemR001 tokoe:valid" result="pass"/><test-case name="30268elemR001.v tokoe:valid" result="pass"/><test-case name="30269elemR002 tokoe:valid" result="pass"/><test-case name="30270elemR002.v tokoe:valid" result="pass"/><test-case name="30271elemR003 tokoe:invalid" result="pass"/><test-case name="30272elemR004 tokoe:valid" result="pass"/><test-case name="30273elemR004.v tokoe:valid" result="pass"/><test-case name="30274elemR005 tokoe:valid" result="pass"/><test-case name="30275elemR005.v tokoe:valid" result="pass"/><test-case name="30276elemR006 tokoe:invalid" result="pass"/><test-case name="30277elemS001 tokoe:invalid" result="pass"/><test-case name="30278elemS002 tokoe:valid" result="pass"/><test-case name="30279elemS002.v tokoe:valid" result="pass"/><test-case name="30280elemS003 tokoe:valid" result="pass"/><test-case name="30281elemS003.v tokoe:valid" result="pass"/><test-case name="30282elemS004 tokoe:invalid" result="pass"/><test-case name="30283elemS005 tokoe:invalid" result="pass"/><test-case name="30284elemS006 tokoe:invalid" result="pass"/><test-case name="30285elemS007 tokoe:valid" result="pass"/><test-case name="30286elemS007.v tokoe:valid" result="pass"/><test-case name="30287elemS008 tokoe:valid" result="pass"/><test-case name="30288elemS008.v tokoe:valid" result="pass"/><test-case name="30289elemT001 tokoe:valid" result="pass"/><test-case name="30290elemT001.i tokoe:invalid" result="pass"/><test-case name="30291elemT002 tokoe:valid" result="pass"/><test-case name="30292elemT002.v tokoe:valid" result="pass"/><test-case name="30293elemT003 tokoe:valid" result="pass"/><test-case name="30294elemT003.v tokoe:valid" result="pass"/><test-case name="30295elemT004 tokoe:valid" result="pass"/><test-case name="30296elemT004.i tokoe:invalid" result="pass"/><test-case name="30297elemT005 tokoe:valid" result="pass"/><test-case name="30298elemT005.i tokoe:invalid" result="pass"/><test-case name="30299elemT006 tokoe:valid" result="pass"/><test-case name="30300elemT006.i tokoe:invalid" result="pass"/><test-case name="30301elemT007 tokoe:valid" result="pass"/><test-case name="30302elemT007.v tokoe:valid" result="pass"/><test-case name="30303elemT008 tokoe:valid" result="pass"/><test-case name="30304elemT008.v tokoe:valid" result="pass"/><test-case name="30305elemT009 tokoe:invalid" result="pass"/><test-case name="30306elemT010 tokoe:invalid" result="pass"/><test-case name="30307elemT011 tokoe:valid" result="pass"/><test-case name="30308elemT011.i tokoe:invalid" result="pass"/><test-case name="30309elemT012 tokoe:valid" result="pass"/><test-case name="30310elemT012.i tokoe:invalid" result="pass"/><test-case name="30311elemT013 tokoe:valid" result="pass"/><test-case name="30312elemT013.i tokoe:invalid" result="pass"/><test-case name="30313elemT014 tokoe:valid" result="pass"/><test-case name="30314elemT014.v tokoe:valid" result="pass"/><test-case name="30315elemT015 tokoe:valid" result="pass"/><test-case name="30316elemT015.v tokoe:valid" result="pass"/><test-case name="30317elemT016 tokoe:valid" result="pass"/><test-case name="30318elemT016.v tokoe:valid" result="pass"/><test-case name="30319elemT017 tokoe:valid" result="pass"/><test-case name="30320elemT017.i tokoe:invalid" result="pass"/><test-case name="30321elemT018 tokoe:valid" result="pass"/><test-case name="30322elemT018.i tokoe:invalid" result="pass"/><test-case name="30323elemT019 tokoe:valid" result="pass"/><test-case name="30324elemT019.i tokoe:invalid" result="pass"/><test-case name="30325elemT020 tokoe:valid" result="pass"/><test-case name="30326elemT020.i tokoe:invalid" result="pass"/><test-case name="30327elemT021 tokoe:valid" result="pass"/><test-case name="30328elemT021.i tokoe:invalid" result="pass"/><test-case name="30329elemT022 tokoe:valid" result="pass"/><test-case name="30330elemT022.i tokoe:invalid" result="pass"/><test-case name="30331elemT023 tokoe:valid" result="pass"/><test-case name="30332elemT023.i tokoe:invalid" result="pass"/><test-case name="30333elemT024 tokoe:valid" result="pass"/><test-case name="30334elemT024.i tokoe:invalid" result="pass"/><test-case name="30335elemT025 tokoe:valid" result="pass"/><test-case name="30336elemT025.v tokoe:valid" result="pass"/><test-case name="30337elemT030 tokoe:valid" result="pass"/><test-case name="30338elemT030.v tokoe:valid" result="pass"/><test-case name="30339elemT031 tokoe:valid" result="pass"/><test-case name="30340elemT031.i tokoe:invalid" result="pass"/><test-case name="30341elemT032 tokoe:valid" result="pass"/><test-case name="30342elemT032.v tokoe:valid" result="pass"/><test-case name="30343elemT033 tokoe:valid" result="pass"/><test-case name="30344elemT033.i tokoe:invalid" result="pass"/><test-case name="30345elemT034 tokoe:valid" result="pass"/><test-case name="30346elemT034.i tokoe:invalid" result="pass"/><test-case name="30347elemT035 tokoe:valid" result="pass"/><test-case name="30348elemT035.i tokoe:invalid" result="pass"/><test-case name="30349elemT036 tokoe:valid" result="pass"/><test-case name="30350elemT036.i tokoe:invalid" result="pass"/><test-case name="30351elemT037 tokoe:valid" result="pass"/><test-case name="30352elemT037.i tokoe:invalid" result="pass"/><test-case name="30353elemT038 tokoe:valid" result="pass"/><test-case name="30354elemT038.v tokoe:valid" result="pass"/><test-case name="30355elemT039 tokoe:valid" result="pass"/><test-case name="30356elemT039.i tokoe:invalid" result="pass"/><test-case name="30357elemT040 tokoe:valid" result="pass"/><test-case name="30358elemT040.v tokoe:valid" result="pass"/><test-case name="30359elemT041 tokoe:valid" result="pass"/><test-case name="30360elemT041.v tokoe:valid" result="pass"/><test-case name="30361elemT042 tokoe:valid" result="pass"/><test-case name="30362elemT042.v tokoe:valid" result="pass"/><test-case name="30363elemT043 tokoe:valid" result="pass"/><test-case name="30364elemT043.v tokoe:valid" result="pass"/><test-case name="30365elemT044 tokoe:valid" result="pass"/><test-case name="30366elemT044.v tokoe:valid" result="pass"/><test-case name="30367elemT045 tokoe:valid" result="pass"/><test-case name="30368elemT045.i tokoe:invalid" result="pass"/><test-case name="30369elemT046 tokoe:valid" result="pass"/><test-case name="30370elemT046.i tokoe:invalid" result="pass"/><test-case name="30371elemT047 tokoe:valid" result="pass"/><test-case name="30372elemT047.i tokoe:invalid" result="pass"/><test-case name="30373elemT048 tokoe:valid" result="pass"/><test-case name="30374elemT048.i tokoe:invalid" result="pass"/><test-case name="30375elemT049 tokoe:valid" result="pass"/><test-case name="30376elemT049.i tokoe:invalid" result="pass"/><test-case name="30377elemT050 tokoe:valid" result="pass"/><test-case name="30378elemT050.i tokoe:invalid" result="pass"/><test-case name="30379elemT051 tokoe:valid" result="pass"/><test-case name="30380elemT051.i tokoe:invalid" result="pass"/><test-case name="30381elemT052 tokoe:valid" result="pass"/><test-case name="30382elemT052.i tokoe:invalid" result="pass"/><test-case name="30383elemT053 tokoe:valid" result="pass"/><test-case name="30384elemT053.i tokoe:invalid" result="pass"/><test-case name="30385elemT058 tokoe:valid" result="pass"/><test-case name="30386elemT058.v tokoe:valid" result="pass"/><test-case name="30387elemT059 tokoe:valid" result="pass"/><test-case name="30388elemT059.i tokoe:invalid" result="pass"/><test-case name="30389elemT060 tokoe:valid" result="pass"/><test-case name="30390elemT060.i tokoe:invalid" result="pass"/><test-case name="30391elemT061 tokoe:valid" result="pass"/><test-case name="30392elemT061.i tokoe:invalid" result="pass"/><test-case name="30393elemT062 tokoe:valid" result="pass"/><test-case name="30394elemT062.v tokoe:valid" result="pass"/><test-case name="30395elemT063 tokoe:valid" result="pass"/><test-case name="30396elemT063.i tokoe:invalid" result="pass"/><test-case name="30397elemT064 tokoe:valid" result="pass"/><test-case name="30398elemT064.v tokoe:valid" result="pass"/><test-case name="30399elemT065 tokoe:valid" result="pass"/><test-case name="30400elemT065.i tokoe:invalid" result="pass"/><test-case name="30401elemT066 tokoe:valid" result="pass"/><test-case name="30402elemT066.v tokoe:valid" result="pass"/><test-case name="30403elemT067 tokoe:valid" result="pass"/><test-case name="30404elemT067.v tokoe:valid" result="pass"/><test-case name="30405elemT068 tokoe:valid" result="pass"/><test-case name="30406elemT068.i tokoe:invalid" result="pass"/><test-case name="30407elemT069 tokoe:valid" result="pass"/><test-case name="30408elemT069.i tokoe:invalid" result="pass"/><test-case name="30409elemT070 tokoe:valid" result="pass"/><test-case name="30410elemT070.i tokoe:invalid" result="pass"/><test-case name="30411elemT071 tokoe:valid" result="pass"/><test-case name="30412elemT071.v tokoe:valid" result="pass"/><test-case name="30413elemT072 tokoe:valid" result="pass"/><test-case name="30414elemT072.v tokoe:valid" result="pass"/><test-case name="30415elemT073 tokoe:valid" result="pass"/><test-case name="30416elemT073.v tokoe:valid" result="pass"/><test-case name="30417elemT074 tokoe:valid" result="pass"/><test-case name="30418elemT074.i tokoe:invalid" result="pass"/><test-case name="30419elemU001 tokoe:valid" result="pass"/><test-case name="30420elemU001.v tokoe:valid" result="pass"/><test-case name="30421elemU002 tokoe:valid" result="pass"/><test-case name="30422elemU002.v tokoe:valid" result="pass"/><test-case name="30423elemU003 tokoe:valid" result="pass"/><test-case name="30424elemU003.v tokoe:valid" result="pass"/><test-case name="30425elemU004 tokoe:valid" result="pass"/><test-case name="30426elemU004.v tokoe:valid" result="pass"/><test-case name="30427elemU005 tokoe:valid" result="pass"/><test-case name="30428elemU005.v tokoe:valid" result="pass"/><test-case name="30429elemU006 tokoe:valid" result="pass"/><test-case name="30430elemU006.v tokoe:valid" result="pass"/><test-case name="30431elemU007 tokoe:valid" result="pass"/><test-case name="30432elemU007.v tokoe:valid" result="pass"/><test-case name="30433elemU008 tokoe:valid" result="pass"/><test-case name="30434elemU008.v tokoe:valid" result="pass"/><test-case name="30435elemU009 tokoe:valid" result="pass"/><test-case name="30436elemU009.v tokoe:valid" result="pass"/><test-case name="30437elemU010 tokoe:valid" result="pass"/><test-case name="30438elemU010.v tokoe:valid" result="pass"/><test-case name="30439elemU011 tokoe:valid" result="pass"/><test-case name="30440elemU011.v tokoe:valid" result="pass"/><test-case name="30441elemU012 tokoe:valid" result="pass"/><test-case name="30442elemU012.v tokoe:valid" result="pass"/><test-case name="30443elemU013 tokoe:valid" result="pass"/><test-case name="30444elemU013.v tokoe:valid" result="pass"/><test-case name="30445elemU014 tokoe:valid" result="pass"/><test-case name="30446elemU014.v tokoe:valid" result="pass"/><test-case name="30447elemU015 tokoe:valid" result="pass"/><test-case name="30448elemU015.v tokoe:valid" result="pass"/><test-case name="30449elemU017 tokoe:valid" result="pass"/><test-case name="30450elemU017.v tokoe:valid" result="pass"/><test-case name="30451elemU018 tokoe:valid" result="pass"/><test-case name="30452elemU018.v tokoe:valid" result="pass"/><test-case name="30453elemU019 tokoe:valid" result="pass"/><test-case name="30454elemU019.v tokoe:valid" result="pass"/><test-case name="30455elemU020 tokoe:valid" result="pass"/><test-case name="30456elemU020.v tokoe:valid" result="pass"/><test-case name="30457elemU021 tokoe:valid" result="pass"/><test-case name="30458elemU021.v tokoe:valid" result="pass"/><test-case name="30459elemU022 tokoe:valid" result="pass"/><test-case name="30460elemU022.v tokoe:valid" result="pass"/><test-case name="30461elemU023 tokoe:valid" result="pass"/><test-case name="30462elemU023.v tokoe:valid" result="pass"/><test-case name="30463elemU024 tokoe:valid" result="pass"/><test-case name="30464elemU024.v tokoe:valid" result="pass"/><test-case name="30465elemU025 tokoe:valid" result="pass"/><test-case name="30466elemU025.i tokoe:invalid" result="pass"/><test-case name="30467elemZ001 tokoe:valid" result="pass"/><test-case name="30468elemZ001.v tokoe:valid" result="pass"/><test-case name="30469elemZ002 tokoe:valid" result="pass"/><test-case name="30470elemZ002.v tokoe:valid" result="pass"/><test-case name="30471elemZ003 tokoe:valid" result="pass"/><test-case name="30472elemZ003.v tokoe:valid" result="pass"/><test-case name="30473elemZ005 tokoe:valid" result="pass"/><test-case name="30474elemZ008 tokoe:valid" result="pass"/><test-case name="30475elemZ009 tokoe:valid" result="pass"/><test-case name="30476elemZ009.v tokoe:valid" result="pass"/><test-case name="30477elemZ010 tokoe:valid" result="pass"/><test-case name="30478elemZ010.v tokoe:valid" result="pass"/><test-case name="30479elemZ011 tokoe:valid" result="pass"/><test-case name="30480elemZ012 tokoe:invalid" result="pass"/><test-case name="30481elemZ014 tokoe:valid" result="pass"/><test-case name="30482elemZ014.v tokoe:valid" result="pass"/><test-case name="30483elemZ015 tokoe:valid" result="pass"/><test-case name="30484elemZ015.i tokoe:invalid" result="pass"/><test-case name="30485elemZ016 tokoe:valid" result="pass"/><test-case name="30486elemZ016.i tokoe:invalid" result="pass"/><test-case name="30487elemZ017.v tokoe:valid" result="pass"/><test-case name="30488elemZ018 tokoe:valid" result="pass"/><test-case name="30489elemZ018.v tokoe:valid" result="pass"/><test-case name="30490elemZ019 tokoe:valid" result="pass"/><test-case name="30491elemZ019.v tokoe:valid" result="pass"/><test-case name="30492elemZ021a tokoe:valid" result="pass"/><test-case name="30493elemZ021a.v tokoe:valid" result="pass"/><test-case name="30494elemZ021b tokoe:valid" result="pass"/><test-case name="30495elemZ021b.i tokoe:invalid" result="pass"/><test-case name="30496elemZ021c tokoe:valid" result="pass"/><test-case name="30497elemZ021c.v tokoe:valid" result="pass"/><test-case name="30498elemZ021d tokoe:valid" result="pass"/><test-case name="30499elemZ021d.v tokoe:valid" result="pass"/><test-case name="30500elemZ021e tokoe:valid" result="pass"/><test-case name="30501elemZ021e.v tokoe:valid" result="pass"/><test-case name="30502elemZ021f tokoe:valid" result="pass"/><test-case name="30503elemZ021f.i tokoe:invalid" result="pass"/><test-case name="30504elemZ021g tokoe:valid" result="pass"/><test-case name="30505elemZ021g.i tokoe:invalid" result="pass"/><test-case name="30506elemZ022a tokoe:valid" result="pass"/><test-case name="30507elemZ022a.i tokoe:invalid" result="pass"/><test-case name="30508elemZ022b tokoe:valid" result="pass"/><test-case name="30509elemZ022b.v tokoe:valid" result="pass"/><test-case name="30510elemZ023 tokoe:valid" result="pass"/><test-case name="30511elemZ023.i tokoe:invalid" result="pass"/><test-case name="30512QFE1700a1 tokoe:valid" result="pass"/><test-case name="30513QFE1700a1.v tokoe:valid" result="pass"/><test-case name="30514QFE1700a2 tokoe:valid" result="pass"/><test-case name="30515QFE1700a2.v tokoe:valid" result="pass"/><test-case name="30516QFE1700a3 tokoe:valid" result="pass"/><test-case name="30517QFE1700a3.v tokoe:valid" result="pass"/><test-case name="30518QFE1700b1 tokoe:valid" result="pass"/><test-case name="30519QFE1700b1.v tokoe:valid" result="pass"/><test-case name="30520QFE1700b2 tokoe:valid" result="pass"/><test-case name="30521QFE1700b2.v tokoe:valid" result="pass"/><test-case name="30522QFE1700c1 tokoe:valid" result="pass"/><test-case name="30523QFE1700c1.i tokoe:invalid" result="pass"/><test-case name="30524QFE1700c2 tokoe:valid" result="pass"/><test-case name="30525QFE1700c2.v tokoe:valid" result="pass"/><test-case name="30526QFE1700d1 tokoe:valid" result="pass"/><test-case name="30527QFE1700d1.i tokoe:invalid" result="pass"/><test-case name="30528QFE1700e1 tokoe:valid" result="pass"/><test-case name="30529QFE1700e1.v tokoe:valid" result="pass"/><test-case name="30530QFE1700e2 tokoe:valid" result="pass"/><test-case name="30531QFE1700e2.v tokoe:valid" result="pass"/><test-case name="30532QFE1700e3 tokoe:valid" result="pass"/><test-case name="30533QFE1700e3.i tokoe:invalid" result="pass"/><test-case name="30534QFE1700f1 tokoe:valid" result="pass"/><test-case name="30535QFE1700f1.v tokoe:valid" result="pass"/><test-case name="30536QFE1700f2 tokoe:valid" result="pass"/><test-case name="30537QFE1700f2.v tokoe:valid" result="pass"/><test-case name="30538QFE1700f3 tokoe:valid" result="pass"/><test-case name="30539QFE1700f3.i tokoe:invalid" result="pass"/><test-case name="30540QFE1700g1 tokoe:valid" result="pass"/><test-case name="30541QFE1700g1.i tokoe:invalid" result="pass"/><test-case name="30542QFE1700g2 tokoe:valid" result="pass"/><test-case name="30543QFE1700g2.v tokoe:valid" result="pass"/><test-case name="30544elemZ025 tokoe:valid" result="pass"/><test-case name="30545elemZ027_a tokoe:valid" result="pass"/><test-case name="30546elemZ027_b tokoe:valid" result="pass"/><test-case name="30547elemZ027_e tokoe:valid" result="pass"/><test-case name="30548elemZ027_f tokoe:valid" result="pass"/><test-case name="30549elemZ028a tokoe:valid" result="pass"/><test-case name="30550elemZ028b tokoe:invalid" result="pass"/><test-case name="30551elemZ028e tokoe:invalid" result="pass"/><test-case name="30552elemZ029 tokoe:valid" result="pass"/><test-case name="30553elemZ029.v tokoe:valid" result="pass"/><test-case name="30554elemZ030 tokoe:invalid" result="pass"/><test-case name="30555elemZ032a tokoe:invalid" result="pass"/><test-case name="30556elemZ032b tokoe:invalid" result="pass"/><test-case name="30557elemZ033b.v tokoe:valid" result="pass"/><test-case name="30558errA001 tokoe:valid" result="pass"/><test-case name="30559errA001.v tokoe:valid" result="pass"/><test-case name="30560errA002 tokoe:valid" result="pass"/><test-case name="30561errA002.i tokoe:invalid" result="pass"/><test-case name="30562errA003 tokoe:valid" result="pass"/><test-case name="30563errA003.v tokoe:valid" result="pass"/><test-case name="30564errC001 tokoe:valid" result="pass"/><test-case name="30565errC001.v tokoe:valid" result="pass"/><test-case name="30566errC002 tokoe:valid" result="pass"/><test-case name="30567errC003 tokoe:valid" result="pass"/><test-case name="30568errC004 tokoe:valid" result="pass"/><test-case name="30569errC005 tokoe:invalid" result="pass"/><test-case name="30570errC006 tokoe:invalid" result="pass"/><test-case name="30571errC007 tokoe:valid" result="pass"/><test-case name="30572errC007.v tokoe:valid" result="pass"/><test-case name="30573errC008 tokoe:invalid" result="pass"/><test-case name="30574errC009 tokoe:invalid" result="pass"/><test-case name="30575errE001 tokoe:valid" result="pass"/><test-case name="30576errE001.v tokoe:valid" result="pass"/><test-case name="30577errE002 tokoe:valid" result="pass"/><test-case name="30578errE002.v tokoe:valid" result="pass"/><test-case name="30579errE003 tokoe:valid" result="pass"/><test-case name="30580errE003.v tokoe:valid" result="pass"/><test-case name="30581errE004 tokoe:valid" result="pass"/><test-case name="30582errE004.i tokoe:invalid" result="pass"/><test-case name="30583errE006 tokoe:valid" result="pass"/><test-case name="30584errE006.v tokoe:valid" result="fail"/><test-case name="30585errE008 tokoe:valid" result="pass"/><test-case name="30586errE008.v tokoe:valid" result="pass"/><test-case name="30587groupA001 tokoe:valid" result="pass"/><test-case name="30588groupA002 tokoe:valid" result="pass"/><test-case name="30589groupA003 tokoe:invalid" result="pass"/><test-case name="30590groupA004 tokoe:invalid" result="pass"/><test-case name="30591groupA005 tokoe:invalid" result="pass"/><test-case name="30592groupA006 tokoe:valid" result="pass"/><test-case name="30593groupA007 tokoe:valid" result="pass"/><test-case name="30594groupA008 tokoe:invalid" result="pass"/><test-case name="30595groupA009 tokoe:invalid" result="pass"/><test-case name="30596groupA010 tokoe:invalid" result="pass"/><test-case name="30597groupA011 tokoe:valid" result="pass"/><test-case name="30598groupA012 tokoe:invalid" result="pass"/><test-case name="30599groupB001 tokoe:invalid" result="pass"/><test-case name="30600groupB002v tokoe:valid" result="pass"/><test-case name="30601groupB002v.v tokoe:valid" result="pass"/><test-case name="30602groupB003v tokoe:valid" result="pass"/><test-case name="30603groupB003v.v tokoe:valid" result="pass"/><test-case name="30604groupB004v tokoe:valid" result="pass"/><test-case name="30605groupB004v.v tokoe:valid" result="pass"/><test-case name="30606groupB005v tokoe:valid" result="pass"/><test-case name="30607groupB005v.v tokoe:valid" result="pass"/><test-case name="30608groupB006v tokoe:valid" result="pass"/><test-case name="30609groupB006v.v tokoe:valid" result="pass"/><test-case name="30610groupB007 tokoe:invalid" result="pass"/><test-case name="30611groupB008 tokoe:invalid" result="pass"/><test-case name="30612groupB009v tokoe:valid" result="pass"/><test-case name="30613groupB009v.v tokoe:valid" result="pass"/><test-case name="30614groupB010v tokoe:valid" result="pass"/><test-case name="30615groupB010v.v tokoe:valid" result="pass"/><test-case name="30616groupB011 tokoe:invalid" result="pass"/><test-case name="30617groupB012 tokoe:invalid" result="pass"/><test-case name="30618groupB013 tokoe:invalid" result="pass"/><test-case name="30619groupB014 tokoe:invalid" result="pass"/><test-case name="30620groupB015 tokoe:invalid" result="pass"/><test-case name="30621groupB016 tokoe:invalid" result="pass"/><test-case name="30622groupB017 tokoe:valid" result="pass"/><test-case name="30623groupB018 tokoe:valid" result="pass"/><test-case name="30624groupC001 tokoe:invalid" result="pass"/><test-case name="30625groupC002 tokoe:invalid" result="pass"/><test-case name="30626groupC003 tokoe:invalid" result="pass"/><test-case name="30627groupC004 tokoe:invalid" result="pass"/><test-case name="30628groupC005 tokoe:invalid" result="pass"/><test-case name="30629groupC006 tokoe:invalid" result="pass"/><test-case name="30630groupC007 tokoe:invalid" result="pass"/><test-case name="30631groupC008 tokoe:invalid" result="pass"/><test-case name="30632groupC009 tokoe:invalid" result="pass"/><test-case name="30633groupC010 tokoe:invalid" result="pass"/><test-case name="30634groupC011 tokoe:valid" result="pass"/><test-case name="30635groupC012 tokoe:invalid" result="pass"/><test-case name="30636groupD001 tokoe:invalid" result="pass"/><test-case name="30637groupD002 tokoe:invalid" result="pass"/><test-case name="30638groupD003 tokoe:invalid" result="pass"/><test-case name="30639groupD004 tokoe:invalid" result="pass"/><test-case name="30640groupE002 tokoe:invalid" result="pass"/><test-case name="30641groupE003v tokoe:valid" result="pass"/><test-case name="30642groupE003v.i tokoe:invalid" result="pass"/><test-case name="30643groupE004v tokoe:valid" result="pass"/><test-case name="30644groupE004v.v tokoe:valid" result="pass"/><test-case name="30645groupE005v tokoe:valid" result="pass"/><test-case name="30646groupE005v.i tokoe:invalid" result="pass"/><test-case name="30647groupF001v tokoe:valid" result="pass"/><test-case name="30648groupF001v.v tokoe:valid" result="pass"/><test-case name="30649groupF002v tokoe:valid" result="pass"/><test-case name="30650groupF002v.v tokoe:valid" result="pass"/><test-case name="30651groupF003v tokoe:valid" result="pass"/><test-case name="30652groupF003v.i tokoe:invalid" result="pass"/><test-case name="30653groupF004v tokoe:valid" result="pass"/><test-case name="30654groupF004v.v tokoe:valid" result="pass"/><test-case name="30655groupF005v tokoe:valid" result="pass"/><test-case name="30656groupF005v.v tokoe:valid" result="pass"/><test-case name="30657groupF006v tokoe:valid" result="pass"/><test-case name="30658groupF006v.i tokoe:invalid" result="pass"/><test-case name="30659groupF007v tokoe:valid" result="pass"/><test-case name="30660groupF007v.v tokoe:valid" result="pass"/><test-case name="30661groupF008v tokoe:valid" result="pass"/><test-case name="30662groupF008v.i tokoe:invalid" result="pass"/><test-case name="30663groupF009v tokoe:valid" result="pass"/><test-case name="30664groupF009v.v tokoe:valid" result="fail"/><test-case name="30665groupF010v tokoe:valid" result="pass"/><test-case name="30666groupF010v.i tokoe:invalid" result="pass"/><test-case name="30667groupF011v tokoe:valid" result="pass"/><test-case name="30668groupF011v.v tokoe:valid" result="pass"/><test-case name="30669groupF012v tokoe:valid" result="pass"/><test-case name="30670groupF012v.i tokoe:invalid" result="pass"/><test-case name="30671groupF013v tokoe:valid" result="pass"/><test-case name="30672groupF013v.i tokoe:invalid" result="pass"/><test-case name="30673groupF014v tokoe:valid" result="pass"/><test-case name="30674groupF014v.v tokoe:valid" result="pass"/><test-case name="30675groupF015v tokoe:valid" result="pass"/><test-case name="30676groupF015v.i tokoe:invalid" result="pass"/><test-case name="30677groupF016v tokoe:valid" result="pass"/><test-case name="30678groupF016v.i tokoe:invalid" result="pass"/><test-case name="30679groupF017v tokoe:valid" result="pass"/><test-case name="30680groupF017v.v tokoe:valid" result="pass"/><test-case name="30681groupF018v tokoe:valid" result="pass"/><test-case name="30682groupF018v.v tokoe:valid" result="pass"/><test-case name="30683groupF019v tokoe:valid" result="pass"/><test-case name="30684groupF019v.i tokoe:invalid" result="pass"/><test-case name="30685groupF020 tokoe:invalid" result="pass"/><test-case name="30686groupF021v tokoe:valid" result="pass"/><test-case name="30687groupF021v.v tokoe:valid" result="pass"/><test-case name="30688groupF022 tokoe:invalid" result="pass"/><test-case name="30689groupF023 tokoe:invalid" result="pass"/><test-case name="30690groupF024 tokoe:invalid" result="pass"/><test-case name="30691groupF025 tokoe:invalid" result="pass"/><test-case name="30692groupG002 tokoe:invalid" result="pass"/><test-case name="30693groupG003v tokoe:valid" result="pass"/><test-case name="30694groupG003v.i tokoe:invalid" result="pass"/><test-case name="30695groupG004v tokoe:valid" result="pass"/><test-case name="30696groupG004v.v tokoe:valid" result="pass"/><test-case name="30697groupG005v tokoe:valid" result="pass"/><test-case name="30698groupG005v.i tokoe:invalid" result="pass"/><test-case name="30699groupH001v tokoe:valid" result="pass"/><test-case name="30700groupH001v.v tokoe:valid" result="pass"/><test-case name="30701groupH002v tokoe:valid" result="pass"/><test-case name="30702groupH002v.v tokoe:valid" result="pass"/><test-case name="30703groupH003v tokoe:valid" result="pass"/><test-case name="30704groupH003v.i tokoe:invalid" result="pass"/><test-case name="30705groupH004v tokoe:valid" result="pass"/><test-case name="30706groupH004v.v tokoe:valid" result="pass"/><test-case name="30707groupH005v tokoe:valid" result="pass"/><test-case name="30708groupH005v.v tokoe:valid" result="pass"/><test-case name="30709groupH006v tokoe:valid" result="pass"/><test-case name="30710groupH006v.i tokoe:invalid" result="pass"/><test-case name="30711groupH007v tokoe:invalid" result="pass"/><test-case name="30712groupH008v tokoe:valid" result="pass"/><test-case name="30713groupH008v.i tokoe:invalid" result="pass"/><test-case name="30714groupH009v tokoe:valid" result="pass"/><test-case name="30715groupH009v.v tokoe:valid" result="pass"/><test-case name="30716groupH010v tokoe:valid" result="pass"/><test-case name="30717groupH010v.i tokoe:invalid" result="pass"/><test-case name="30718groupH011v tokoe:valid" result="pass"/><test-case name="30719groupH011v.v tokoe:valid" result="pass"/><test-case name="30720groupH012v tokoe:valid" result="pass"/><test-case name="30721groupH012v.i tokoe:invalid" result="pass"/><test-case name="30722groupH013v tokoe:valid" result="pass"/><test-case name="30723groupH013v.i tokoe:invalid" result="pass"/><test-case name="30724groupH014v tokoe:valid" result="pass"/><test-case name="30725groupH014v.v tokoe:valid" result="pass"/><test-case name="30726groupH015v tokoe:valid" result="pass"/><test-case name="30727groupH015v.i tokoe:invalid" result="pass"/><test-case name="30728groupH016v tokoe:valid" result="pass"/><test-case name="30729groupH016v.i tokoe:invalid" result="pass"/><test-case name="30730groupH017v tokoe:valid" result="pass"/><test-case name="30731groupH017v.v tokoe:valid" result="pass"/><test-case name="30732groupH018v tokoe:valid" result="pass"/><test-case name="30733groupH018v.v tokoe:valid" result="pass"/><test-case name="30734groupH019v tokoe:valid" result="pass"/><test-case name="30735groupH019v.i tokoe:invalid" result="pass"/><test-case name="30736groupH020 tokoe:invalid" result="pass"/><test-case name="30737groupH022 tokoe:invalid" result="pass"/><test-case name="30738groupH023 tokoe:invalid" result="pass"/><test-case name="30739groupH024 tokoe:invalid" result="pass"/><test-case name="30740groupH025 tokoe:invalid" result="pass"/><test-case name="30741groupI002 tokoe:invalid" result="pass"/><test-case name="30742groupI003v tokoe:valid" result="pass"/><test-case name="30743groupI003v.i tokoe:invalid" result="pass"/><test-case name="30744groupI004v tokoe:valid" result="pass"/><test-case name="30745groupI004v.v tokoe:valid" result="pass"/><test-case name="30746groupI005v tokoe:valid" result="pass"/><test-case name="30747groupI005v.i tokoe:invalid" result="pass"/><test-case name="30748groupJ001v tokoe:valid" result="pass"/><test-case name="30749groupJ001v.v tokoe:valid" result="pass"/><test-case name="30750groupJ002v tokoe:valid" result="pass"/><test-case name="30751groupJ002v.v tokoe:valid" result="pass"/><test-case name="30752groupJ003v tokoe:valid" result="pass"/><test-case name="30753groupJ003v.i tokoe:invalid" result="pass"/><test-case name="30754groupJ004v tokoe:valid" result="pass"/><test-case name="30755groupJ004v.v tokoe:valid" result="pass"/><test-case name="30756groupJ005v tokoe:valid" result="pass"/><test-case name="30757groupJ005v.v tokoe:valid" result="pass"/><test-case name="30758groupJ006v tokoe:valid" result="pass"/><test-case name="30759groupJ006v.i tokoe:invalid" result="pass"/><test-case name="30760groupJ007v tokoe:valid" result="pass"/><test-case name="30761groupJ007v.v tokoe:valid" result="pass"/><test-case name="30762groupJ008v tokoe:valid" result="pass"/><test-case name="30763groupJ008v.i tokoe:invalid" result="pass"/><test-case name="30764groupJ010v tokoe:valid" result="pass"/><test-case name="30765groupJ010v.i tokoe:invalid" result="pass"/><test-case name="30766groupJ011v tokoe:valid" result="pass"/><test-case name="30767groupJ011v.v tokoe:valid" result="pass"/><test-case name="30768groupJ012v tokoe:valid" result="pass"/><test-case name="30769groupJ012v.i tokoe:invalid" result="pass"/><test-case name="30770groupJ013v tokoe:valid" result="pass"/><test-case name="30771groupJ013v.i tokoe:invalid" result="pass"/><test-case name="30772groupJ014v tokoe:valid" result="pass"/><test-case name="30773groupJ014v.v tokoe:valid" result="pass"/><test-case name="30774groupJ015v tokoe:valid" result="pass"/><test-case name="30775groupJ015v.i tokoe:invalid" result="pass"/><test-case name="30776groupJ016v tokoe:valid" result="pass"/><test-case name="30777groupJ016v.i tokoe:invalid" result="pass"/><test-case name="30778groupJ017v tokoe:valid" result="pass"/><test-case name="30779groupJ017v.v tokoe:valid" result="pass"/><test-case name="30780groupJ018v tokoe:valid" result="pass"/><test-case name="30781groupJ018v.v tokoe:valid" result="pass"/><test-case name="30782groupJ019v tokoe:valid" result="pass"/><test-case name="30783groupJ019v.i tokoe:invalid" result="pass"/><test-case name="30784groupJ020 tokoe:invalid" result="pass"/><test-case name="30785groupJ021v tokoe:valid" result="pass"/><test-case name="30786groupJ021v.v tokoe:valid" result="pass"/><test-case name="30787groupJ022 tokoe:invalid" result="pass"/><test-case name="30788groupJ023 tokoe:invalid" result="pass"/><test-case name="30789groupJ024 tokoe:invalid" result="pass"/><test-case name="30790groupJ025 tokoe:invalid" result="pass"/><test-case name="30791groupK002 tokoe:invalid" result="pass"/><test-case name="30792groupK003v tokoe:valid" result="pass"/><test-case name="30793groupK003v.i tokoe:invalid" result="pass"/><test-case name="30794groupK004v tokoe:valid" result="pass"/><test-case name="30795groupK004v.v tokoe:valid" result="pass"/><test-case name="30796groupK005v tokoe:valid" result="pass"/><test-case name="30797groupK005v.i tokoe:invalid" result="pass"/><test-case name="30798groupL001v tokoe:valid" result="pass"/><test-case name="30799groupL001v.v tokoe:valid" result="pass"/><test-case name="30800groupL002v tokoe:valid" result="pass"/><test-case name="30801groupL002v.v tokoe:valid" result="pass"/><test-case name="30802groupL003v tokoe:valid" result="pass"/><test-case name="30803groupL003v.i tokoe:invalid" result="pass"/><test-case name="30804groupL004v tokoe:valid" result="pass"/><test-case name="30805groupL004v.v tokoe:valid" result="pass"/><test-case name="30806groupL005v tokoe:valid" result="pass"/><test-case name="30807groupL005v.v tokoe:valid" result="pass"/><test-case name="30808groupL006v tokoe:valid" result="pass"/><test-case name="30809groupL006v.i tokoe:invalid" result="pass"/><test-case name="30810groupL007 tokoe:valid" result="pass"/><test-case name="30811groupL007.v tokoe:valid" result="pass"/><test-case name="30812groupL008v tokoe:valid" result="pass"/><test-case name="30813groupL008v.i tokoe:invalid" result="pass"/><test-case name="30814groupL009v tokoe:valid" result="pass"/><test-case name="30815groupL009v.v tokoe:valid" result="pass"/><test-case name="30816groupL010v tokoe:valid" result="pass"/><test-case name="30817groupL010v.i tokoe:invalid" result="pass"/><test-case name="30818groupL011v tokoe:valid" result="pass"/><test-case name="30819groupL011v.v tokoe:valid" result="pass"/><test-case name="30820groupL012v tokoe:valid" result="pass"/><test-case name="30821groupL012v.i tokoe:invalid" result="pass"/><test-case name="30822groupL013v tokoe:valid" result="pass"/><test-case name="30823groupL013v.i tokoe:invalid" result="pass"/><test-case name="30824groupL014v tokoe:valid" result="pass"/><test-case name="30825groupL014v.v tokoe:valid" result="pass"/><test-case name="30826groupL015v tokoe:valid" result="pass"/><test-case name="30827groupL015v.i tokoe:invalid" result="pass"/><test-case name="30828groupL016v tokoe:valid" result="pass"/><test-case name="30829groupL016v.i tokoe:invalid" result="pass"/><test-case name="30830groupL017v tokoe:valid" result="pass"/><test-case name="30831groupL017v.v tokoe:valid" result="pass"/><test-case name="30832groupL018v tokoe:valid" result="pass"/><test-case name="30833groupL018v.v tokoe:valid" result="pass"/><test-case name="30834groupL019v tokoe:valid" result="pass"/><test-case name="30835groupL019v.i tokoe:invalid" result="pass"/><test-case name="30836groupL020 tokoe:invalid" result="pass"/><test-case name="30837groupL021v tokoe:valid" result="pass"/><test-case name="30838groupL021v.v tokoe:valid" result="pass"/><test-case name="30839groupL022 tokoe:invalid" result="pass"/><test-case name="30840groupL023 tokoe:invalid" result="pass"/><test-case name="30841groupL024 tokoe:invalid" result="pass"/><test-case name="30842groupL025 tokoe:invalid" result="pass"/><test-case name="30843groupM002 tokoe:invalid" result="pass"/><test-case name="30844groupM003v tokoe:valid" result="pass"/><test-case name="30845groupM003v.i tokoe:invalid" result="pass"/><test-case name="30846groupM004v tokoe:valid" result="pass"/><test-case name="30847groupM004v.v tokoe:valid" result="pass"/><test-case name="30848groupM005v tokoe:valid" result="pass"/><test-case name="30849groupM005v.i tokoe:invalid" result="pass"/><test-case name="30850groupN001v tokoe:valid" result="pass"/><test-case name="30851groupN001v.v tokoe:valid" result="pass"/><test-case name="30852groupN002v tokoe:valid" result="pass"/><test-case name="30853groupN002v.v tokoe:valid" result="pass"/><test-case name="30854groupN003v tokoe:valid" result="pass"/><test-case name="30855groupN003v.i tokoe:invalid" result="pass"/><test-case name="30856groupN004v tokoe:valid" result="pass"/><test-case name="30857groupN004v.v tokoe:valid" result="pass"/><test-case name="30858groupN005v tokoe:valid" result="pass"/><test-case name="30859groupN005v.v tokoe:valid" result="pass"/><test-case name="30860groupN006v tokoe:valid" result="pass"/><test-case name="30861groupN006v.i tokoe:invalid" result="pass"/><test-case name="30862groupN007v tokoe:valid" result="pass"/><test-case name="30863groupN007v.v tokoe:valid" result="pass"/><test-case name="30864groupN008v tokoe:valid" result="pass"/><test-case name="30865groupN008v.i tokoe:invalid" result="pass"/><test-case name="30866groupN009v tokoe:valid" result="pass"/><test-case name="30867groupN009v.v tokoe:valid" result="pass"/><test-case name="30868groupN010v tokoe:valid" result="pass"/><test-case name="30869groupN010v.i tokoe:invalid" result="pass"/><test-case name="30870groupN011v tokoe:valid" result="pass"/><test-case name="30871groupN011v.v tokoe:valid" result="pass"/><test-case name="30872groupN012v tokoe:valid" result="pass"/><test-case name="30873groupN012v.i tokoe:invalid" result="pass"/><test-case name="30874groupN013v tokoe:valid" result="pass"/><test-case name="30875groupN013v.i tokoe:invalid" result="pass"/><test-case name="30876groupN014v tokoe:valid" result="pass"/><test-case name="30877groupN014v.v tokoe:valid" result="pass"/><test-case name="30878groupN015v tokoe:valid" result="pass"/><test-case name="30879groupN015v.i tokoe:invalid" result="pass"/><test-case name="30880groupN016v tokoe:valid" result="pass"/><test-case name="30881groupN016v.i tokoe:invalid" result="pass"/><test-case name="30882groupN017v tokoe:valid" result="pass"/><test-case name="30883groupN017v.v tokoe:valid" result="pass"/><test-case name="30884groupN018v tokoe:valid" result="pass"/><test-case name="30885groupN018v.v tokoe:valid" result="pass"/><test-case name="30886groupN019v tokoe:valid" result="pass"/><test-case name="30887groupN019v.i tokoe:invalid" result="pass"/><test-case name="30888groupN020 tokoe:invalid" result="pass"/><test-case name="30889groupN021v tokoe:valid" result="pass"/><test-case name="30890groupN021v.v tokoe:valid" result="pass"/><test-case name="30891groupN022 tokoe:invalid" result="pass"/><test-case name="30892groupN023 tokoe:invalid" result="pass"/><test-case name="30893groupN024 tokoe:invalid" result="pass"/><test-case name="30894groupN025 tokoe:invalid" result="pass"/><test-case name="30895groupO001 tokoe:valid" result="pass"/><test-case name="30896groupO002 tokoe:invalid" result="pass"/><test-case name="30897groupO003 tokoe:invalid" result="pass"/><test-case name="30898groupO004v tokoe:valid" result="pass"/><test-case name="30899groupO004v.v tokoe:valid" result="pass"/><test-case name="30900groupO005v tokoe:valid" result="pass"/><test-case name="30901groupO005v.i tokoe:invalid" result="pass"/><test-case name="30902groupO006v tokoe:valid" result="pass"/><test-case name="30903groupO006v.v tokoe:valid" result="pass"/><test-case name="30904groupO007v tokoe:valid" result="pass"/><test-case name="30905groupO007v.i tokoe:invalid" result="pass"/><test-case name="30906groupO008v tokoe:valid" result="pass"/><test-case name="30907groupO008v.v tokoe:valid" result="pass"/><test-case name="30908groupO009v tokoe:valid" result="pass"/><test-case name="30909groupO009v.i tokoe:invalid" result="pass"/><test-case name="30910groupO010 tokoe:invalid" result="pass"/><test-case name="30911groupO011 tokoe:invalid" result="pass"/><test-case name="30912groupO012 tokoe:invalid" result="pass"/><test-case name="30913groupO013 tokoe:invalid" result="pass"/><test-case name="30914groupO014 tokoe:valid" result="pass"/><test-case name="30915groupO015 tokoe:invalid" result="pass"/><test-case name="30916groupO016 tokoe:invalid" result="pass"/><test-case name="30917groupO017 tokoe:invalid" result="pass"/><test-case name="30918groupO018 tokoe:invalid" result="pass"/><test-case name="30919groupO019 tokoe:invalid" result="pass"/><test-case name="30920groupO020 tokoe:invalid" result="pass"/><test-case name="30921groupO021 tokoe:invalid" result="pass"/><test-case name="30922groupO022 tokoe:invalid" result="pass"/><test-case name="30923groupO023 tokoe:invalid" result="pass"/><test-case name="30924groupO024 tokoe:invalid" result="pass"/><test-case name="30925groupO025 tokoe:invalid" result="pass"/><test-case name="30926groupO026 tokoe:invalid" result="pass"/><test-case name="30927groupO027 tokoe:invalid" result="pass"/><test-case name="30928idA001 tokoe:valid" result="pass"/><test-case name="30929idA002 tokoe:invalid" result="pass"/><test-case name="30930idA003 tokoe:valid" result="pass"/><test-case name="30931idA004 tokoe:valid" result="pass"/><test-case name="30932idA005 tokoe:valid" result="pass"/><test-case name="30933idA006 tokoe:invalid" result="pass"/><test-case name="30934idA007 tokoe:invalid" result="pass"/><test-case name="30935idA008 tokoe:valid" result="pass"/><test-case name="30936idA009 tokoe:valid" result="pass"/><test-case name="30937idA010 tokoe:valid" result="pass"/><test-case name="30938idA011 tokoe:valid" result="pass"/><test-case name="30939idA012 tokoe:valid" result="pass"/><test-case name="30940idA013 tokoe:valid" result="pass"/><test-case name="30941idA014 tokoe:valid" result="pass"/><test-case name="30942idA015 tokoe:valid" result="pass"/><test-case name="30943idA016 tokoe:invalid" result="pass"/><test-case name="30944idA017 tokoe:valid" result="pass"/><test-case name="30945idA018 tokoe:invalid" result="pass"/><test-case name="30946idA019 tokoe:invalid" result="pass"/><test-case name="30947idA020 tokoe:invalid" result="pass"/><test-case name="30948idA021 tokoe:invalid" result="pass"/><test-case name="30949idA022 tokoe:valid" result="pass"/><test-case name="30950idA023 tokoe:invalid" result="pass"/><test-case name="30951idA024 tokoe:invalid" result="pass"/><test-case name="30952idA025 tokoe:invalid" result="pass"/><test-case name="30953idA026 tokoe:invalid" result="pass"/><test-case name="30954idA027 tokoe:invalid" result="pass"/><test-case name="30955idA028 tokoe:invalid" result="pass"/><test-case name="30956idA029 tokoe:invalid" result="pass"/><test-case name="30957idA030 tokoe:invalid" result="pass"/><test-case name="30958idA031 tokoe:invalid" result="pass"/><test-case name="30959idA032 tokoe:invalid" result="pass"/><test-case name="30960idA033 tokoe:valid" result="pass"/><test-case name="30961idA034 tokoe:valid" result="pass"/><test-case name="30962idA035 tokoe:invalid" result="pass"/><test-case name="30963idA036 tokoe:valid" result="pass"/><test-case name="30964idA037 tokoe:invalid" result="pass"/><test-case name="30965idA038 tokoe:invalid" result="pass"/><test-case name="30966idA039 tokoe:invalid" result="pass"/><test-case name="30967idA040 tokoe:valid" result="pass"/><test-case name="30968idA041 tokoe:valid" result="pass"/><test-case name="30969idA042 tokoe:invalid" result="pass"/><test-case name="30970idA043 tokoe:invalid" result="pass"/><test-case name="30971idA044 tokoe:invalid" result="pass"/><test-case name="30972idA045 tokoe:valid" result="pass"/><test-case name="30973idA046 tokoe:invalid" result="pass"/><test-case name="30974idA047 tokoe:invalid" result="pass"/><test-case name="30975idA048 tokoe:invalid" result="pass"/><test-case name="30976idA049 tokoe:invalid" result="pass"/><test-case name="30977idA050 tokoe:invalid" result="pass"/><test-case name="30978idA051 tokoe:invalid" result="pass"/><test-case name="30979idA052 tokoe:invalid" result="pass"/><test-case name="30980idA053 tokoe:invalid" result="pass"/><test-case name="30981idA054 tokoe:invalid" result="pass"/><test-case name="30982idA055 tokoe:invalid" result="pass"/><test-case name="30983idA056 tokoe:invalid" result="pass"/><test-case name="30984idA057 tokoe:invalid" result="pass"/><test-case name="30985idA058 tokoe:invalid" result="pass"/><test-case name="30986idA059 tokoe:invalid" result="pass"/><test-case name="30987idA060 tokoe:invalid" result="pass"/><test-case name="30988idB001 tokoe:valid" result="pass"/><test-case name="30989idB002 tokoe:invalid" result="pass"/><test-case name="30990idB003 tokoe:valid" result="pass"/><test-case name="30991idB004 tokoe:valid" result="pass"/><test-case name="30992idB005 tokoe:invalid" result="pass"/><test-case name="30993idB006 tokoe:invalid" result="pass"/><test-case name="30994idB007 tokoe:invalid" result="pass"/><test-case name="30995idB008 tokoe:valid" result="pass"/><test-case name="30996idB009 tokoe:valid" result="pass"/><test-case name="30997idB010 tokoe:valid" result="pass"/><test-case name="30998idB011 tokoe:valid" result="pass"/><test-case name="30999idB012 tokoe:valid" result="pass"/><test-case name="31000idB013 tokoe:valid" result="pass"/><test-case name="31001idB014 tokoe:valid" result="pass"/><test-case name="31002idB015 tokoe:valid" result="pass"/><test-case name="31003idB016 tokoe:invalid" result="pass"/><test-case name="31004idB017 tokoe:invalid" result="pass"/><test-case name="31005idB018 tokoe:valid" result="pass"/><test-case name="31006idB019 tokoe:invalid" result="pass"/><test-case name="31007idB020 tokoe:invalid" result="pass"/><test-case name="31008idB021 tokoe:invalid" result="pass"/><test-case name="31009idB022 tokoe:valid" result="pass"/><test-case name="31010idB023 tokoe:invalid" result="pass"/><test-case name="31011idB024 tokoe:invalid" result="pass"/><test-case name="31012idB025 tokoe:invalid" result="pass"/><test-case name="31013idB026 tokoe:invalid" result="pass"/><test-case name="31014idB027 tokoe:invalid" result="pass"/><test-case name="31015idB028 tokoe:invalid" result="pass"/><test-case name="31016idB029 tokoe:invalid" result="pass"/><test-case name="31017idB030 tokoe:invalid" result="pass"/><test-case name="31018idB031 tokoe:invalid" result="pass"/><test-case name="31019idB032 tokoe:invalid" result="pass"/><test-case name="31020idB033 tokoe:valid" result="pass"/><test-case name="31021idB034 tokoe:valid" result="pass"/><test-case name="31022idB035 tokoe:invalid" result="pass"/><test-case name="31023idB036 tokoe:valid" result="pass"/><test-case name="31024idB037 tokoe:invalid" result="pass"/><test-case name="31025idB038 tokoe:invalid" result="pass"/><test-case name="31026idB039 tokoe:invalid" result="pass"/><test-case name="31027idB040 tokoe:valid" result="pass"/><test-case name="31028idB041 tokoe:valid" result="pass"/><test-case name="31029idB042 tokoe:invalid" result="pass"/><test-case name="31030idB043 tokoe:invalid" result="pass"/><test-case name="31031idB044 tokoe:invalid" result="pass"/><test-case name="31032idB045 tokoe:valid" result="pass"/><test-case name="31033idB046 tokoe:invalid" result="pass"/><test-case name="31034idB047 tokoe:invalid" result="pass"/><test-case name="31035idB048 tokoe:invalid" result="pass"/><test-case name="31036idB049 tokoe:invalid" result="pass"/><test-case name="31037idB050 tokoe:invalid" result="pass"/><test-case name="31038idB051 tokoe:invalid" result="pass"/><test-case name="31039idB052 tokoe:invalid" result="pass"/><test-case name="31040idB053 tokoe:invalid" result="pass"/><test-case name="31041idB054 tokoe:invalid" result="pass"/><test-case name="31042idB055 tokoe:invalid" result="pass"/><test-case name="31043idB056 tokoe:invalid" result="pass"/><test-case name="31044idB057 tokoe:invalid" result="pass"/><test-case name="31045idB058 tokoe:invalid" result="pass"/><test-case name="31046idB059 tokoe:invalid" result="pass"/><test-case name="31047idB060 tokoe:invalid" result="pass"/><test-case name="31048idC001 tokoe:valid" result="pass"/><test-case name="31049idC002 tokoe:invalid" result="pass"/><test-case name="31050idC003 tokoe:valid" result="pass"/><test-case name="31051idC004 tokoe:valid" result="pass"/><test-case name="31052idC005 tokoe:valid" result="pass"/><test-case name="31053idC006 tokoe:invalid" result="pass"/><test-case name="31054idC007 tokoe:invalid" result="pass"/><test-case name="31055idC008 tokoe:valid" result="pass"/><test-case name="31056idC009 tokoe:valid" result="pass"/><test-case name="31057idC010 tokoe:valid" result="pass"/><test-case name="31058idC011 tokoe:valid" result="pass"/><test-case name="31059idC012 tokoe:valid" result="pass"/><test-case name="31060idC013 tokoe:valid" result="pass"/><test-case name="31061idC014 tokoe:valid" result="pass"/><test-case name="31062idC015 tokoe:valid" result="pass"/><test-case name="31063idC016 tokoe:invalid" result="pass"/><test-case name="31064idC017 tokoe:invalid" result="pass"/><test-case name="31065idC018 tokoe:invalid" result="pass"/><test-case name="31066idC020 tokoe:invalid" result="pass"/><test-case name="31067idC021 tokoe:invalid" result="pass"/><test-case name="31068idC022 tokoe:valid" result="pass"/><test-case name="31069idC023 tokoe:invalid" result="pass"/><test-case name="31070idC024 tokoe:invalid" result="pass"/><test-case name="31071idC025 tokoe:invalid" result="pass"/><test-case name="31072idC026 tokoe:invalid" result="pass"/><test-case name="31073idC027 tokoe:invalid" result="pass"/><test-case name="31074idC028 tokoe:invalid" result="pass"/><test-case name="31075idC029 tokoe:invalid" result="pass"/><test-case name="31076idC030 tokoe:invalid" result="pass"/><test-case name="31077idC031 tokoe:invalid" result="pass"/><test-case name="31078idC032 tokoe:invalid" result="pass"/><test-case name="31079idC033 tokoe:valid" result="pass"/><test-case name="31080idC034 tokoe:valid" result="pass"/><test-case name="31081idC035 tokoe:valid" result="pass"/><test-case name="31082idC036 tokoe:valid" result="pass"/><test-case name="31083idC038 tokoe:invalid" result="pass"/><test-case name="31084idC039 tokoe:valid" result="pass"/><test-case name="31085idC040 tokoe:invalid" result="pass"/><test-case name="31086idC041 tokoe:invalid" result="pass"/><test-case name="31087idC042 tokoe:invalid" result="pass"/><test-case name="31088idC043 tokoe:valid" result="pass"/><test-case name="31089idC044 tokoe:valid" result="pass"/><test-case name="31090idC045 tokoe:invalid" result="pass"/><test-case name="31091idC046 tokoe:invalid" result="pass"/><test-case name="31092idC047 tokoe:invalid" result="pass"/><test-case name="31093idC048 tokoe:valid" result="pass"/><test-case name="31094idC049 tokoe:invalid" result="pass"/><test-case name="31095idC050 tokoe:invalid" result="pass"/><test-case name="31096idC051 tokoe:invalid" result="pass"/><test-case name="31097idC052 tokoe:invalid" result="pass"/><test-case name="31098idC053 tokoe:invalid" result="pass"/><test-case name="31099idC054 tokoe:invalid" result="pass"/><test-case name="31100idC055 tokoe:invalid" result="pass"/><test-case name="31101idC056 tokoe:invalid" result="pass"/><test-case name="31102idC057 tokoe:invalid" result="pass"/><test-case name="31103idC058 tokoe:invalid" result="pass"/><test-case name="31104idC059 tokoe:invalid" result="pass"/><test-case name="31105idC060 tokoe:invalid" result="pass"/><test-case name="31106idC061 tokoe:invalid" result="pass"/><test-case name="31107idC062 tokoe:invalid" result="pass"/><test-case name="31108idC063 tokoe:invalid" result="pass"/><test-case name="31109idD001 tokoe:valid" result="pass"/><test-case name="31110idD002 tokoe:invalid" result="pass"/><test-case name="31111idD003 tokoe:valid" result="pass"/><test-case name="31112idD004 tokoe:invalid" result="pass"/><test-case name="31113idD005 tokoe:invalid" result="pass"/><test-case name="31114idD006 tokoe:invalid" result="pass"/><test-case name="31115idD007 tokoe:invalid" result="pass"/><test-case name="31116idD008 tokoe:valid" result="pass"/><test-case name="31117idD009 tokoe:valid" result="pass"/><test-case name="31118idD010 tokoe:valid" result="pass"/><test-case name="31119idD011 tokoe:invalid" result="pass"/><test-case name="31120idD012 tokoe:invalid" result="pass"/><test-case name="31121idD013 tokoe:valid" result="pass"/><test-case name="31122idD014 tokoe:invalid" result="pass"/><test-case name="31123idD015 tokoe:valid" result="pass"/><test-case name="31124idD016 tokoe:valid" result="pass"/><test-case name="31125idD017 tokoe:invalid" result="pass"/><test-case name="31126idD018 tokoe:invalid" result="pass"/><test-case name="31127idD019 tokoe:invalid" result="pass"/><test-case name="31128idD020 tokoe:invalid" result="pass"/><test-case name="31129idD021 tokoe:invalid" result="pass"/><test-case name="31130idD022 tokoe:invalid" result="pass"/><test-case name="31131idD023 tokoe:invalid" result="pass"/><test-case name="31132idD024 tokoe:invalid" result="pass"/><test-case name="31133idD025 tokoe:invalid" result="pass"/><test-case name="31134idD026 tokoe:invalid" result="pass"/><test-case name="31135idD027 tokoe:invalid" result="pass"/><test-case name="31136idD028 tokoe:invalid" result="pass"/><test-case name="31137idD029 tokoe:invalid" result="pass"/><test-case name="31138idD030 tokoe:invalid" result="pass"/><test-case name="31139idD031 tokoe:invalid" result="pass"/><test-case name="31140idD032 tokoe:invalid" result="pass"/><test-case name="31141idD033 tokoe:invalid" result="pass"/><test-case name="31142idE001 tokoe:valid" result="pass"/><test-case name="31143idE002 tokoe:invalid" result="pass"/><test-case name="31144idE003 tokoe:valid" result="pass"/><test-case name="31145idE004 tokoe:invalid" result="pass"/><test-case name="31146idE005 tokoe:invalid" result="pass"/><test-case name="31147idE006 tokoe:invalid" result="pass"/><test-case name="31148idE007 tokoe:invalid" result="pass"/><test-case name="31149idE008 tokoe:valid" result="pass"/><test-case name="31150idE009 tokoe:valid" result="pass"/><test-case name="31151idE010 tokoe:valid" result="pass"/><test-case name="31152idE011 tokoe:invalid" result="pass"/><test-case name="31153idE012 tokoe:invalid" result="pass"/><test-case name="31154idE013 tokoe:valid" result="pass"/><test-case name="31155idE014 tokoe:invalid" result="pass"/><test-case name="31156idE015 tokoe:valid" result="pass"/><test-case name="31157idE016 tokoe:valid" result="pass"/><test-case name="31158idE017 tokoe:invalid" result="pass"/><test-case name="31159idE018 tokoe:invalid" result="pass"/><test-case name="31160idE019 tokoe:invalid" result="pass"/><test-case name="31161idE020 tokoe:invalid" result="pass"/><test-case name="31162idE021 tokoe:invalid" result="pass"/><test-case name="31163idE022 tokoe:invalid" result="pass"/><test-case name="31164idE023 tokoe:invalid" result="pass"/><test-case name="31165idE024 tokoe:invalid" result="pass"/><test-case name="31166idE025 tokoe:invalid" result="pass"/><test-case name="31167idE026 tokoe:invalid" result="pass"/><test-case name="31168idE027 tokoe:invalid" result="pass"/><test-case name="31169idE028 tokoe:invalid" result="pass"/><test-case name="31170idE029 tokoe:invalid" result="pass"/><test-case name="31171idE030 tokoe:invalid" result="pass"/><test-case name="31172idE031 tokoe:invalid" result="pass"/><test-case name="31173idE032 tokoe:invalid" result="pass"/><test-case name="31174idE033 tokoe:invalid" result="pass"/><test-case name="31175idF001 tokoe:valid" result="pass"/><test-case name="31176idF001.v tokoe:valid" result="pass"/><test-case name="31177idF003 tokoe:valid" result="pass"/><test-case name="31178idF003.v tokoe:valid" result="pass"/><test-case name="31179idF004 tokoe:valid" result="pass"/><test-case name="31180idF004.v tokoe:valid" result="pass"/><test-case name="31181idF005 tokoe:valid" result="pass"/><test-case name="31182idF005.i tokoe:invalid" result="pass"/><test-case name="31183idF006 tokoe:valid" result="pass"/><test-case name="31184idF006.i tokoe:invalid" result="pass"/><test-case name="31185idF007 tokoe:valid" result="pass"/><test-case name="31186idF007.v tokoe:valid" result="pass"/><test-case name="31187idF008 tokoe:valid" result="pass"/><test-case name="31188idF008.i tokoe:invalid" result="pass"/><test-case name="31189idF009 tokoe:valid" result="pass"/><test-case name="31190idF009.v tokoe:valid" result="pass"/><test-case name="31191idF010 tokoe:valid" result="pass"/><test-case name="31192idF010.i tokoe:invalid" result="pass"/><test-case name="31193idF011 tokoe:valid" result="pass"/><test-case name="31194idF011.v tokoe:valid" result="pass"/><test-case name="31195idF012 tokoe:valid" result="pass"/><test-case name="31196idF012.v tokoe:valid" result="pass"/><test-case name="31197idF013 tokoe:valid" result="pass"/><test-case name="31198idF013.v tokoe:valid" result="pass"/><test-case name="31199idF014 tokoe:valid" result="pass"/><test-case name="31200idF014.v tokoe:valid" result="pass"/><test-case name="31201idF015 tokoe:valid" result="pass"/><test-case name="31202idF015.i tokoe:invalid" result="fail"/><test-case name="31203idF016 tokoe:valid" result="pass"/><test-case name="31204idF016.i tokoe:invalid" result="fail"/><test-case name="31205idF017 tokoe:valid" result="pass"/><test-case name="31206idF017.i tokoe:invalid" result="fail"/><test-case name="31207idF018 tokoe:valid" result="pass"/><test-case name="31208idF018.i tokoe:invalid" result="pass"/><test-case name="31209idF019 tokoe:valid" result="pass"/><test-case name="31210idF019.v tokoe:valid" result="pass"/><test-case name="31211idF020 tokoe:valid" result="pass"/><test-case name="31212idF020.v tokoe:valid" result="pass"/><test-case name="31213idF021 tokoe:valid" result="pass"/><test-case name="31214idF021.v tokoe:valid" result="pass"/><test-case name="31215idF022 tokoe:valid" result="pass"/><test-case name="31216idF022.v tokoe:valid" result="pass"/><test-case name="31217idF023 tokoe:valid" result="pass"/><test-case name="31218idF023.v tokoe:valid" result="pass"/><test-case name="31219idF024 tokoe:valid" result="pass"/><test-case name="31220idF024.v tokoe:valid" result="pass"/><test-case name="31221idF025 tokoe:valid" result="pass"/><test-case name="31222idF025.v tokoe:valid" result="pass"/><test-case name="31223idF026 tokoe:valid" result="pass"/><test-case name="31224idF026.v tokoe:valid" result="pass"/><test-case name="31225idF027 tokoe:valid" result="pass"/><test-case name="31226idF027.v tokoe:valid" result="pass"/><test-case name="31227idF028 tokoe:valid" result="pass"/><test-case name="31228idF028.v tokoe:valid" result="pass"/><test-case name="31229idF029 tokoe:valid" result="pass"/><test-case name="31230idF029.v tokoe:valid" result="pass"/><test-case name="31231idF030 tokoe:valid" result="pass"/><test-case name="31232idF030.v tokoe:valid" result="pass"/><test-case name="31233idF031 tokoe:valid" result="pass"/><test-case name="31234idF031.v tokoe:valid" result="pass"/><test-case name="31235idF032 tokoe:valid" result="pass"/><test-case name="31236idF032.v tokoe:valid" result="pass"/><test-case name="31237idF033 tokoe:valid" result="pass"/><test-case name="31238idF033.v tokoe:valid" result="pass"/><test-case name="31239idF034 tokoe:valid" result="pass"/><test-case name="31240idF034.v tokoe:valid" result="pass"/><test-case name="31241idF035 tokoe:valid" result="pass"/><test-case name="31242idF035.v tokoe:valid" result="pass"/><test-case name="31243idF036 tokoe:valid" result="pass"/><test-case name="31244idF036.v tokoe:valid" result="pass"/><test-case name="31245idG001 tokoe:valid" result="pass"/><test-case name="31246idG001.v tokoe:valid" result="pass"/><test-case name="31247idG003 tokoe:valid" result="pass"/><test-case name="31248idG003.i tokoe:invalid" result="pass"/><test-case name="31249idG004 tokoe:valid" result="pass"/><test-case name="31250idG004.v tokoe:valid" result="pass"/><test-case name="31251idG005 tokoe:valid" result="pass"/><test-case name="31252idG005.i tokoe:invalid" result="pass"/><test-case name="31253idG006 tokoe:valid" result="pass"/><test-case name="31254idG006.i tokoe:invalid" result="pass"/><test-case name="31255idG007 tokoe:valid" result="pass"/><test-case name="31256idG007.v tokoe:valid" result="pass"/><test-case name="31257idG008 tokoe:valid" result="pass"/><test-case name="31258idG008.i tokoe:invalid" result="pass"/><test-case name="31259idG009 tokoe:valid" result="pass"/><test-case name="31260idG009.i tokoe:invalid" result="pass"/><test-case name="31261idG010 tokoe:valid" result="pass"/><test-case name="31262idG010.i tokoe:invalid" result="pass"/><test-case name="31263idG011 tokoe:valid" result="pass"/><test-case name="31264idG011.i tokoe:invalid" result="fail"/><test-case name="31265idG012 tokoe:valid" result="pass"/><test-case name="31266idG012.i tokoe:invalid" result="fail"/><test-case name="31267idG013 tokoe:valid" result="pass"/><test-case name="31268idG013.v tokoe:valid" result="pass"/><test-case name="31269idG014 tokoe:valid" result="pass"/><test-case name="31270idG014.v tokoe:valid" result="pass"/><test-case name="31271idG015 tokoe:valid" result="pass"/><test-case name="31272idG015.v tokoe:valid" result="pass"/><test-case name="31273idG016 tokoe:valid" result="pass"/><test-case name="31274idG016.v tokoe:valid" result="pass"/><test-case name="31275idG017 tokoe:valid" result="pass"/><test-case name="31276idG017.v tokoe:valid" result="pass"/><test-case name="31277idG018 tokoe:valid" result="pass"/><test-case name="31278idG018.v tokoe:valid" result="pass"/><test-case name="31279idG019 tokoe:valid" result="pass"/><test-case name="31280idG019.v tokoe:valid" result="pass"/><test-case name="31281idG020 tokoe:valid" result="pass"/><test-case name="31282idG020.i tokoe:invalid" result="pass"/><test-case name="31283idG021 tokoe:valid" result="pass"/><test-case name="31284idG021.v tokoe:valid" result="pass"/><test-case name="31285idG022 tokoe:valid" result="pass"/><test-case name="31286idG022.v tokoe:valid" result="pass"/><test-case name="31287idG023 tokoe:valid" result="pass"/><test-case name="31288idG023.v tokoe:valid" result="pass"/><test-case name="31289idG024 tokoe:valid" result="pass"/><test-case name="31290idG024.v tokoe:valid" result="pass"/><test-case name="31291idG025 tokoe:valid" result="pass"/><test-case name="31292idG025.i tokoe:invalid" result="pass"/><test-case name="31293idG026 tokoe:valid" result="pass"/><test-case name="31294idG026.v tokoe:valid" result="pass"/><test-case name="31295idG027 tokoe:valid" result="pass"/><test-case name="31296idG027.v tokoe:valid" result="pass"/><test-case name="31297idG028 tokoe:valid" result="pass"/><test-case name="31298idG028.v tokoe:valid" result="pass"/><test-case name="31299idG029 tokoe:valid" result="pass"/><test-case name="31300idG029.v tokoe:valid" result="pass"/><test-case name="31301idG030 tokoe:valid" result="pass"/><test-case name="31302idG030.v tokoe:valid" result="pass"/><test-case name="31303idH001 tokoe:valid" result="pass"/><test-case name="31304idH001.v tokoe:valid" result="pass"/><test-case name="31305idH003 tokoe:valid" result="pass"/><test-case name="31306idH003.v tokoe:valid" result="pass"/><test-case name="31307idH004 tokoe:valid" result="pass"/><test-case name="31308idH004.v tokoe:valid" result="pass"/><test-case name="31309idH005 tokoe:valid" result="pass"/><test-case name="31310idH005.i tokoe:invalid" result="pass"/><test-case name="31311idH006 tokoe:valid" result="pass"/><test-case name="31312idH006.i tokoe:invalid" result="pass"/><test-case name="31313idH007 tokoe:valid" result="pass"/><test-case name="31314idH007.v tokoe:valid" result="pass"/><test-case name="31315idH008 tokoe:valid" result="pass"/><test-case name="31316idH008.v tokoe:valid" result="pass"/><test-case name="31317idH009 tokoe:valid" result="pass"/><test-case name="31318idH009.v tokoe:valid" result="pass"/><test-case name="31319idH010 tokoe:valid" result="pass"/><test-case name="31320idH010.i tokoe:invalid" result="pass"/><test-case name="31321idH011 tokoe:invalid" result="pass"/><test-case name="31322idH012 tokoe:valid" result="pass"/><test-case name="31323idH012.i tokoe:invalid" result="pass"/><test-case name="31324idH013 tokoe:invalid" result="pass"/><test-case name="31325idH014 tokoe:invalid" result="pass"/><test-case name="31326idH015 tokoe:valid" result="pass"/><test-case name="31327idH015.v tokoe:valid" result="pass"/><test-case name="31328idH016 tokoe:valid" result="pass"/><test-case name="31329idH016.v tokoe:valid" result="pass"/><test-case name="31330idH017 tokoe:valid" result="pass"/><test-case name="31331idH017.v tokoe:valid" result="pass"/><test-case name="31332idH018 tokoe:valid" result="pass"/><test-case name="31333idH018.v tokoe:valid" result="pass"/><test-case name="31334idH019 tokoe:valid" result="pass"/><test-case name="31335idH019.v tokoe:valid" result="pass"/><test-case name="31336idH020 tokoe:valid" result="pass"/><test-case name="31337idH020.v tokoe:valid" result="pass"/><test-case name="31338idH021 tokoe:valid" result="pass"/><test-case name="31339idH021.v tokoe:valid" result="pass"/><test-case name="31340idH022 tokoe:valid" result="pass"/><test-case name="31341idH022.v tokoe:valid" result="pass"/><test-case name="31342idH023 tokoe:valid" result="pass"/><test-case name="31343idH023.v tokoe:valid" result="pass"/><test-case name="31344idH024 tokoe:valid" result="pass"/><test-case name="31345idH024.v tokoe:valid" result="pass"/><test-case name="31346idH025 tokoe:valid" result="pass"/><test-case name="31347idH025.v tokoe:valid" result="pass"/><test-case name="31348idH026 tokoe:valid" result="pass"/><test-case name="31349idH026.v tokoe:valid" result="pass"/><test-case name="31350idH027 tokoe:valid" result="pass"/><test-case name="31351idH027.v tokoe:valid" result="pass"/><test-case name="31352idH028 tokoe:valid" result="pass"/><test-case name="31353idH028.v tokoe:valid" result="pass"/><test-case name="31354idH029 tokoe:valid" result="pass"/><test-case name="31355idH029.v tokoe:valid" result="pass"/><test-case name="31356idH030 tokoe:valid" result="pass"/><test-case name="31357idH030.v tokoe:valid" result="pass"/><test-case name="31358idH031 tokoe:valid" result="pass"/><test-case name="31359idH031.v tokoe:valid" result="pass"/><test-case name="31360idH032 tokoe:valid" result="pass"/><test-case name="31361idH032.v tokoe:valid" result="pass"/><test-case name="31362idH034 tokoe:valid" result="pass"/><test-case name="31363idH034.v tokoe:valid" result="pass"/><test-case name="31364idH035 tokoe:invalid" result="pass"/><test-case name="31365idI001 tokoe:invalid" result="pass"/><test-case name="31366idI002 tokoe:valid" result="pass"/><test-case name="31367idI003 tokoe:invalid" result="pass"/><test-case name="31368idI004 tokoe:invalid" result="pass"/><test-case name="31369idI005 tokoe:invalid" result="pass"/><test-case name="31370idI006 tokoe:invalid" result="pass"/><test-case name="31371idI007 tokoe:invalid" result="pass"/><test-case name="31372idI008 tokoe:valid" result="pass"/><test-case name="31373idI009 tokoe:valid" result="pass"/><test-case name="31374idI010 tokoe:invalid" result="pass"/><test-case name="31375idI011 tokoe:valid" result="pass"/><test-case name="31376idI012 tokoe:valid" result="pass"/><test-case name="31377idI013 tokoe:valid" result="pass"/><test-case name="31378idI014 tokoe:invalid" result="pass"/><test-case name="31379idI015 tokoe:invalid" result="pass"/><test-case name="31380idI016 tokoe:invalid" result="pass"/><test-case name="31381idI017 tokoe:valid" result="pass"/><test-case name="31382idI018 tokoe:invalid" result="pass"/><test-case name="31383idI019 tokoe:valid" result="pass"/><test-case name="31384idI020 tokoe:valid" result="pass"/><test-case name="31385idI021 tokoe:valid" result="pass"/><test-case name="31386idI022 tokoe:invalid" result="pass"/><test-case name="31387idI023 tokoe:invalid" result="pass"/><test-case name="31388idI024 tokoe:valid" result="pass"/><test-case name="31389idI025 tokoe:valid" result="pass"/><test-case name="31390idI026 tokoe:valid" result="pass"/><test-case name="31391idI027 tokoe:valid" result="pass"/><test-case name="31392idI028 tokoe:invalid" result="fail"/><test-case name="31393idI029 tokoe:valid" result="pass"/><test-case name="31394idI030 tokoe:valid" result="pass"/><test-case name="31395idI031 tokoe:valid" result="pass"/><test-case name="31396idI032 tokoe:valid" result="pass"/><test-case name="31397idI033 tokoe:valid" result="pass"/><test-case name="31398idI034 tokoe:valid" result="pass"/><test-case name="31399idI035 tokoe:valid" result="pass"/><test-case name="31400idI036 tokoe:valid" result="pass"/><test-case name="31401idI037 tokoe:valid" result="pass"/><test-case name="31402idI038 tokoe:invalid" result="fail"/><test-case name="31403idI039 tokoe:valid" result="pass"/><test-case name="31404idI040 tokoe:valid" result="pass"/><test-case name="31405idI041 tokoe:valid" result="pass"/><test-case name="31406idI042 tokoe:valid" result="pass"/><test-case name="31407idI043 tokoe:valid" result="pass"/><test-case name="31408idI044 tokoe:valid" result="pass"/><test-case name="31409idI045 tokoe:valid" result="pass"/><test-case name="31410idI046 tokoe:valid" result="pass"/><test-case name="31411idI047 tokoe:valid" result="pass"/><test-case name="31412idI048 tokoe:valid" result="pass"/><test-case name="31413idI049 tokoe:valid" result="pass"/><test-case name="31414idI050 tokoe:valid" result="pass"/><test-case name="31415idI051 tokoe:valid" result="pass"/><test-case name="31416idI052 tokoe:valid" result="pass"/><test-case name="31417idI053 tokoe:valid" result="pass"/><test-case name="31418idI054 tokoe:valid" result="pass"/><test-case name="31419idI055 tokoe:valid" result="pass"/><test-case name="31420idI056 tokoe:valid" result="pass"/><test-case name="31421idI057 tokoe:valid" result="pass"/><test-case name="31422idI058 tokoe:valid" result="pass"/><test-case name="31423idI059 tokoe:valid" result="pass"/><test-case name="31424idI060 tokoe:valid" result="pass"/><test-case name="31425idI061 tokoe:valid" result="pass"/><test-case name="31426idI062 tokoe:valid" result="pass"/><test-case name="31427idI063 tokoe:valid" result="pass"/><test-case name="31428idI064 tokoe:valid" result="pass"/><test-case name="31429idI065 tokoe:valid" result="pass"/><test-case name="31430idI066 tokoe:valid" result="pass"/><test-case name="31431idI067 tokoe:valid" result="pass"/><test-case name="31432idI068 tokoe:valid" result="pass"/><test-case name="31433idI069 tokoe:valid" result="pass"/><test-case name="31434idI070 tokoe:valid" result="pass"/><test-case name="31435idI071 tokoe:valid" result="pass"/><test-case name="31436idI072 tokoe:valid" result="pass"/><test-case name="31437idI073 tokoe:valid" result="pass"/><test-case name="31438idI074 tokoe:valid" result="pass"/><test-case name="31439idI075 tokoe:valid" result="pass"/><test-case name="31440idI076 tokoe:valid" result="pass"/><test-case name="31441idI077 tokoe:valid" result="pass"/><test-case name="31442idI078 tokoe:valid" result="pass"/><test-case name="31443idI079 tokoe:valid" result="pass"/><test-case name="31444idI080 tokoe:valid" result="pass"/><test-case name="31445idI081 tokoe:valid" result="pass"/><test-case name="31446idI082 tokoe:valid" result="pass"/><test-case name="31447idI083 tokoe:valid" result="pass"/><test-case name="31448idI084 tokoe:valid" result="pass"/><test-case name="31449idI085 tokoe:valid" result="pass"/><test-case name="31450idI086 tokoe:valid" result="pass"/><test-case name="31451idI087 tokoe:valid" result="pass"/><test-case name="31452idI088 tokoe:valid" result="pass"/><test-case name="31453idI089 tokoe:valid" result="pass"/><test-case name="31454idI090 tokoe:valid" result="pass"/><test-case name="31455idI091 tokoe:valid" result="pass"/><test-case name="31456idI092 tokoe:valid" result="pass"/><test-case name="31457idI093 tokoe:valid" result="pass"/><test-case name="31458idI094 tokoe:valid" result="pass"/><test-case name="31459idI095 tokoe:valid" result="pass"/><test-case name="31460idI096 tokoe:valid" result="pass"/><test-case name="31461idI097 tokoe:valid" result="pass"/><test-case name="31462idI098 tokoe:valid" result="pass"/><test-case name="31463idI099 tokoe:valid" result="pass"/><test-case name="31464idI100 tokoe:valid" result="pass"/><test-case name="31465idI101 tokoe:valid" result="pass"/><test-case name="31466idI102 tokoe:valid" result="pass"/><test-case name="31467idI103 tokoe:valid" result="pass"/><test-case name="31468idI104 tokoe:valid" result="pass"/><test-case name="31469idI105 tokoe:valid" result="pass"/><test-case name="31470idI106 tokoe:valid" result="pass"/><test-case name="31471idI107 tokoe:valid" result="pass"/><test-case name="31472idI108 tokoe:valid" result="pass"/><test-case name="31473idI109 tokoe:valid" result="pass"/><test-case name="31474idI110 tokoe:valid" result="pass"/><test-case name="31475idI111 tokoe:valid" result="pass"/><test-case name="31476idI112 tokoe:valid" result="pass"/><test-case name="31477idI113 tokoe:valid" result="pass"/><test-case name="31478idI114 tokoe:valid" result="pass"/><test-case name="31479idI115 tokoe:valid" result="pass"/><test-case name="31480idI116 tokoe:valid" result="pass"/><test-case name="31481idI117 tokoe:valid" result="pass"/><test-case name="31482idI118 tokoe:valid" result="pass"/><test-case name="31483idI119 tokoe:valid" result="pass"/><test-case name="31484idI120 tokoe:valid" result="pass"/><test-case name="31485idI121 tokoe:valid" result="pass"/><test-case name="31486idI122 tokoe:valid" result="pass"/><test-case name="31487idI123 tokoe:valid" result="pass"/><test-case name="31488idI124 tokoe:valid" result="pass"/><test-case name="31489idI125 tokoe:valid" result="pass"/><test-case name="31490idI126 tokoe:valid" result="pass"/><test-case name="31491idI127 tokoe:valid" result="pass"/><test-case name="31492idI128 tokoe:valid" result="pass"/><test-case name="31493idI129 tokoe:valid" result="pass"/><test-case name="31494idI130 tokoe:valid" result="pass"/><test-case name="31495idI131 tokoe:valid" result="pass"/><test-case name="31496idI132 tokoe:valid" result="pass"/><test-case name="31497idI133 tokoe:valid" result="pass"/><test-case name="31498idI134 tokoe:valid" result="pass"/><test-case name="31499idI135 tokoe:valid" result="pass"/><test-case name="31500idI136 tokoe:valid" result="pass"/><test-case name="31501idI137 tokoe:valid" result="pass"/><test-case name="31502idI138 tokoe:valid" result="pass"/><test-case name="31503idI139 tokoe:valid" result="pass"/><test-case name="31504idI140 tokoe:valid" result="pass"/><test-case name="31505idI141 tokoe:valid" result="pass"/><test-case name="31506idI142 tokoe:valid" result="pass"/><test-case name="31507idI143 tokoe:valid" result="pass"/><test-case name="31508idI144 tokoe:valid" result="pass"/><test-case name="31509idI145 tokoe:invalid" result="pass"/><test-case name="31510idI146 tokoe:invalid" result="pass"/><test-case name="31511idI147 tokoe:invalid" result="pass"/><test-case name="31512idI148 tokoe:invalid" result="pass"/><test-case name="31513idI149 tokoe:invalid" result="pass"/><test-case name="31514idI150 tokoe:invalid" result="pass"/><test-case name="31515idI151 tokoe:invalid" result="pass"/><test-case name="31516idI152 tokoe:invalid" result="fail"/><test-case name="31517idJ001 tokoe:invalid" result="pass"/><test-case name="31518idJ002 tokoe:invalid" result="pass"/><test-case name="31519idJ003 tokoe:invalid" result="pass"/><test-case name="31520idJ004 tokoe:valid" result="pass"/><test-case name="31521idJ005 tokoe:invalid" result="pass"/><test-case name="31522idJ006 tokoe:invalid" result="pass"/><test-case name="31523idJ007 tokoe:invalid" result="pass"/><test-case name="31524idJ008 tokoe:invalid" result="pass"/><test-case name="31525idJ009 tokoe:valid" result="pass"/><test-case name="31526idJ010 tokoe:valid" result="pass"/><test-case name="31527idJ011 tokoe:invalid" result="pass"/><test-case name="31528idJ012 tokoe:valid" result="pass"/><test-case name="31529idJ013 tokoe:valid" result="pass"/><test-case name="31530idJ014 tokoe:valid" result="pass"/><test-case name="31531idJ015 tokoe:invalid" result="pass"/><test-case name="31532idJ016 tokoe:invalid" result="pass"/><test-case name="31533idJ017 tokoe:invalid" result="pass"/><test-case name="31534idJ018 tokoe:valid" result="pass"/><test-case name="31535idJ019 tokoe:valid" result="pass"/><test-case name="31536idJ020 tokoe:valid" result="pass"/><test-case name="31537idJ021 tokoe:valid" result="pass"/><test-case name="31538idJ022 tokoe:valid" result="pass"/><test-case name="31539idJ023 tokoe:valid" result="pass"/><test-case name="31540idJ024 tokoe:valid" result="pass"/><test-case name="31541idJ025 tokoe:invalid" result="pass"/><test-case name="31542idJ026 tokoe:invalid" result="pass"/><test-case name="31543idJ027 tokoe:valid" result="pass"/><test-case name="31544idJ028 tokoe:valid" result="pass"/><test-case name="31545idJ029 tokoe:valid" result="pass"/><test-case name="31546idJ030 tokoe:invalid" result="pass"/><test-case name="31547idJ031 tokoe:valid" result="pass"/><test-case name="31548idJ032 tokoe:invalid" result="pass"/><test-case name="31549idJ033 tokoe:valid" result="pass"/><test-case name="31550idJ034 tokoe:valid" result="pass"/><test-case name="31551idJ035 tokoe:valid" result="pass"/><test-case name="31552idJ036 tokoe:invalid" result="fail"/><test-case name="31553idJ037 tokoe:valid" result="pass"/><test-case name="31554idJ038 tokoe:valid" result="pass"/><test-case name="31555idJ039 tokoe:valid" result="pass"/><test-case name="31556idJ040 tokoe:valid" result="pass"/><test-case name="31557idJ041 tokoe:valid" result="pass"/><test-case name="31558idJ042 tokoe:valid" result="pass"/><test-case name="31559idJ043 tokoe:valid" result="pass"/><test-case name="31560idJ044 tokoe:valid" result="pass"/><test-case name="31561idJ045 tokoe:valid" result="pass"/><test-case name="31562idJ046 tokoe:valid" result="pass"/><test-case name="31563idJ047 tokoe:valid" result="pass"/><test-case name="31564idJ048 tokoe:valid" result="pass"/><test-case name="31565idJ049 tokoe:valid" result="pass"/><test-case name="31566idJ050 tokoe:valid" result="pass"/><test-case name="31567idJ051 tokoe:valid" result="pass"/><test-case name="31568idJ052 tokoe:invalid" result="fail"/><test-case name="31569idJ053 tokoe:valid" result="pass"/><test-case name="31570idJ054 tokoe:valid" result="pass"/><test-case name="31571idJ055 tokoe:valid" result="pass"/><test-case name="31572idJ056 tokoe:invalid" result="fail"/><test-case name="31573idJ057 tokoe:valid" result="pass"/><test-case name="31574idJ058 tokoe:valid" result="pass"/><test-case name="31575idJ059 tokoe:valid" result="pass"/><test-case name="31576idJ060 tokoe:valid" result="pass"/><test-case name="31577idJ061 tokoe:valid" result="pass"/><test-case name="31578idJ062 tokoe:valid" result="pass"/><test-case name="31579idJ063 tokoe:valid" result="pass"/><test-case name="31580idJ064 tokoe:valid" result="pass"/><test-case name="31581idJ065 tokoe:valid" result="pass"/><test-case name="31582idJ066 tokoe:valid" result="pass"/><test-case name="31583idJ067 tokoe:valid" result="pass"/><test-case name="31584idJ068 tokoe:valid" result="pass"/><test-case name="31585idJ069 tokoe:valid" result="pass"/><test-case name="31586idJ070 tokoe:valid" result="pass"/><test-case name="31587idJ071 tokoe:valid" result="pass"/><test-case name="31588idJ072 tokoe:valid" result="pass"/><test-case name="31589idJ073 tokoe:valid" result="pass"/><test-case name="31590idJ074 tokoe:valid" result="pass"/><test-case name="31591idJ075 tokoe:valid" result="pass"/><test-case name="31592idJ076 tokoe:valid" result="pass"/><test-case name="31593idJ077 tokoe:valid" result="pass"/><test-case name="31594idJ078 tokoe:valid" result="pass"/><test-case name="31595idJ079 tokoe:valid" result="pass"/><test-case name="31596idJ080 tokoe:valid" result="pass"/><test-case name="31597idJ081 tokoe:valid" result="pass"/><test-case name="31598idJ082 tokoe:valid" result="pass"/><test-case name="31599idJ083 tokoe:valid" result="pass"/><test-case name="31600idJ084 tokoe:valid" result="pass"/><test-case name="31601idJ085 tokoe:valid" result="pass"/><test-case name="31602idJ086 tokoe:valid" result="pass"/><test-case name="31603idJ087 tokoe:valid" result="pass"/><test-case name="31604idJ088 tokoe:valid" result="pass"/><test-case name="31605idJ089 tokoe:valid" result="pass"/><test-case name="31606idJ090 tokoe:valid" result="pass"/><test-case name="31607idJ091 tokoe:valid" result="pass"/><test-case name="31608idJ092 tokoe:valid" result="pass"/><test-case name="31609idJ093 tokoe:valid" result="pass"/><test-case name="31610idJ094 tokoe:valid" result="pass"/><test-case name="31611idJ095 tokoe:valid" result="pass"/><test-case name="31612idJ096 tokoe:valid" result="pass"/><test-case name="31613idJ097 tokoe:valid" result="pass"/><test-case name="31614idJ098 tokoe:valid" result="pass"/><test-case name="31615idJ099 tokoe:valid" result="pass"/><test-case name="31616idJ100 tokoe:valid" result="pass"/><test-case name="31617idJ101 tokoe:valid" result="pass"/><test-case name="31618idJ102 tokoe:valid" result="pass"/><test-case name="31619idJ103 tokoe:valid" result="pass"/><test-case name="31620idJ104 tokoe:valid" result="pass"/><test-case name="31621idJ105 tokoe:valid" result="pass"/><test-case name="31622idJ106 tokoe:valid" result="pass"/><test-case name="31623idJ107 tokoe:valid" result="pass"/><test-case name="31624idJ108 tokoe:valid" result="pass"/><test-case name="31625idJ109 tokoe:valid" result="pass"/><test-case name="31626idJ110 tokoe:valid" result="pass"/><test-case name="31627idJ111 tokoe:valid" result="pass"/><test-case name="31628idJ112 tokoe:valid" result="pass"/><test-case name="31629idJ113 tokoe:valid" result="pass"/><test-case name="31630idJ114 tokoe:valid" result="pass"/><test-case name="31631idJ115 tokoe:valid" result="pass"/><test-case name="31632idJ116 tokoe:valid" result="pass"/><test-case name="31633idJ117 tokoe:valid" result="pass"/><test-case name="31634idJ118 tokoe:valid" result="pass"/><test-case name="31635idJ119 tokoe:valid" result="pass"/><test-case name="31636idJ120 tokoe:valid" result="pass"/><test-case name="31637idJ121 tokoe:valid" result="pass"/><test-case name="31638idJ122 tokoe:valid" result="pass"/><test-case name="31639idJ123 tokoe:valid" result="pass"/><test-case name="31640idJ124 tokoe:valid" result="pass"/><test-case name="31641idJ125 tokoe:valid" result="pass"/><test-case name="31642idJ126 tokoe:valid" result="pass"/><test-case name="31643idJ127 tokoe:valid" result="pass"/><test-case name="31644idJ128 tokoe:valid" result="pass"/><test-case name="31645idJ129 tokoe:valid" result="pass"/><test-case name="31646idJ130 tokoe:valid" result="pass"/><test-case name="31647idJ131 tokoe:valid" result="pass"/><test-case name="31648idJ132 tokoe:valid" result="pass"/><test-case name="31649idJ133 tokoe:valid" result="pass"/><test-case name="31650idJ134 tokoe:valid" result="pass"/><test-case name="31651idJ135 tokoe:valid" result="pass"/><test-case name="31652idJ136 tokoe:valid" result="pass"/><test-case name="31653idJ137 tokoe:valid" result="pass"/><test-case name="31654idJ138 tokoe:valid" result="pass"/><test-case name="31655idJ139 tokoe:valid" result="pass"/><test-case name="31656idJ140 tokoe:valid" result="pass"/><test-case name="31657idJ141 tokoe:valid" result="pass"/><test-case name="31658idJ142 tokoe:valid" result="pass"/><test-case name="31659idJ143 tokoe:valid" result="pass"/><test-case name="31660idJ144 tokoe:valid" result="pass"/><test-case name="31661idJ145 tokoe:valid" result="pass"/><test-case name="31662idJ146 tokoe:valid" result="pass"/><test-case name="31663idJ147 tokoe:valid" result="pass"/><test-case name="31664idJ148 tokoe:valid" result="pass"/><test-case name="31665idJ149 tokoe:valid" result="pass"/><test-case name="31666idJ150 tokoe:valid" result="pass"/><test-case name="31667idJ151 tokoe:valid" result="pass"/><test-case name="31668idJ152 tokoe:valid" result="pass"/><test-case name="31669idJ153 tokoe:valid" result="pass"/><test-case name="31670idJ154 tokoe:valid" result="pass"/><test-case name="31671idJ155 tokoe:valid" result="pass"/><test-case name="31672idJ156 tokoe:valid" result="pass"/><test-case name="31673idJ157 tokoe:valid" result="pass"/><test-case name="31674idJ158 tokoe:valid" result="pass"/><test-case name="31675idJ159 tokoe:valid" result="pass"/><test-case name="31676idJ160 tokoe:valid" result="pass"/><test-case name="31677idJ161 tokoe:valid" result="pass"/><test-case name="31678idJ162 tokoe:valid" result="pass"/><test-case name="31679idJ163 tokoe:valid" result="pass"/><test-case name="31680idJ164 tokoe:valid" result="pass"/><test-case name="31681idJ165 tokoe:valid" result="pass"/><test-case name="31682idJ166 tokoe:valid" result="pass"/><test-case name="31683idJ167 tokoe:valid" result="pass"/><test-case name="31684idJ168 tokoe:valid" result="pass"/><test-case name="31685idJ169 tokoe:valid" result="pass"/><test-case name="31686idJ170 tokoe:valid" result="pass"/><test-case name="31687idJ171 tokoe:valid" result="pass"/><test-case name="31688idJ172 tokoe:valid" result="pass"/><test-case name="31689idJ173 tokoe:valid" result="pass"/><test-case name="31690idJ174 tokoe:valid" result="pass"/><test-case name="31691idJ175 tokoe:valid" result="pass"/><test-case name="31692idJ176 tokoe:valid" result="pass"/><test-case name="31693idJ177 tokoe:valid" result="pass"/><test-case name="31694idJ178 tokoe:valid" result="pass"/><test-case name="31695idJ179 tokoe:valid" result="pass"/><test-case name="31696idJ180 tokoe:valid" result="pass"/><test-case name="31697idJ181 tokoe:valid" result="pass"/><test-case name="31698idJ182 tokoe:valid" result="pass"/><test-case name="31699idJ183 tokoe:valid" result="pass"/><test-case name="31700idJ184 tokoe:valid" result="pass"/><test-case name="31701idJ185 tokoe:valid" result="pass"/><test-case name="31702idJ186 tokoe:valid" result="pass"/><test-case name="31703idJ187 tokoe:valid" result="pass"/><test-case name="31704idJ188 tokoe:valid" result="pass"/><test-case name="31705idJ189 tokoe:valid" result="pass"/><test-case name="31706idJ190 tokoe:valid" result="pass"/><test-case name="31707idJ191 tokoe:valid" result="pass"/><test-case name="31708idJ192 tokoe:valid" result="pass"/><test-case name="31709idJ193 tokoe:valid" result="pass"/><test-case name="31710idJ194 tokoe:valid" result="pass"/><test-case name="31711idJ195 tokoe:valid" result="pass"/><test-case name="31712idJ196 tokoe:valid" result="pass"/><test-case name="31713idJ197 tokoe:valid" result="pass"/><test-case name="31714idJ198 tokoe:valid" result="pass"/><test-case name="31715idJ199 tokoe:valid" result="pass"/><test-case name="31716idJ200 tokoe:valid" result="pass"/><test-case name="31717idJ201 tokoe:valid" result="pass"/><test-case name="31718idJ202 tokoe:valid" result="pass"/><test-case name="31719idJ203 tokoe:valid" result="pass"/><test-case name="31720idJ204 tokoe:valid" result="pass"/><test-case name="31721idJ205 tokoe:invalid" result="pass"/><test-case name="31722idJ206 tokoe:invalid" result="pass"/><test-case name="31723idJ207 tokoe:invalid" result="pass"/><test-case name="31724idJ208 tokoe:invalid" result="pass"/><test-case name="31725idJ209 tokoe:invalid" result="pass"/><test-case name="31726idJ210 tokoe:invalid" result="fail"/><test-case name="31727idK001 tokoe:valid" result="pass"/><test-case name="31728idK001.v tokoe:valid" result="pass"/><test-case name="31729idK002 tokoe:valid" result="pass"/><test-case name="31730idK002.v tokoe:valid" result="pass"/><test-case name="31731idK003 tokoe:valid" result="pass"/><test-case name="31732idK003.i tokoe:invalid" result="pass"/><test-case name="31733idK004 tokoe:valid" result="pass"/><test-case name="31734idK004.v tokoe:valid" result="pass"/><test-case name="31735idK005 tokoe:valid" result="pass"/><test-case name="31736idK005.v tokoe:valid" result="pass"/><test-case name="31737idK006 tokoe:valid" result="pass"/><test-case name="31738idK006.v tokoe:valid" result="pass"/><test-case name="31739idK007 tokoe:valid" result="pass"/><test-case name="31740idK007.v tokoe:valid" result="pass"/><test-case name="31741idK008 tokoe:valid" result="pass"/><test-case name="31742idK008.v tokoe:valid" result="pass"/><test-case name="31743idK009 tokoe:valid" result="pass"/><test-case name="31744idK009.v tokoe:valid" result="pass"/><test-case name="31745idK010 tokoe:valid" result="pass"/><test-case name="31746idK010.v tokoe:valid" result="pass"/><test-case name="31747idK011 tokoe:valid" result="pass"/><test-case name="31748idK011.v tokoe:valid" result="pass"/><test-case name="31749idK012 tokoe:valid" result="pass"/><test-case name="31750idK012.i tokoe:invalid" result="pass"/><test-case name="31751idK013 tokoe:valid" result="pass"/><test-case name="31752idK013.v tokoe:valid" result="pass"/><test-case name="31753idK014 tokoe:valid" result="pass"/><test-case name="31754idK014.v tokoe:valid" result="pass"/><test-case name="31755idK015 tokoe:valid" result="pass"/><test-case name="31756idK015.v tokoe:valid" result="pass"/><test-case name="31757idK016 tokoe:invalid" result="pass"/><test-case name="31758idK017 tokoe:valid" result="pass"/><test-case name="31759idK017.v tokoe:valid" result="pass"/><test-case name="31760idL001 tokoe:valid" result="pass"/><test-case name="31761idL001.v tokoe:valid" result="pass"/><test-case name="31762idL002 tokoe:valid" result="pass"/><test-case name="31763idL002.i tokoe:invalid" result="pass"/><test-case name="31764idL003 tokoe:valid" result="pass"/><test-case name="31765idL003.v tokoe:valid" result="pass"/><test-case name="31766idL004 tokoe:valid" result="pass"/><test-case name="31767idL004.v tokoe:valid" result="pass"/><test-case name="31768idL005 tokoe:valid" result="pass"/><test-case name="31769idL005.v tokoe:valid" result="pass"/><test-case name="31770idL006 tokoe:valid" result="pass"/><test-case name="31771idL006.i tokoe:invalid" result="pass"/><test-case name="31772idL007 tokoe:valid" result="pass"/><test-case name="31773idL007.i tokoe:invalid" result="pass"/><test-case name="31774idL008 tokoe:valid" result="pass"/><test-case name="31775idL008.v tokoe:valid" result="pass"/><test-case name="31776idL009 tokoe:valid" result="pass"/><test-case name="31777idL009.v tokoe:valid" result="pass"/><test-case name="31778idL010 tokoe:valid" result="pass"/><test-case name="31779idL010.v tokoe:valid" result="pass"/><test-case name="31780idL011 tokoe:valid" result="pass"/><test-case name="31781idL011.i tokoe:invalid" result="pass"/><test-case name="31782idL012 tokoe:valid" result="pass"/><test-case name="31783idL012.i tokoe:invalid" result="pass"/><test-case name="31784idL013 tokoe:valid" result="pass"/><test-case name="31785idL013.v tokoe:valid" result="pass"/><test-case name="31786idL014 tokoe:valid" result="pass"/><test-case name="31787idL014.v tokoe:valid" result="pass"/><test-case name="31788idL015 tokoe:valid" result="pass"/><test-case name="31789idL015.i tokoe:invalid" result="pass"/><test-case name="31790idL016 tokoe:valid" result="pass"/><test-case name="31791idL016.v tokoe:valid" result="pass"/><test-case name="31792idL017 tokoe:valid" result="pass"/><test-case name="31793idL017.v tokoe:valid" result="pass"/><test-case name="31794idL018 tokoe:valid" result="pass"/><test-case name="31795idL018.v tokoe:valid" result="pass"/><test-case name="31796idL019 tokoe:valid" result="pass"/><test-case name="31797idL019.i tokoe:invalid" result="pass"/><test-case name="31798idL020 tokoe:valid" result="pass"/><test-case name="31799idL020.v tokoe:valid" result="pass"/><test-case name="31800idL021 tokoe:valid" result="pass"/><test-case name="31801idL021.v tokoe:valid" result="pass"/><test-case name="31802idL022 tokoe:valid" result="pass"/><test-case name="31803idL022.i tokoe:invalid" result="pass"/><test-case name="31804idL023 tokoe:valid" result="pass"/><test-case name="31805idL023.v tokoe:valid" result="pass"/><test-case name="31806idL024 tokoe:valid" result="pass"/><test-case name="31807idL024.v tokoe:valid" result="pass"/><test-case name="31808idL025 tokoe:valid" result="pass"/><test-case name="31809idL025.i tokoe:invalid" result="pass"/><test-case name="31810idL026 tokoe:valid" result="pass"/><test-case name="31811idL026.v tokoe:valid" result="pass"/><test-case name="31812idL027 tokoe:valid" result="pass"/><test-case name="31813idL027.i tokoe:invalid" result="pass"/><test-case name="31814idL028 tokoe:valid" result="pass"/><test-case name="31815idL028.v tokoe:valid" result="pass"/><test-case name="31816idL029 tokoe:valid" result="pass"/><test-case name="31817idL029.v tokoe:valid" result="pass"/><test-case name="31818idL030 tokoe:valid" result="pass"/><test-case name="31819idL030.v tokoe:valid" result="pass"/><test-case name="31820idL031 tokoe:valid" result="pass"/><test-case name="31821idL031.i tokoe:invalid" result="pass"/><test-case name="31822idL032 tokoe:valid" result="pass"/><test-case name="31823idL032.i tokoe:invalid" result="pass"/><test-case name="31824idL033 tokoe:valid" result="pass"/><test-case name="31825idL033.v tokoe:valid" result="pass"/><test-case name="31826idL034 tokoe:valid" result="pass"/><test-case name="31827idL034.v tokoe:valid" result="pass"/><test-case name="31828idL035 tokoe:valid" result="pass"/><test-case name="31829idL035.v tokoe:valid" result="pass"/><test-case name="31830idL036 tokoe:valid" result="pass"/><test-case name="31831idL036.i tokoe:invalid" result="pass"/><test-case name="31832idL037 tokoe:valid" result="pass"/><test-case name="31833idL037.i tokoe:invalid" result="pass"/><test-case name="31834idL038 tokoe:valid" result="pass"/><test-case name="31835idL038.v tokoe:valid" result="pass"/><test-case name="31836idL039 tokoe:valid" result="pass"/><test-case name="31837idL039.v tokoe:valid" result="pass"/><test-case name="31838idL040 tokoe:valid" result="pass"/><test-case name="31839idL040.i tokoe:invalid" result="pass"/><test-case name="31840idL041 tokoe:valid" result="pass"/><test-case name="31841idL041.v tokoe:valid" result="pass"/><test-case name="31842idL042 tokoe:valid" result="pass"/><test-case name="31843idL042.v tokoe:valid" result="pass"/><test-case name="31844idL043 tokoe:valid" result="pass"/><test-case name="31845idL043.v tokoe:valid" result="pass"/><test-case name="31846idL044 tokoe:valid" result="pass"/><test-case name="31847idL044.i tokoe:invalid" result="pass"/><test-case name="31848idL045 tokoe:valid" result="pass"/><test-case name="31849idL045.v tokoe:valid" result="pass"/><test-case name="31850idL046 tokoe:valid" result="pass"/><test-case name="31851idL046.v tokoe:valid" result="pass"/><test-case name="31852idL047 tokoe:valid" result="pass"/><test-case name="31853idL047.i tokoe:invalid" result="pass"/><test-case name="31854idL048 tokoe:valid" result="pass"/><test-case name="31855idL048.v tokoe:valid" result="pass"/><test-case name="31856idL049 tokoe:valid" result="pass"/><test-case name="31857idL049.v tokoe:valid" result="pass"/><test-case name="31858idL050 tokoe:valid" result="pass"/><test-case name="31859idL050.i tokoe:invalid" result="pass"/><test-case name="31860idL051 tokoe:valid" result="pass"/><test-case name="31861idL051.v tokoe:valid" result="pass"/><test-case name="31862idL052 tokoe:valid" result="pass"/><test-case name="31863idL052.i tokoe:invalid" result="pass"/><test-case name="31864idL053 tokoe:valid" result="pass"/><test-case name="31865idL053.v tokoe:valid" result="pass"/><test-case name="31866idL054 tokoe:valid" result="pass"/><test-case name="31867idL054.v tokoe:valid" result="pass"/><test-case name="31868idL055 tokoe:valid" result="pass"/><test-case name="31869idL055.v tokoe:valid" result="pass"/><test-case name="31870idL056 tokoe:valid" result="pass"/><test-case name="31871idL056.i tokoe:invalid" result="pass"/><test-case name="31872idL057 tokoe:valid" result="pass"/><test-case name="31873idL057.i tokoe:invalid" result="pass"/><test-case name="31874idL058 tokoe:valid" result="pass"/><test-case name="31875idL058.v tokoe:valid" result="pass"/><test-case name="31876idL059 tokoe:valid" result="pass"/><test-case name="31877idL059.v tokoe:valid" result="pass"/><test-case name="31878idL060 tokoe:valid" result="pass"/><test-case name="31879idL060.v tokoe:valid" result="pass"/><test-case name="31880idL061 tokoe:valid" result="pass"/><test-case name="31881idL061.i tokoe:invalid" result="pass"/><test-case name="31882idL062 tokoe:valid" result="pass"/><test-case name="31883idL062.i tokoe:invalid" result="pass"/><test-case name="31884idL063 tokoe:valid" result="pass"/><test-case name="31885idL063.v tokoe:valid" result="pass"/><test-case name="31886idL064 tokoe:valid" result="pass"/><test-case name="31887idL064.v tokoe:valid" result="pass"/><test-case name="31888idL065 tokoe:valid" result="pass"/><test-case name="31889idL065.i tokoe:invalid" result="pass"/><test-case name="31890idL066 tokoe:valid" result="pass"/><test-case name="31891idL066.v tokoe:valid" result="pass"/><test-case name="31892idL067 tokoe:valid" result="pass"/><test-case name="31893idL067.v tokoe:valid" result="pass"/><test-case name="31894idL068 tokoe:valid" result="pass"/><test-case name="31895idL068.v tokoe:valid" result="pass"/><test-case name="31896idL069 tokoe:valid" result="pass"/><test-case name="31897idL069.i tokoe:invalid" result="pass"/><test-case name="31898idL070 tokoe:valid" result="pass"/><test-case name="31899idL070.v tokoe:valid" result="pass"/><test-case name="31900idL071 tokoe:valid" result="pass"/><test-case name="31901idL071.v tokoe:valid" result="pass"/><test-case name="31902idL072 tokoe:valid" result="pass"/><test-case name="31903idL072.i tokoe:invalid" result="pass"/><test-case name="31904idL073 tokoe:valid" result="pass"/><test-case name="31905idL073.v tokoe:valid" result="pass"/><test-case name="31906idL074 tokoe:valid" result="pass"/><test-case name="31907idL074.v tokoe:valid" result="pass"/><test-case name="31908idL075 tokoe:valid" result="pass"/><test-case name="31909idL075.i tokoe:invalid" result="pass"/><test-case name="31910idL076 tokoe:valid" result="pass"/><test-case name="31911idL076.v tokoe:valid" result="pass"/><test-case name="31912idL077 tokoe:valid" result="pass"/><test-case name="31913idL077.v tokoe:valid" result="pass"/><test-case name="31914idL078 tokoe:valid" result="pass"/><test-case name="31915idL078.v tokoe:valid" result="pass"/><test-case name="31916idL079 tokoe:valid" result="pass"/><test-case name="31917idL079.i tokoe:invalid" result="pass"/><test-case name="31918idL080 tokoe:valid" result="pass"/><test-case name="31919idL080.i tokoe:invalid" result="pass"/><test-case name="31920idL081 tokoe:valid" result="pass"/><test-case name="31921idL081.i tokoe:invalid" result="pass"/><test-case name="31922idL082 tokoe:valid" result="pass"/><test-case name="31923idL082.v tokoe:valid" result="pass"/><test-case name="31924idL083 tokoe:valid" result="pass"/><test-case name="31925idL083.i tokoe:invalid" result="pass"/><test-case name="31926idL084 tokoe:valid" result="pass"/><test-case name="31927idL084.v tokoe:valid" result="pass"/><test-case name="31928idL085 tokoe:valid" result="pass"/><test-case name="31929idL085.i tokoe:invalid" result="pass"/><test-case name="31930idL086 tokoe:valid" result="pass"/><test-case name="31931idL086.v tokoe:valid" result="pass"/><test-case name="31932idL087 tokoe:valid" result="pass"/><test-case name="31933idL087.i tokoe:invalid" result="pass"/><test-case name="31934idL088 tokoe:valid" result="pass"/><test-case name="31935idL088.v tokoe:valid" result="pass"/><test-case name="31936idL089 tokoe:valid" result="pass"/><test-case name="31937idL089.i tokoe:invalid" result="pass"/><test-case name="31938idL090 tokoe:valid" result="pass"/><test-case name="31939idL090.v tokoe:valid" result="pass"/><test-case name="31940idL091 tokoe:valid" result="pass"/><test-case name="31941idL091.i tokoe:invalid" result="pass"/><test-case name="31942idL092 tokoe:valid" result="pass"/><test-case name="31943idL092.v tokoe:valid" result="pass"/><test-case name="31944idL093 tokoe:valid" result="pass"/><test-case name="31945idL093.i tokoe:invalid" result="pass"/><test-case name="31946idL094 tokoe:valid" result="pass"/><test-case name="31947idL094.v tokoe:valid" result="pass"/><test-case name="31948idL095 tokoe:valid" result="pass"/><test-case name="31949idL095.i tokoe:invalid" result="pass"/><test-case name="31950idL096 tokoe:valid" result="pass"/><test-case name="31951idL096.v tokoe:valid" result="pass"/><test-case name="31952idL097 tokoe:valid" result="pass"/><test-case name="31953idL097.i tokoe:invalid" result="pass"/><test-case name="31954idL098 tokoe:valid" result="pass"/><test-case name="31955idL098.v tokoe:valid" result="pass"/><test-case name="31956idL099 tokoe:valid" result="pass"/><test-case name="31957idL099.i tokoe:invalid" result="pass"/><test-case name="31958idL101 tokoe:valid" result="pass"/><test-case name="31959idL101.i tokoe:invalid" result="pass"/><test-case name="31960idL102 tokoe:valid" result="pass"/><test-case name="31961idL102.v tokoe:valid" result="pass"/><test-case name="31962idL103 tokoe:valid" result="pass"/><test-case name="31963idL103.i tokoe:invalid" result="pass"/><test-case name="31964idZ001 tokoe:valid" result="pass"/><test-case name="31965idZ001.i tokoe:invalid" result="pass"/><test-case name="31966idZ002 tokoe:valid" result="pass"/><test-case name="31967idZ002.i tokoe:invalid" result="pass"/><test-case name="31968idZ003 tokoe:invalid" result="pass"/><test-case name="31969idZ004 tokoe:valid" result="pass"/><test-case name="31970idZ004.i tokoe:invalid" result="pass"/><test-case name="31971idZ005 tokoe:valid" result="pass"/><test-case name="31972idZ005.v tokoe:valid" result="pass"/><test-case name="31973idZ006 tokoe:valid" result="pass"/><test-case name="31974idZ006.v tokoe:valid" result="pass"/><test-case name="31975idZ007 tokoe:valid" result="pass"/><test-case name="31976idZ007.v tokoe:valid" result="pass"/><test-case name="31977idZ008 tokoe:valid" result="pass"/><test-case name="31978idZ008.i tokoe:invalid" result="pass"/><test-case name="31979idZ010 tokoe:valid" result="pass"/><test-case name="31980idZ010.i tokoe:invalid" result="pass"/><test-case name="31981idZ011_a tokoe:valid" result="pass"/><test-case name="31982idZ011_a.i tokoe:invalid" result="fail"/><test-case name="31983idZ012 tokoe:valid" result="pass"/><test-case name="31984idZ012.i tokoe:invalid" result="fail"/><test-case name="31985mgA001 tokoe:valid" result="pass"/><test-case name="31986mgA001.v tokoe:valid" result="pass"/><test-case name="31987mgA002 tokoe:invalid" result="pass"/><test-case name="31988mgA003 tokoe:invalid" result="pass"/><test-case name="31989mgA004 tokoe:invalid" result="pass"/><test-case name="31990mgA005 tokoe:invalid" result="pass"/><test-case name="31991mgA006 tokoe:invalid" result="pass"/><test-case name="31992mgA007 tokoe:invalid" result="pass"/><test-case name="31993mgA008 tokoe:invalid" result="pass"/><test-case name="31994mgA009 tokoe:invalid" result="pass"/><test-case name="31995mgA010 tokoe:invalid" result="pass"/><test-case name="31996mgA011 tokoe:invalid" result="pass"/><test-case name="31997mgA012 tokoe:invalid" result="pass"/><test-case name="31998mgA013 tokoe:invalid" result="pass"/><test-case name="31999mgA014 tokoe:valid" result="pass"/><test-case name="32000mgA014.v tokoe:valid" result="pass"/><test-case name="32001mgA015 tokoe:valid" result="pass"/><test-case name="32002mgA015.v tokoe:valid" result="pass"/><test-case name="32003mgA016 tokoe:invalid" result="pass"/><test-case name="32004mgA017 tokoe:valid" result="pass"/><test-case name="32005mgA017.v tokoe:valid" result="pass"/><test-case name="32006mgA018 tokoe:invalid" result="pass"/><test-case name="32007mgA019 tokoe:invalid" result="pass"/><test-case name="32008mgA020 tokoe:invalid" result="pass"/><test-case name="32009mgAa001 tokoe:invalid" result="pass"/><test-case name="32010mgAa002 tokoe:invalid" result="pass"/><test-case name="32011mgAa003 tokoe:valid" result="pass"/><test-case name="32012mgAa003.v tokoe:valid" result="pass"/><test-case name="32013mgAa004 tokoe:invalid" result="pass"/><test-case name="32014mgAa005 tokoe:invalid" result="pass"/><test-case name="32015mgAa006 tokoe:invalid" result="pass"/><test-case name="32016mgAa007 tokoe:invalid" result="pass"/><test-case name="32017mgAa008 tokoe:invalid" result="pass"/><test-case name="32018mgAa009 tokoe:invalid" result="pass"/><test-case name="32019mgAb001 tokoe:invalid" result="pass"/><test-case name="32020mgAb002 tokoe:invalid" result="pass"/><test-case name="32021mgAb003 tokoe:invalid" result="pass"/><test-case name="32022mgAb004 tokoe:invalid" result="pass"/><test-case name="32023mgAb005 tokoe:invalid" result="pass"/><test-case name="32024mgAb006 tokoe:invalid" result="pass"/><test-case name="32025mgAb007 tokoe:invalid" result="pass"/><test-case name="32026mgAb008 tokoe:invalid" result="pass"/><test-case name="32027mgAb009 tokoe:invalid" result="pass"/><test-case name="32028mgB001 tokoe:valid" result="pass"/><test-case name="32029mgB001.v tokoe:valid" result="pass"/><test-case name="32030mgB002 tokoe:valid" result="pass"/><test-case name="32031mgB002.v tokoe:valid" result="pass"/><test-case name="32032mgB003 tokoe:invalid" result="pass"/><test-case name="32033mgB004 tokoe:valid" result="pass"/><test-case name="32034mgB004.v tokoe:valid" result="pass"/><test-case name="32035mgB006 tokoe:valid" result="pass"/><test-case name="32036mgB006.v tokoe:valid" result="pass"/><test-case name="32037mgB007 tokoe:invalid" result="pass"/><test-case name="32038mgB008 tokoe:invalid" result="pass"/><test-case name="32039mgB009 tokoe:invalid" result="pass"/><test-case name="32040mgB010 tokoe:invalid" result="pass"/><test-case name="32041mgC001 tokoe:valid" result="pass"/><test-case name="32042mgC001.i tokoe:invalid" result="pass"/><test-case name="32043mgC002 tokoe:valid" result="pass"/><test-case name="32044mgC002.v tokoe:valid" result="pass"/><test-case name="32045mgC003 tokoe:valid" result="pass"/><test-case name="32046mgC003.i tokoe:invalid" result="pass"/><test-case name="32047mgC004 tokoe:valid" result="pass"/><test-case name="32048mgC004.v tokoe:valid" result="pass"/><test-case name="32049mgC005 tokoe:valid" result="pass"/><test-case name="32050mgC005.i tokoe:invalid" result="pass"/><test-case name="32051mgC006 tokoe:valid" result="pass"/><test-case name="32052mgC006.v tokoe:valid" result="pass"/><test-case name="32053mgC007 tokoe:valid" result="pass"/><test-case name="32054mgC007.i tokoe:invalid" result="pass"/><test-case name="32055mgC008 tokoe:invalid" result="pass"/><test-case name="32056mgC009 tokoe:invalid" result="pass"/><test-case name="32057mgC010 tokoe:valid" result="pass"/><test-case name="32058mgC010.i tokoe:invalid" result="pass"/><test-case name="32059mgC011 tokoe:valid" result="pass"/><test-case name="32060mgC011.v tokoe:valid" result="pass"/><test-case name="32061mgC012 tokoe:valid" result="pass"/><test-case name="32062mgC012.i tokoe:invalid" result="pass"/><test-case name="32063mgC013 tokoe:invalid" result="pass"/><test-case name="32064mgC014 tokoe:valid" result="pass"/><test-case name="32065mgC014.v tokoe:valid" result="pass"/><test-case name="32066mgD001 tokoe:valid" result="pass"/><test-case name="32067mgD001.v tokoe:valid" result="pass"/><test-case name="32068mgD005 tokoe:valid" result="pass"/><test-case name="32069mgD005.v tokoe:valid" result="pass"/><test-case name="32070mgD009 tokoe:valid" result="pass"/><test-case name="32071mgD009.v tokoe:valid" result="pass"/><test-case name="32072mgD013 tokoe:valid" result="pass"/><test-case name="32073mgD013.v tokoe:valid" result="pass"/><test-case name="32074mgE001 tokoe:valid" result="pass"/><test-case name="32075mgE001.v tokoe:valid" result="pass"/><test-case name="32076mgE002 tokoe:invalid" result="pass"/><test-case name="32077mgE003 tokoe:invalid" result="pass"/><test-case name="32078mgE004 tokoe:invalid" result="pass"/><test-case name="32079mgE005 tokoe:invalid" result="pass"/><test-case name="32080mgE006 tokoe:invalid" result="pass"/><test-case name="32081mgE007 tokoe:invalid" result="pass"/><test-case name="32082mgE008 tokoe:invalid" result="pass"/><test-case name="32083mgE009 tokoe:invalid" result="pass"/><test-case name="32084mgE010 tokoe:invalid" result="pass"/><test-case name="32085mgE011 tokoe:invalid" result="pass"/><test-case name="32086mgE012 tokoe:invalid" result="pass"/><test-case name="32087mgE013 tokoe:valid" result="pass"/><test-case name="32088mgE013.v tokoe:valid" result="pass"/><test-case name="32089mgE014 tokoe:valid" result="pass"/><test-case name="32090mgE014.v tokoe:valid" result="pass"/><test-case name="32091mgE015 tokoe:valid" result="pass"/><test-case name="32092mgE015.v tokoe:valid" result="pass"/><test-case name="32093mgE016 tokoe:valid" result="pass"/><test-case name="32094mgE016.v tokoe:valid" result="pass"/><test-case name="32095mgE017 tokoe:valid" result="pass"/><test-case name="32096mgE017.v tokoe:valid" result="pass"/><test-case name="32097mgE018 tokoe:valid" result="pass"/><test-case name="32098mgE018.v tokoe:valid" result="pass"/><test-case name="32099mgEa001 tokoe:invalid" result="pass"/><test-case name="32100mgEa002 tokoe:invalid" result="pass"/><test-case name="32101mgEa003 tokoe:invalid" result="pass"/><test-case name="32102mgEa004 tokoe:invalid" result="pass"/><test-case name="32103mgEa005 tokoe:invalid" result="pass"/><test-case name="32104mgEa006 tokoe:invalid" result="pass"/><test-case name="32105mgEa007 tokoe:invalid" result="pass"/><test-case name="32106mgEa008 tokoe:invalid" result="pass"/><test-case name="32107mgEb001 tokoe:invalid" result="pass"/><test-case name="32108mgEb002 tokoe:invalid" result="pass"/><test-case name="32109mgEb003 tokoe:invalid" result="pass"/><test-case name="32110mgEb004 tokoe:valid" result="pass"/><test-case name="32111mgEb004.v tokoe:valid" result="pass"/><test-case name="32112mgEb005 tokoe:valid" result="pass"/><test-case name="32113mgEb005.v tokoe:valid" result="pass"/><test-case name="32114mgEb006 tokoe:invalid" result="pass"/><test-case name="32115mgEb007 tokoe:invalid" result="pass"/><test-case name="32116mgEb008 tokoe:invalid" result="pass"/><test-case name="32117mgF001 tokoe:valid" result="pass"/><test-case name="32118mgF001.v tokoe:valid" result="pass"/><test-case name="32119mgF002 tokoe:valid" result="pass"/><test-case name="32120mgF002.v tokoe:valid" result="pass"/><test-case name="32121mgF003 tokoe:invalid" result="pass"/><test-case name="32122mgF004 tokoe:valid" result="pass"/><test-case name="32123mgF004.v tokoe:valid" result="pass"/><test-case name="32124mgF005 tokoe:valid" result="pass"/><test-case name="32125mgF005.v tokoe:valid" result="pass"/><test-case name="32126mgF006 tokoe:valid" result="pass"/><test-case name="32127mgF006.v tokoe:valid" result="pass"/><test-case name="32128mgF007 tokoe:valid" result="pass"/><test-case name="32129mgF007.v tokoe:valid" result="pass"/><test-case name="32130mgF008 tokoe:valid" result="pass"/><test-case name="32131mgF008.v tokoe:valid" result="pass"/><test-case name="32132mgF009 tokoe:valid" result="pass"/><test-case name="32133mgF009.v tokoe:valid" result="pass"/><test-case name="32134mgF010 tokoe:valid" result="pass"/><test-case name="32135mgF010.v tokoe:valid" result="pass"/><test-case name="32136mgF011 tokoe:valid" result="pass"/><test-case name="32137mgF011.v tokoe:valid" result="pass"/><test-case name="32138mgF012 tokoe:valid" result="pass"/><test-case name="32139mgF012.v tokoe:valid" result="pass"/><test-case name="32140mgF013 tokoe:valid" result="pass"/><test-case name="32141mgF013.v tokoe:valid" result="pass"/><test-case name="32142mgF014 tokoe:valid" result="pass"/><test-case name="32143mgF014.v tokoe:valid" result="pass"/><test-case name="32144mgF015 tokoe:valid" result="pass"/><test-case name="32145mgF015.v tokoe:valid" result="pass"/><test-case name="32146mgF016 tokoe:valid" result="pass"/><test-case name="32147mgF016.v tokoe:valid" result="pass"/><test-case name="32148mgF017 tokoe:valid" result="pass"/><test-case name="32149mgF017.v tokoe:valid" result="pass"/><test-case name="32150mgF018 tokoe:valid" result="pass"/><test-case name="32151mgF018.v tokoe:valid" result="pass"/><test-case name="32152mgF019 tokoe:valid" result="pass"/><test-case name="32153mgF019.v tokoe:valid" result="pass"/><test-case name="32154mgF020 tokoe:invalid" result="pass"/><test-case name="32155mgF021 tokoe:invalid" result="pass"/><test-case name="32156mgF022 tokoe:invalid" result="pass"/><test-case name="32157mgF023 tokoe:invalid" result="pass"/><test-case name="32158mgG002 tokoe:invalid" result="pass"/><test-case name="32159mgG003 tokoe:valid" result="pass"/><test-case name="32160mgG003.i tokoe:invalid" result="pass"/><test-case name="32161mgG004 tokoe:valid" result="pass"/><test-case name="32162mgG004.v tokoe:valid" result="pass"/><test-case name="32163mgG005 tokoe:valid" result="pass"/><test-case name="32164mgG005.i tokoe:invalid" result="pass"/><test-case name="32165mgG006 tokoe:valid" result="pass"/><test-case name="32166mgG006.v tokoe:valid" result="pass"/><test-case name="32167mgG007 tokoe:valid" result="pass"/><test-case name="32168mgG007.v tokoe:valid" result="pass"/><test-case name="32169mgG008 tokoe:valid" result="pass"/><test-case name="32170mgG008.i tokoe:invalid" result="pass"/><test-case name="32171mgG009 tokoe:valid" result="pass"/><test-case name="32172mgG009.v tokoe:valid" result="pass"/><test-case name="32173mgG010 tokoe:valid" result="pass"/><test-case name="32174mgG010.v tokoe:valid" result="pass"/><test-case name="32175mgG011 tokoe:valid" result="pass"/><test-case name="32176mgG011.i tokoe:invalid" result="pass"/><test-case name="32177mgG012 tokoe:valid" result="pass"/><test-case name="32178mgG012.v tokoe:valid" result="pass"/><test-case name="32179mgG013 tokoe:valid" result="pass"/><test-case name="32180mgG013.i tokoe:invalid" result="pass"/><test-case name="32181mgG014 tokoe:valid" result="pass"/><test-case name="32182mgG014.v tokoe:valid" result="pass"/><test-case name="32183mgG015 tokoe:valid" result="pass"/><test-case name="32184mgG015.i tokoe:invalid" result="pass"/><test-case name="32185mgG016 tokoe:valid" result="pass"/><test-case name="32186mgG016.v tokoe:valid" result="pass"/><test-case name="32187mgG017 tokoe:valid" result="pass"/><test-case name="32188mgG017.i tokoe:invalid" result="pass"/><test-case name="32189mgG018 tokoe:valid" result="pass"/><test-case name="32190mgG018.i tokoe:invalid" result="pass"/><test-case name="32191mgG019 tokoe:valid" result="pass"/><test-case name="32192mgG019.v tokoe:valid" result="pass"/><test-case name="32193mgG020 tokoe:valid" result="pass"/><test-case name="32194mgG020.i tokoe:invalid" result="pass"/><test-case name="32195mgG021 tokoe:valid" result="pass"/><test-case name="32196mgG021.i tokoe:invalid" result="pass"/><test-case name="32197mgG022 tokoe:valid" result="pass"/><test-case name="32198mgG022.v tokoe:valid" result="pass"/><test-case name="32199mgG023 tokoe:valid" result="pass"/><test-case name="32200mgG023.v tokoe:valid" result="pass"/><test-case name="32201mgG024 tokoe:valid" result="pass"/><test-case name="32202mgG024.i tokoe:invalid" result="pass"/><test-case name="32203mgG025 tokoe:invalid" result="pass"/><test-case name="32204mgG026 tokoe:valid" result="pass"/><test-case name="32205mgG026.v tokoe:valid" result="pass"/><test-case name="32206mgG027 tokoe:invalid" result="pass"/><test-case name="32207mgG028 tokoe:invalid" result="pass"/><test-case name="32208mgG029 tokoe:invalid" result="pass"/><test-case name="32209mgG030 tokoe:invalid" result="pass"/><test-case name="32210mgH001 tokoe:valid" result="pass"/><test-case name="32211mgH001.v tokoe:valid" result="pass"/><test-case name="32212mgH002 tokoe:invalid" result="pass"/><test-case name="32213mgH003 tokoe:invalid" result="pass"/><test-case name="32214mgH004 tokoe:invalid" result="pass"/><test-case name="32215mgH005 tokoe:invalid" result="pass"/><test-case name="32216mgH006 tokoe:invalid" result="pass"/><test-case name="32217mgH007 tokoe:invalid" result="pass"/><test-case name="32218mgH008 tokoe:invalid" result="pass"/><test-case name="32219mgH009 tokoe:invalid" result="pass"/><test-case name="32220mgH010 tokoe:invalid" result="pass"/><test-case name="32221mgH011 tokoe:invalid" result="pass"/><test-case name="32222mgH012 tokoe:invalid" result="pass"/><test-case name="32223mgH013 tokoe:valid" result="pass"/><test-case name="32224mgH013.v tokoe:valid" result="pass"/><test-case name="32225mgH014 tokoe:valid" result="pass"/><test-case name="32226mgH014.v tokoe:valid" result="pass"/><test-case name="32227mgH015 tokoe:valid" result="pass"/><test-case name="32228mgH015.v tokoe:valid" result="pass"/><test-case name="32229mgH016 tokoe:valid" result="pass"/><test-case name="32230mgH016.v tokoe:valid" result="pass"/><test-case name="32231mgH017 tokoe:valid" result="pass"/><test-case name="32232mgH017.v tokoe:valid" result="pass"/><test-case name="32233mgH018 tokoe:valid" result="pass"/><test-case name="32234mgH018.v tokoe:valid" result="pass"/><test-case name="32235mgHa001 tokoe:invalid" result="pass"/><test-case name="32236mgHa002 tokoe:invalid" result="pass"/><test-case name="32237mgHa003 tokoe:invalid" result="pass"/><test-case name="32238mgHa004 tokoe:invalid" result="pass"/><test-case name="32239mgHa005 tokoe:invalid" result="pass"/><test-case name="32240mgHa006 tokoe:invalid" result="pass"/><test-case name="32241mgHa007 tokoe:invalid" result="pass"/><test-case name="32242mgHa008 tokoe:invalid" result="pass"/><test-case name="32243mgHb001 tokoe:invalid" result="pass"/><test-case name="32244mgHb002 tokoe:invalid" result="pass"/><test-case name="32245mgHb003 tokoe:invalid" result="pass"/><test-case name="32246mgHb004 tokoe:valid" result="pass"/><test-case name="32247mgHb004.v tokoe:valid" result="pass"/><test-case name="32248mgHb005 tokoe:valid" result="pass"/><test-case name="32249mgHb005.v tokoe:valid" result="pass"/><test-case name="32250mgHb006 tokoe:invalid" result="pass"/><test-case name="32251mgHb007 tokoe:invalid" result="pass"/><test-case name="32252mgHb008 tokoe:invalid" result="pass"/><test-case name="32253mgI001 tokoe:valid" result="pass"/><test-case name="32254mgI001.v tokoe:valid" result="pass"/><test-case name="32255mgI002 tokoe:valid" result="pass"/><test-case name="32256mgI002.v tokoe:valid" result="pass"/><test-case name="32257mgI003 tokoe:invalid" result="pass"/><test-case name="32258mgI004 tokoe:valid" result="pass"/><test-case name="32259mgI004.v tokoe:valid" result="pass"/><test-case name="32260mgI005 tokoe:valid" result="pass"/><test-case name="32261mgI005.v tokoe:valid" result="pass"/><test-case name="32262mgI006 tokoe:valid" result="pass"/><test-case name="32263mgI006.v tokoe:valid" result="pass"/><test-case name="32264mgI007 tokoe:valid" result="pass"/><test-case name="32265mgI007.v tokoe:valid" result="pass"/><test-case name="32266mgI008 tokoe:valid" result="pass"/><test-case name="32267mgI008.v tokoe:valid" result="pass"/><test-case name="32268mgI009 tokoe:valid" result="pass"/><test-case name="32269mgI009.v tokoe:valid" result="pass"/><test-case name="32270mgI010 tokoe:valid" result="pass"/><test-case name="32271mgI010.v tokoe:valid" result="pass"/><test-case name="32272mgI011 tokoe:valid" result="pass"/><test-case name="32273mgI011.v tokoe:valid" result="pass"/><test-case name="32274mgI012 tokoe:valid" result="pass"/><test-case name="32275mgI012.v tokoe:valid" result="pass"/><test-case name="32276mgI013 tokoe:valid" result="pass"/><test-case name="32277mgI013.v tokoe:valid" result="pass"/><test-case name="32278mgI014 tokoe:valid" result="pass"/><test-case name="32279mgI014.v tokoe:valid" result="pass"/><test-case name="32280mgI015 tokoe:valid" result="pass"/><test-case name="32281mgI015.v tokoe:valid" result="pass"/><test-case name="32282mgI016 tokoe:valid" result="pass"/><test-case name="32283mgI016.v tokoe:valid" result="pass"/><test-case name="32284mgI017 tokoe:valid" result="pass"/><test-case name="32285mgI017.v tokoe:valid" result="pass"/><test-case name="32286mgI018 tokoe:valid" result="pass"/><test-case name="32287mgI018.v tokoe:valid" result="pass"/><test-case name="32288mgI019 tokoe:valid" result="pass"/><test-case name="32289mgI019.v tokoe:valid" result="pass"/><test-case name="32290mgI020 tokoe:invalid" result="pass"/><test-case name="32291mgI021 tokoe:invalid" result="pass"/><test-case name="32292mgI022 tokoe:invalid" result="pass"/><test-case name="32293mgI023 tokoe:invalid" result="pass"/><test-case name="32294mgJ002 tokoe:invalid" result="pass"/><test-case name="32295mgJ003 tokoe:valid" result="pass"/><test-case name="32296mgJ003.i tokoe:invalid" result="pass"/><test-case name="32297mgJ004 tokoe:valid" result="pass"/><test-case name="32298mgJ004.v tokoe:valid" result="pass"/><test-case name="32299mgJ005 tokoe:valid" result="pass"/><test-case name="32300mgJ005.i tokoe:invalid" result="pass"/><test-case name="32301mgJ006 tokoe:valid" result="pass"/><test-case name="32302mgJ006.v tokoe:valid" result="pass"/><test-case name="32303mgJ007 tokoe:valid" result="pass"/><test-case name="32304mgJ007.v tokoe:valid" result="pass"/><test-case name="32305mgJ008 tokoe:valid" result="pass"/><test-case name="32306mgJ008.i tokoe:invalid" result="pass"/><test-case name="32307mgJ009 tokoe:valid" result="pass"/><test-case name="32308mgJ009.v tokoe:valid" result="pass"/><test-case name="32309mgJ010 tokoe:valid" result="pass"/><test-case name="32310mgJ010.v tokoe:valid" result="pass"/><test-case name="32311mgJ011 tokoe:valid" result="pass"/><test-case name="32312mgJ011.i tokoe:invalid" result="pass"/><test-case name="32313mgJ012 tokoe:valid" result="pass"/><test-case name="32314mgJ012.v tokoe:valid" result="pass"/><test-case name="32315mgJ013 tokoe:valid" result="pass"/><test-case name="32316mgJ013.i tokoe:invalid" result="pass"/><test-case name="32317mgJ014 tokoe:valid" result="pass"/><test-case name="32318mgJ014.v tokoe:valid" result="pass"/><test-case name="32319mgJ015 tokoe:valid" result="pass"/><test-case name="32320mgJ015.i tokoe:invalid" result="pass"/><test-case name="32321mgJ016 tokoe:valid" result="pass"/><test-case name="32322mgJ016.v tokoe:valid" result="pass"/><test-case name="32323mgJ017 tokoe:valid" result="pass"/><test-case name="32324mgJ017.i tokoe:invalid" result="pass"/><test-case name="32325mgJ018 tokoe:valid" result="pass"/><test-case name="32326mgJ018.i tokoe:invalid" result="pass"/><test-case name="32327mgJ019 tokoe:valid" result="pass"/><test-case name="32328mgJ019.v tokoe:valid" result="pass"/><test-case name="32329mgJ020 tokoe:valid" result="pass"/><test-case name="32330mgJ020.i tokoe:invalid" result="pass"/><test-case name="32331mgJ021 tokoe:valid" result="pass"/><test-case name="32332mgJ021.i tokoe:invalid" result="pass"/><test-case name="32333mgJ022 tokoe:valid" result="pass"/><test-case name="32334mgJ022.v tokoe:valid" result="pass"/><test-case name="32335mgJ023 tokoe:valid" result="pass"/><test-case name="32336mgJ023.v tokoe:valid" result="pass"/><test-case name="32337mgJ024 tokoe:valid" result="pass"/><test-case name="32338mgJ024.i tokoe:invalid" result="pass"/><test-case name="32339mgJ025 tokoe:invalid" result="pass"/><test-case name="32340mgJ026 tokoe:valid" result="pass"/><test-case name="32341mgJ026.v tokoe:valid" result="pass"/><test-case name="32342mgJ027 tokoe:invalid" result="pass"/><test-case name="32343mgJ028 tokoe:invalid" result="pass"/><test-case name="32344mgJ029 tokoe:invalid" result="pass"/><test-case name="32345mgJ030 tokoe:invalid" result="pass"/><test-case name="32346mgK001 tokoe:valid" result="pass"/><test-case name="32347mgK001.v tokoe:valid" result="pass"/><test-case name="32348mgK002 tokoe:valid" result="pass"/><test-case name="32349mgK002.i tokoe:invalid" result="pass"/><test-case name="32350mgK003 tokoe:valid" result="pass"/><test-case name="32351mgK003.i tokoe:invalid" result="pass"/><test-case name="32352mgK004 tokoe:valid" result="pass"/><test-case name="32353mgK004.v tokoe:valid" result="pass"/><test-case name="32354mgK005 tokoe:valid" result="pass"/><test-case name="32355mgK005.i tokoe:invalid" result="pass"/><test-case name="32356mgK006 tokoe:valid" result="pass"/><test-case name="32357mgK006.i tokoe:invalid" result="pass"/><test-case name="32358mgK007 tokoe:valid" result="pass"/><test-case name="32359mgK007.i tokoe:invalid" result="pass"/><test-case name="32360mgK008 tokoe:valid" result="pass"/><test-case name="32361mgK008.i tokoe:invalid" result="pass"/><test-case name="32362mgK009 tokoe:valid" result="pass"/><test-case name="32363mgK009.v tokoe:valid" result="pass"/><test-case name="32364mgK010 tokoe:valid" result="pass"/><test-case name="32365mgK010.i tokoe:invalid" result="pass"/><test-case name="32366mgL001 tokoe:valid" result="pass"/><test-case name="32367mgL001.v tokoe:valid" result="pass"/><test-case name="32368mgL002 tokoe:valid" result="pass"/><test-case name="32369mgL002.i tokoe:invalid" result="pass"/><test-case name="32370mgL003 tokoe:valid" result="pass"/><test-case name="32371mgL003.i tokoe:invalid" result="pass"/><test-case name="32372mgL004 tokoe:valid" result="pass"/><test-case name="32373mgL004.v tokoe:valid" result="pass"/><test-case name="32374mgL005 tokoe:valid" result="pass"/><test-case name="32375mgL005.i tokoe:invalid" result="pass"/><test-case name="32376mgL006 tokoe:valid" result="pass"/><test-case name="32377mgL006.v tokoe:valid" result="pass"/><test-case name="32378mgL007 tokoe:valid" result="pass"/><test-case name="32379mgL007.i tokoe:invalid" result="pass"/><test-case name="32380mgL008 tokoe:valid" result="pass"/><test-case name="32381mgL008.v tokoe:valid" result="pass"/><test-case name="32382mgL009 tokoe:valid" result="pass"/><test-case name="32383mgL009.v tokoe:valid" result="pass"/><test-case name="32384mgL010 tokoe:valid" result="pass"/><test-case name="32385mgL010.i tokoe:invalid" result="pass"/><test-case name="32386mgM002 tokoe:valid" result="pass"/><test-case name="32387mgM002.i tokoe:invalid" result="pass"/><test-case name="32388mgM003 tokoe:valid" result="pass"/><test-case name="32389mgM003.i tokoe:invalid" result="pass"/><test-case name="32390mgM004 tokoe:valid" result="pass"/><test-case name="32391mgM004.v tokoe:valid" result="pass"/><test-case name="32392mgM005 tokoe:valid" result="pass"/><test-case name="32393mgM005.i tokoe:invalid" result="pass"/><test-case name="32394mgM006 tokoe:valid" result="pass"/><test-case name="32395mgM006.i tokoe:invalid" result="pass"/><test-case name="32396mgM007 tokoe:valid" result="pass"/><test-case name="32397mgM007.i tokoe:invalid" result="pass"/><test-case name="32398mgM008 tokoe:valid" result="pass"/><test-case name="32399mgM008.v tokoe:valid" result="pass"/><test-case name="32400mgM009 tokoe:valid" result="pass"/><test-case name="32401mgM009.v tokoe:valid" result="pass"/><test-case name="32402mgM010 tokoe:valid" result="pass"/><test-case name="32403mgM010.i tokoe:invalid" result="pass"/><test-case name="32404mgM011 tokoe:valid" result="pass"/><test-case name="32405mgM011.v tokoe:valid" result="pass"/><test-case name="32406mgM012 tokoe:valid" result="pass"/><test-case name="32407mgM012.i tokoe:invalid" result="pass"/><test-case name="32408mgM013 tokoe:valid" result="pass"/><test-case name="32409mgM013.v tokoe:valid" result="pass"/><test-case name="32410mgM014 tokoe:valid" result="pass"/><test-case name="32411mgM014.i tokoe:invalid" result="pass"/><test-case name="32412mgN001 tokoe:valid" result="pass"/><test-case name="32413mgN001.v tokoe:valid" result="pass"/><test-case name="32414mgN002 tokoe:valid" result="pass"/><test-case name="32415mgN002.i tokoe:invalid" result="pass"/><test-case name="32416mgN003 tokoe:valid" result="pass"/><test-case name="32417mgN003.i tokoe:invalid" result="pass"/><test-case name="32418mgN004 tokoe:valid" result="pass"/><test-case name="32419mgN004.i tokoe:invalid" result="pass"/><test-case name="32420mgN005 tokoe:valid" result="pass"/><test-case name="32421mgN005.v tokoe:valid" result="pass"/><test-case name="32422mgN006 tokoe:valid" result="pass"/><test-case name="32423mgN006.i tokoe:invalid" result="pass"/><test-case name="32424mgN007 tokoe:valid" result="pass"/><test-case name="32425mgN007.i tokoe:invalid" result="pass"/><test-case name="32426mgN008 tokoe:valid" result="pass"/><test-case name="32427mgN008.i tokoe:invalid" result="pass"/><test-case name="32428mgN009 tokoe:valid" result="pass"/><test-case name="32429mgN009.i tokoe:invalid" result="pass"/><test-case name="32430mgN010 tokoe:valid" result="pass"/><test-case name="32431mgN010.i tokoe:invalid" result="pass"/><test-case name="32432mgN011 tokoe:valid" result="pass"/><test-case name="32433mgN011.i tokoe:invalid" result="pass"/><test-case name="32434mgN012 tokoe:valid" result="pass"/><test-case name="32435mgN012.v tokoe:valid" result="pass"/><test-case name="32436mgN013 tokoe:valid" result="pass"/><test-case name="32437mgN013.i tokoe:invalid" result="pass"/><test-case name="32438mgN014 tokoe:valid" result="pass"/><test-case name="32439mgN014.i tokoe:invalid" result="pass"/><test-case name="32440mgN015 tokoe:valid" result="pass"/><test-case name="32441mgN015.i tokoe:invalid" result="pass"/><test-case name="32442mgN016 tokoe:valid" result="pass"/><test-case name="32443mgN016.i tokoe:invalid" result="pass"/><test-case name="32444mgO001 tokoe:invalid" result="pass"/><test-case name="32445mgO002 tokoe:valid" result="pass"/><test-case name="32446mgO002.v tokoe:valid" result="pass"/><test-case name="32447mgO003 tokoe:invalid" result="pass"/><test-case name="32448mgO004 tokoe:valid" result="pass"/><test-case name="32449mgO004.v tokoe:valid" result="pass"/><test-case name="32450mgO005 tokoe:valid" result="pass"/><test-case name="32451mgO005.v tokoe:valid" result="pass"/><test-case name="32452mgO006 tokoe:valid" result="pass"/><test-case name="32453mgO006.v tokoe:valid" result="pass"/><test-case name="32454mgO007 tokoe:valid" result="pass"/><test-case name="32455mgO008 tokoe:valid" result="pass"/><test-case name="32456mgO008.v tokoe:valid" result="pass"/><test-case name="32457mgO009 tokoe:valid" result="pass"/><test-case name="32458mgO009.v tokoe:valid" result="pass"/><test-case name="32459mgO010 tokoe:valid" result="pass"/><test-case name="32460mgO010.v tokoe:valid" result="pass"/><test-case name="32461mgO011 tokoe:valid" result="pass"/><test-case name="32462mgO011.v tokoe:valid" result="pass"/><test-case name="32463mgO012 tokoe:invalid" result="pass"/><test-case name="32464mgO014 tokoe:valid" result="pass"/><test-case name="32465mgO015 tokoe:valid" result="pass"/><test-case name="32466mgO015.v tokoe:valid" result="pass"/><test-case name="32467mgO016 tokoe:valid" result="pass"/><test-case name="32468mgO016.v tokoe:valid" result="pass"/><test-case name="32469mgO017 tokoe:valid" result="pass"/><test-case name="32470mgO017.v tokoe:valid" result="pass"/><test-case name="32471mgO018 tokoe:invalid" result="pass"/><test-case name="32472mgO019 tokoe:invalid" result="pass"/><test-case name="32473mgO020 tokoe:invalid" result="pass"/><test-case name="32474mgO021 tokoe:invalid" result="pass"/><test-case name="32475mgO022 tokoe:invalid" result="pass"/><test-case name="32476mgO023 tokoe:invalid" result="pass"/><test-case name="32477mgO024 tokoe:invalid" result="pass"/><test-case name="32478mgO025 tokoe:invalid" result="pass"/><test-case name="32479mgO026 tokoe:invalid" result="pass"/><test-case name="32480mgO027 tokoe:invalid" result="pass"/><test-case name="32481mgO028 tokoe:valid" result="pass"/><test-case name="32482mgO029 tokoe:valid" result="pass"/><test-case name="32483mgO029.v tokoe:valid" result="pass"/><test-case name="32484mgO030 tokoe:valid" result="pass"/><test-case name="32485mgO030.v tokoe:valid" result="pass"/><test-case name="32486mgO031 tokoe:valid" result="pass"/><test-case name="32487mgO031.v tokoe:valid" result="pass"/><test-case name="32488mgO032 tokoe:invalid" result="pass"/><test-case name="32489mgO033 tokoe:invalid" result="pass"/><test-case name="32490mgO034 tokoe:valid" result="pass"/><test-case name="32491mgO034.v tokoe:valid" result="pass"/><test-case name="32492mgO035 tokoe:valid" result="pass"/><test-case name="32493mgO036 tokoe:valid" result="pass"/><test-case name="32494mgO036.v tokoe:valid" result="pass"/><test-case name="32495mgO037 tokoe:valid" result="pass"/><test-case name="32496mgO037.v tokoe:valid" result="pass"/><test-case name="32497mgO038 tokoe:valid" result="pass"/><test-case name="32498mgO038.v tokoe:valid" result="pass"/><test-case name="32499mgP039 tokoe:invalid" result="pass"/><test-case name="32500mgP040 tokoe:invalid" result="pass"/><test-case name="32501mgP041 tokoe:invalid" result="pass"/><test-case name="32502mgP042 tokoe:invalid" result="pass"/><test-case name="32503mgP043 tokoe:invalid" result="pass"/><test-case name="32504mgP049 tokoe:invalid" result="pass"/><test-case name="32505mgP050 tokoe:invalid" result="pass"/><test-case name="32506mgP055 tokoe:invalid" result="pass"/><test-case name="32507mgP056 tokoe:invalid" result="pass"/><test-case name="32508mgP057 tokoe:invalid" result="pass"/><test-case name="32509mgP058 tokoe:invalid" result="pass"/><test-case name="32510mgP059 tokoe:invalid" result="pass"/><test-case name="32511mgP060 tokoe:invalid" result="pass"/><test-case name="32512mgP061 tokoe:invalid" result="pass"/><test-case name="32513mgP062 tokoe:invalid" result="pass"/><test-case name="32514mgQ001 tokoe:invalid" result="pass"/><test-case name="32515mgQ002 tokoe:valid" result="pass"/><test-case name="32516mgQ002.v tokoe:valid" result="pass"/><test-case name="32517mgQ003 tokoe:valid" result="pass"/><test-case name="32518mgQ003.v tokoe:valid" result="pass"/><test-case name="32519mgQ004 tokoe:invalid" result="pass"/><test-case name="32520mgQ005 tokoe:invalid" result="pass"/><test-case name="32521mgQ006 tokoe:valid" result="pass"/><test-case name="32522mgQ006.v tokoe:valid" result="pass"/><test-case name="32523mgQ007 tokoe:valid" result="pass"/><test-case name="32524mgQ007.v tokoe:valid" result="pass"/><test-case name="32525mgQ008 tokoe:valid" result="pass"/><test-case name="32526mgQ008.v tokoe:valid" result="pass"/><test-case name="32527mgQ009 tokoe:valid" result="pass"/><test-case name="32528mgQ009.v tokoe:valid" result="pass"/><test-case name="32529mgQ010 tokoe:invalid" result="pass"/><test-case name="32530mgQ011 tokoe:invalid" result="pass"/><test-case name="32531mgQ012 tokoe:invalid" result="pass"/><test-case name="32532mgQ013 tokoe:invalid" result="pass"/><test-case name="32533mgQ014 tokoe:valid" result="pass"/><test-case name="32534mgQ014.v tokoe:valid" result="pass"/><test-case name="32535mgQ015 tokoe:valid" result="pass"/><test-case name="32536mgQ015.v tokoe:valid" result="pass"/><test-case name="32537mgQ016 tokoe:valid" result="pass"/><test-case name="32538mgQ016.v tokoe:valid" result="pass"/><test-case name="32539mgQ017 tokoe:valid" result="pass"/><test-case name="32540mgQ017.v tokoe:valid" result="pass"/><test-case name="32541mgQ018 tokoe:valid" result="pass"/><test-case name="32542mgQ018.v tokoe:valid" result="pass"/><test-case name="32543mgQ019 tokoe:valid" result="pass"/><test-case name="32544mgQ019.v tokoe:valid" result="pass"/><test-case name="32545mgQ020 tokoe:valid" result="pass"/><test-case name="32546mgQ020.v tokoe:valid" result="pass"/><test-case name="32547mgQ021 tokoe:invalid" result="pass"/><test-case name="32548mgR001 tokoe:invalid" result="pass"/><test-case name="32549mgR002 tokoe:invalid" result="pass"/><test-case name="32550mgR003 tokoe:invalid" result="pass"/><test-case name="32551mgR004 tokoe:invalid" result="pass"/><test-case name="32552mgR005 tokoe:invalid" result="pass"/><test-case name="32553mgR006 tokoe:invalid" result="pass"/><test-case name="32554mgR007 tokoe:invalid" result="pass"/><test-case name="32555mgR008 tokoe:invalid" result="pass"/><test-case name="32556mgR009 tokoe:invalid" result="pass"/><test-case name="32557mgR010 tokoe:invalid" result="pass"/><test-case name="32558mgR011 tokoe:invalid" result="pass"/><test-case name="32559mgR012 tokoe:invalid" result="pass"/><test-case name="32560mgR013 tokoe:invalid" result="pass"/><test-case name="32561mgR014 tokoe:invalid" result="pass"/><test-case name="32562mgR015 tokoe:invalid" result="pass"/><test-case name="32563mgR016 tokoe:invalid" result="pass"/><test-case name="32564mgR017 tokoe:invalid" result="pass"/><test-case name="32565mgR018 tokoe:invalid" result="pass"/><test-case name="32566mgR019 tokoe:invalid" result="pass"/><test-case name="32567mgR020 tokoe:invalid" result="pass"/><test-case name="32568mgR021 tokoe:invalid" result="pass"/><test-case name="32569mgR022 tokoe:invalid" result="pass"/><test-case name="32570mgS002 tokoe:invalid" result="pass"/><test-case name="32571mgS003 tokoe:invalid" result="pass"/><test-case name="32572mgS004 tokoe:invalid" result="pass"/><test-case name="32573mgS005 tokoe:invalid" result="pass"/><test-case name="32574mgZ001 tokoe:valid" result="pass"/><test-case name="32575mgZ001.i tokoe:invalid" result="pass"/><test-case name="32576mgZ002 tokoe:valid" result="pass"/><test-case name="32577mgZ003 tokoe:valid" result="pass"/><test-case name="32578mgZ003.v tokoe:valid" result="pass"/><test-case name="32579mgZ004 tokoe:valid" result="pass"/><test-case name="32580mgZ004.v tokoe:valid" result="pass"/><test-case name="32581mgZ005 tokoe:valid" result="pass"/><test-case name="32582notatA001 tokoe:valid" result="pass"/><test-case name="32583notatA002 tokoe:invalid" result="pass"/><test-case name="32584notatA003 tokoe:valid" result="pass"/><test-case name="32585notatA004 tokoe:valid" result="pass"/><test-case name="32586notatA005 tokoe:invalid" result="pass"/><test-case name="32587notatA006 tokoe:invalid" result="pass"/><test-case name="32588notatA007 tokoe:invalid" result="pass"/><test-case name="32589notatB001 tokoe:invalid" result="pass"/><test-case name="32590notatB002 tokoe:valid" result="pass"/><test-case name="32591notatB003 tokoe:valid" result="pass"/><test-case name="32592notatB004 tokoe:valid" result="pass"/><test-case name="32593notatB005 tokoe:invalid" result="pass"/><test-case name="32594notatB006 tokoe:valid" result="pass"/><test-case name="32595notatB008 tokoe:invalid" result="pass"/><test-case name="32596notatB009 tokoe:invalid" result="pass"/><test-case name="32597notatB010 tokoe:invalid" result="pass"/><test-case name="32598notatB011 tokoe:invalid" result="pass"/><test-case name="32599notatB012 tokoe:invalid" result="pass"/><test-case name="32600notatB013 tokoe:invalid" result="pass"/><test-case name="32601notatB014 tokoe:valid" result="pass"/><test-case name="32602notatB015 tokoe:valid" result="pass"/><test-case name="32603notatB016 tokoe:valid" result="pass"/><test-case name="32604notatC001 tokoe:valid" result="pass"/><test-case name="32605notatC003 tokoe:valid" result="pass"/><test-case name="32606notatC004 tokoe:valid" result="pass"/><test-case name="32607notatC005 tokoe:valid" result="pass"/><test-case name="32608notatC006 tokoe:valid" result="pass"/><test-case name="32609notatD001 tokoe:valid" result="pass"/><test-case name="32610notatD004 tokoe:valid" result="pass"/><test-case name="32611notatD005 tokoe:valid" result="pass"/><test-case name="32612notatD006 tokoe:valid" result="pass"/><test-case name="32613notatD007 tokoe:valid" result="pass"/><test-case name="32614notatE001 tokoe:valid" result="pass"/><test-case name="32615notatE002 tokoe:invalid" result="pass"/><test-case name="32616notatE003 tokoe:invalid" result="pass"/><test-case name="32617notatE004 tokoe:valid" result="pass"/><test-case name="32618notatF001 tokoe:invalid" result="pass"/><test-case name="32619notatF002 tokoe:invalid" result="pass"/><test-case name="32620notatF003 tokoe:invalid" result="pass"/><test-case name="32621notatF004 tokoe:valid" result="pass"/><test-case name="32622notatF005 tokoe:invalid" result="pass"/><test-case name="32623notatF006 tokoe:invalid" result="pass"/><test-case name="32624notatF007 tokoe:invalid" result="pass"/><test-case name="32625notatF008 tokoe:invalid" result="pass"/><test-case name="32626notatF009 tokoe:valid" result="pass"/><test-case name="32627notatF010 tokoe:invalid" result="pass"/><test-case name="32628notatF011 tokoe:invalid" result="pass"/><test-case name="32629notatF012 tokoe:invalid" result="pass"/><test-case name="32630notatF013 tokoe:invalid" result="pass"/><test-case name="32631notatF014 tokoe:invalid" result="pass"/><test-case name="32632notatF015 tokoe:invalid" result="pass"/><test-case name="32633notatF016 tokoe:invalid" result="pass"/><test-case name="32634notatF017 tokoe:invalid" result="pass"/><test-case name="32635notatF018 tokoe:invalid" result="pass"/><test-case name="32636notatF019 tokoe:invalid" result="pass"/><test-case name="32637notatF020 tokoe:invalid" result="pass"/><test-case name="32638notatF021 tokoe:valid" result="pass"/><test-case name="32639notatF022 tokoe:invalid" result="pass"/><test-case name="32640notatF023 tokoe:invalid" result="pass"/><test-case name="32641notatF024 tokoe:invalid" result="pass"/><test-case name="32642notatF025 tokoe:invalid" result="pass"/><test-case name="32643notatF026 tokoe:invalid" result="pass"/><test-case name="32644notatF027 tokoe:invalid" result="pass"/><test-case name="32645notatF028 tokoe:invalid" result="pass"/><test-case name="32646notatF029 tokoe:invalid" result="pass"/><test-case name="32647notatF030 tokoe:invalid" result="pass"/><test-case name="32648notatF031 tokoe:invalid" result="pass"/><test-case name="32649notatF032 tokoe:invalid" result="pass"/><test-case name="32650notatF033 tokoe:invalid" result="pass"/><test-case name="32651notatF034 tokoe:invalid" result="pass"/><test-case name="32652notatF035 tokoe:invalid" result="pass"/><test-case name="32653notatF036 tokoe:invalid" result="pass"/><test-case name="32654notatF037 tokoe:invalid" result="pass"/><test-case name="32655notatF038 tokoe:invalid" result="pass"/><test-case name="32656notatF039 tokoe:invalid" result="pass"/><test-case name="32657notatF040 tokoe:invalid" result="pass"/><test-case name="32658notatF041 tokoe:invalid" result="pass"/><test-case name="32659notatF042 tokoe:invalid" result="pass"/><test-case name="32660notatF043 tokoe:invalid" result="pass"/><test-case name="32661notatF044 tokoe:invalid" result="pass"/><test-case name="32662notatF045 tokoe:invalid" result="pass"/><test-case name="32663notatF046 tokoe:invalid" result="pass"/><test-case name="32664notatF047 tokoe:invalid" result="pass"/><test-case name="32665notatF048 tokoe:invalid" result="pass"/><test-case name="32666notatF049 tokoe:invalid" result="pass"/><test-case name="32667notatF050 tokoe:invalid" result="pass"/><test-case name="32668notatF051 tokoe:invalid" result="pass"/><test-case name="32669notatF052 tokoe:invalid" result="pass"/><test-case name="32670notatF053 tokoe:invalid" result="pass"/><test-case name="32671notatF054 tokoe:invalid" result="pass"/><test-case name="32672notatF055 tokoe:invalid" result="pass"/><test-case name="32673notatF056 tokoe:invalid" result="pass"/><test-case name="32674notatF057 tokoe:invalid" result="pass"/><test-case name="32675notatF058 tokoe:invalid" result="pass"/><test-case name="32676notatF059 tokoe:valid" result="pass"/><test-case name="32677notatF060 tokoe:invalid" result="pass"/><test-case name="32678notatF061 tokoe:invalid" result="pass"/><test-case name="32679notatF062 tokoe:invalid" result="pass"/><test-case name="32680notatF063 tokoe:invalid" result="pass"/><test-case name="32681notatF064 tokoe:invalid" result="pass"/><test-case name="32682notatF065 tokoe:invalid" result="pass"/><test-case name="32683notatF066 tokoe:invalid" result="pass"/><test-case name="32684notatF067 tokoe:invalid" result="pass"/><test-case name="32685notatF068 tokoe:invalid" result="pass"/><test-case name="32686notatF069 tokoe:invalid" result="pass"/><test-case name="32687notatF070 tokoe:invalid" result="pass"/><test-case name="32688notatF071 tokoe:invalid" result="pass"/><test-case name="32689notatF072 tokoe:invalid" result="pass"/><test-case name="32690notatG001 tokoe:invalid" result="pass"/><test-case name="32691notatG002 tokoe:invalid" result="pass"/><test-case name="32692notatG003 tokoe:invalid" result="pass"/><test-case name="32693notatG005 tokoe:valid" result="pass"/><test-case name="32694notatG006 tokoe:invalid" result="pass"/><test-case name="32695notatH001v tokoe:valid" result="pass"/><test-case name="32696notatH001v.v tokoe:valid" result="pass"/><test-case name="32697notatH002v tokoe:valid" result="pass"/><test-case name="32698notatH002v.i tokoe:invalid" result="pass"/><test-case name="32699notatH003 tokoe:valid" result="pass"/><test-case name="32700notatH003.i tokoe:invalid" result="pass"/><test-case name="32701particlesA001 tokoe:valid" result="pass"/><test-case name="32702particlesA001.i tokoe:invalid" result="pass"/><test-case name="32703particlesA002 tokoe:valid" result="pass"/><test-case name="32704particlesA002.v tokoe:valid" result="pass"/><test-case name="32705particlesA003 tokoe:valid" result="pass"/><test-case name="32706particlesA003.i tokoe:invalid" result="pass"/><test-case name="32707particlesA004 tokoe:valid" result="pass"/><test-case name="32708particlesA004.i tokoe:invalid" result="pass"/><test-case name="32709particlesA005 tokoe:valid" result="pass"/><test-case name="32710particlesA005.i tokoe:invalid" result="pass"/><test-case name="32711particlesA006 tokoe:valid" result="pass"/><test-case name="32712particlesA006.v tokoe:valid" result="pass"/><test-case name="32713particlesA007 tokoe:valid" result="pass"/><test-case name="32714particlesA007.v tokoe:valid" result="pass"/><test-case name="32715particlesA008 tokoe:valid" result="pass"/><test-case name="32716particlesA008.i tokoe:invalid" result="pass"/><test-case name="32717particlesA009 tokoe:valid" result="pass"/><test-case name="32718particlesA009.i tokoe:invalid" result="pass"/><test-case name="32719particlesA010 tokoe:valid" result="pass"/><test-case name="32720particlesA010.v tokoe:valid" result="pass"/><test-case name="32721particlesA011 tokoe:valid" result="pass"/><test-case name="32722particlesA011.v tokoe:valid" result="pass"/><test-case name="32723particlesB001 tokoe:valid" result="pass"/><test-case name="32724particlesB001.i tokoe:invalid" result="pass"/><test-case name="32725particlesB002 tokoe:valid" result="pass"/><test-case name="32726particlesB002.v tokoe:valid" result="pass"/><test-case name="32727particlesB003 tokoe:valid" result="pass"/><test-case name="32728particlesB003.i tokoe:invalid" result="pass"/><test-case name="32729particlesB004 tokoe:valid" result="pass"/><test-case name="32730particlesB004.i tokoe:invalid" result="pass"/><test-case name="32731particlesB005 tokoe:valid" result="pass"/><test-case name="32732particlesB005.v tokoe:valid" result="pass"/><test-case name="32733particlesB006 tokoe:valid" result="pass"/><test-case name="32734particlesB006.v tokoe:valid" result="pass"/><test-case name="32735particlesB007 tokoe:valid" result="pass"/><test-case name="32736particlesB007.i tokoe:invalid" result="pass"/><test-case name="32737particlesB008 tokoe:valid" result="pass"/><test-case name="32738particlesB008.i tokoe:invalid" result="pass"/><test-case name="32739particlesB009 tokoe:valid" result="pass"/><test-case name="32740particlesB009.v tokoe:valid" result="pass"/><test-case name="32741particlesB010 tokoe:valid" result="pass"/><test-case name="32742particlesB010.v tokoe:valid" result="pass"/><test-case name="32743particlesB011 tokoe:valid" result="pass"/><test-case name="32744particlesB011.i tokoe:invalid" result="pass"/><test-case name="32745particlesB012 tokoe:valid" result="pass"/><test-case name="32746particlesB012.i tokoe:invalid" result="pass"/><test-case name="32747particlesB013 tokoe:valid" result="pass"/><test-case name="32748particlesB013.v tokoe:valid" result="pass"/><test-case name="32749particlesB014 tokoe:valid" result="pass"/><test-case name="32750particlesB014.v tokoe:valid" result="pass"/><test-case name="32751particlesB015 tokoe:valid" result="pass"/><test-case name="32752particlesB015.i tokoe:invalid" result="pass"/><test-case name="32753particlesC001 tokoe:valid" result="pass"/><test-case name="32754particlesC001.v tokoe:valid" result="pass"/><test-case name="32755particlesC002 tokoe:valid" result="pass"/><test-case name="32756particlesC002.v tokoe:valid" result="pass"/><test-case name="32757particlesC003 tokoe:valid" result="pass"/><test-case name="32758particlesC003.v tokoe:valid" result="pass"/><test-case name="32759particlesC004 tokoe:valid" result="pass"/><test-case name="32760particlesC004.v tokoe:valid" result="pass"/><test-case name="32761particlesC005 tokoe:valid" result="pass"/><test-case name="32762particlesC005.v tokoe:valid" result="pass"/><test-case name="32763particlesC006 tokoe:valid" result="pass"/><test-case name="32764particlesC006.v tokoe:valid" result="pass"/><test-case name="32765particlesC007 tokoe:valid" result="pass"/><test-case name="32766particlesC007.i tokoe:invalid" result="pass"/><test-case name="32767particlesC008 tokoe:valid" result="pass"/><test-case name="32768particlesC008.v tokoe:valid" result="pass"/><test-case name="32769particlesC009 tokoe:valid" result="pass"/><test-case name="32770particlesC009.i tokoe:invalid" result="pass"/><test-case name="32771particlesC010 tokoe:valid" result="pass"/><test-case name="32772particlesC010.i tokoe:invalid" result="pass"/><test-case name="32773particlesC011 tokoe:valid" result="pass"/><test-case name="32774particlesC011.v tokoe:valid" result="pass"/><test-case name="32775particlesC012 tokoe:valid" result="pass"/><test-case name="32776particlesC012.i tokoe:invalid" result="pass"/><test-case name="32777particlesC013 tokoe:valid" result="pass"/><test-case name="32778particlesC013.i tokoe:invalid" result="pass"/><test-case name="32779particlesC014 tokoe:valid" result="pass"/><test-case name="32780particlesC014.i tokoe:invalid" result="pass"/><test-case name="32781particlesC015 tokoe:valid" result="pass"/><test-case name="32782particlesC015.v tokoe:valid" result="pass"/><test-case name="32783particlesC016 tokoe:valid" result="pass"/><test-case name="32784particlesC016.v tokoe:valid" result="pass"/><test-case name="32785particlesC017 tokoe:valid" result="pass"/><test-case name="32786particlesC017.i tokoe:invalid" result="pass"/><test-case name="32787particlesC018 tokoe:valid" result="pass"/><test-case name="32788particlesC018.i tokoe:invalid" result="pass"/><test-case name="32789particlesC019 tokoe:valid" result="pass"/><test-case name="32790particlesC019.i tokoe:invalid" result="pass"/><test-case name="32791particlesC020 tokoe:valid" result="pass"/><test-case name="32792particlesC020.i tokoe:invalid" result="pass"/><test-case name="32793particlesC021 tokoe:valid" result="pass"/><test-case name="32794particlesC021.v tokoe:valid" result="pass"/><test-case name="32795particlesC022 tokoe:valid" result="pass"/><test-case name="32796particlesC022.i tokoe:invalid" result="pass"/><test-case name="32797particlesC023 tokoe:valid" result="pass"/><test-case name="32798particlesC023.i tokoe:invalid" result="pass"/><test-case name="32799particlesC024 tokoe:valid" result="pass"/><test-case name="32800particlesC024.i tokoe:invalid" result="pass"/><test-case name="32801particlesC025 tokoe:valid" result="pass"/><test-case name="32802particlesC025.i tokoe:invalid" result="pass"/><test-case name="32803particlesC026 tokoe:valid" result="pass"/><test-case name="32804particlesC026.i tokoe:invalid" result="pass"/><test-case name="32805particlesC027 tokoe:valid" result="pass"/><test-case name="32806particlesC027.v tokoe:valid" result="pass"/><test-case name="32807particlesC028 tokoe:valid" result="pass"/><test-case name="32808particlesC028.v tokoe:valid" result="pass"/><test-case name="32809particlesC029 tokoe:valid" result="pass"/><test-case name="32810particlesC029.v tokoe:valid" result="pass"/><test-case name="32811particlesC030 tokoe:valid" result="pass"/><test-case name="32812particlesC030.v tokoe:valid" result="pass"/><test-case name="32813particlesC031 tokoe:valid" result="pass"/><test-case name="32814particlesC031.i tokoe:invalid" result="pass"/><test-case name="32815particlesC032 tokoe:valid" result="pass"/><test-case name="32816particlesC032.i tokoe:invalid" result="pass"/><test-case name="32817particlesC033 tokoe:valid" result="pass"/><test-case name="32818particlesC033.i tokoe:invalid" result="pass"/><test-case name="32819particlesC034 tokoe:valid" result="pass"/><test-case name="32820particlesC034.v tokoe:valid" result="pass"/><test-case name="32821particlesC035 tokoe:valid" result="pass"/><test-case name="32822particlesC035.i tokoe:invalid" result="pass"/><test-case name="32823particlesC036 tokoe:valid" result="pass"/><test-case name="32824particlesC036.i tokoe:invalid" result="pass"/><test-case name="32825particlesC037 tokoe:valid" result="pass"/><test-case name="32826particlesC037.v tokoe:valid" result="pass"/><test-case name="32827particlesC038 tokoe:valid" result="pass"/><test-case name="32828particlesC038.i tokoe:invalid" result="pass"/><test-case name="32829particlesC039 tokoe:valid" result="pass"/><test-case name="32830particlesC039.i tokoe:invalid" result="pass"/><test-case name="32831particlesC040 tokoe:valid" result="pass"/><test-case name="32832particlesC040.v tokoe:valid" result="pass"/><test-case name="32833particlesC041 tokoe:valid" result="pass"/><test-case name="32834particlesC041.v tokoe:valid" result="pass"/><test-case name="32835particlesC042 tokoe:valid" result="pass"/><test-case name="32836particlesC042.i tokoe:invalid" result="pass"/><test-case name="32837particlesC043 tokoe:valid" result="pass"/><test-case name="32838particlesC043.v tokoe:valid" result="pass"/><test-case name="32839particlesC044 tokoe:valid" result="pass"/><test-case name="32840particlesC044.v tokoe:valid" result="pass"/><test-case name="32841particlesC045 tokoe:valid" result="pass"/><test-case name="32842particlesC045.v tokoe:valid" result="pass"/><test-case name="32843particlesC046 tokoe:valid" result="pass"/><test-case name="32844particlesC046.v tokoe:valid" result="pass"/><test-case name="32845particlesC047 tokoe:valid" result="pass"/><test-case name="32846particlesC047.i tokoe:invalid" result="pass"/><test-case name="32847particlesC048 tokoe:valid" result="pass"/><test-case name="32848particlesC048.i tokoe:invalid" result="pass"/><test-case name="32849particlesDa001 tokoe:valid" result="pass"/><test-case name="32850particlesDa001.i tokoe:invalid" result="pass"/><test-case name="32851particlesDa002 tokoe:valid" result="pass"/><test-case name="32852particlesDa002.v tokoe:valid" result="pass"/><test-case name="32853particlesDa003 tokoe:valid" result="pass"/><test-case name="32854particlesDa003.i tokoe:invalid" result="pass"/><test-case name="32855particlesDa004 tokoe:valid" result="pass"/><test-case name="32856particlesDa004.i tokoe:invalid" result="pass"/><test-case name="32857particlesDa005 tokoe:valid" result="pass"/><test-case name="32858particlesDa005.i tokoe:invalid" result="pass"/><test-case name="32859particlesDa006 tokoe:invalid" result="pass"/><test-case name="32860particlesDa011 tokoe:invalid" result="pass"/><test-case name="32861particlesDb001 tokoe:valid" result="pass"/><test-case name="32862particlesDb001.i tokoe:invalid" result="pass"/><test-case name="32863particlesDb002 tokoe:valid" result="pass"/><test-case name="32864particlesDb002.v tokoe:valid" result="pass"/><test-case name="32865particlesDb003 tokoe:valid" result="pass"/><test-case name="32866particlesDb003.i tokoe:invalid" result="pass"/><test-case name="32867particlesDb004 tokoe:valid" result="pass"/><test-case name="32868particlesDb004.i tokoe:invalid" result="pass"/><test-case name="32869particlesDb005 tokoe:valid" result="pass"/><test-case name="32870particlesDb005.i tokoe:invalid" result="pass"/><test-case name="32871particlesDb006 tokoe:valid" result="pass"/><test-case name="32872particlesDb006.i tokoe:invalid" result="pass"/><test-case name="32873particlesDb007 tokoe:valid" result="pass"/><test-case name="32874particlesDb007.v tokoe:valid" result="pass"/><test-case name="32875particlesDb008 tokoe:valid" result="pass"/><test-case name="32876particlesDb008.i tokoe:invalid" result="pass"/><test-case name="32877particlesDb009 tokoe:valid" result="pass"/><test-case name="32878particlesDb009.i tokoe:invalid" result="pass"/><test-case name="32879particlesDb010 tokoe:valid" result="pass"/><test-case name="32880particlesDb010.i tokoe:invalid" result="pass"/><test-case name="32881particlesDb011 tokoe:valid" result="pass"/><test-case name="32882particlesDb011.i tokoe:invalid" result="pass"/><test-case name="32883particlesDc001 tokoe:valid" result="pass"/><test-case name="32884particlesDc001.v tokoe:valid" result="pass"/><test-case name="32885particlesDc002 tokoe:valid" result="pass"/><test-case name="32886particlesDc002.v tokoe:valid" result="pass"/><test-case name="32887particlesDc003 tokoe:valid" result="pass"/><test-case name="32888particlesDc003.v tokoe:valid" result="pass"/><test-case name="32889particlesDc004 tokoe:valid" result="pass"/><test-case name="32890particlesDc004.i tokoe:invalid" result="pass"/><test-case name="32891particlesDc005 tokoe:valid" result="pass"/><test-case name="32892particlesDc005.i tokoe:invalid" result="pass"/><test-case name="32893particlesDc006 tokoe:valid" result="pass"/><test-case name="32894particlesDc006.i tokoe:invalid" result="pass"/><test-case name="32895particlesDc007 tokoe:valid" result="pass"/><test-case name="32896particlesDc007.v tokoe:valid" result="pass"/><test-case name="32897particlesDc008 tokoe:valid" result="pass"/><test-case name="32898particlesDc008.i tokoe:invalid" result="pass"/><test-case name="32899particlesDc009 tokoe:valid" result="pass"/><test-case name="32900particlesDc009.i tokoe:invalid" result="pass"/><test-case name="32901particlesEa001 tokoe:valid" result="pass"/><test-case name="32902particlesEa001.v tokoe:valid" result="pass"/><test-case name="32903particlesEa002 tokoe:valid" result="pass"/><test-case name="32904particlesEa002.i tokoe:invalid" result="pass"/><test-case name="32905particlesEa003 tokoe:valid" result="pass"/><test-case name="32906particlesEa003.v tokoe:valid" result="pass"/><test-case name="32907particlesEa004 tokoe:valid" result="pass"/><test-case name="32908particlesEa004.v tokoe:valid" result="pass"/><test-case name="32909particlesEa005 tokoe:valid" result="pass"/><test-case name="32910particlesEa005.i tokoe:invalid" result="pass"/><test-case name="32911particlesEa006 tokoe:valid" result="pass"/><test-case name="32912particlesEa006.i tokoe:invalid" result="pass"/><test-case name="32913particlesEa007 tokoe:valid" result="pass"/><test-case name="32914particlesEa007.i tokoe:invalid" result="pass"/><test-case name="32915particlesEa008 tokoe:valid" result="pass"/><test-case name="32916particlesEa008.v tokoe:valid" result="pass"/><test-case name="32917particlesEa009 tokoe:valid" result="pass"/><test-case name="32918particlesEa009.i tokoe:invalid" result="pass"/><test-case name="32919particlesEa010 tokoe:valid" result="pass"/><test-case name="32920particlesEa010.v tokoe:valid" result="pass"/><test-case name="32921particlesEa011 tokoe:valid" result="pass"/><test-case name="32922particlesEa011.v tokoe:valid" result="pass"/><test-case name="32923particlesEa012 tokoe:valid" result="pass"/><test-case name="32924particlesEa012.i tokoe:invalid" result="pass"/><test-case name="32925particlesEa013 tokoe:valid" result="pass"/><test-case name="32926particlesEa013.i tokoe:invalid" result="pass"/><test-case name="32927particlesEa014 tokoe:valid" result="pass"/><test-case name="32928particlesEa014.i tokoe:invalid" result="pass"/><test-case name="32929particlesEa015 tokoe:valid" result="pass"/><test-case name="32930particlesEa015.v tokoe:valid" result="pass"/><test-case name="32931particlesEa016 tokoe:valid" result="pass"/><test-case name="32932particlesEa016.i tokoe:invalid" result="pass"/><test-case name="32933particlesEa017 tokoe:valid" result="pass"/><test-case name="32934particlesEa017.v tokoe:valid" result="pass"/><test-case name="32935particlesEa018 tokoe:valid" result="pass"/><test-case name="32936particlesEa018.v tokoe:valid" result="pass"/><test-case name="32937particlesEa019 tokoe:valid" result="pass"/><test-case name="32938particlesEa019.i tokoe:invalid" result="pass"/><test-case name="32939particlesEa020 tokoe:valid" result="pass"/><test-case name="32940particlesEa020.i tokoe:invalid" result="pass"/><test-case name="32941particlesEa021 tokoe:valid" result="pass"/><test-case name="32942particlesEa021.i tokoe:invalid" result="pass"/><test-case name="32943particlesEa022 tokoe:valid" result="pass"/><test-case name="32944particlesEa023 tokoe:invalid" result="pass"/><test-case name="32945particlesEa024 tokoe:invalid" result="pass"/><test-case name="32946particlesEa025 tokoe:invalid" result="pass"/><test-case name="32947particlesEb001 tokoe:valid" result="pass"/><test-case name="32948particlesEb001.v tokoe:valid" result="pass"/><test-case name="32949particlesEb002 tokoe:valid" result="pass"/><test-case name="32950particlesEb002.i tokoe:invalid" result="pass"/><test-case name="32951particlesEb003 tokoe:valid" result="pass"/><test-case name="32952particlesEb003.v tokoe:valid" result="pass"/><test-case name="32953particlesEb004 tokoe:valid" result="pass"/><test-case name="32954particlesEb004.i tokoe:invalid" result="pass"/><test-case name="32955particlesEb005 tokoe:valid" result="pass"/><test-case name="32956particlesEb005.i tokoe:invalid" result="pass"/><test-case name="32957particlesEb006 tokoe:valid" result="pass"/><test-case name="32958particlesEb006.i tokoe:invalid" result="pass"/><test-case name="32959particlesEb007 tokoe:valid" result="pass"/><test-case name="32960particlesEb007.i tokoe:invalid" result="pass"/><test-case name="32961particlesEb008 tokoe:valid" result="pass"/><test-case name="32962particlesEb008.i tokoe:invalid" result="pass"/><test-case name="32963particlesEb009 tokoe:valid" result="pass"/><test-case name="32964particlesEb009.i tokoe:invalid" result="pass"/><test-case name="32965particlesEb010 tokoe:valid" result="pass"/><test-case name="32966particlesEb010.v tokoe:valid" result="pass"/><test-case name="32967particlesEb011 tokoe:valid" result="pass"/><test-case name="32968particlesEb011.i tokoe:invalid" result="pass"/><test-case name="32969particlesEb012 tokoe:valid" result="pass"/><test-case name="32970particlesEb012.i tokoe:invalid" result="pass"/><test-case name="32971particlesEb013 tokoe:valid" result="pass"/><test-case name="32972particlesEb013.i tokoe:invalid" result="pass"/><test-case name="32973particlesEb014 tokoe:valid" result="pass"/><test-case name="32974particlesEb014.i tokoe:invalid" result="pass"/><test-case name="32975particlesEb015 tokoe:invalid" result="pass"/><test-case name="32976particlesEb017 tokoe:valid" result="pass"/><test-case name="32977particlesEb017.i tokoe:invalid" result="pass"/><test-case name="32978particlesEb018 tokoe:valid" result="pass"/><test-case name="32979particlesEb018.i tokoe:invalid" result="pass"/><test-case name="32980particlesEb019 tokoe:valid" result="pass"/><test-case name="32981particlesEb019.v tokoe:valid" result="pass"/><test-case name="32982particlesEb020 tokoe:valid" result="pass"/><test-case name="32983particlesEb020.i tokoe:invalid" result="pass"/><test-case name="32984particlesEb021 tokoe:valid" result="pass"/><test-case name="32985particlesEb021.i tokoe:invalid" result="pass"/><test-case name="32986particlesEb022 tokoe:valid" result="pass"/><test-case name="32987particlesEb022.i tokoe:invalid" result="pass"/><test-case name="32988particlesEb023 tokoe:valid" result="pass"/><test-case name="32989particlesEb023.i tokoe:invalid" result="pass"/><test-case name="32990particlesEb024 tokoe:valid" result="pass"/><test-case name="32991particlesEb024.i tokoe:invalid" result="pass"/><test-case name="32992particlesEb025 tokoe:valid" result="pass"/><test-case name="32993particlesEb025.i tokoe:invalid" result="pass"/><test-case name="32994particlesEb026 tokoe:valid" result="pass"/><test-case name="32995particlesEb026.v tokoe:valid" result="pass"/><test-case name="32996particlesEb027 tokoe:valid" result="pass"/><test-case name="32997particlesEb027.v tokoe:valid" result="pass"/><test-case name="32998particlesEb028 tokoe:valid" result="pass"/><test-case name="32999particlesEb028.i tokoe:invalid" result="pass"/><test-case name="33000particlesEb029 tokoe:valid" result="pass"/><test-case name="33001particlesEb029.i tokoe:invalid" result="pass"/><test-case name="33002particlesEb030 tokoe:valid" result="pass"/><test-case name="33003particlesEb030.i tokoe:invalid" result="pass"/><test-case name="33004particlesEb031 tokoe:valid" result="pass"/><test-case name="33005particlesEb031.i tokoe:invalid" result="pass"/><test-case name="33006particlesEb032 tokoe:valid" result="pass"/><test-case name="33007particlesEb032.i tokoe:invalid" result="pass"/><test-case name="33008particlesEb033 tokoe:valid" result="pass"/><test-case name="33009particlesEb033.i tokoe:invalid" result="pass"/><test-case name="33010particlesEb034 tokoe:valid" result="pass"/><test-case name="33011particlesEb034.i tokoe:invalid" result="pass"/><test-case name="33012particlesEb035 tokoe:valid" result="pass"/><test-case name="33013particlesEb035.i tokoe:invalid" result="pass"/><test-case name="33014particlesEb036 tokoe:valid" result="pass"/><test-case name="33015particlesEb036.v tokoe:valid" result="pass"/><test-case name="33016particlesEb037 tokoe:valid" result="pass"/><test-case name="33017particlesEb037.i tokoe:invalid" result="pass"/><test-case name="33018particlesEb038 tokoe:valid" result="pass"/><test-case name="33019particlesEb038.v tokoe:valid" result="pass"/><test-case name="33020particlesEb039 tokoe:valid" result="pass"/><test-case name="33021particlesEb039.i tokoe:invalid" result="pass"/><test-case name="33022particlesEb040 tokoe:invalid" result="pass"/><test-case name="33023particlesEb041 tokoe:valid" result="pass"/><test-case name="33024particlesEb041.v tokoe:valid" result="pass"/><test-case name="33025particlesEc001 tokoe:valid" result="pass"/><test-case name="33026particlesEc001.v tokoe:valid" result="pass"/><test-case name="33027particlesEc002 tokoe:valid" result="pass"/><test-case name="33028particlesEc002.v tokoe:valid" result="pass"/><test-case name="33029particlesEc003 tokoe:valid" result="pass"/><test-case name="33030particlesEc003.i tokoe:invalid" result="pass"/><test-case name="33031particlesEc004 tokoe:valid" result="pass"/><test-case name="33032particlesEc004.i tokoe:invalid" result="pass"/><test-case name="33033particlesEc005 tokoe:valid" result="pass"/><test-case name="33034particlesEc005.i tokoe:invalid" result="pass"/><test-case name="33035particlesEc006 tokoe:valid" result="pass"/><test-case name="33036particlesEc006.v tokoe:valid" result="pass"/><test-case name="33037particlesEc007 tokoe:valid" result="pass"/><test-case name="33038particlesEc007.i tokoe:invalid" result="pass"/><test-case name="33039particlesEc008 tokoe:valid" result="pass"/><test-case name="33040particlesEc008.i tokoe:invalid" result="pass"/><test-case name="33041particlesEc009 tokoe:invalid" result="pass"/><test-case name="33042particlesEc011 tokoe:valid" result="pass"/><test-case name="33043particlesEc011.i tokoe:invalid" result="pass"/><test-case name="33044particlesEc012 tokoe:valid" result="pass"/><test-case name="33045particlesEc012.v tokoe:valid" result="pass"/><test-case name="33046particlesEc013 tokoe:valid" result="pass"/><test-case name="33047particlesEc013.i tokoe:invalid" result="pass"/><test-case name="33048particlesEc014 tokoe:valid" result="pass"/><test-case name="33049particlesEc014.i tokoe:invalid" result="pass"/><test-case name="33050particlesEc015 tokoe:valid" result="pass"/><test-case name="33051particlesEc015.i tokoe:invalid" result="pass"/><test-case name="33052particlesEc016 tokoe:valid" result="pass"/><test-case name="33053particlesEc016.v tokoe:valid" result="pass"/><test-case name="33054particlesEc017 tokoe:valid" result="pass"/><test-case name="33055particlesEc017.v tokoe:valid" result="pass"/><test-case name="33056particlesEc018 tokoe:valid" result="pass"/><test-case name="33057particlesEc018.v tokoe:valid" result="pass"/><test-case name="33058particlesEc019 tokoe:valid" result="pass"/><test-case name="33059particlesEc019.v tokoe:valid" result="pass"/><test-case name="33060particlesEc020 tokoe:valid" result="pass"/><test-case name="33061particlesEc020.v tokoe:valid" result="pass"/><test-case name="33062particlesEc021 tokoe:valid" result="pass"/><test-case name="33063particlesEc021.v tokoe:valid" result="pass"/><test-case name="33064particlesEc022 tokoe:valid" result="pass"/><test-case name="33065particlesEc022.i tokoe:invalid" result="pass"/><test-case name="33066particlesEc023 tokoe:valid" result="pass"/><test-case name="33067particlesEc023.i tokoe:invalid" result="pass"/><test-case name="33068particlesEc024 tokoe:valid" result="pass"/><test-case name="33069particlesEc024.i tokoe:invalid" result="pass"/><test-case name="33070particlesEc025 tokoe:valid" result="pass"/><test-case name="33071particlesEc025.i tokoe:invalid" result="pass"/><test-case name="33072particlesEc026 tokoe:valid" result="pass"/><test-case name="33073particlesEc026.i tokoe:invalid" result="pass"/><test-case name="33074particlesEc027 tokoe:valid" result="pass"/><test-case name="33075particlesEc027.i tokoe:invalid" result="pass"/><test-case name="33076particlesEc028 tokoe:valid" result="pass"/><test-case name="33077particlesEc028.i tokoe:invalid" result="pass"/><test-case name="33078particlesEc029 tokoe:valid" result="pass"/><test-case name="33079particlesEc029.v tokoe:valid" result="pass"/><test-case name="33080particlesEc030 tokoe:valid" result="pass"/><test-case name="33081particlesEc030.v tokoe:valid" result="pass"/><test-case name="33082particlesEc031 tokoe:valid" result="pass"/><test-case name="33083particlesEc031.v tokoe:valid" result="pass"/><test-case name="33084particlesEc032 tokoe:valid" result="pass"/><test-case name="33085particlesEc032.v tokoe:valid" result="pass"/><test-case name="33086particlesEc033 tokoe:valid" result="pass"/><test-case name="33087particlesEc033.v tokoe:valid" result="pass"/><test-case name="33088particlesEc034 tokoe:valid" result="pass"/><test-case name="33089particlesEc034.v tokoe:valid" result="pass"/><test-case name="33090particlesEc035 tokoe:valid" result="pass"/><test-case name="33091particlesEc035.v tokoe:valid" result="pass"/><test-case name="33092particlesEc036 tokoe:valid" result="pass"/><test-case name="33093particlesEc036.v tokoe:valid" result="pass"/><test-case name="33094particlesEc037 tokoe:valid" result="pass"/><test-case name="33095particlesEc037.v tokoe:valid" result="pass"/><test-case name="33096particlesEc038 tokoe:valid" result="pass"/><test-case name="33097particlesEc038.i tokoe:invalid" result="pass"/><test-case name="33098particlesEc039 tokoe:valid" result="pass"/><test-case name="33099particlesEc039.i tokoe:invalid" result="pass"/><test-case name="33100particlesEc040 tokoe:valid" result="pass"/><test-case name="33101particlesEc040.i tokoe:invalid" result="pass"/><test-case name="33102particlesEc041 tokoe:valid" result="pass"/><test-case name="33103particlesEc041.i tokoe:invalid" result="pass"/><test-case name="33104particlesEd001 tokoe:invalid" result="pass"/><test-case name="33105particlesFa001 tokoe:valid" result="pass"/><test-case name="33106particlesFa002 tokoe:valid" result="pass"/><test-case name="33107particlesFa002.v tokoe:valid" result="pass"/><test-case name="33108particlesFa003 tokoe:valid" result="pass"/><test-case name="33109particlesFa003.v tokoe:valid" result="pass"/><test-case name="33110particlesFa004 tokoe:valid" result="pass"/><test-case name="33111particlesFa004.v tokoe:valid" result="pass"/><test-case name="33112particlesFa005 tokoe:valid" result="pass"/><test-case name="33113particlesFa005.v tokoe:valid" result="pass"/><test-case name="33114particlesFb001 tokoe:valid" result="pass"/><test-case name="33115particlesFb001.v tokoe:valid" result="pass"/><test-case name="33116particlesFb002 tokoe:invalid" result="pass"/><test-case name="33117particlesFb003 tokoe:invalid" result="pass"/><test-case name="33118particlesFb004 tokoe:valid" result="pass"/><test-case name="33119particlesFb004.v tokoe:valid" result="pass"/><test-case name="33120particlesFb005 tokoe:invalid" result="pass"/><test-case name="33121particlesFb006 tokoe:invalid" result="pass"/><test-case name="33122particlesHa001 tokoe:valid" result="pass"/><test-case name="33123particlesHa001.v tokoe:valid" result="pass"/><test-case name="33124particlesHa002 tokoe:valid" result="pass"/><test-case name="33125particlesHa002.v tokoe:valid" result="pass"/><test-case name="33126particlesHa003 tokoe:valid" result="pass"/><test-case name="33127particlesHa003.v tokoe:valid" result="pass"/><test-case name="33128particlesHa004 tokoe:valid" result="pass"/><test-case name="33129particlesHa004.v tokoe:valid" result="pass"/><test-case name="33130particlesHa005 tokoe:valid" result="pass"/><test-case name="33131particlesHa005.v tokoe:valid" result="pass"/><test-case name="33132particlesHa006 tokoe:valid" result="pass"/><test-case name="33133particlesHa006.v tokoe:valid" result="pass"/><test-case name="33134particlesHa007 tokoe:valid" result="pass"/><test-case name="33135particlesHa007.v tokoe:valid" result="pass"/><test-case name="33136particlesHa008 tokoe:invalid" result="pass"/><test-case name="33137particlesHa009 tokoe:valid" result="pass"/><test-case name="33138particlesHa009.v tokoe:valid" result="pass"/><test-case name="33139particlesHa010 tokoe:valid" result="pass"/><test-case name="33140particlesHa010.v tokoe:valid" result="pass"/><test-case name="33141particlesHa011 tokoe:valid" result="pass"/><test-case name="33142particlesHa011.v tokoe:valid" result="pass"/><test-case name="33143particlesHa012 tokoe:valid" result="pass"/><test-case name="33144particlesHa012.v tokoe:valid" result="pass"/><test-case name="33145particlesHa013 tokoe:valid" result="pass"/><test-case name="33146particlesHa013.v tokoe:valid" result="pass"/><test-case name="33147particlesHa014 tokoe:valid" result="pass"/><test-case name="33148particlesHa014.v tokoe:valid" result="pass"/><test-case name="33149particlesHa015 tokoe:valid" result="pass"/><test-case name="33150particlesHa015.v tokoe:valid" result="pass"/><test-case name="33151particlesHa016 tokoe:valid" result="pass"/><test-case name="33152particlesHa016.v tokoe:valid" result="pass"/><test-case name="33153particlesHa017 tokoe:valid" result="pass"/><test-case name="33154particlesHa017.v tokoe:valid" result="pass"/><test-case name="33155particlesHa018 tokoe:valid" result="pass"/><test-case name="33156particlesHa018.v tokoe:valid" result="pass"/><test-case name="33157particlesHa020 tokoe:valid" result="pass"/><test-case name="33158particlesHa021 tokoe:invalid" result="pass"/><test-case name="33159particlesHa022 tokoe:valid" result="pass"/><test-case name="33160particlesHa050 tokoe:valid" result="pass"/><test-case name="33161particlesHa051 tokoe:valid" result="pass"/><test-case name="33162particlesHa052 tokoe:invalid" result="pass"/><test-case name="33163particlesHa053 tokoe:valid" result="pass"/><test-case name="33164particlesHa054 tokoe:valid" result="pass"/><test-case name="33165particlesHa070 tokoe:valid" result="pass"/><test-case name="33166particlesHa071 tokoe:invalid" result="pass"/><test-case name="33167particlesHa080 tokoe:valid" result="pass"/><test-case name="33168particlesHa081 tokoe:invalid" result="pass"/><test-case name="33169particlesHa082 tokoe:invalid" result="pass"/><test-case name="33170particlesHa083 tokoe:invalid" result="pass"/><test-case name="33171particlesHa084 tokoe:valid" result="pass"/><test-case name="33172particlesHa100 tokoe:valid" result="pass"/><test-case name="33173particlesHa101 tokoe:invalid" result="pass"/><test-case name="33174particlesHa102 tokoe:invalid" result="pass"/><test-case name="33175particlesHa103 tokoe:invalid" result="pass"/><test-case name="33176particlesHa120 tokoe:valid" result="pass"/><test-case name="33177particlesHa121 tokoe:invalid" result="pass"/><test-case name="33178particlesHa122 tokoe:valid" result="pass"/><test-case name="33179particlesHa123 tokoe:invalid" result="pass"/><test-case name="33180particlesHa140 tokoe:invalid" result="pass"/><test-case name="33181particlesHa141 tokoe:valid" result="pass"/><test-case name="33182particlesHa142 tokoe:valid" result="pass"/><test-case name="33183particlesHa143 tokoe:invalid" result="pass"/><test-case name="33184particlesHa144 tokoe:invalid" result="pass"/><test-case name="33185particlesHa145 tokoe:invalid" result="pass"/><test-case name="33186particlesHa146 tokoe:valid" result="pass"/><test-case name="33187particlesHa147 tokoe:invalid" result="pass"/><test-case name="33188particlesHa160 tokoe:valid" result="pass"/><test-case name="33189particlesHa162 tokoe:invalid" result="pass"/><test-case name="33190particlesHa163 tokoe:invalid" result="pass"/><test-case name="33191particlesHa164 tokoe:invalid" result="pass"/><test-case name="33192particlesHa165 tokoe:valid" result="pass"/><test-case name="33193particlesHa166 tokoe:invalid" result="pass"/><test-case name="33194particlesHa167 tokoe:valid" result="pass"/><test-case name="33195particlesHa168 tokoe:invalid" result="pass"/><test-case name="33196particlesHa169 tokoe:invalid" result="pass"/><test-case name="33197particlesHa180 tokoe:valid" result="pass"/><test-case name="33198particlesHa181 tokoe:invalid" result="pass"/><test-case name="33199particlesHa182 tokoe:invalid" result="pass"/><test-case name="33200particlesHa183 tokoe:invalid" result="pass"/><test-case name="33201particlesHa184 tokoe:invalid" result="pass"/><test-case name="33202particlesHa185 tokoe:valid" result="pass"/><test-case name="33203particlesHa186 tokoe:valid" result="pass"/><test-case name="33204particlesHa187 tokoe:invalid" result="pass"/><test-case name="33205particlesHa188 tokoe:valid" result="pass"/><test-case name="33206particlesHa189 tokoe:invalid" result="pass"/><test-case name="33207particlesHb001 tokoe:invalid" result="pass"/><test-case name="33208particlesHb002 tokoe:invalid" result="pass"/><test-case name="33209particlesHb003 tokoe:invalid" result="pass"/><test-case name="33210particlesHb004 tokoe:invalid" result="pass"/><test-case name="33211particlesHb006 tokoe:invalid" result="pass"/><test-case name="33212particlesHb007 tokoe:invalid" result="pass"/><test-case name="33213particlesHb009 tokoe:invalid" result="pass"/><test-case name="33214particlesHb010 tokoe:valid" result="pass"/><test-case name="33215particlesIa001 tokoe:valid" result="pass"/><test-case name="33216particlesIa001.v tokoe:valid" result="pass"/><test-case name="33217particlesIa002 tokoe:valid" result="pass"/><test-case name="33218particlesIa002.v tokoe:valid" result="pass"/><test-case name="33219particlesIa003 tokoe:valid" result="pass"/><test-case name="33220particlesIa003.v tokoe:valid" result="pass"/><test-case name="33221particlesIa004 tokoe:valid" result="pass"/><test-case name="33222particlesIa004.v tokoe:valid" result="pass"/><test-case name="33223particlesIa005 tokoe:valid" result="pass"/><test-case name="33224particlesIa005.v tokoe:valid" result="pass"/><test-case name="33225particlesIa006 tokoe:invalid" result="pass"/><test-case name="33226particlesIa007 tokoe:valid" result="pass"/><test-case name="33227particlesIa008 tokoe:invalid" result="pass"/><test-case name="33228particlesIa009 tokoe:valid" result="pass"/><test-case name="33229particlesIb001 tokoe:valid" result="pass"/><test-case name="33230particlesIb001.v tokoe:valid" result="pass"/><test-case name="33231particlesIb002 tokoe:invalid" result="pass"/><test-case name="33232particlesIb003 tokoe:valid" result="pass"/><test-case name="33233particlesIb003.v tokoe:valid" result="pass"/><test-case name="33234particlesIb004 tokoe:invalid" result="pass"/><test-case name="33235particlesIb005 tokoe:valid" result="pass"/><test-case name="33236particlesIb005.v tokoe:valid" result="pass"/><test-case name="33237particlesIb006 tokoe:invalid" result="pass"/><test-case name="33238particlesIb007 tokoe:invalid" result="pass"/><test-case name="33239particlesIc001 tokoe:valid" result="pass"/><test-case name="33240particlesIc001.v tokoe:valid" result="pass"/><test-case name="33241particlesIc002 tokoe:invalid" result="pass"/><test-case name="33242particlesIc003 tokoe:invalid" result="pass"/><test-case name="33243particlesIc004 tokoe:invalid" result="pass"/><test-case name="33244particlesIc005 tokoe:valid" result="pass"/><test-case name="33245particlesIc005.v tokoe:valid" result="pass"/><test-case name="33246particlesIc006 tokoe:valid" result="pass"/><test-case name="33247particlesIc006.v tokoe:valid" result="pass"/><test-case name="33248particlesIc007 tokoe:valid" result="pass"/><test-case name="33249particlesIc007.v tokoe:valid" result="pass"/><test-case name="33250particlesId001 tokoe:valid" result="pass"/><test-case name="33251particlesId001.v tokoe:valid" result="pass"/><test-case name="33252particlesId002 tokoe:valid" result="pass"/><test-case name="33253particlesId002.v tokoe:valid" result="pass"/><test-case name="33254particlesId003 tokoe:invalid" result="pass"/><test-case name="33255particlesId004 tokoe:valid" result="pass"/><test-case name="33256particlesId004.v tokoe:valid" result="pass"/><test-case name="33257particlesId005 tokoe:valid" result="pass"/><test-case name="33258particlesId005.v tokoe:valid" result="pass"/><test-case name="33259particlesId006 tokoe:invalid" result="pass"/><test-case name="33260particlesId007 tokoe:valid" result="pass"/><test-case name="33261particlesId007.v tokoe:valid" result="pass"/><test-case name="33262particlesId008 tokoe:valid" result="pass"/><test-case name="33263particlesId008.v tokoe:valid" result="pass"/><test-case name="33264particlesId009 tokoe:valid" result="pass"/><test-case name="33265particlesId009.v tokoe:valid" result="pass"/><test-case name="33266particlesId010 tokoe:valid" result="pass"/><test-case name="33267particlesId010.v tokoe:valid" result="pass"/><test-case name="33268particlesId011 tokoe:valid" result="pass"/><test-case name="33269particlesId011.v tokoe:valid" result="pass"/><test-case name="33270particlesId012 tokoe:invalid" result="pass"/><test-case name="33271particlesIe001 tokoe:valid" result="pass"/><test-case name="33272particlesIe001.v tokoe:valid" result="pass"/><test-case name="33273particlesIe002 tokoe:valid" result="pass"/><test-case name="33274particlesIe002.v tokoe:valid" result="pass"/><test-case name="33275particlesIe004 tokoe:valid" result="pass"/><test-case name="33276particlesIe004.v tokoe:valid" result="pass"/><test-case name="33277particlesIe005 tokoe:valid" result="pass"/><test-case name="33278particlesIe005.v tokoe:valid" result="pass"/><test-case name="33279particlesIe006 tokoe:invalid" result="pass"/><test-case name="33280particlesIe007 tokoe:valid" result="pass"/><test-case name="33281particlesIe007.v tokoe:valid" result="pass"/><test-case name="33282particlesIe008 tokoe:valid" result="pass"/><test-case name="33283particlesIe008.v tokoe:valid" result="pass"/><test-case name="33284particlesIe009 tokoe:invalid" result="pass"/><test-case name="33285particlesIe010 tokoe:valid" result="pass"/><test-case name="33286particlesIe010.v tokoe:valid" result="pass"/><test-case name="33287particlesIe011 tokoe:valid" result="pass"/><test-case name="33288particlesIe011.v tokoe:valid" result="pass"/><test-case name="33289particlesIe012 tokoe:invalid" result="pass"/><test-case name="33290particlesIe013 tokoe:valid" result="pass"/><test-case name="33291particlesIe013.v tokoe:valid" result="pass"/><test-case name="33292particlesIe014 tokoe:invalid" result="pass"/><test-case name="33293particlesIe015 tokoe:valid" result="pass"/><test-case name="33294particlesIe015.v tokoe:valid" result="pass"/><test-case name="33295particlesIe016 tokoe:valid" result="pass"/><test-case name="33296particlesIe016.v tokoe:valid" result="pass"/><test-case name="33297particlesIf001 tokoe:valid" result="pass"/><test-case name="33298particlesIf001.v tokoe:valid" result="pass"/><test-case name="33299particlesIf002 tokoe:valid" result="pass"/><test-case name="33300particlesIf002.v tokoe:valid" result="pass"/><test-case name="33301particlesIf003 tokoe:valid" result="pass"/><test-case name="33302particlesIf003.v tokoe:valid" result="pass"/><test-case name="33303particlesIf004 tokoe:valid" result="pass"/><test-case name="33304particlesIf004.v tokoe:valid" result="pass"/><test-case name="33305particlesIf005 tokoe:valid" result="pass"/><test-case name="33306particlesIf005.v tokoe:valid" result="pass"/><test-case name="33307particlesIf006 tokoe:valid" result="pass"/><test-case name="33308particlesIf006.v tokoe:valid" result="pass"/><test-case name="33309particlesIf007 tokoe:invalid" result="pass"/><test-case name="33310particlesIf008 tokoe:invalid" result="pass"/><test-case name="33311particlesIf009 tokoe:invalid" result="pass"/><test-case name="33312particlesIg001 tokoe:valid" result="pass"/><test-case name="33313particlesIg001.v tokoe:valid" result="pass"/><test-case name="33314particlesIg002 tokoe:valid" result="pass"/><test-case name="33315particlesIg002.v tokoe:valid" result="pass"/><test-case name="33316particlesIg005 tokoe:valid" result="pass"/><test-case name="33317particlesIg005.v tokoe:valid" result="pass"/><test-case name="33318particlesIg006 tokoe:invalid" result="pass"/><test-case name="33319particlesIg007 tokoe:invalid" result="pass"/><test-case name="33320particlesIg008 tokoe:invalid" result="pass"/><test-case name="33321particlesIg009 tokoe:invalid" result="pass"/><test-case name="33322particlesIg010 tokoe:invalid" result="pass"/><test-case name="33323particlesIg011 tokoe:valid" result="pass"/><test-case name="33324particlesIg011.v tokoe:valid" result="pass"/><test-case name="33325particlesIg012 tokoe:valid" result="pass"/><test-case name="33326particlesIg012.v tokoe:valid" result="pass"/><test-case name="33327particlesIg013 tokoe:invalid" result="pass"/><test-case name="33328particlesIg014 tokoe:valid" result="pass"/><test-case name="33329particlesIg014.v tokoe:valid" result="pass"/><test-case name="33330particlesIg015 tokoe:valid" result="pass"/><test-case name="33331particlesIg015.v tokoe:valid" result="pass"/><test-case name="33332particlesIg016 tokoe:invalid" result="pass"/><test-case name="33333particlesIh001 tokoe:invalid" result="pass"/><test-case name="33334particlesIj001 tokoe:valid" result="pass"/><test-case name="33335particlesIj001.v tokoe:valid" result="pass"/><test-case name="33336particlesIj002 tokoe:valid" result="pass"/><test-case name="33337particlesIj002.v tokoe:valid" result="pass"/><test-case name="33338particlesIj003 tokoe:invalid" result="pass"/><test-case name="33339particlesIj004 tokoe:invalid" result="pass"/><test-case name="33340particlesIj005 tokoe:valid" result="pass"/><test-case name="33341particlesIj005.v tokoe:valid" result="pass"/><test-case name="33342particlesIj006 tokoe:valid" result="pass"/><test-case name="33343particlesIj006.v tokoe:valid" result="pass"/><test-case name="33344particlesIj007 tokoe:invalid" result="pass"/><test-case name="33345particlesIj008 tokoe:invalid" result="pass"/><test-case name="33346particlesIj009 tokoe:invalid" result="pass"/><test-case name="33347particlesIj010 tokoe:invalid" result="pass"/><test-case name="33348particlesIj011 tokoe:invalid" result="pass"/><test-case name="33349particlesIj012 tokoe:invalid" result="pass"/><test-case name="33350particlesIj013 tokoe:invalid" result="pass"/><test-case name="33351particlesIj014 tokoe:valid" result="pass"/><test-case name="33352particlesIj015 tokoe:invalid" result="pass"/><test-case name="33353particlesIj016 tokoe:invalid" result="pass"/><test-case name="33354particlesIk001 tokoe:valid" result="pass"/><test-case name="33355particlesIk001.v tokoe:valid" result="pass"/><test-case name="33356particlesIk002 tokoe:invalid" result="pass"/><test-case name="33357particlesIk003 tokoe:invalid" result="pass"/><test-case name="33358particlesIk004 tokoe:valid" result="pass"/><test-case name="33359particlesIk004.v tokoe:valid" result="pass"/><test-case name="33360particlesIk005 tokoe:invalid" result="pass"/><test-case name="33361particlesIk006 tokoe:invalid" result="pass"/><test-case name="33362particlesIk007 tokoe:invalid" result="pass"/><test-case name="33363particlesIk008 tokoe:invalid" result="pass"/><test-case name="33364particlesIk009 tokoe:invalid" result="pass"/><test-case name="33365particlesIk010 tokoe:invalid" result="pass"/><test-case name="33366particlesIk011 tokoe:invalid" result="pass"/><test-case name="33367particlesIk012 tokoe:valid" result="pass"/><test-case name="33368particlesIk012.v tokoe:valid" result="pass"/><test-case name="33369particlesIk013 tokoe:invalid" result="pass"/><test-case name="33370particlesIk014 tokoe:valid" result="pass"/><test-case name="33371particlesIk015 tokoe:invalid" result="pass"/><test-case name="33372particlesIk016 tokoe:invalid" result="pass"/><test-case name="33373particlesIk017 tokoe:valid" result="pass"/><test-case name="33374particlesIk018 tokoe:valid" result="pass"/><test-case name="33375particlesIk019 tokoe:invalid" result="pass"/><test-case name="33376particlesIk020 tokoe:invalid" result="pass"/><test-case name="33377particlesIk021 tokoe:invalid" result="pass"/><test-case name="33378particlesIk022 tokoe:invalid" result="pass"/><test-case name="33379particlesIk023 tokoe:valid" result="pass"/><test-case name="33380particlesIk024 tokoe:invalid" result="pass"/><test-case name="33381particlesIk025 tokoe:invalid" result="pass"/><test-case name="33382particlesIk026 tokoe:valid" result="pass"/><test-case name="33383particlesIk026.v tokoe:valid" result="pass"/><test-case name="33384particlesIk027 tokoe:invalid" result="pass"/><test-case name="33385particlesJa001 tokoe:valid" result="pass"/><test-case name="33386particlesJa001.v tokoe:valid" result="pass"/><test-case name="33387particlesJa002 tokoe:valid" result="pass"/><test-case name="33388particlesJa002.v tokoe:valid" result="pass"/><test-case name="33389particlesJa003 tokoe:invalid" result="pass"/><test-case name="33390particlesJa004 tokoe:valid" result="pass"/><test-case name="33391particlesJa004.v tokoe:valid" result="pass"/><test-case name="33392particlesJa005 tokoe:valid" result="pass"/><test-case name="33393particlesJa005.v tokoe:valid" result="pass"/><test-case name="33394particlesJa006 tokoe:invalid" result="pass"/><test-case name="33395particlesJa007 tokoe:valid" result="pass"/><test-case name="33396particlesJa007.v tokoe:valid" result="pass"/><test-case name="33397particlesJa008 tokoe:valid" result="pass"/><test-case name="33398particlesJa008.v tokoe:valid" result="pass"/><test-case name="33399particlesJa009 tokoe:valid" result="pass"/><test-case name="33400particlesJa009.v tokoe:valid" result="pass"/><test-case name="33401particlesJa010 tokoe:valid" result="pass"/><test-case name="33402particlesJa010.v tokoe:valid" result="pass"/><test-case name="33403particlesJa011 tokoe:valid" result="pass"/><test-case name="33404particlesJa011.v tokoe:valid" result="pass"/><test-case name="33405particlesJa012 tokoe:invalid" result="pass"/><test-case name="33406particlesJb001 tokoe:valid" result="pass"/><test-case name="33407particlesJb001.v tokoe:valid" result="pass"/><test-case name="33408particlesJb002 tokoe:valid" result="pass"/><test-case name="33409particlesJb002.v tokoe:valid" result="pass"/><test-case name="33410particlesJb004 tokoe:valid" result="pass"/><test-case name="33411particlesJb004.v tokoe:valid" result="pass"/><test-case name="33412particlesJb005 tokoe:valid" result="pass"/><test-case name="33413particlesJb005.v tokoe:valid" result="pass"/><test-case name="33414particlesJb006 tokoe:invalid" result="pass"/><test-case name="33415particlesJb007 tokoe:valid" result="pass"/><test-case name="33416particlesJb007.v tokoe:valid" result="pass"/><test-case name="33417particlesJb008 tokoe:valid" result="pass"/><test-case name="33418particlesJb008.v tokoe:valid" result="pass"/><test-case name="33419particlesJb009 tokoe:invalid" result="pass"/><test-case name="33420particlesJb010 tokoe:valid" result="pass"/><test-case name="33421particlesJb010.v tokoe:valid" result="pass"/><test-case name="33422particlesJb011 tokoe:valid" result="pass"/><test-case name="33423particlesJb011.v tokoe:valid" result="pass"/><test-case name="33424particlesJb012 tokoe:invalid" result="pass"/><test-case name="33425particlesJb013 tokoe:valid" result="pass"/><test-case name="33426particlesJb013.v tokoe:valid" result="pass"/><test-case name="33427particlesJb014 tokoe:invalid" result="pass"/><test-case name="33428particlesJb015 tokoe:valid" result="pass"/><test-case name="33429particlesJb015.v tokoe:valid" result="pass"/><test-case name="33430particlesJb016 tokoe:valid" result="pass"/><test-case name="33431particlesJb016.v tokoe:valid" result="pass"/><test-case name="33432particlesJc001 tokoe:valid" result="pass"/><test-case name="33433particlesJc001.v tokoe:valid" result="pass"/><test-case name="33434particlesJc002 tokoe:valid" result="pass"/><test-case name="33435particlesJc002.v tokoe:valid" result="pass"/><test-case name="33436particlesJc003 tokoe:invalid" result="pass"/><test-case name="33437particlesJc004 tokoe:valid" result="pass"/><test-case name="33438particlesJc004.v tokoe:valid" result="pass"/><test-case name="33439particlesJc005 tokoe:valid" result="pass"/><test-case name="33440particlesJc005.v tokoe:valid" result="pass"/><test-case name="33441particlesJc006 tokoe:invalid" result="pass"/><test-case name="33442particlesJc007 tokoe:valid" result="pass"/><test-case name="33443particlesJc007.v tokoe:valid" result="pass"/><test-case name="33444particlesJc008 tokoe:valid" result="pass"/><test-case name="33445particlesJc008.v tokoe:valid" result="pass"/><test-case name="33446particlesJc009 tokoe:valid" result="pass"/><test-case name="33447particlesJc009.v tokoe:valid" result="pass"/><test-case name="33448particlesJc010 tokoe:valid" result="pass"/><test-case name="33449particlesJc010.v tokoe:valid" result="pass"/><test-case name="33450particlesJc011 tokoe:valid" result="pass"/><test-case name="33451particlesJc011.v tokoe:valid" result="pass"/><test-case name="33452particlesJc012 tokoe:invalid" result="pass"/><test-case name="33453particlesJd001 tokoe:valid" result="pass"/><test-case name="33454particlesJd001.v tokoe:valid" result="pass"/><test-case name="33455particlesJd002 tokoe:valid" result="pass"/><test-case name="33456particlesJd002.v tokoe:valid" result="pass"/><test-case name="33457particlesJd004 tokoe:valid" result="pass"/><test-case name="33458particlesJd004.v tokoe:valid" result="pass"/><test-case name="33459particlesJd005 tokoe:valid" result="pass"/><test-case name="33460particlesJd005.v tokoe:valid" result="pass"/><test-case name="33461particlesJd006 tokoe:invalid" result="pass"/><test-case name="33462particlesJd007 tokoe:valid" result="pass"/><test-case name="33463particlesJd007.v tokoe:valid" result="pass"/><test-case name="33464particlesJd008 tokoe:valid" result="pass"/><test-case name="33465particlesJd008.v tokoe:valid" result="pass"/><test-case name="33466particlesJd009 tokoe:invalid" result="pass"/><test-case name="33467particlesJd010 tokoe:valid" result="pass"/><test-case name="33468particlesJd010.v tokoe:valid" result="pass"/><test-case name="33469particlesJd011 tokoe:valid" result="pass"/><test-case name="33470particlesJd011.v tokoe:valid" result="pass"/><test-case name="33471particlesJd012 tokoe:invalid" result="pass"/><test-case name="33472particlesJd013 tokoe:valid" result="pass"/><test-case name="33473particlesJd013.v tokoe:valid" result="pass"/><test-case name="33474particlesJd014 tokoe:invalid" result="pass"/><test-case name="33475particlesJd015 tokoe:valid" result="pass"/><test-case name="33476particlesJd015.v tokoe:valid" result="pass"/><test-case name="33477particlesJd016 tokoe:valid" result="pass"/><test-case name="33478particlesJd016.v tokoe:valid" result="pass"/><test-case name="33479particlesJe001 tokoe:valid" result="pass"/><test-case name="33480particlesJe001.v tokoe:valid" result="pass"/><test-case name="33481particlesJe002 tokoe:valid" result="pass"/><test-case name="33482particlesJe002.v tokoe:valid" result="pass"/><test-case name="33483particlesJe003 tokoe:invalid" result="pass"/><test-case name="33484particlesJe004 tokoe:valid" result="pass"/><test-case name="33485particlesJe004.v tokoe:valid" result="pass"/><test-case name="33486particlesJe005 tokoe:valid" result="pass"/><test-case name="33487particlesJe005.v tokoe:valid" result="pass"/><test-case name="33488particlesJe006 tokoe:invalid" result="pass"/><test-case name="33489particlesJe007 tokoe:valid" result="pass"/><test-case name="33490particlesJe007.v tokoe:valid" result="pass"/><test-case name="33491particlesJe008 tokoe:valid" result="pass"/><test-case name="33492particlesJe008.v tokoe:valid" result="pass"/><test-case name="33493particlesJe009 tokoe:valid" result="pass"/><test-case name="33494particlesJe009.v tokoe:valid" result="pass"/><test-case name="33495particlesJe010 tokoe:valid" result="pass"/><test-case name="33496particlesJe010.v tokoe:valid" result="pass"/><test-case name="33497particlesJe011 tokoe:valid" result="pass"/><test-case name="33498particlesJe011.v tokoe:valid" result="pass"/><test-case name="33499particlesJe012 tokoe:invalid" result="pass"/><test-case name="33500particlesJf001 tokoe:valid" result="pass"/><test-case name="33501particlesJf001.v tokoe:valid" result="pass"/><test-case name="33502particlesJf002 tokoe:valid" result="pass"/><test-case name="33503particlesJf002.v tokoe:valid" result="pass"/><test-case name="33504particlesJf004 tokoe:valid" result="pass"/><test-case name="33505particlesJf004.v tokoe:valid" result="pass"/><test-case name="33506particlesJf005 tokoe:valid" result="pass"/><test-case name="33507particlesJf005.v tokoe:valid" result="pass"/><test-case name="33508particlesJf006 tokoe:invalid" result="pass"/><test-case name="33509particlesJf007 tokoe:valid" result="pass"/><test-case name="33510particlesJf007.v tokoe:valid" result="pass"/><test-case name="33511particlesJf008 tokoe:valid" result="pass"/><test-case name="33512particlesJf008.v tokoe:valid" result="pass"/><test-case name="33513particlesJf009 tokoe:invalid" result="pass"/><test-case name="33514particlesJf010 tokoe:valid" result="pass"/><test-case name="33515particlesJf010.v tokoe:valid" result="pass"/><test-case name="33516particlesJf011 tokoe:valid" result="pass"/><test-case name="33517particlesJf011.v tokoe:valid" result="pass"/><test-case name="33518particlesJf012 tokoe:invalid" result="pass"/><test-case name="33519particlesJf013 tokoe:valid" result="pass"/><test-case name="33520particlesJf013.v tokoe:valid" result="pass"/><test-case name="33521particlesJf014 tokoe:invalid" result="pass"/><test-case name="33522particlesJf015 tokoe:valid" result="pass"/><test-case name="33523particlesJf015.v tokoe:valid" result="pass"/><test-case name="33524particlesJf016 tokoe:valid" result="pass"/><test-case name="33525particlesJf016.v tokoe:valid" result="pass"/><test-case name="33526particlesJg001 tokoe:invalid" result="pass"/><test-case name="33527particlesJh001 tokoe:invalid" result="pass"/><test-case name="33528particlesJj001 tokoe:valid" result="pass"/><test-case name="33529particlesJj001.v tokoe:valid" result="pass"/><test-case name="33530particlesJj002 tokoe:valid" result="pass"/><test-case name="33531particlesJj002.v tokoe:valid" result="pass"/><test-case name="33532particlesJj003 tokoe:invalid" result="pass"/><test-case name="33533particlesJj004 tokoe:valid" result="pass"/><test-case name="33534particlesJj004.v tokoe:valid" result="pass"/><test-case name="33535particlesJj005 tokoe:valid" result="pass"/><test-case name="33536particlesJj005.v tokoe:valid" result="pass"/><test-case name="33537particlesJj006 tokoe:invalid" result="pass"/><test-case name="33538particlesJj007 tokoe:valid" result="pass"/><test-case name="33539particlesJj007.v tokoe:valid" result="pass"/><test-case name="33540particlesJj008 tokoe:valid" result="pass"/><test-case name="33541particlesJj008.v tokoe:valid" result="pass"/><test-case name="33542particlesJj009 tokoe:valid" result="pass"/><test-case name="33543particlesJj009.v tokoe:valid" result="pass"/><test-case name="33544particlesJj010 tokoe:valid" result="pass"/><test-case name="33545particlesJj010.v tokoe:valid" result="pass"/><test-case name="33546particlesJj011 tokoe:valid" result="pass"/><test-case name="33547particlesJj011.v tokoe:valid" result="pass"/><test-case name="33548particlesJj012 tokoe:invalid" result="pass"/><test-case name="33549particlesJk001 tokoe:valid" result="pass"/><test-case name="33550particlesJk001.v tokoe:valid" result="pass"/><test-case name="33551particlesJk002 tokoe:valid" result="pass"/><test-case name="33552particlesJk002.v tokoe:valid" result="pass"/><test-case name="33553particlesJk004 tokoe:valid" result="pass"/><test-case name="33554particlesJk004.v tokoe:valid" result="pass"/><test-case name="33555particlesJk005 tokoe:valid" result="pass"/><test-case name="33556particlesJk005.v tokoe:valid" result="pass"/><test-case name="33557particlesJk006 tokoe:invalid" result="pass"/><test-case name="33558particlesJk007 tokoe:valid" result="pass"/><test-case name="33559particlesJk007.v tokoe:valid" result="pass"/><test-case name="33560particlesJk008 tokoe:valid" result="pass"/><test-case name="33561particlesJk008.v tokoe:valid" result="pass"/><test-case name="33562particlesJk009 tokoe:invalid" result="pass"/><test-case name="33563particlesJk010 tokoe:valid" result="pass"/><test-case name="33564particlesJk010.v tokoe:valid" result="pass"/><test-case name="33565particlesJk011 tokoe:valid" result="pass"/><test-case name="33566particlesJk011.v tokoe:valid" result="pass"/><test-case name="33567particlesJk012 tokoe:invalid" result="pass"/><test-case name="33568particlesJk013 tokoe:valid" result="pass"/><test-case name="33569particlesJk013.v tokoe:valid" result="pass"/><test-case name="33570particlesJk014 tokoe:invalid" result="pass"/><test-case name="33571particlesJk015 tokoe:valid" result="pass"/><test-case name="33572particlesJk015.v tokoe:valid" result="pass"/><test-case name="33573particlesJk016 tokoe:valid" result="pass"/><test-case name="33574particlesJk016.v tokoe:valid" result="pass"/><test-case name="33575particlesJl001 tokoe:valid" result="pass"/><test-case name="33576particlesJl001.v tokoe:valid" result="pass"/><test-case name="33577particlesJl002 tokoe:invalid" result="pass"/><test-case name="33578particlesJl003 tokoe:invalid" result="pass"/><test-case name="33579particlesJm003 tokoe:invalid" result="pass"/><test-case name="33580particlesJm004 tokoe:valid" result="pass"/><test-case name="33581particlesJm004.v tokoe:valid" result="pass"/><test-case name="33582particlesJm005 tokoe:valid" result="pass"/><test-case name="33583particlesJm005.v tokoe:valid" result="pass"/><test-case name="33584particlesJn007 tokoe:valid" result="pass"/><test-case name="33585particlesJn007.v tokoe:valid" result="pass"/><test-case name="33586particlesJn008 tokoe:valid" result="pass"/><test-case name="33587particlesJn008.v tokoe:valid" result="pass"/><test-case name="33588particlesJn009 tokoe:invalid" result="pass"/><test-case name="33589particlesJn010 tokoe:valid" result="pass"/><test-case name="33590particlesJn010.v tokoe:valid" result="pass"/><test-case name="33591particlesJr001 tokoe:invalid" result="pass"/><test-case name="33592particlesJr002 tokoe:invalid" result="pass"/><test-case name="33593particlesJp003 tokoe:invalid" result="pass"/><test-case name="33594particlesJp004 tokoe:valid" result="pass"/><test-case name="33595particlesJp004.v tokoe:valid" result="pass"/><test-case name="33596particlesJp005 tokoe:valid" result="pass"/><test-case name="33597particlesJp005.v tokoe:valid" result="pass"/><test-case name="33598particlesJq007 tokoe:valid" result="pass"/><test-case name="33599particlesJq007.v tokoe:valid" result="pass"/><test-case name="33600particlesJq008 tokoe:valid" result="pass"/><test-case name="33601particlesJq008.v tokoe:valid" result="pass"/><test-case name="33602particlesJq009 tokoe:invalid" result="pass"/><test-case name="33603particlesJq010 tokoe:valid" result="pass"/><test-case name="33604particlesJq010.v tokoe:valid" result="pass"/><test-case name="33605particlesJs001 tokoe:valid" result="pass"/><test-case name="33606particlesJs001.v tokoe:valid" result="pass"/><test-case name="33607particlesJs002 tokoe:invalid" result="pass"/><test-case name="33608particlesJs003 tokoe:invalid" result="pass"/><test-case name="33609particlesJs004 tokoe:invalid" result="pass"/><test-case name="33610particlesJu001 tokoe:valid" result="pass"/><test-case name="33611particlesJu001.v tokoe:valid" result="pass"/><test-case name="33612particlesJu002 tokoe:valid" result="pass"/><test-case name="33613particlesJu002.v tokoe:valid" result="pass"/><test-case name="33614particlesJu003 tokoe:valid" result="pass"/><test-case name="33615particlesJu003.v tokoe:valid" result="pass"/><test-case name="33616particlesK001 tokoe:valid" result="pass"/><test-case name="33617particlesK001.v tokoe:valid" result="pass"/><test-case name="33618particlesK002 tokoe:valid" result="pass"/><test-case name="33619particlesK002.v tokoe:valid" result="pass"/><test-case name="33620particlesK003 tokoe:valid" result="pass"/><test-case name="33621particlesK003.v tokoe:valid" result="pass"/><test-case name="33622particlesK004 tokoe:invalid" result="pass"/><test-case name="33623particlesK005 tokoe:valid" result="pass"/><test-case name="33624particlesK005.v tokoe:valid" result="pass"/><test-case name="33625particlesK006 tokoe:invalid" result="pass"/><test-case name="33626particlesK008 tokoe:valid" result="pass"/><test-case name="33627particlesK008.v tokoe:valid" result="pass"/><test-case name="33628particlesL001 tokoe:invalid" result="pass"/><test-case name="33629particlesL002 tokoe:invalid" result="pass"/><test-case name="33630particlesL003 tokoe:valid" result="pass"/><test-case name="33631particlesL003.v tokoe:valid" result="pass"/><test-case name="33632particlesL004 tokoe:invalid" result="pass"/><test-case name="33633particlesL005 tokoe:invalid" result="pass"/><test-case name="33634particlesL006 tokoe:valid" result="pass"/><test-case name="33635particlesL006.v tokoe:valid" result="pass"/><test-case name="33636particlesL007 tokoe:valid" result="pass"/><test-case name="33637particlesL007.v tokoe:valid" result="pass"/><test-case name="33638particlesL008 tokoe:invalid" result="pass"/><test-case name="33639particlesL009 tokoe:invalid" result="pass"/><test-case name="33640particlesL010 tokoe:invalid" result="pass"/><test-case name="33641particlesL011 tokoe:invalid" result="pass"/><test-case name="33642particlesL012 tokoe:valid" result="pass"/><test-case name="33643particlesL012.v tokoe:valid" result="pass"/><test-case name="33644particlesL013 tokoe:valid" result="pass"/><test-case name="33645particlesL013.v tokoe:valid" result="pass"/><test-case name="33646particlesL014 tokoe:invalid" result="pass"/><test-case name="33647particlesL015 tokoe:invalid" result="pass"/><test-case name="33648particlesL016 tokoe:invalid" result="pass"/><test-case name="33649particlesL017 tokoe:valid" result="pass"/><test-case name="33650particlesL017.v tokoe:valid" result="pass"/><test-case name="33651particlesL018 tokoe:valid" result="pass"/><test-case name="33652particlesL018.v tokoe:valid" result="pass"/><test-case name="33653particlesL019 tokoe:invalid" result="pass"/><test-case name="33654particlesL020 tokoe:invalid" result="pass"/><test-case name="33655particlesL021 tokoe:valid" result="pass"/><test-case name="33656particlesL021.v tokoe:valid" result="pass"/><test-case name="33657particlesL022 tokoe:invalid" result="pass"/><test-case name="33658particlesL023 tokoe:valid" result="pass"/><test-case name="33659particlesL023.v tokoe:valid" result="pass"/><test-case name="33660particlesL024 tokoe:invalid" result="pass"/><test-case name="33661particlesL025 tokoe:valid" result="pass"/><test-case name="33662particlesL025.v tokoe:valid" result="pass"/><test-case name="33663particlesL026 tokoe:invalid" result="pass"/><test-case name="33664particlesL027 tokoe:invalid" result="pass"/><test-case name="33665particlesL028 tokoe:valid" result="pass"/><test-case name="33666particlesL028.v tokoe:valid" result="pass"/><test-case name="33667particlesL029 tokoe:valid" result="pass"/><test-case name="33668particlesL029.v tokoe:valid" result="pass"/><test-case name="33669particlesL030 tokoe:invalid" result="pass"/><test-case name="33670particlesL031 tokoe:invalid" result="pass"/><test-case name="33671particlesL032 tokoe:invalid" result="pass"/><test-case name="33672particlesM001 tokoe:invalid" result="pass"/><test-case name="33673particlesM002 tokoe:valid" result="pass"/><test-case name="33674particlesM002.v tokoe:valid" result="pass"/><test-case name="33675particlesM003 tokoe:valid" result="pass"/><test-case name="33676particlesM003.v tokoe:valid" result="pass"/><test-case name="33677particlesM033 tokoe:invalid" result="pass"/><test-case name="33678particlesM034 tokoe:invalid" result="pass"/><test-case name="33679particlesM035 tokoe:valid" result="pass"/><test-case name="33680particlesM035.v tokoe:valid" result="pass"/><test-case name="33681particlesOa001 tokoe:valid" result="pass"/><test-case name="33682particlesOa001.v tokoe:valid" result="pass"/><test-case name="33683particlesOa002 tokoe:invalid" result="pass"/><test-case name="33684particlesOa003 tokoe:valid" result="pass"/><test-case name="33685particlesOa003.v tokoe:valid" result="pass"/><test-case name="33686particlesOa004 tokoe:invalid" result="pass"/><test-case name="33687particlesOa005 tokoe:invalid" result="pass"/><test-case name="33688particlesOa006 tokoe:valid" result="pass"/><test-case name="33689particlesOa006.v tokoe:valid" result="pass"/><test-case name="33690particlesOa007 tokoe:invalid" result="pass"/><test-case name="33691particlesOa008 tokoe:invalid" result="pass"/><test-case name="33692particlesOa009 tokoe:invalid" result="pass"/><test-case name="33693particlesOa010 tokoe:invalid" result="pass"/><test-case name="33694particlesOa011 tokoe:valid" result="pass"/><test-case name="33695particlesOa011.v tokoe:valid" result="pass"/><test-case name="33696particlesOa012 tokoe:valid" result="pass"/><test-case name="33697particlesOa012.v tokoe:valid" result="pass"/><test-case name="33698particlesOa013 tokoe:valid" result="pass"/><test-case name="33699particlesOa013.v tokoe:valid" result="pass"/><test-case name="33700particlesOa014 tokoe:valid" result="pass"/><test-case name="33701particlesOa014.v tokoe:valid" result="pass"/><test-case name="33702particlesOa015 tokoe:invalid" result="pass"/><test-case name="33703particlesOb003 tokoe:valid" result="pass"/><test-case name="33704particlesOb003.v tokoe:valid" result="pass"/><test-case name="33705particlesOb005 tokoe:valid" result="pass"/><test-case name="33706particlesOb005.v tokoe:valid" result="pass"/><test-case name="33707particlesOb006 tokoe:valid" result="pass"/><test-case name="33708particlesOb006.v tokoe:valid" result="pass"/><test-case name="33709particlesOb007 tokoe:valid" result="pass"/><test-case name="33710particlesOb007.v tokoe:valid" result="pass"/><test-case name="33711particlesOb010 tokoe:invalid" result="pass"/><test-case name="33712particlesOb011 tokoe:invalid" result="pass"/><test-case name="33713particlesOb012 tokoe:valid" result="pass"/><test-case name="33714particlesOb012.v tokoe:valid" result="pass"/><test-case name="33715particlesOb014 tokoe:invalid" result="pass"/><test-case name="33716particlesOb015 tokoe:valid" result="pass"/><test-case name="33717particlesOb015.v tokoe:valid" result="pass"/><test-case name="33718particlesOb016 tokoe:invalid" result="pass"/><test-case name="33719particlesOb017 tokoe:invalid" result="pass"/><test-case name="33720particlesOb019 tokoe:invalid" result="pass"/><test-case name="33721particlesOb020 tokoe:invalid" result="pass"/><test-case name="33722particlesOb021 tokoe:invalid" result="pass"/><test-case name="33723particlesOb022 tokoe:valid" result="pass"/><test-case name="33724particlesOb022.v tokoe:valid" result="pass"/><test-case name="33725particlesOb023 tokoe:invalid" result="pass"/><test-case name="33726particlesOb024 tokoe:invalid" result="pass"/><test-case name="33727particlesOb025 tokoe:invalid" result="pass"/><test-case name="33728particlesOb026 tokoe:invalid" result="pass"/><test-case name="33729particlesOb027 tokoe:invalid" result="pass"/><test-case name="33730particlesOb028 tokoe:invalid" result="pass"/><test-case name="33731particlesOb029 tokoe:invalid" result="pass"/><test-case name="33732particlesOb030 tokoe:invalid" result="pass"/><test-case name="33733particlesOb031 tokoe:invalid" result="pass"/><test-case name="33734particlesOb032 tokoe:valid" result="pass"/><test-case name="33735particlesOb032.v tokoe:valid" result="pass"/><test-case name="33736particlesOb033 tokoe:invalid" result="pass"/><test-case name="33737particlesOb034 tokoe:invalid" result="pass"/><test-case name="33738particlesOb035 tokoe:invalid" result="pass"/><test-case name="33739particlesOb036 tokoe:invalid" result="pass"/><test-case name="33740particlesOb037 tokoe:invalid" result="pass"/><test-case name="33741particlesOb038 tokoe:invalid" result="pass"/><test-case name="33742particlesOb039 tokoe:invalid" result="pass"/><test-case name="33743particlesOb040 tokoe:invalid" result="pass"/><test-case name="33744particlesOb041 tokoe:invalid" result="pass"/><test-case name="33745particlesOb042 tokoe:valid" result="pass"/><test-case name="33746particlesOb042.v tokoe:valid" result="pass"/><test-case name="33747particlesOb043 tokoe:invalid" result="pass"/><test-case name="33748particlesOb044 tokoe:invalid" result="pass"/><test-case name="33749particlesOb045 tokoe:invalid" result="pass"/><test-case name="33750particlesOb046 tokoe:invalid" result="pass"/><test-case name="33751particlesOb047 tokoe:valid" result="pass"/><test-case name="33752particlesOb047.v tokoe:valid" result="pass"/><test-case name="33753particlesOb048 tokoe:valid" result="pass"/><test-case name="33754particlesOb048.v tokoe:valid" result="pass"/><test-case name="33755particlesOb049 tokoe:invalid" result="pass"/><test-case name="33756particlesOb050 tokoe:invalid" result="pass"/><test-case name="33757particlesOb051 tokoe:invalid" result="pass"/><test-case name="33758particlesOb052 tokoe:valid" result="pass"/><test-case name="33759particlesOb052.v tokoe:valid" result="pass"/><test-case name="33760particlesOb053 tokoe:valid" result="pass"/><test-case name="33761particlesOb053.v tokoe:valid" result="pass"/><test-case name="33762particlesOb054 tokoe:valid" result="pass"/><test-case name="33763particlesOb054.v tokoe:valid" result="pass"/><test-case name="33764particlesOb055 tokoe:valid" result="pass"/><test-case name="33765particlesOb055.v tokoe:valid" result="pass"/><test-case name="33766particlesOb056 tokoe:valid" result="pass"/><test-case name="33767particlesOb056.v tokoe:valid" result="pass"/><test-case name="33768particlesOb057 tokoe:valid" result="pass"/><test-case name="33769particlesOb057.v tokoe:valid" result="pass"/><test-case name="33770particlesOb058 tokoe:invalid" result="pass"/><test-case name="33771particlesOb059 tokoe:valid" result="pass"/><test-case name="33772particlesOb059.v tokoe:valid" result="pass"/><test-case name="33773particlesOb060 tokoe:valid" result="pass"/><test-case name="33774particlesOb060.v tokoe:valid" result="pass"/><test-case name="33775particlesP002 tokoe:valid" result="pass"/><test-case name="33776particlesP002.v tokoe:valid" result="pass"/><test-case name="33777particlesS001 tokoe:valid" result="pass"/><test-case name="33778particlesS001.v tokoe:valid" result="pass"/><test-case name="33779particlesS003 tokoe:valid" result="pass"/><test-case name="33780particlesS003.v tokoe:valid" result="pass"/><test-case name="33781particlesS004 tokoe:valid" result="pass"/><test-case name="33782particlesS004.v tokoe:valid" result="pass"/><test-case name="33783particlesS005 tokoe:invalid" result="pass"/><test-case name="33784particlesS006 tokoe:invalid" result="pass"/><test-case name="33785particlesS007 tokoe:valid" result="pass"/><test-case name="33786particlesS007.v tokoe:valid" result="pass"/><test-case name="33787particlesS008 tokoe:invalid" result="pass"/><test-case name="33788particlesS009 tokoe:invalid" result="pass"/><test-case name="33789particlesS010 tokoe:invalid" result="pass"/><test-case name="33790particlesS011 tokoe:valid" result="pass"/><test-case name="33791particlesS011.v tokoe:valid" result="pass"/><test-case name="33792particlesR001 tokoe:valid" result="pass"/><test-case name="33793particlesR001.v tokoe:valid" result="pass"/><test-case name="33794particlesR002 tokoe:valid" result="pass"/><test-case name="33795particlesR002.v tokoe:valid" result="pass"/><test-case name="33796particlesR003 tokoe:valid" result="pass"/><test-case name="33797particlesR003.v tokoe:valid" result="pass"/><test-case name="33798particlesR004 tokoe:valid" result="pass"/><test-case name="33799particlesR004.v tokoe:valid" result="pass"/><test-case name="33800particlesR005 tokoe:valid" result="pass"/><test-case name="33801particlesR005.v tokoe:valid" result="fail"/><test-case name="33802particlesR006 tokoe:invalid" result="pass"/><test-case name="33803particlesR007 tokoe:valid" result="pass"/><test-case name="33804particlesR007.v tokoe:valid" result="pass"/><test-case name="33805particlesR008 tokoe:valid" result="pass"/><test-case name="33806particlesR008.v tokoe:valid" result="pass"/><test-case name="33807particlesR009 tokoe:valid" result="pass"/><test-case name="33808particlesR009.v tokoe:valid" result="pass"/><test-case name="33809particlesR010 tokoe:invalid" result="pass"/><test-case name="33810particlesR011 tokoe:valid" result="pass"/><test-case name="33811particlesR011.v tokoe:valid" result="pass"/><test-case name="33812particlesR012 tokoe:valid" result="pass"/><test-case name="33813particlesR012.v tokoe:valid" result="pass"/><test-case name="33814particlesR013 tokoe:valid" result="pass"/><test-case name="33815particlesR013.v tokoe:valid" result="pass"/><test-case name="33816particlesR014 tokoe:invalid" result="pass"/><test-case name="33817particlesR015 tokoe:valid" result="pass"/><test-case name="33818particlesR015.v tokoe:valid" result="pass"/><test-case name="33819particlesR016 tokoe:valid" result="pass"/><test-case name="33820particlesR016.v tokoe:valid" result="pass"/><test-case name="33821particlesR017 tokoe:valid" result="pass"/><test-case name="33822particlesR017.v tokoe:valid" result="pass"/><test-case name="33823particlesR018 tokoe:invalid" result="pass"/><test-case name="33824particlesR019 tokoe:invalid" result="pass"/><test-case name="33825particlesR020 tokoe:valid" result="pass"/><test-case name="33826particlesR020.v tokoe:valid" result="pass"/><test-case name="33827particlesR021 tokoe:invalid" result="pass"/><test-case name="33828particlesR022 tokoe:valid" result="pass"/><test-case name="33829particlesR022.v tokoe:valid" result="pass"/><test-case name="33830particlesR023 tokoe:invalid" result="pass"/><test-case name="33831particlesR024 tokoe:valid" result="pass"/><test-case name="33832particlesR024.v tokoe:valid" result="pass"/><test-case name="33833particlesR025 tokoe:invalid" result="pass"/><test-case name="33834particlesR026 tokoe:invalid" result="pass"/><test-case name="33835particlesR027 tokoe:invalid" result="pass"/><test-case name="33836particlesR028 tokoe:invalid" result="pass"/><test-case name="33837particlesR029 tokoe:valid" result="pass"/><test-case name="33838particlesR029.v tokoe:valid" result="pass"/><test-case name="33839particlesR030 tokoe:valid" result="pass"/><test-case name="33840particlesR030.v tokoe:valid" result="pass"/><test-case name="33841particlesR031 tokoe:invalid" result="pass"/><test-case name="33842particlesT001 tokoe:valid" result="pass"/><test-case name="33843particlesT001.v tokoe:valid" result="pass"/><test-case name="33844particlesT003 tokoe:valid" result="pass"/><test-case name="33845particlesT003.v tokoe:valid" result="pass"/><test-case name="33846particlesT004 tokoe:valid" result="pass"/><test-case name="33847particlesT004.v tokoe:valid" result="pass"/><test-case name="33848particlesT005 tokoe:valid" result="pass"/><test-case name="33849particlesT005.v tokoe:valid" result="pass"/><test-case name="33850particlesT006 tokoe:valid" result="pass"/><test-case name="33851particlesT006.v tokoe:valid" result="pass"/><test-case name="33852particlesT007 tokoe:valid" result="pass"/><test-case name="33853particlesT007.v tokoe:valid" result="pass"/><test-case name="33854particlesT008 tokoe:invalid" result="pass"/><test-case name="33855particlesT010 tokoe:invalid" result="pass"/><test-case name="33856particlesT011 tokoe:invalid" result="pass"/><test-case name="33857particlesT012 tokoe:valid" result="pass"/><test-case name="33858particlesT012.v tokoe:valid" result="pass"/><test-case name="33859particlesT013 tokoe:valid" result="pass"/><test-case name="33860particlesT013.v tokoe:valid" result="pass"/><test-case name="33861particlesQ001 tokoe:valid" result="pass"/><test-case name="33862particlesQ001.v tokoe:valid" result="pass"/><test-case name="33863particlesQ002 tokoe:valid" result="pass"/><test-case name="33864particlesQ002.v tokoe:valid" result="pass"/><test-case name="33865particlesQ003 tokoe:valid" result="pass"/><test-case name="33866particlesQ003.v tokoe:valid" result="pass"/><test-case name="33867particlesQ004 tokoe:valid" result="pass"/><test-case name="33868particlesQ004.v tokoe:valid" result="pass"/><test-case name="33869particlesQ006 tokoe:invalid" result="pass"/><test-case name="33870particlesQ007 tokoe:valid" result="pass"/><test-case name="33871particlesQ007.v tokoe:valid" result="pass"/><test-case name="33872particlesQ008 tokoe:invalid" result="pass"/><test-case name="33873particlesQ011 tokoe:valid" result="pass"/><test-case name="33874particlesQ011.v tokoe:valid" result="pass"/><test-case name="33875particlesQ012 tokoe:invalid" result="pass"/><test-case name="33876particlesQ013 tokoe:valid" result="pass"/><test-case name="33877particlesQ013.v tokoe:valid" result="pass"/><test-case name="33878particlesQ016 tokoe:valid" result="pass"/><test-case name="33879particlesQ016.v tokoe:valid" result="pass"/><test-case name="33880particlesQ017 tokoe:valid" result="pass"/><test-case name="33881particlesQ017.v tokoe:valid" result="pass"/><test-case name="33882particlesQ018 tokoe:invalid" result="pass"/><test-case name="33883particlesQ019 tokoe:invalid" result="pass"/><test-case name="33884particlesQ020 tokoe:valid" result="pass"/><test-case name="33885particlesQ020.v tokoe:valid" result="pass"/><test-case name="33886particlesQ021 tokoe:invalid" result="pass"/><test-case name="33887particlesQ022 tokoe:valid" result="pass"/><test-case name="33888particlesQ022.v tokoe:valid" result="pass"/><test-case name="33889particlesQ023 tokoe:invalid" result="pass"/><test-case name="33890particlesQ024 tokoe:valid" result="pass"/><test-case name="33891particlesQ024.v tokoe:valid" result="pass"/><test-case name="33892particlesQ025 tokoe:invalid" result="pass"/><test-case name="33893particlesQ026 tokoe:invalid" result="pass"/><test-case name="33894particlesQ027 tokoe:invalid" result="pass"/><test-case name="33895particlesQ028 tokoe:invalid" result="pass"/><test-case name="33896particlesQ029 tokoe:valid" result="pass"/><test-case name="33897particlesQ029.v tokoe:valid" result="pass"/><test-case name="33898particlesQ030 tokoe:valid" result="pass"/><test-case name="33899particlesQ030.v tokoe:valid" result="pass"/><test-case name="33900particlesQ031 tokoe:invalid" result="pass"/><test-case name="33901particlesQ032 tokoe:valid" result="pass"/><test-case name="33902particlesQ032.v tokoe:valid" result="pass"/><test-case name="33903particlesU001 tokoe:invalid" result="pass"/><test-case name="33904particlesU002 tokoe:invalid" result="pass"/><test-case name="33905particlesU003 tokoe:valid" result="pass"/><test-case name="33906particlesU003.v tokoe:valid" result="pass"/><test-case name="33907particlesU004 tokoe:valid" result="pass"/><test-case name="33908particlesU004.v tokoe:valid" result="pass"/><test-case name="33909particlesU005 tokoe:valid" result="pass"/><test-case name="33910particlesU005.v tokoe:valid" result="pass"/><test-case name="33911particlesU006 tokoe:invalid" result="pass"/><test-case name="33912particlesU007 tokoe:valid" result="pass"/><test-case name="33913particlesU007.v tokoe:valid" result="pass"/><test-case name="33914particlesU008 tokoe:invalid" result="pass"/><test-case name="33915particlesU009 tokoe:invalid" result="pass"/><test-case name="33916particlesV003 tokoe:valid" result="pass"/><test-case name="33917particlesV003.v tokoe:valid" result="pass"/><test-case name="33918particlesV004 tokoe:valid" result="pass"/><test-case name="33919particlesV004.v tokoe:valid" result="pass"/><test-case name="33920particlesV005 tokoe:invalid" result="pass"/><test-case name="33921particlesV006 tokoe:valid" result="pass"/><test-case name="33922particlesV006.v tokoe:valid" result="pass"/><test-case name="33923particlesV007 tokoe:valid" result="pass"/><test-case name="33924particlesV007.v tokoe:valid" result="pass"/><test-case name="33925particlesV008 tokoe:valid" result="pass"/><test-case name="33926particlesV008.v tokoe:valid" result="pass"/><test-case name="33927particlesV009 tokoe:valid" result="pass"/><test-case name="33928particlesV009.v tokoe:valid" result="pass"/><test-case name="33929particlesV010 tokoe:valid" result="pass"/><test-case name="33930particlesV010.v tokoe:valid" result="pass"/><test-case name="33931particlesV011 tokoe:valid" result="pass"/><test-case name="33932particlesV011.v tokoe:valid" result="pass"/><test-case name="33933particlesV012 tokoe:valid" result="pass"/><test-case name="33934particlesV012.v tokoe:valid" result="pass"/><test-case name="33935particlesV013 tokoe:valid" result="pass"/><test-case name="33936particlesV013.v tokoe:valid" result="pass"/><test-case name="33937particlesV014 tokoe:valid" result="pass"/><test-case name="33938particlesV014.v tokoe:valid" result="pass"/><test-case name="33939particlesV015 tokoe:valid" result="pass"/><test-case name="33940particlesV015.v tokoe:valid" result="pass"/><test-case name="33941particlesV016 tokoe:invalid" result="pass"/><test-case name="33942particlesV017 tokoe:invalid" result="pass"/><test-case name="33943particlesV018 tokoe:invalid" result="pass"/><test-case name="33944particlesW001 tokoe:valid" result="pass"/><test-case name="33945particlesW001.v tokoe:valid" result="pass"/><test-case name="33946particlesW002 tokoe:invalid" result="pass"/><test-case name="33947particlesW003 tokoe:valid" result="pass"/><test-case name="33948particlesW003.v tokoe:valid" result="pass"/><test-case name="33949particlesW005 tokoe:invalid" result="pass"/><test-case name="33950particlesW006 tokoe:valid" result="pass"/><test-case name="33951particlesW007 tokoe:invalid" result="pass"/><test-case name="33952particlesW008 tokoe:valid" result="pass"/><test-case name="33953particlesW008.v tokoe:valid" result="pass"/><test-case name="33954particlesW010 tokoe:invalid" result="pass"/><test-case name="33955particlesW011 tokoe:valid" result="pass"/><test-case name="33956particlesW011.v tokoe:valid" result="pass"/><test-case name="33957particlesW012 tokoe:invalid" result="pass"/><test-case name="33958particlesW013 tokoe:invalid" result="pass"/><test-case name="33959particlesW014 tokoe:invalid" result="pass"/><test-case name="33960particlesW015 tokoe:invalid" result="pass"/><test-case name="33961particlesW016 tokoe:valid" result="pass"/><test-case name="33962particlesW016.v tokoe:valid" result="pass"/><test-case name="33963particlesZ002 tokoe:valid" result="pass"/><test-case name="33964particlesZ002.v tokoe:valid" result="pass"/><test-case name="33965particlesZ003 tokoe:valid" result="pass"/><test-case name="33966particlesZ003.v tokoe:valid" result="pass"/><test-case name="33967particlesZ008 tokoe:valid" result="pass"/><test-case name="33968particlesZ008.v tokoe:valid" result="pass"/><test-case name="33969particlesZ009 tokoe:invalid" result="pass"/><test-case name="33970particlesZ010 tokoe:valid" result="pass"/><test-case name="33971particlesZ011 tokoe:invalid" result="pass"/><test-case name="33972particlesZ012 tokoe:valid" result="pass"/><test-case name="33973particlesZ012.v tokoe:valid" result="pass"/><test-case name="33974particlesZ013 tokoe:invalid" result="pass"/><test-case name="33975particlesZ014 tokoe:invalid" result="pass"/><test-case name="33976particlesZ015 tokoe:valid" result="pass"/><test-case name="33977particlesZ015.i tokoe:invalid" result="pass"/><test-case name="33978particlesZ016 tokoe:valid" result="pass"/><test-case name="33979particlesZ016.i tokoe:invalid" result="pass"/><test-case name="33980particlesZ017 tokoe:invalid" result="pass"/><test-case name="33981particlesZ018 tokoe:invalid" result="pass"/><test-case name="33982particlesZ020 tokoe:valid" result="pass"/><test-case name="33983particlesZ021 tokoe:invalid" result="pass"/><test-case name="33984particlesZ022 tokoe:invalid" result="pass"/><test-case name="33985particlesZ030_a tokoe:valid" result="pass"/><test-case name="33986particlesZ030_b tokoe:valid" result="pass"/><test-case name="33987particlesZ030_c tokoe:valid" result="pass"/><test-case name="33988particlesZ030_d tokoe:invalid" result="pass"/><test-case name="33989particlesZ031 tokoe:valid" result="fail"/><test-case name="33990particlesZ033_a tokoe:valid" result="fail"/><test-case name="33991particlesZ037 tokoe:invalid" result="pass"/><test-case name="33992particlesZ038 tokoe:valid" result="pass"/><test-case name="33993particlesZ039 tokoe:invalid" result="pass"/><test-case name="33994particlesZ040 tokoe:valid" result="pass"/><test-case name="33995particlesZ040.i tokoe:valid" result="pass"/><test-case name="33996reA1 tokoe:valid" result="pass"/><test-case name="33997reA1.v tokoe:valid" result="pass"/><test-case name="33998reA2 tokoe:valid" result="pass"/><test-case name="33999reA2.i tokoe:invalid" result="pass"/><test-case name="34000reA3 tokoe:valid" result="pass"/><test-case name="34001reA3.i tokoe:invalid" result="pass"/><test-case name="34002reA4 tokoe:valid" result="pass"/><test-case name="34003reA4.i tokoe:invalid" result="pass"/><test-case name="34004reA5 tokoe:valid" result="pass"/><test-case name="34005reA5.i tokoe:invalid" result="pass"/><test-case name="34006reA6 tokoe:valid" result="pass"/><test-case name="34007reA6.i tokoe:invalid" result="pass"/><test-case name="34008reA7 tokoe:valid" result="pass"/><test-case name="34009reA7.v tokoe:valid" result="pass"/><test-case name="34010reA8 tokoe:valid" result="pass"/><test-case name="34011reA8.v tokoe:valid" result="pass"/><test-case name="34012reA9 tokoe:valid" result="pass"/><test-case name="34013reA9.i tokoe:invalid" result="pass"/><test-case name="34014reA10 tokoe:valid" result="pass"/><test-case name="34015reA10.i tokoe:invalid" result="pass"/><test-case name="34016reA11 tokoe:valid" result="pass"/><test-case name="34017reA11.i tokoe:invalid" result="pass"/><test-case name="34018reA12 tokoe:valid" result="pass"/><test-case name="34019reA12.v tokoe:valid" result="pass"/><test-case name="34020reA13 tokoe:valid" result="pass"/><test-case name="34021reA13.i tokoe:invalid" result="pass"/><test-case name="34022reA14 tokoe:valid" result="pass"/><test-case name="34023reA14.i tokoe:invalid" result="pass"/><test-case name="34024reA15 tokoe:valid" result="pass"/><test-case name="34025reA15.i tokoe:invalid" result="pass"/><test-case name="34026reA16 tokoe:valid" result="pass"/><test-case name="34027reA16.v tokoe:valid" result="pass"/><test-case name="34028reA17 tokoe:valid" result="pass"/><test-case name="34029reA17.v tokoe:valid" result="pass"/><test-case name="34030reA18 tokoe:valid" result="pass"/><test-case name="34031reA18.i tokoe:invalid" result="pass"/><test-case name="34032reA19 tokoe:valid" result="pass"/><test-case name="34033reA19.i tokoe:invalid" result="pass"/><test-case name="34034reA20 tokoe:valid" result="pass"/><test-case name="34035reA20.i tokoe:invalid" result="pass"/><test-case name="34036reA21 tokoe:valid" result="pass"/><test-case name="34037reA21.i tokoe:invalid" result="pass"/><test-case name="34038reA22 tokoe:valid" result="pass"/><test-case name="34039reA22.i tokoe:invalid" result="pass"/><test-case name="34040reA23 tokoe:valid" result="pass"/><test-case name="34041reA23.i tokoe:invalid" result="pass"/><test-case name="34042reA24 tokoe:valid" result="pass"/><test-case name="34043reA24.v tokoe:valid" result="pass"/><test-case name="34044reA25 tokoe:valid" result="pass"/><test-case name="34045reA25.i tokoe:invalid" result="pass"/><test-case name="34046reA26 tokoe:valid" result="pass"/><test-case name="34047reA26.i tokoe:invalid" result="pass"/><test-case name="34048reA27 tokoe:valid" result="pass"/><test-case name="34049reA27.i tokoe:invalid" result="pass"/><test-case name="34050reA28 tokoe:valid" result="pass"/><test-case name="34051reA28.v tokoe:valid" result="pass"/><test-case name="34052reA29 tokoe:valid" result="pass"/><test-case name="34053reA29.v tokoe:valid" result="pass"/><test-case name="34054reA30 tokoe:valid" result="pass"/><test-case name="34055reA30.v tokoe:valid" result="pass"/><test-case name="34056reA31 tokoe:valid" result="pass"/><test-case name="34057reA31.v tokoe:valid" result="pass"/><test-case name="34058reA32 tokoe:valid" result="pass"/><test-case name="34059reA32.i tokoe:invalid" result="pass"/><test-case name="34060reA33 tokoe:valid" result="pass"/><test-case name="34061reA33.i tokoe:invalid" result="pass"/><test-case name="34062reA34 tokoe:valid" result="pass"/><test-case name="34063reA34.i tokoe:invalid" result="pass"/><test-case name="34064reA35 tokoe:valid" result="pass"/><test-case name="34065reA36 tokoe:valid" result="pass"/><test-case name="34066reA37 tokoe:valid" result="pass"/><test-case name="34067reA38 tokoe:valid" result="pass"/><test-case name="34068reA39 tokoe:valid" result="pass"/><test-case name="34069reA40 tokoe:valid" result="pass"/><test-case name="34070reA45 tokoe:valid" result="pass"/><test-case name="34071reA45.v tokoe:valid" result="pass"/><test-case name="34072reB1 tokoe:valid" result="pass"/><test-case name="34073reB1.v tokoe:valid" result="pass"/><test-case name="34074reB2 tokoe:valid" result="pass"/><test-case name="34075reB2.v tokoe:valid" result="pass"/><test-case name="34076reB3 tokoe:valid" result="pass"/><test-case name="34077reB3.i tokoe:invalid" result="pass"/><test-case name="34078reB4 tokoe:valid" result="pass"/><test-case name="34079reB4.i tokoe:invalid" result="pass"/><test-case name="34080reB5 tokoe:valid" result="pass"/><test-case name="34081reB5.i tokoe:invalid" result="pass"/><test-case name="34082reB10 tokoe:valid" result="pass"/><test-case name="34083reB10.i tokoe:invalid" result="pass"/><test-case name="34084reB11 tokoe:valid" result="pass"/><test-case name="34085reB11.v tokoe:valid" result="pass"/><test-case name="34086reB12 tokoe:valid" result="pass"/><test-case name="34087reB12.v tokoe:valid" result="pass"/><test-case name="34088reB13 tokoe:valid" result="pass"/><test-case name="34089reB13.i tokoe:invalid" result="pass"/><test-case name="34090reB14 tokoe:valid" result="pass"/><test-case name="34091reB14.i tokoe:invalid" result="pass"/><test-case name="34092reB15 tokoe:valid" result="pass"/><test-case name="34093reB15.i tokoe:invalid" result="pass"/><test-case name="34094reB16 tokoe:valid" result="pass"/><test-case name="34095reB16.i tokoe:invalid" result="pass"/><test-case name="34096reB17 tokoe:valid" result="pass"/><test-case name="34097reB17.v tokoe:valid" result="pass"/><test-case name="34098reB18 tokoe:valid" result="pass"/><test-case name="34099reB18.v tokoe:valid" result="pass"/><test-case name="34100reB19 tokoe:valid" result="pass"/><test-case name="34101reB19.i tokoe:invalid" result="pass"/><test-case name="34102reB20 tokoe:valid" result="pass"/><test-case name="34103reB20.i tokoe:invalid" result="pass"/><test-case name="34104reB21 tokoe:valid" result="pass"/><test-case name="34105reB21.i tokoe:invalid" result="pass"/><test-case name="34106reB22 tokoe:valid" result="pass"/><test-case name="34107reB22.i tokoe:invalid" result="pass"/><test-case name="34108reB23 tokoe:valid" result="pass"/><test-case name="34109reB23.v tokoe:valid" result="pass"/><test-case name="34110reB24 tokoe:valid" result="pass"/><test-case name="34111reB24.v tokoe:valid" result="pass"/><test-case name="34112reB25 tokoe:valid" result="pass"/><test-case name="34113reB25.i tokoe:invalid" result="pass"/><test-case name="34114reB26 tokoe:valid" result="pass"/><test-case name="34115reB26.i tokoe:invalid" result="pass"/><test-case name="34116reB27 tokoe:valid" result="pass"/><test-case name="34117reB27.i tokoe:invalid" result="pass"/><test-case name="34118reB28 tokoe:valid" result="pass"/><test-case name="34119reB28.v tokoe:valid" result="pass"/><test-case name="34120reB29 tokoe:valid" result="pass"/><test-case name="34121reB29.v tokoe:valid" result="pass"/><test-case name="34122reB30 tokoe:valid" result="pass"/><test-case name="34123reB30.v tokoe:valid" result="pass"/><test-case name="34124reB31 tokoe:valid" result="pass"/><test-case name="34125reB31.i tokoe:invalid" result="pass"/><test-case name="34126reB32 tokoe:valid" result="pass"/><test-case name="34127reB32.i tokoe:invalid" result="pass"/><test-case name="34128reB33 tokoe:valid" result="pass"/><test-case name="34129reB33.i tokoe:invalid" result="pass"/><test-case name="34130reB34 tokoe:valid" result="pass"/><test-case name="34131reB34.i tokoe:invalid" result="pass"/><test-case name="34132reB35 tokoe:valid" result="pass"/><test-case name="34133reB35.i tokoe:invalid" result="pass"/><test-case name="34134reB36 tokoe:valid" result="pass"/><test-case name="34135reB36.i tokoe:invalid" result="pass"/><test-case name="34136reB37 tokoe:valid" result="pass"/><test-case name="34137reB37.v tokoe:valid" result="pass"/><test-case name="34138reB38 tokoe:valid" result="pass"/><test-case name="34139reB38.v tokoe:valid" result="pass"/><test-case name="34140reB39 tokoe:valid" result="pass"/><test-case name="34141reB39.v tokoe:valid" result="pass"/><test-case name="34142reB40 tokoe:valid" result="pass"/><test-case name="34143reB40.i tokoe:invalid" result="pass"/><test-case name="34144reB41 tokoe:valid" result="pass"/><test-case name="34145reB41.i tokoe:invalid" result="pass"/><test-case name="34146reB42 tokoe:valid" result="pass"/><test-case name="34147reB42.i tokoe:invalid" result="pass"/><test-case name="34148reB43 tokoe:valid" result="pass"/><test-case name="34149reB43.i tokoe:invalid" result="pass"/><test-case name="34150reB44 tokoe:valid" result="pass"/><test-case name="34151reB44.v tokoe:valid" result="pass"/><test-case name="34152reB45 tokoe:valid" result="pass"/><test-case name="34153reB45.v tokoe:valid" result="pass"/><test-case name="34154reB46 tokoe:valid" result="pass"/><test-case name="34155reB46.v tokoe:valid" result="pass"/><test-case name="34156reB47 tokoe:valid" result="pass"/><test-case name="34157reB47.v tokoe:valid" result="pass"/><test-case name="34158reB48 tokoe:valid" result="pass"/><test-case name="34159reB48.v tokoe:valid" result="pass"/><test-case name="34160reB49 tokoe:valid" result="pass"/><test-case name="34161reB49.i tokoe:invalid" result="pass"/><test-case name="34162reB50 tokoe:valid" result="pass"/><test-case name="34163reB50.i tokoe:invalid" result="pass"/><test-case name="34164reB51 tokoe:valid" result="pass"/><test-case name="34165reB51.i tokoe:invalid" result="pass"/><test-case name="34166reB52 tokoe:valid" result="pass"/><test-case name="34167reB52.i tokoe:invalid" result="pass"/><test-case name="34168reB53 tokoe:valid" result="pass"/><test-case name="34169reB53.i tokoe:invalid" result="pass"/><test-case name="34170reB54 tokoe:valid" result="pass"/><test-case name="34171reB54.v tokoe:valid" result="pass"/><test-case name="34172reB55 tokoe:valid" result="pass"/><test-case name="34173reB55.v tokoe:valid" result="pass"/><test-case name="34174reB56 tokoe:valid" result="pass"/><test-case name="34175reB56.v tokoe:valid" result="pass"/><test-case name="34176reB57 tokoe:valid" result="pass"/><test-case name="34177reB57.v tokoe:valid" result="pass"/><test-case name="34178reB58 tokoe:valid" result="pass"/><test-case name="34179reB58.i tokoe:invalid" result="pass"/><test-case name="34180reB59 tokoe:valid" result="pass"/><test-case name="34181reB59.i tokoe:invalid" result="pass"/><test-case name="34182reB60 tokoe:valid" result="pass"/><test-case name="34183reB60.i tokoe:invalid" result="pass"/><test-case name="34184reB61 tokoe:valid" result="pass"/><test-case name="34185reB61.i tokoe:invalid" result="pass"/><test-case name="34186reB62 tokoe:invalid" result="pass"/><test-case name="34187reB63 tokoe:invalid" result="pass"/><test-case name="34188reB64 tokoe:invalid" result="pass"/><test-case name="34189reB65 tokoe:invalid" result="pass"/><test-case name="34190reB78 tokoe:valid" result="pass"/><test-case name="34191reB78.v tokoe:valid" result="pass"/><test-case name="34192reB79 tokoe:invalid" result="pass"/><test-case name="34193reB80 tokoe:invalid" result="pass"/><test-case name="34194reC1 tokoe:valid" result="pass"/><test-case name="34195reC1.i tokoe:invalid" result="pass"/><test-case name="34196reC2 tokoe:valid" result="pass"/><test-case name="34197reC2.v tokoe:valid" result="pass"/><test-case name="34198reC3 tokoe:valid" result="pass"/><test-case name="34199reC3.v tokoe:valid" result="pass"/><test-case name="34200reC4 tokoe:valid" result="pass"/><test-case name="34201reC4.v tokoe:valid" result="pass"/><test-case name="34202reC5 tokoe:valid" result="pass"/><test-case name="34203reC5.i tokoe:invalid" result="pass"/><test-case name="34204reC6 tokoe:valid" result="pass"/><test-case name="34205reC6.i tokoe:invalid" result="pass"/><test-case name="34206reC7 tokoe:valid" result="pass"/><test-case name="34207reC7.i tokoe:invalid" result="pass"/><test-case name="34208reC8 tokoe:valid" result="pass"/><test-case name="34209reC8.i tokoe:invalid" result="pass"/><test-case name="34210reC9 tokoe:valid" result="pass"/><test-case name="34211reC9.v tokoe:valid" result="pass"/><test-case name="34212reC10 tokoe:valid" result="pass"/><test-case name="34213reC10.v tokoe:valid" result="pass"/><test-case name="34214reC11 tokoe:valid" result="pass"/><test-case name="34215reC11.v tokoe:valid" result="pass"/><test-case name="34216reC12 tokoe:valid" result="pass"/><test-case name="34217reC12.i tokoe:invalid" result="pass"/><test-case name="34218reC13 tokoe:valid" result="pass"/><test-case name="34219reC13.i tokoe:invalid" result="pass"/><test-case name="34220reC14 tokoe:valid" result="pass"/><test-case name="34221reC14.i tokoe:invalid" result="pass"/><test-case name="34222reC15 tokoe:valid" result="pass"/><test-case name="34223reC15.i tokoe:invalid" result="pass"/><test-case name="34224reC16 tokoe:valid" result="pass"/><test-case name="34225reC16.v tokoe:valid" result="pass"/><test-case name="34226reC17 tokoe:valid" result="pass"/><test-case name="34227reC17.v tokoe:valid" result="pass"/><test-case name="34228reC18 tokoe:valid" result="pass"/><test-case name="34229reC18.v tokoe:valid" result="pass"/><test-case name="34230reC19 tokoe:valid" result="pass"/><test-case name="34231reC19.i tokoe:invalid" result="pass"/><test-case name="34232reC20 tokoe:valid" result="pass"/><test-case name="34233reC20.i tokoe:invalid" result="pass"/><test-case name="34234reC21 tokoe:valid" result="pass"/><test-case name="34235reC21.i tokoe:invalid" result="pass"/><test-case name="34236reC22 tokoe:valid" result="pass"/><test-case name="34237reC22.v tokoe:valid" result="pass"/><test-case name="34238reC23 tokoe:valid" result="pass"/><test-case name="34239reC23.i tokoe:invalid" result="pass"/><test-case name="34240reC24 tokoe:valid" result="pass"/><test-case name="34241reC24.i tokoe:invalid" result="pass"/><test-case name="34242reC25 tokoe:valid" result="pass"/><test-case name="34243reC25.i tokoe:invalid" result="pass"/><test-case name="34244reC26 tokoe:valid" result="pass"/><test-case name="34245reC26.i tokoe:invalid" result="pass"/><test-case name="34246reC27 tokoe:valid" result="pass"/><test-case name="34247reC27.i tokoe:invalid" result="pass"/><test-case name="34248reC28 tokoe:valid" result="pass"/><test-case name="34249reC28.v tokoe:valid" result="pass"/><test-case name="34250reC29 tokoe:valid" result="pass"/><test-case name="34251reC29.i tokoe:invalid" result="pass"/><test-case name="34252reC30 tokoe:valid" result="pass"/><test-case name="34253reC30.i tokoe:invalid" result="pass"/><test-case name="34254reC31 tokoe:valid" result="pass"/><test-case name="34255reC31.i tokoe:invalid" result="pass"/><test-case name="34256reC32 tokoe:valid" result="pass"/><test-case name="34257reC32.v tokoe:valid" result="pass"/><test-case name="34258reC33 tokoe:valid" result="pass"/><test-case name="34259reC33.v tokoe:valid" result="pass"/><test-case name="34260reC34 tokoe:valid" result="pass"/><test-case name="34261reC34.v tokoe:valid" result="pass"/><test-case name="34262reC35 tokoe:valid" result="pass"/><test-case name="34263reC35.v tokoe:valid" result="pass"/><test-case name="34264reC36 tokoe:valid" result="pass"/><test-case name="34265reC36.i tokoe:invalid" result="pass"/><test-case name="34266reC37 tokoe:valid" result="pass"/><test-case name="34267reC37.i tokoe:invalid" result="pass"/><test-case name="34268reC38 tokoe:valid" result="pass"/><test-case name="34269reC38.i tokoe:invalid" result="pass"/><test-case name="34270reC39 tokoe:valid" result="pass"/><test-case name="34271reC39.i tokoe:invalid" result="pass"/><test-case name="34272reC40 tokoe:valid" result="pass"/><test-case name="34273reC40.i tokoe:invalid" result="pass"/><test-case name="34274reC41 tokoe:valid" result="pass"/><test-case name="34275reC41.v tokoe:valid" result="pass"/><test-case name="34276reC42 tokoe:valid" result="pass"/><test-case name="34277reC42.v tokoe:valid" result="pass"/><test-case name="34278reC43 tokoe:valid" result="pass"/><test-case name="34279reC43.v tokoe:valid" result="pass"/><test-case name="34280reC44 tokoe:valid" result="pass"/><test-case name="34281reC44.i tokoe:invalid" result="pass"/><test-case name="34282reC45 tokoe:valid" result="pass"/><test-case name="34283reC45.i tokoe:invalid" result="pass"/><test-case name="34284reC46 tokoe:valid" result="pass"/><test-case name="34285reC46.i tokoe:invalid" result="pass"/><test-case name="34286reC47 tokoe:valid" result="pass"/><test-case name="34287reC47.i tokoe:invalid" result="pass"/><test-case name="34288reC48 tokoe:valid" result="pass"/><test-case name="34289reC48.i tokoe:invalid" result="pass"/><test-case name="34290reC49 tokoe:valid" result="pass"/><test-case name="34291reC49.v tokoe:valid" result="pass"/><test-case name="34292reC50 tokoe:valid" result="pass"/><test-case name="34293reC50.v tokoe:valid" result="pass"/><test-case name="34294reC51 tokoe:valid" result="pass"/><test-case name="34295reC51.v tokoe:valid" result="pass"/><test-case name="34296reC52 tokoe:valid" result="pass"/><test-case name="34297reC52.i tokoe:invalid" result="pass"/><test-case name="34298reC53 tokoe:valid" result="pass"/><test-case name="34299reC53.i tokoe:invalid" result="pass"/><test-case name="34300reC54 tokoe:valid" result="pass"/><test-case name="34301reC54.i tokoe:invalid" result="pass"/><test-case name="34302reC55 tokoe:valid" result="pass"/><test-case name="34303reC55.i tokoe:invalid" result="pass"/><test-case name="34304reC56 tokoe:valid" result="pass"/><test-case name="34305reC56.v tokoe:valid" result="pass"/><test-case name="34306reC57 tokoe:valid" result="pass"/><test-case name="34307reC57.v tokoe:valid" result="pass"/><test-case name="34308reC58 tokoe:valid" result="pass"/><test-case name="34309reC58.v tokoe:valid" result="pass"/><test-case name="34310reC59 tokoe:valid" result="pass"/><test-case name="34311reC59.i tokoe:invalid" result="pass"/><test-case name="34312reC60 tokoe:valid" result="pass"/><test-case name="34313reC60.i tokoe:invalid" result="pass"/><test-case name="34314reC61 tokoe:valid" result="pass"/><test-case name="34315reC61.i tokoe:invalid" result="pass"/><test-case name="34316reC62 tokoe:valid" result="pass"/><test-case name="34317reC62.i tokoe:invalid" result="pass"/><test-case name="34318reC63 tokoe:valid" result="pass"/><test-case name="34319reC63.i tokoe:invalid" result="pass"/><test-case name="34320reC64 tokoe:valid" result="pass"/><test-case name="34321reC64.i tokoe:invalid" result="pass"/><test-case name="34322reC69 tokoe:invalid" result="pass"/><test-case name="34323reC70 tokoe:valid" result="pass"/><test-case name="34324reC70.v tokoe:valid" result="pass"/><test-case name="34325reC71 tokoe:valid" result="pass"/><test-case name="34326reC71.i tokoe:invalid" result="pass"/><test-case name="34327reC72 tokoe:valid" result="pass"/><test-case name="34328reC72.i tokoe:invalid" result="pass"/><test-case name="34329reC73 tokoe:valid" result="pass"/><test-case name="34330reC73.v tokoe:valid" result="pass"/><test-case name="34331reC74 tokoe:valid" result="pass"/><test-case name="34332reC74.v tokoe:valid" result="pass"/><test-case name="34333reC75 tokoe:valid" result="pass"/><test-case name="34334reC75.v tokoe:valid" result="pass"/><test-case name="34335reC76 tokoe:valid" result="pass"/><test-case name="34336reC76.v tokoe:valid" result="pass"/><test-case name="34337reC77 tokoe:valid" result="pass"/><test-case name="34338reC77.v tokoe:valid" result="pass"/><test-case name="34339reC78 tokoe:valid" result="pass"/><test-case name="34340reC78.v tokoe:valid" result="pass"/><test-case name="34341reC79 tokoe:valid" result="pass"/><test-case name="34342reC79.i tokoe:invalid" result="pass"/><test-case name="34343reC80 tokoe:valid" result="pass"/><test-case name="34344reC80.i tokoe:invalid" result="pass"/><test-case name="34345reC81 tokoe:valid" result="pass"/><test-case name="34346reC81.i tokoe:invalid" result="pass"/><test-case name="34347reC82 tokoe:valid" result="pass"/><test-case name="34348reC82.i tokoe:invalid" result="pass"/><test-case name="34349reC83 tokoe:valid" result="pass"/><test-case name="34350reC83.i tokoe:invalid" result="pass"/><test-case name="34351reC84 tokoe:valid" result="pass"/><test-case name="34352reC84.i tokoe:invalid" result="pass"/><test-case name="34353reD1 tokoe:valid" result="pass"/><test-case name="34354reD1.v tokoe:valid" result="pass"/><test-case name="34355reD2 tokoe:valid" result="pass"/><test-case name="34356reD2.v tokoe:valid" result="pass"/><test-case name="34357reD3 tokoe:valid" result="pass"/><test-case name="34358reD3.v tokoe:valid" result="pass"/><test-case name="34359reD4 tokoe:valid" result="pass"/><test-case name="34360reD4.v tokoe:valid" result="pass"/><test-case name="34361reD5 tokoe:valid" result="pass"/><test-case name="34362reD5.v tokoe:valid" result="pass"/><test-case name="34363reD6 tokoe:valid" result="pass"/><test-case name="34364reD6.v tokoe:valid" result="pass"/><test-case name="34365reD7 tokoe:valid" result="pass"/><test-case name="34366reD7.i tokoe:invalid" result="pass"/><test-case name="34367reD8 tokoe:valid" result="pass"/><test-case name="34368reD8.i tokoe:invalid" result="pass"/><test-case name="34369reD9 tokoe:invalid" result="pass"/><test-case name="34370reD10 tokoe:invalid" result="pass"/><test-case name="34371reD11 tokoe:invalid" result="pass"/><test-case name="34372reD12 tokoe:invalid" result="pass"/><test-case name="34373reE2 tokoe:invalid" result="pass"/><test-case name="34374reE3 tokoe:invalid" result="pass"/><test-case name="34375reE4 tokoe:invalid" result="pass"/><test-case name="34376reE5 tokoe:invalid" result="pass"/><test-case name="34377reE8 tokoe:invalid" result="pass"/><test-case name="34378reE9 tokoe:invalid" result="pass"/><test-case name="34379reE10 tokoe:valid" result="pass"/><test-case name="34380reE10.v tokoe:valid" result="pass"/><test-case name="34381reE11 tokoe:invalid" result="pass"/><test-case name="34382reE13 tokoe:valid" result="pass"/><test-case name="34383reE13.v tokoe:valid" result="pass"/><test-case name="34384reE14 tokoe:valid" result="pass"/><test-case name="34385reE14.v tokoe:valid" result="pass"/><test-case name="34386reF4 tokoe:valid" result="pass"/><test-case name="34387reF4.v tokoe:valid" result="pass"/><test-case name="34388reF6 tokoe:valid" result="pass"/><test-case name="34389reF6.i tokoe:invalid" result="pass"/><test-case name="34390reF7 tokoe:valid" result="pass"/><test-case name="34391reF7.v tokoe:valid" result="pass"/><test-case name="34392reF8 tokoe:valid" result="pass"/><test-case name="34393reF8.i tokoe:invalid" result="pass"/><test-case name="34394reF9 tokoe:valid" result="pass"/><test-case name="34395reF9.v tokoe:valid" result="pass"/><test-case name="34396reF10 tokoe:valid" result="pass"/><test-case name="34397reF10.v tokoe:valid" result="pass"/><test-case name="34398reF11 tokoe:valid" result="pass"/><test-case name="34399reF11.v tokoe:valid" result="pass"/><test-case name="34400reF12 tokoe:valid" result="pass"/><test-case name="34401reF12.v tokoe:valid" result="pass"/><test-case name="34402reF13 tokoe:valid" result="pass"/><test-case name="34403reF13.i tokoe:invalid" result="pass"/><test-case name="34404reF14 tokoe:valid" result="pass"/><test-case name="34405reF14.i tokoe:invalid" result="pass"/><test-case name="34406reF15 tokoe:valid" result="pass"/><test-case name="34407reF15.i tokoe:invalid" result="pass"/><test-case name="34408reF17 tokoe:valid" result="fail"/><test-case name="34409reF17.i tokoe:invalid" result="pass"/><test-case name="34410reF18 tokoe:valid" result="fail"/><test-case name="34411reF18.i tokoe:invalid" result="pass"/><test-case name="34412reF20 tokoe:valid" result="pass"/><test-case name="34413reF20.i tokoe:invalid" result="pass"/><test-case name="34414reF21 tokoe:valid" result="pass"/><test-case name="34415reF21.i tokoe:invalid" result="pass"/><test-case name="34416reF22 tokoe:valid" result="pass"/><test-case name="34417reF22.i tokoe:invalid" result="pass"/><test-case name="34418reF23 tokoe:valid" result="pass"/><test-case name="34419reF23.i tokoe:invalid" result="pass"/><test-case name="34420reF32 tokoe:valid" result="pass"/><test-case name="34421reF32.v tokoe:valid" result="pass"/><test-case name="34422reF34 tokoe:valid" result="fail"/><test-case name="34423reF34.i tokoe:invalid" result="pass"/><test-case name="34424reF36 tokoe:valid" result="fail"/><test-case name="34425reF36.i tokoe:invalid" result="pass"/><test-case name="34426reF39 tokoe:valid" result="fail"/><test-case name="34427reF39.i tokoe:invalid" result="pass"/><test-case name="34428reF40 tokoe:valid" result="pass"/><test-case name="34429reF40.v tokoe:valid" result="pass"/><test-case name="34430reF41 tokoe:valid" result="pass"/><test-case name="34431reF41.i tokoe:invalid" result="pass"/><test-case name="34432reF42 tokoe:valid" result="pass"/><test-case name="34433reF42.i tokoe:invalid" result="pass"/><test-case name="34434reF43 tokoe:valid" result="pass"/><test-case name="34435reF43.v tokoe:valid" result="pass"/><test-case name="34436reF44 tokoe:valid" result="pass"/><test-case name="34437reF44.i tokoe:invalid" result="pass"/><test-case name="34438reF45 tokoe:valid" result="pass"/><test-case name="34439reF45.v tokoe:valid" result="pass"/><test-case name="34440reF46 tokoe:valid" result="pass"/><test-case name="34441reF46.v tokoe:valid" result="pass"/><test-case name="34442reF47 tokoe:valid" result="pass"/><test-case name="34443reF47.i tokoe:invalid" result="pass"/><test-case name="34444reF48 tokoe:valid" result="pass"/><test-case name="34445reF48.i tokoe:invalid" result="pass"/><test-case name="34446reF49 tokoe:valid" result="pass"/><test-case name="34447reF49.i tokoe:invalid" result="pass"/><test-case name="34448reF50 tokoe:valid" result="pass"/><test-case name="34449reF50.i tokoe:invalid" result="pass"/><test-case name="34450reF51 tokoe:valid" result="pass"/><test-case name="34451reF51.i tokoe:invalid" result="pass"/><test-case name="34452reF52 tokoe:valid" result="pass"/><test-case name="34453reF52.i tokoe:invalid" result="pass"/><test-case name="34454reF53 tokoe:valid" result="pass"/><test-case name="34455reF53.i tokoe:invalid" result="pass"/><test-case name="34456reF54 tokoe:valid" result="pass"/><test-case name="34457reF54.v tokoe:valid" result="pass"/><test-case name="34458reF55 tokoe:valid" result="pass"/><test-case name="34459reF55.v tokoe:valid" result="pass"/><test-case name="34460reF56 tokoe:valid" result="fail"/><test-case name="34461reF57 tokoe:invalid" result="fail"/><test-case name="34462reG2 tokoe:valid" result="pass"/><test-case name="34463reG2.i tokoe:invalid" result="pass"/><test-case name="34464reG3 tokoe:valid" result="pass"/><test-case name="34465reG3.i tokoe:invalid" result="pass"/><test-case name="34466reG4 tokoe:valid" result="pass"/><test-case name="34467reG4.v tokoe:valid" result="pass"/><test-case name="34468reG6 tokoe:valid" result="pass"/><test-case name="34469reG6.v tokoe:valid" result="pass"/><test-case name="34470reG7 tokoe:valid" result="pass"/><test-case name="34471reG7.i tokoe:invalid" result="pass"/><test-case name="34472reG8 tokoe:valid" result="pass"/><test-case name="34473reG8.v tokoe:valid" result="pass"/><test-case name="34474reG9 tokoe:valid" result="pass"/><test-case name="34475reG9.i tokoe:invalid" result="pass"/><test-case name="34476reG10 tokoe:valid" result="pass"/><test-case name="34477reG10.i tokoe:invalid" result="pass"/><test-case name="34478reG11 tokoe:valid" result="pass"/><test-case name="34479reG11.v tokoe:valid" result="pass"/><test-case name="34480reG13 tokoe:valid" result="pass"/><test-case name="34481reG13.v tokoe:valid" result="pass"/><test-case name="34482reG14 tokoe:valid" result="pass"/><test-case name="34483reG14.v tokoe:valid" result="pass"/><test-case name="34484reG16 tokoe:valid" result="pass"/><test-case name="34485reG16.i tokoe:invalid" result="pass"/><test-case name="34486reG17 tokoe:valid" result="pass"/><test-case name="34487reG17.i tokoe:invalid" result="pass"/><test-case name="34488reG18 tokoe:valid" result="pass"/><test-case name="34489reG18.v tokoe:valid" result="fail"/><test-case name="34490reG19 tokoe:valid" result="pass"/><test-case name="34491reG19.v tokoe:valid" result="fail"/><test-case name="34492reG20 tokoe:valid" result="pass"/><test-case name="34493reG20.v tokoe:valid" result="fail"/><test-case name="34494reG21 tokoe:valid" result="pass"/><test-case name="34495reG21.i tokoe:invalid" result="pass"/><test-case name="34496reG22 tokoe:valid" result="pass"/><test-case name="34497reG22.v tokoe:valid" result="pass"/><test-case name="34498reG23 tokoe:valid" result="pass"/><test-case name="34499reG23.i tokoe:invalid" result="pass"/><test-case name="34500reG24 tokoe:valid" result="pass"/><test-case name="34501reG24.i tokoe:invalid" result="pass"/><test-case name="34502reG25 tokoe:valid" result="pass"/><test-case name="34503reG25.i tokoe:invalid" result="pass"/><test-case name="34504reG26 tokoe:valid" result="pass"/><test-case name="34505reG26.v tokoe:valid" result="pass"/><test-case name="34506reG27 tokoe:valid" result="pass"/><test-case name="34507reG27.v tokoe:valid" result="pass"/><test-case name="34508reG28 tokoe:valid" result="pass"/><test-case name="34509reG28.v tokoe:valid" result="pass"/><test-case name="34510reG29 tokoe:valid" result="pass"/><test-case name="34511reG29.v tokoe:valid" result="pass"/><test-case name="34512reG30 tokoe:valid" result="pass"/><test-case name="34513reG30.v tokoe:valid" result="pass"/><test-case name="34514reG31 tokoe:valid" result="pass"/><test-case name="34515reG31.v tokoe:valid" result="pass"/><test-case name="34516reG32 tokoe:valid" result="pass"/><test-case name="34517reG32.v tokoe:valid" result="pass"/><test-case name="34518reG33 tokoe:valid" result="pass"/><test-case name="34519reG33.v tokoe:valid" result="pass"/><test-case name="34520reG34 tokoe:invalid" result="fail"/><test-case name="34521reG35 tokoe:invalid" result="fail"/><test-case name="34522reG36 tokoe:valid" result="pass"/><test-case name="34523reG36.v tokoe:valid" result="pass"/><test-case name="34524reG37 tokoe:invalid" result="fail"/><test-case name="34525reG38 tokoe:valid" result="pass"/><test-case name="34526reG38.v tokoe:valid" result="pass"/><test-case name="34527reG39 tokoe:valid" result="pass"/><test-case name="34528reG39.i tokoe:invalid" result="pass"/><test-case name="34529reG40 tokoe:valid" result="pass"/><test-case name="34530reG40.i tokoe:invalid" result="pass"/><test-case name="34531reG41 tokoe:valid" result="pass"/><test-case name="34532reG42 tokoe:valid" result="pass"/><test-case name="34533reG43 tokoe:valid" result="pass"/><test-case name="34534reG43.v tokoe:valid" result="pass"/><test-case name="34535reG44 tokoe:valid" result="pass"/><test-case name="34536reG44.v tokoe:valid" result="pass"/><test-case name="34537reG45 tokoe:valid" result="pass"/><test-case name="34538reG45.i tokoe:invalid" result="pass"/><test-case name="34539reG46 tokoe:invalid" result="fail"/><test-case name="34540reG47 tokoe:valid" result="pass"/><test-case name="34541reG47.v tokoe:valid" result="pass"/><test-case name="34542reG48 tokoe:valid" result="pass"/><test-case name="34543reG48.i tokoe:invalid" result="pass"/><test-case name="34544reG49 tokoe:valid" result="pass"/><test-case name="34545reG49.v tokoe:valid" result="pass"/><test-case name="34546reG51 tokoe:valid" result="pass"/><test-case name="34547reG51.i tokoe:invalid" result="pass"/><test-case name="34548reH1 tokoe:invalid" result="pass"/><test-case name="34549reH4 tokoe:valid" result="pass"/><test-case name="34550reH4.v tokoe:valid" result="pass"/><test-case name="34551reH5 tokoe:valid" result="pass"/><test-case name="34552reH5.v tokoe:valid" result="pass"/><test-case name="34553reH6 tokoe:valid" result="pass"/><test-case name="34554reH6.v tokoe:valid" result="pass"/><test-case name="34555reH7 tokoe:valid" result="pass"/><test-case name="34556reH7.v tokoe:valid" result="pass"/><test-case name="34557reH8 tokoe:valid" result="pass"/><test-case name="34558reH8.v tokoe:valid" result="pass"/><test-case name="34559reH9 tokoe:valid" result="pass"/><test-case name="34560reH9.v tokoe:valid" result="pass"/><test-case name="34561reH10 tokoe:valid" result="pass"/><test-case name="34562reH10.v tokoe:valid" result="pass"/><test-case name="34563reH11 tokoe:valid" result="pass"/><test-case name="34564reH11.v tokoe:valid" result="pass"/><test-case name="34565reH12 tokoe:valid" result="pass"/><test-case name="34566reH12.v tokoe:valid" result="pass"/><test-case name="34567reH13 tokoe:valid" result="pass"/><test-case name="34568reH13.i tokoe:invalid" result="pass"/><test-case name="34569reH14 tokoe:valid" result="pass"/><test-case name="34570reH14.i tokoe:invalid" result="pass"/><test-case name="34571reH15 tokoe:valid" result="pass"/><test-case name="34572reH15.i tokoe:invalid" result="pass"/><test-case name="34573reH16 tokoe:valid" result="pass"/><test-case name="34574reH16.v tokoe:valid" result="pass"/><test-case name="34575reH17 tokoe:valid" result="pass"/><test-case name="34576reH17.v tokoe:valid" result="pass"/><test-case name="34577reH18 tokoe:valid" result="pass"/><test-case name="34578reH18.v tokoe:valid" result="pass"/><test-case name="34579reH19 tokoe:valid" result="pass"/><test-case name="34580reH19.v tokoe:valid" result="pass"/><test-case name="34581reH20 tokoe:valid" result="pass"/><test-case name="34582reH20.i tokoe:invalid" result="pass"/><test-case name="34583reH21 tokoe:valid" result="pass"/><test-case name="34584reH21.i tokoe:invalid" result="pass"/><test-case name="34585reI1 tokoe:valid" result="pass"/><test-case name="34586reI1.v tokoe:valid" result="pass"/><test-case name="34587reI8 tokoe:valid" result="pass"/><test-case name="34588reI8.v tokoe:valid" result="pass"/><test-case name="34589reI9 tokoe:valid" result="pass"/><test-case name="34590reI9.v tokoe:valid" result="pass"/><test-case name="34591reI10 tokoe:valid" result="pass"/><test-case name="34592reI10.v tokoe:valid" result="pass"/><test-case name="34593reI11 tokoe:valid" result="pass"/><test-case name="34594reI11.i tokoe:invalid" result="pass"/><test-case name="34595reI12 tokoe:valid" result="pass"/><test-case name="34596reI12.v tokoe:valid" result="pass"/><test-case name="34597reI13 tokoe:valid" result="pass"/><test-case name="34598reI13.v tokoe:valid" result="pass"/><test-case name="34599reI14 tokoe:valid" result="pass"/><test-case name="34600reI14.v tokoe:valid" result="pass"/><test-case name="34601reI15 tokoe:valid" result="pass"/><test-case name="34602reI15.v tokoe:valid" result="pass"/><test-case name="34603reI16 tokoe:valid" result="pass"/><test-case name="34604reI16.v tokoe:valid" result="pass"/><test-case name="34605reI17 tokoe:valid" result="pass"/><test-case name="34606reI17.v tokoe:valid" result="pass"/><test-case name="34607reI18 tokoe:valid" result="pass"/><test-case name="34608reI18.i tokoe:invalid" result="pass"/><test-case name="34609reI19 tokoe:valid" result="pass"/><test-case name="34610reI19.i tokoe:invalid" result="pass"/><test-case name="34611reI20 tokoe:valid" result="pass"/><test-case name="34612reI20.i tokoe:invalid" result="pass"/><test-case name="34613reI21 tokoe:valid" result="pass"/><test-case name="34614reI21.v tokoe:valid" result="pass"/><test-case name="34615reI22 tokoe:valid" result="pass"/><test-case name="34616reI22.i tokoe:invalid" result="pass"/><test-case name="34617reI23 tokoe:valid" result="pass"/><test-case name="34618reI23.i tokoe:invalid" result="pass"/><test-case name="34619reI24 tokoe:valid" result="pass"/><test-case name="34620reI24.i tokoe:invalid" result="pass"/><test-case name="34621reI25 tokoe:valid" result="pass"/><test-case name="34622reI25.v tokoe:valid" result="pass"/><test-case name="34623reI26 tokoe:valid" result="pass"/><test-case name="34624reI26.i tokoe:invalid" result="pass"/><test-case name="34625reI27 tokoe:valid" result="pass"/><test-case name="34626reI27.i tokoe:invalid" result="pass"/><test-case name="34627reI28 tokoe:valid" result="pass"/><test-case name="34628reI28.i tokoe:invalid" result="pass"/><test-case name="34629reI29 tokoe:valid" result="pass"/><test-case name="34630reI29.v tokoe:valid" result="pass"/><test-case name="34631reI31 tokoe:valid" result="pass"/><test-case name="34632reI31.v tokoe:valid" result="pass"/><test-case name="34633reI32 tokoe:valid" result="pass"/><test-case name="34634reI32.v tokoe:valid" result="pass"/><test-case name="34635reI33 tokoe:valid" result="pass"/><test-case name="34636reI33.v tokoe:valid" result="pass"/><test-case name="34637reI34 tokoe:valid" result="pass"/><test-case name="34638reI34.v tokoe:valid" result="pass"/><test-case name="34639reI35 tokoe:valid" result="pass"/><test-case name="34640reI35.v tokoe:valid" result="pass"/><test-case name="34641reI36 tokoe:valid" result="pass"/><test-case name="34642reI36.v tokoe:valid" result="pass"/><test-case name="34643reI37 tokoe:valid" result="pass"/><test-case name="34644reI37.v tokoe:valid" result="pass"/><test-case name="34645reI38 tokoe:valid" result="pass"/><test-case name="34646reI38.v tokoe:valid" result="pass"/><test-case name="34647reI39 tokoe:valid" result="pass"/><test-case name="34648reI39.v tokoe:valid" result="pass"/><test-case name="34649reI40 tokoe:valid" result="pass"/><test-case name="34650reI40.v tokoe:valid" result="pass"/><test-case name="34651reI41 tokoe:valid" result="pass"/><test-case name="34652reI41.v tokoe:valid" result="pass"/><test-case name="34653reI42 tokoe:valid" result="pass"/><test-case name="34654reI42.v tokoe:valid" result="pass"/><test-case name="34655reI43 tokoe:valid" result="pass"/><test-case name="34656reI43.v tokoe:valid" result="pass"/><test-case name="34657reI44 tokoe:valid" result="pass"/><test-case name="34658reI44.v tokoe:valid" result="pass"/><test-case name="34659reI45 tokoe:valid" result="pass"/><test-case name="34660reI45.v tokoe:valid" result="pass"/><test-case name="34661reI47 tokoe:valid" result="pass"/><test-case name="34662reI47.i tokoe:invalid" result="pass"/><test-case name="34663reI48 tokoe:valid" result="pass"/><test-case name="34664reI48.i tokoe:invalid" result="pass"/><test-case name="34665reI49 tokoe:valid" result="pass"/><test-case name="34666reI49.i tokoe:invalid" result="pass"/><test-case name="34667reI51 tokoe:valid" result="pass"/><test-case name="34668reI51.i tokoe:invalid" result="pass"/><test-case name="34669reI52 tokoe:valid" result="pass"/><test-case name="34670reI52.i tokoe:invalid" result="pass"/><test-case name="34671reI53 tokoe:valid" result="pass"/><test-case name="34672reI53.i tokoe:invalid" result="pass"/><test-case name="34673reI54 tokoe:valid" result="pass"/><test-case name="34674reI54.i tokoe:invalid" result="pass"/><test-case name="34675reI55 tokoe:valid" result="pass"/><test-case name="34676reI55.v tokoe:valid" result="pass"/><test-case name="34677reI56 tokoe:valid" result="pass"/><test-case name="34678reI56.i tokoe:invalid" result="pass"/><test-case name="34679reI57 tokoe:valid" result="pass"/><test-case name="34680reI57.i tokoe:invalid" result="pass"/><test-case name="34681reI58 tokoe:valid" result="pass"/><test-case name="34682reI58.i tokoe:invalid" result="pass"/><test-case name="34683reI59 tokoe:valid" result="pass"/><test-case name="34684reI59.i tokoe:invalid" result="pass"/><test-case name="34685reI61 tokoe:valid" result="pass"/><test-case name="34686reI61.i tokoe:invalid" result="pass"/><test-case name="34687reI62 tokoe:valid" result="pass"/><test-case name="34688reI62.i tokoe:invalid" result="pass"/><test-case name="34689reI63 tokoe:valid" result="pass"/><test-case name="34690reI63.i tokoe:invalid" result="pass"/><test-case name="34691reI64 tokoe:valid" result="pass"/><test-case name="34692reI64.i tokoe:invalid" result="pass"/><test-case name="34693reI65 tokoe:valid" result="pass"/><test-case name="34694reI65.v tokoe:valid" result="pass"/><test-case name="34695reI67 tokoe:valid" result="pass"/><test-case name="34696reI67.v tokoe:valid" result="pass"/><test-case name="34697reI69 tokoe:valid" result="pass"/><test-case name="34698reI69.v tokoe:valid" result="pass"/><test-case name="34699reI71 tokoe:valid" result="pass"/><test-case name="34700reI71.v tokoe:valid" result="pass"/><test-case name="34701reI72 tokoe:valid" result="pass"/><test-case name="34702reI72.v tokoe:valid" result="pass"/><test-case name="34703reI73 tokoe:valid" result="pass"/><test-case name="34704reI73.v tokoe:valid" result="pass"/><test-case name="34705reI74 tokoe:valid" result="pass"/><test-case name="34706reI74.v tokoe:valid" result="pass"/><test-case name="34707reI75 tokoe:valid" result="pass"/><test-case name="34708reI75.i tokoe:invalid" result="pass"/><test-case name="34709reI76 tokoe:valid" result="pass"/><test-case name="34710reI76.i tokoe:invalid" result="pass"/><test-case name="34711reI77 tokoe:valid" result="pass"/><test-case name="34712reI77.v tokoe:valid" result="pass"/><test-case name="34713reI78 tokoe:valid" result="pass"/><test-case name="34714reI78.v tokoe:valid" result="pass"/><test-case name="34715reI79 tokoe:valid" result="pass"/><test-case name="34716reI79.i tokoe:invalid" result="pass"/><test-case name="34717reI80 tokoe:valid" result="pass"/><test-case name="34718reI80.i tokoe:invalid" result="pass"/><test-case name="34719reI81 tokoe:valid" result="pass"/><test-case name="34720reI81.i tokoe:invalid" result="pass"/><test-case name="34721reI82 tokoe:valid" result="pass"/><test-case name="34722reI82.v tokoe:valid" result="pass"/><test-case name="34723reI83 tokoe:valid" result="pass"/><test-case name="34724reI83.v tokoe:valid" result="pass"/><test-case name="34725reJ4 tokoe:valid" result="pass"/><test-case name="34726reJ4.v tokoe:valid" result="pass"/><test-case name="34727reJ5 tokoe:valid" result="pass"/><test-case name="34728reJ5.i tokoe:invalid" result="pass"/><test-case name="34729reJ8 tokoe:valid" result="pass"/><test-case name="34730reJ8.i tokoe:invalid" result="pass"/><test-case name="34731reJ10 tokoe:valid" result="pass"/><test-case name="34732reJ10.i tokoe:invalid" result="pass"/><test-case name="34733reJ12 tokoe:valid" result="pass"/><test-case name="34734reJ12.i tokoe:invalid" result="pass"/><test-case name="34735reJ14 tokoe:valid" result="pass"/><test-case name="34736reJ14.i tokoe:invalid" result="pass"/><test-case name="34737reJ15 tokoe:valid" result="pass"/><test-case name="34738reJ15.v tokoe:valid" result="pass"/><test-case name="34739reJ16 tokoe:valid" result="pass"/><test-case name="34740reJ16.i tokoe:invalid" result="pass"/><test-case name="34741reJ17 tokoe:valid" result="pass"/><test-case name="34742reJ17.v tokoe:valid" result="pass"/><test-case name="34743reJ18 tokoe:valid" result="pass"/><test-case name="34744reJ18.i tokoe:invalid" result="pass"/><test-case name="34745reJ20 tokoe:valid" result="pass"/><test-case name="34746reJ20.i tokoe:invalid" result="pass"/><test-case name="34747reJ22 tokoe:valid" result="pass"/><test-case name="34748reJ22.i tokoe:invalid" result="pass"/><test-case name="34749reJ24 tokoe:valid" result="pass"/><test-case name="34750reJ24.i tokoe:invalid" result="pass"/><test-case name="34751reJ26 tokoe:valid" result="pass"/><test-case name="34752reJ26.i tokoe:invalid" result="pass"/><test-case name="34753reJ27 tokoe:valid" result="pass"/><test-case name="34754reJ27.v tokoe:valid" result="pass"/><test-case name="34755reJ28 tokoe:valid" result="pass"/><test-case name="34756reJ28.i tokoe:invalid" result="pass"/><test-case name="34757reJ30 tokoe:valid" result="pass"/><test-case name="34758reJ30.i tokoe:invalid" result="pass"/><test-case name="34759reJ32 tokoe:valid" result="pass"/><test-case name="34760reJ32.i tokoe:invalid" result="pass"/><test-case name="34761reJ34 tokoe:valid" result="pass"/><test-case name="34762reJ34.i tokoe:invalid" result="pass"/><test-case name="34763reJ36 tokoe:valid" result="pass"/><test-case name="34764reJ36.i tokoe:invalid" result="pass"/><test-case name="34765reJ37 tokoe:valid" result="pass"/><test-case name="34766reJ37.v tokoe:valid" result="fail"/><test-case name="34767reJ38 tokoe:valid" result="pass"/><test-case name="34768reJ38.i tokoe:invalid" result="pass"/><test-case name="34769reJ40 tokoe:valid" result="pass"/><test-case name="34770reJ40.i tokoe:invalid" result="pass"/><test-case name="34771reJ41 tokoe:valid" result="pass"/><test-case name="34772reJ41.v tokoe:valid" result="pass"/><test-case name="34773reJ42 tokoe:valid" result="pass"/><test-case name="34774reJ42.i tokoe:invalid" result="pass"/><test-case name="34775reJ43 tokoe:valid" result="pass"/><test-case name="34776reJ43.v tokoe:valid" result="pass"/><test-case name="34777reJ44 tokoe:valid" result="pass"/><test-case name="34778reJ44.i tokoe:invalid" result="pass"/><test-case name="34779reJ45 tokoe:valid" result="pass"/><test-case name="34780reJ45.v tokoe:valid" result="pass"/><test-case name="34781reJ46 tokoe:valid" result="pass"/><test-case name="34782reJ46.i tokoe:invalid" result="pass"/><test-case name="34783reJ47 tokoe:valid" result="pass"/><test-case name="34784reJ47.v tokoe:valid" result="pass"/><test-case name="34785reJ48 tokoe:valid" result="pass"/><test-case name="34786reJ48.i tokoe:invalid" result="pass"/><test-case name="34787reJ49 tokoe:valid" result="pass"/><test-case name="34788reJ49.v tokoe:valid" result="pass"/><test-case name="34789reJ50 tokoe:valid" result="pass"/><test-case name="34790reJ50.i tokoe:invalid" result="pass"/><test-case name="34791reJ51 tokoe:valid" result="pass"/><test-case name="34792reJ51.v tokoe:valid" result="pass"/><test-case name="34793reJ52 tokoe:valid" result="pass"/><test-case name="34794reJ52.i tokoe:invalid" result="pass"/><test-case name="34795reJ53 tokoe:valid" result="pass"/><test-case name="34796reJ53.v tokoe:valid" result="pass"/><test-case name="34797reJ54 tokoe:valid" result="pass"/><test-case name="34798reJ54.i tokoe:invalid" result="pass"/><test-case name="34799reJ55 tokoe:valid" result="pass"/><test-case name="34800reJ55.v tokoe:valid" result="pass"/><test-case name="34801reJ56 tokoe:valid" result="pass"/><test-case name="34802reJ56.i tokoe:invalid" result="pass"/><test-case name="34803reJ57 tokoe:valid" result="pass"/><test-case name="34804reJ57.v tokoe:valid" result="pass"/><test-case name="34805reJ58 tokoe:valid" result="pass"/><test-case name="34806reJ58.i tokoe:invalid" result="pass"/><test-case name="34807reJ59 tokoe:valid" result="pass"/><test-case name="34808reJ59.v tokoe:valid" result="pass"/><test-case name="34809reJ60 tokoe:valid" result="pass"/><test-case name="34810reJ60.i tokoe:invalid" result="pass"/><test-case name="34811reJ62 tokoe:valid" result="pass"/><test-case name="34812reJ62.i tokoe:invalid" result="pass"/><test-case name="34813reJ63 tokoe:valid" result="pass"/><test-case name="34814reJ63.v tokoe:valid" result="pass"/><test-case name="34815reJ64 tokoe:valid" result="pass"/><test-case name="34816reJ64.i tokoe:invalid" result="pass"/><test-case name="34817reJ65 tokoe:valid" result="pass"/><test-case name="34818reJ65.v tokoe:valid" result="pass"/><test-case name="34819reJ66 tokoe:valid" result="pass"/><test-case name="34820reJ66.i tokoe:invalid" result="pass"/><test-case name="34821reJ67 tokoe:valid" result="pass"/><test-case name="34822reJ67.v tokoe:valid" result="pass"/><test-case name="34823reJ68 tokoe:valid" result="pass"/><test-case name="34824reJ68.i tokoe:invalid" result="pass"/><test-case name="34825reJ70 tokoe:valid" result="pass"/><test-case name="34826reJ70.i tokoe:invalid" result="pass"/><test-case name="34827reJ72 tokoe:valid" result="pass"/><test-case name="34828reJ72.i tokoe:invalid" result="pass"/><test-case name="34829reJ73 tokoe:valid" result="pass"/><test-case name="34830reJ73.v tokoe:valid" result="pass"/><test-case name="34831reJ74 tokoe:valid" result="pass"/><test-case name="34832reJ74.i tokoe:invalid" result="pass"/><test-case name="34833reJ76 tokoe:valid" result="pass"/><test-case name="34834reJ76.i tokoe:invalid" result="pass"/><test-case name="34835reJ78 tokoe:valid" result="pass"/><test-case name="34836reJ78.i tokoe:invalid" result="pass"/><test-case name="34837reJ80 tokoe:valid" result="pass"/><test-case name="34838reJ80.i tokoe:invalid" result="pass"/><test-case name="34839reK1 tokoe:valid" result="pass"/><test-case name="34840reK1.i tokoe:invalid" result="pass"/><test-case name="34841reK2 tokoe:valid" result="pass"/><test-case name="34842reK2.v tokoe:valid" result="pass"/><test-case name="34843reK3 tokoe:valid" result="pass"/><test-case name="34844reK3.v tokoe:valid" result="pass"/><test-case name="34845reK4 tokoe:valid" result="pass"/><test-case name="34846reK4.v tokoe:valid" result="pass"/><test-case name="34847reK5 tokoe:valid" result="pass"/><test-case name="34848reK5.i tokoe:invalid" result="pass"/><test-case name="34849reK6 tokoe:valid" result="pass"/><test-case name="34850reK6.i tokoe:invalid" result="pass"/><test-case name="34851reK9 tokoe:valid" result="pass"/><test-case name="34852reK9.i tokoe:invalid" result="pass"/><test-case name="34853reK10 tokoe:valid" result="pass"/><test-case name="34854reK10.v tokoe:valid" result="pass"/><test-case name="34855reK11 tokoe:valid" result="pass"/><test-case name="34856reK11.i tokoe:invalid" result="pass"/><test-case name="34857reK12 tokoe:valid" result="pass"/><test-case name="34858reK12.v tokoe:valid" result="pass"/><test-case name="34859reK13 tokoe:valid" result="pass"/><test-case name="34860reK13.i tokoe:invalid" result="pass"/><test-case name="34861reK14 tokoe:valid" result="pass"/><test-case name="34862reK14.v tokoe:valid" result="pass"/><test-case name="34863reK15 tokoe:valid" result="pass"/><test-case name="34864reK15.i tokoe:invalid" result="pass"/><test-case name="34865reK16 tokoe:valid" result="pass"/><test-case name="34866reK16.v tokoe:valid" result="pass"/><test-case name="34867reK17 tokoe:valid" result="pass"/><test-case name="34868reK17.i tokoe:invalid" result="pass"/><test-case name="34869reK18 tokoe:valid" result="pass"/><test-case name="34870reK18.v tokoe:valid" result="pass"/><test-case name="34871reK19 tokoe:valid" result="pass"/><test-case name="34872reK19.i tokoe:invalid" result="pass"/><test-case name="34873reK20 tokoe:valid" result="pass"/><test-case name="34874reK20.v tokoe:valid" result="pass"/><test-case name="34875reK21 tokoe:valid" result="pass"/><test-case name="34876reK21.i tokoe:invalid" result="pass"/><test-case name="34877reK22 tokoe:valid" result="pass"/><test-case name="34878reK22.v tokoe:valid" result="pass"/><test-case name="34879reK23 tokoe:valid" result="pass"/><test-case name="34880reK23.i tokoe:invalid" result="pass"/><test-case name="34881reK24 tokoe:valid" result="pass"/><test-case name="34882reK24.v tokoe:valid" result="pass"/><test-case name="34883reK25 tokoe:valid" result="pass"/><test-case name="34884reK25.i tokoe:invalid" result="pass"/><test-case name="34885reK26 tokoe:valid" result="pass"/><test-case name="34886reK26.v tokoe:valid" result="pass"/><test-case name="34887reK27 tokoe:valid" result="pass"/><test-case name="34888reK27.i tokoe:invalid" result="pass"/><test-case name="34889reK28 tokoe:valid" result="pass"/><test-case name="34890reK28.v tokoe:valid" result="pass"/><test-case name="34891reK29 tokoe:valid" result="pass"/><test-case name="34892reK29.i tokoe:invalid" result="pass"/><test-case name="34893reK30 tokoe:valid" result="pass"/><test-case name="34894reK30.v tokoe:valid" result="pass"/><test-case name="34895reK31 tokoe:valid" result="pass"/><test-case name="34896reK31.i tokoe:invalid" result="pass"/><test-case name="34897reK32 tokoe:valid" result="pass"/><test-case name="34898reK32.v tokoe:valid" result="pass"/><test-case name="34899reK33 tokoe:valid" result="pass"/><test-case name="34900reK33.i tokoe:invalid" result="pass"/><test-case name="34901reK34 tokoe:valid" result="pass"/><test-case name="34902reK34.v tokoe:valid" result="pass"/><test-case name="34903reK35 tokoe:valid" result="pass"/><test-case name="34904reK35.i tokoe:invalid" result="pass"/><test-case name="34905reK36 tokoe:valid" result="pass"/><test-case name="34906reK36.v tokoe:valid" result="pass"/><test-case name="34907reK37 tokoe:valid" result="pass"/><test-case name="34908reK37.i tokoe:invalid" result="pass"/><test-case name="34909reK38 tokoe:valid" result="pass"/><test-case name="34910reK38.v tokoe:valid" result="pass"/><test-case name="34911reK39 tokoe:valid" result="pass"/><test-case name="34912reK39.i tokoe:invalid" result="pass"/><test-case name="34913reK40 tokoe:valid" result="pass"/><test-case name="34914reK40.v tokoe:valid" result="pass"/><test-case name="34915reK41 tokoe:valid" result="pass"/><test-case name="34916reK41.i tokoe:invalid" result="pass"/><test-case name="34917reK42 tokoe:valid" result="pass"/><test-case name="34918reK42.v tokoe:valid" result="pass"/><test-case name="34919reK43 tokoe:valid" result="pass"/><test-case name="34920reK43.i tokoe:invalid" result="pass"/><test-case name="34921reK44 tokoe:valid" result="pass"/><test-case name="34922reK44.v tokoe:valid" result="pass"/><test-case name="34923reK45 tokoe:valid" result="pass"/><test-case name="34924reK45.i tokoe:invalid" result="pass"/><test-case name="34925reK46 tokoe:valid" result="pass"/><test-case name="34926reK46.v tokoe:valid" result="pass"/><test-case name="34927reK47 tokoe:valid" result="pass"/><test-case name="34928reK47.i tokoe:invalid" result="pass"/><test-case name="34929reK48 tokoe:valid" result="pass"/><test-case name="34930reK48.v tokoe:valid" result="pass"/><test-case name="34931reK49 tokoe:valid" result="pass"/><test-case name="34932reK49.i tokoe:invalid" result="pass"/><test-case name="34933reK50 tokoe:valid" result="pass"/><test-case name="34934reK50.v tokoe:valid" result="pass"/><test-case name="34935reK51 tokoe:valid" result="pass"/><test-case name="34936reK51.i tokoe:invalid" result="pass"/><test-case name="34937reK52 tokoe:valid" result="pass"/><test-case name="34938reK52.v tokoe:valid" result="pass"/><test-case name="34939reK53 tokoe:valid" result="pass"/><test-case name="34940reK53.i tokoe:invalid" result="pass"/><test-case name="34941reK54 tokoe:valid" result="pass"/><test-case name="34942reK54.v tokoe:valid" result="pass"/><test-case name="34943reK55 tokoe:valid" result="pass"/><test-case name="34944reK55.i tokoe:invalid" result="pass"/><test-case name="34945reK56 tokoe:valid" result="pass"/><test-case name="34946reK56.v tokoe:valid" result="pass"/><test-case name="34947reK57 tokoe:valid" result="pass"/><test-case name="34948reK57.i tokoe:invalid" result="pass"/><test-case name="34949reK58 tokoe:valid" result="pass"/><test-case name="34950reK58.v tokoe:valid" result="pass"/><test-case name="34951reK59 tokoe:valid" result="pass"/><test-case name="34952reK59.i tokoe:invalid" result="pass"/><test-case name="34953reK60 tokoe:valid" result="pass"/><test-case name="34954reK60.v tokoe:valid" result="pass"/><test-case name="34955reK61 tokoe:valid" result="pass"/><test-case name="34956reK61.i tokoe:invalid" result="pass"/><test-case name="34957reK62 tokoe:valid" result="pass"/><test-case name="34958reK62.v tokoe:valid" result="pass"/><test-case name="34959reK63 tokoe:valid" result="pass"/><test-case name="34960reK63.i tokoe:invalid" result="pass"/><test-case name="34961reK64 tokoe:valid" result="pass"/><test-case name="34962reK64.v tokoe:valid" result="pass"/><test-case name="34963reK65 tokoe:valid" result="pass"/><test-case name="34964reK65.i tokoe:invalid" result="pass"/><test-case name="34965reK66 tokoe:valid" result="pass"/><test-case name="34966reK66.v tokoe:valid" result="pass"/><test-case name="34967reK67 tokoe:valid" result="pass"/><test-case name="34968reK67.i tokoe:invalid" result="pass"/><test-case name="34969reK68 tokoe:valid" result="pass"/><test-case name="34970reK68.v tokoe:valid" result="pass"/><test-case name="34971reK69 tokoe:valid" result="pass"/><test-case name="34972reK69.i tokoe:invalid" result="pass"/><test-case name="34973reK70 tokoe:valid" result="pass"/><test-case name="34974reK70.v tokoe:valid" result="pass"/><test-case name="34975reK71 tokoe:valid" result="pass"/><test-case name="34976reK71.i tokoe:invalid" result="pass"/><test-case name="34977reK72 tokoe:valid" result="pass"/><test-case name="34978reK72.v tokoe:valid" result="pass"/><test-case name="34979reK73 tokoe:valid" result="pass"/><test-case name="34980reK73.i tokoe:invalid" result="pass"/><test-case name="34981reK74 tokoe:valid" result="pass"/><test-case name="34982reK74.v tokoe:valid" result="pass"/><test-case name="34983reK75 tokoe:valid" result="pass"/><test-case name="34984reK75.i tokoe:invalid" result="pass"/><test-case name="34985reK76 tokoe:valid" result="pass"/><test-case name="34986reK76.v tokoe:valid" result="pass"/><test-case name="34987reK77 tokoe:valid" result="pass"/><test-case name="34988reK77.i tokoe:invalid" result="pass"/><test-case name="34989reK78 tokoe:valid" result="pass"/><test-case name="34990reK78.v tokoe:valid" result="pass"/><test-case name="34991reK82 tokoe:invalid" result="pass"/><test-case name="34992reK84 tokoe:valid" result="pass"/><test-case name="34993reK84.v tokoe:valid" result="pass"/><test-case name="34994reK85 tokoe:valid" result="pass"/><test-case name="34995reK85.i tokoe:invalid" result="pass"/><test-case name="34996reK86 tokoe:invalid" result="pass"/><test-case name="34997reK87 tokoe:invalid" result="pass"/><test-case name="34998reK88 tokoe:invalid" result="pass"/><test-case name="34999reL1 tokoe:valid" result="pass"/><test-case name="35000reL1.v tokoe:valid" result="pass"/><test-case name="35001reL2 tokoe:valid" result="pass"/><test-case name="35002reL2.v tokoe:valid" result="pass"/><test-case name="35003reL3 tokoe:valid" result="pass"/><test-case name="35004reL3.v tokoe:valid" result="pass"/><test-case name="35005reL4 tokoe:valid" result="pass"/><test-case name="35006reL4.v tokoe:valid" result="pass"/><test-case name="35007reL5 tokoe:valid" result="pass"/><test-case name="35008reL5.v tokoe:valid" result="pass"/><test-case name="35009reL6 tokoe:valid" result="pass"/><test-case name="35010reL6.v tokoe:valid" result="pass"/><test-case name="35011reL10 tokoe:valid" result="pass"/><test-case name="35012reL10.v tokoe:valid" result="pass"/><test-case name="35013reL11 tokoe:valid" result="pass"/><test-case name="35014reL11.v tokoe:valid" result="pass"/><test-case name="35015reL12 tokoe:valid" result="pass"/><test-case name="35016reL12.v tokoe:valid" result="pass"/><test-case name="35017reL13 tokoe:valid" result="pass"/><test-case name="35018reL13.v tokoe:valid" result="pass"/><test-case name="35019reL14 tokoe:valid" result="pass"/><test-case name="35020reL14.v tokoe:valid" result="pass"/><test-case name="35021reL15 tokoe:valid" result="pass"/><test-case name="35022reL15.v tokoe:valid" result="pass"/><test-case name="35023reL16 tokoe:valid" result="pass"/><test-case name="35024reL16.v tokoe:valid" result="pass"/><test-case name="35025reL17 tokoe:valid" result="pass"/><test-case name="35026reL17.v tokoe:valid" result="pass"/><test-case name="35027reL18 tokoe:valid" result="pass"/><test-case name="35028reL18.v tokoe:valid" result="pass"/><test-case name="35029reL19 tokoe:valid" result="pass"/><test-case name="35030reL19.v tokoe:valid" result="pass"/><test-case name="35031reL20 tokoe:valid" result="pass"/><test-case name="35032reL20.v tokoe:valid" result="pass"/><test-case name="35033reL21 tokoe:valid" result="pass"/><test-case name="35034reL21.v tokoe:valid" result="pass"/><test-case name="35035reL22 tokoe:valid" result="pass"/><test-case name="35036reL22.v tokoe:valid" result="pass"/><test-case name="35037reL23 tokoe:valid" result="pass"/><test-case name="35038reL23.v tokoe:valid" result="pass"/><test-case name="35039reL24 tokoe:valid" result="pass"/><test-case name="35040reL24.v tokoe:valid" result="pass"/><test-case name="35041reL25 tokoe:valid" result="pass"/><test-case name="35042reL25.v tokoe:valid" result="pass"/><test-case name="35043reL26 tokoe:valid" result="pass"/><test-case name="35044reL26.v tokoe:valid" result="pass"/><test-case name="35045reL27 tokoe:valid" result="pass"/><test-case name="35046reL27.v tokoe:valid" result="pass"/><test-case name="35047reL28 tokoe:valid" result="pass"/><test-case name="35048reL28.v tokoe:valid" result="pass"/><test-case name="35049reL29 tokoe:valid" result="pass"/><test-case name="35050reL29.v tokoe:valid" result="pass"/><test-case name="35051reL30 tokoe:valid" result="pass"/><test-case name="35052reL30.v tokoe:valid" result="pass"/><test-case name="35053reL31 tokoe:valid" result="pass"/><test-case name="35054reL31.v tokoe:valid" result="pass"/><test-case name="35055reL32 tokoe:valid" result="pass"/><test-case name="35056reL32.v tokoe:valid" result="pass"/><test-case name="35057reL33 tokoe:valid" result="pass"/><test-case name="35058reL33.v tokoe:valid" result="pass"/><test-case name="35059reL34 tokoe:valid" result="pass"/><test-case name="35060reL34.v tokoe:valid" result="pass"/><test-case name="35061reL35 tokoe:valid" result="pass"/><test-case name="35062reL35.v tokoe:valid" result="pass"/><test-case name="35063reL36 tokoe:valid" result="pass"/><test-case name="35064reL36.v tokoe:valid" result="pass"/><test-case name="35065reL37 tokoe:valid" result="pass"/><test-case name="35066reL37.v tokoe:valid" result="pass"/><test-case name="35067reL38 tokoe:valid" result="pass"/><test-case name="35068reL38.v tokoe:valid" result="pass"/><test-case name="35069reL39 tokoe:valid" result="pass"/><test-case name="35070reL39.v tokoe:valid" result="pass"/><test-case name="35071reL40 tokoe:valid" result="pass"/><test-case name="35072reL40.v tokoe:valid" result="pass"/><test-case name="35073reL41 tokoe:valid" result="pass"/><test-case name="35074reL41.v tokoe:valid" result="pass"/><test-case name="35075reL42 tokoe:valid" result="pass"/><test-case name="35076reL42.v tokoe:valid" result="pass"/><test-case name="35077reL43 tokoe:valid" result="pass"/><test-case name="35078reL43.v tokoe:valid" result="pass"/><test-case name="35079reL44 tokoe:valid" result="pass"/><test-case name="35080reL44.v tokoe:valid" result="pass"/><test-case name="35081reL45 tokoe:valid" result="pass"/><test-case name="35082reL45.v tokoe:valid" result="pass"/><test-case name="35083reL46 tokoe:valid" result="pass"/><test-case name="35084reL46.v tokoe:valid" result="pass"/><test-case name="35085reL47 tokoe:valid" result="pass"/><test-case name="35086reL47.v tokoe:valid" result="pass"/><test-case name="35087reL48 tokoe:valid" result="pass"/><test-case name="35088reL48.v tokoe:valid" result="pass"/><test-case name="35089reL49 tokoe:valid" result="pass"/><test-case name="35090reL49.v tokoe:valid" result="pass"/><test-case name="35091reL50 tokoe:valid" result="pass"/><test-case name="35092reL50.v tokoe:valid" result="pass"/><test-case name="35093reL51 tokoe:valid" result="pass"/><test-case name="35094reL51.v tokoe:valid" result="pass"/><test-case name="35095reL52 tokoe:valid" result="pass"/><test-case name="35096reL52.v tokoe:valid" result="pass"/><test-case name="35097reL53 tokoe:valid" result="pass"/><test-case name="35098reL53.v tokoe:valid" result="pass"/><test-case name="35099reL54 tokoe:valid" result="pass"/><test-case name="35100reL54.v tokoe:valid" result="pass"/><test-case name="35101reL55 tokoe:valid" result="pass"/><test-case name="35102reL55.v tokoe:valid" result="pass"/><test-case name="35103reL56 tokoe:valid" result="pass"/><test-case name="35104reL56.v tokoe:valid" result="pass"/><test-case name="35105reL57 tokoe:valid" result="pass"/><test-case name="35106reL57.v tokoe:valid" result="pass"/><test-case name="35107reL58 tokoe:valid" result="pass"/><test-case name="35108reL58.v tokoe:valid" result="pass"/><test-case name="35109reL59 tokoe:valid" result="pass"/><test-case name="35110reL59.v tokoe:valid" result="pass"/><test-case name="35111reL60 tokoe:valid" result="pass"/><test-case name="35112reL60.v tokoe:valid" result="pass"/><test-case name="35113reL61 tokoe:valid" result="pass"/><test-case name="35114reL61.v tokoe:valid" result="pass"/><test-case name="35115reL62 tokoe:valid" result="pass"/><test-case name="35116reL62.v tokoe:valid" result="pass"/><test-case name="35117reL63 tokoe:valid" result="pass"/><test-case name="35118reL63.v tokoe:valid" result="pass"/><test-case name="35119reL64 tokoe:valid" result="pass"/><test-case name="35120reL64.v tokoe:valid" result="pass"/><test-case name="35121reL65 tokoe:valid" result="pass"/><test-case name="35122reL65.v tokoe:valid" result="pass"/><test-case name="35123reL66 tokoe:valid" result="pass"/><test-case name="35124reL66.v tokoe:valid" result="pass"/><test-case name="35125reL67 tokoe:valid" result="pass"/><test-case name="35126reL67.v tokoe:valid" result="pass"/><test-case name="35127reL68 tokoe:valid" result="pass"/><test-case name="35128reL68.v tokoe:valid" result="pass"/><test-case name="35129reL69 tokoe:valid" result="pass"/><test-case name="35130reL69.v tokoe:valid" result="pass"/><test-case name="35131reL70 tokoe:valid" result="pass"/><test-case name="35132reL70.v tokoe:valid" result="pass"/><test-case name="35133reL71 tokoe:valid" result="pass"/><test-case name="35134reL71.v tokoe:valid" result="pass"/><test-case name="35135reL72 tokoe:valid" result="pass"/><test-case name="35136reL72.v tokoe:valid" result="pass"/><test-case name="35137reL73 tokoe:valid" result="pass"/><test-case name="35138reL73.v tokoe:valid" result="pass"/><test-case name="35139reL74 tokoe:valid" result="pass"/><test-case name="35140reL74.v tokoe:valid" result="pass"/><test-case name="35141reL78 tokoe:valid" result="pass"/><test-case name="35142reL78.v tokoe:valid" result="pass"/><test-case name="35143reL79 tokoe:valid" result="pass"/><test-case name="35144reL79.v tokoe:valid" result="pass"/><test-case name="35145reL80 tokoe:valid" result="pass"/><test-case name="35146reL80.v tokoe:valid" result="pass"/><test-case name="35147reL81 tokoe:valid" result="pass"/><test-case name="35148reL81.v tokoe:valid" result="pass"/><test-case name="35149reL82 tokoe:valid" result="pass"/><test-case name="35150reL82.v tokoe:valid" result="pass"/><test-case name="35151reL83 tokoe:valid" result="pass"/><test-case name="35152reL83.v tokoe:valid" result="pass"/><test-case name="35153reL84 tokoe:valid" result="pass"/><test-case name="35154reL84.v tokoe:valid" result="pass"/><test-case name="35155reL85 tokoe:valid" result="pass"/><test-case name="35156reL85.v tokoe:valid" result="pass"/><test-case name="35157reL87 tokoe:valid" result="pass"/><test-case name="35158reL87.v tokoe:valid" result="pass"/><test-case name="35159reL88 tokoe:valid" result="pass"/><test-case name="35160reL88.v tokoe:valid" result="pass"/><test-case name="35161reM1 tokoe:valid" result="pass"/><test-case name="35162reM1.i tokoe:invalid" result="pass"/><test-case name="35163reM2 tokoe:valid" result="pass"/><test-case name="35164reM2.i tokoe:invalid" result="pass"/><test-case name="35165reM3 tokoe:valid" result="pass"/><test-case name="35166reM3.i tokoe:invalid" result="pass"/><test-case name="35167reM4 tokoe:valid" result="pass"/><test-case name="35168reM4.i tokoe:invalid" result="pass"/><test-case name="35169reM5 tokoe:valid" result="pass"/><test-case name="35170reM5.i tokoe:invalid" result="pass"/><test-case name="35171reM6 tokoe:valid" result="pass"/><test-case name="35172reM6.i tokoe:invalid" result="pass"/><test-case name="35173reM9 tokoe:valid" result="pass"/><test-case name="35174reM9.i tokoe:invalid" result="pass"/><test-case name="35175reM10 tokoe:valid" result="pass"/><test-case name="35176reM10.i tokoe:invalid" result="pass"/><test-case name="35177reM11 tokoe:valid" result="pass"/><test-case name="35178reM11.i tokoe:invalid" result="pass"/><test-case name="35179reM12 tokoe:valid" result="pass"/><test-case name="35180reM12.i tokoe:invalid" result="pass"/><test-case name="35181reM13 tokoe:valid" result="pass"/><test-case name="35182reM13.i tokoe:invalid" result="pass"/><test-case name="35183reM14 tokoe:valid" result="pass"/><test-case name="35184reM14.i tokoe:invalid" result="pass"/><test-case name="35185reM15 tokoe:valid" result="pass"/><test-case name="35186reM15.i tokoe:invalid" result="pass"/><test-case name="35187reM16 tokoe:valid" result="pass"/><test-case name="35188reM16.i tokoe:invalid" result="pass"/><test-case name="35189reM17 tokoe:valid" result="pass"/><test-case name="35190reM17.i tokoe:invalid" result="pass"/><test-case name="35191reM18 tokoe:valid" result="pass"/><test-case name="35192reM18.i tokoe:invalid" result="pass"/><test-case name="35193reM19 tokoe:valid" result="pass"/><test-case name="35194reM19.i tokoe:invalid" result="pass"/><test-case name="35195reM20 tokoe:valid" result="pass"/><test-case name="35196reM20.i tokoe:invalid" result="pass"/><test-case name="35197reM21 tokoe:valid" result="pass"/><test-case name="35198reM21.i tokoe:invalid" result="pass"/><test-case name="35199reM22 tokoe:valid" result="pass"/><test-case name="35200reM22.i tokoe:invalid" result="pass"/><test-case name="35201reM23 tokoe:valid" result="pass"/><test-case name="35202reM23.i tokoe:invalid" result="pass"/><test-case name="35203reM24 tokoe:valid" result="pass"/><test-case name="35204reM24.i tokoe:invalid" result="pass"/><test-case name="35205reM25 tokoe:valid" result="pass"/><test-case name="35206reM25.i tokoe:invalid" result="pass"/><test-case name="35207reM26 tokoe:valid" result="pass"/><test-case name="35208reM26.i tokoe:invalid" result="pass"/><test-case name="35209reM27 tokoe:valid" result="pass"/><test-case name="35210reM27.i tokoe:invalid" result="pass"/><test-case name="35211reM28 tokoe:valid" result="pass"/><test-case name="35212reM28.i tokoe:invalid" result="pass"/><test-case name="35213reM29 tokoe:valid" result="pass"/><test-case name="35214reM29.i tokoe:invalid" result="pass"/><test-case name="35215reM30 tokoe:valid" result="pass"/><test-case name="35216reM30.i tokoe:invalid" result="pass"/><test-case name="35217reM31 tokoe:valid" result="pass"/><test-case name="35218reM31.i tokoe:invalid" result="pass"/><test-case name="35219reM32 tokoe:valid" result="pass"/><test-case name="35220reM32.i tokoe:invalid" result="pass"/><test-case name="35221reM33 tokoe:valid" result="pass"/><test-case name="35222reM33.i tokoe:invalid" result="pass"/><test-case name="35223reM34 tokoe:valid" result="pass"/><test-case name="35224reM34.i tokoe:invalid" result="pass"/><test-case name="35225reM35 tokoe:valid" result="pass"/><test-case name="35226reM35.i tokoe:invalid" result="pass"/><test-case name="35227reM36 tokoe:valid" result="pass"/><test-case name="35228reM36.i tokoe:invalid" result="pass"/><test-case name="35229reM37 tokoe:valid" result="pass"/><test-case name="35230reM37.i tokoe:invalid" result="pass"/><test-case name="35231reM38 tokoe:valid" result="pass"/><test-case name="35232reM38.i tokoe:invalid" result="pass"/><test-case name="35233reM39 tokoe:valid" result="pass"/><test-case name="35234reM39.i tokoe:invalid" result="pass"/><test-case name="35235reM40 tokoe:valid" result="pass"/><test-case name="35236reM40.i tokoe:invalid" result="pass"/><test-case name="35237reM41 tokoe:valid" result="pass"/><test-case name="35238reM41.i tokoe:invalid" result="pass"/><test-case name="35239reM42 tokoe:valid" result="pass"/><test-case name="35240reM42.i tokoe:invalid" result="pass"/><test-case name="35241reM43 tokoe:valid" result="pass"/><test-case name="35242reM43.i tokoe:invalid" result="pass"/><test-case name="35243reM44 tokoe:valid" result="pass"/><test-case name="35244reM44.i tokoe:invalid" result="pass"/><test-case name="35245reM45 tokoe:valid" result="pass"/><test-case name="35246reM45.i tokoe:invalid" result="pass"/><test-case name="35247reM46 tokoe:valid" result="pass"/><test-case name="35248reM46.i tokoe:invalid" result="pass"/><test-case name="35249reM47 tokoe:valid" result="pass"/><test-case name="35250reM47.i tokoe:invalid" result="pass"/><test-case name="35251reM48 tokoe:valid" result="pass"/><test-case name="35252reM48.i tokoe:invalid" result="pass"/><test-case name="35253reM49 tokoe:valid" result="pass"/><test-case name="35254reM49.i tokoe:invalid" result="pass"/><test-case name="35255reM50 tokoe:valid" result="pass"/><test-case name="35256reM50.i tokoe:invalid" result="pass"/><test-case name="35257reM51 tokoe:valid" result="pass"/><test-case name="35258reM51.i tokoe:invalid" result="pass"/><test-case name="35259reM52 tokoe:valid" result="pass"/><test-case name="35260reM52.i tokoe:invalid" result="pass"/><test-case name="35261reM53 tokoe:valid" result="pass"/><test-case name="35262reM53.i tokoe:invalid" result="pass"/><test-case name="35263reM54 tokoe:valid" result="pass"/><test-case name="35264reM54.i tokoe:invalid" result="pass"/><test-case name="35265reM55 tokoe:valid" result="pass"/><test-case name="35266reM55.i tokoe:invalid" result="pass"/><test-case name="35267reM56 tokoe:valid" result="pass"/><test-case name="35268reM56.i tokoe:invalid" result="pass"/><test-case name="35269reM57 tokoe:valid" result="pass"/><test-case name="35270reM57.i tokoe:invalid" result="pass"/><test-case name="35271reM58 tokoe:valid" result="pass"/><test-case name="35272reM58.i tokoe:invalid" result="pass"/><test-case name="35273reM59 tokoe:valid" result="pass"/><test-case name="35274reM59.i tokoe:invalid" result="pass"/><test-case name="35275reM60 tokoe:valid" result="pass"/><test-case name="35276reM60.i tokoe:invalid" result="pass"/><test-case name="35277reM61 tokoe:valid" result="pass"/><test-case name="35278reM61.i tokoe:invalid" result="pass"/><test-case name="35279reM62 tokoe:valid" result="pass"/><test-case name="35280reM62.i tokoe:invalid" result="pass"/><test-case name="35281reM63 tokoe:valid" result="pass"/><test-case name="35282reM63.i tokoe:invalid" result="pass"/><test-case name="35283reM64 tokoe:valid" result="pass"/><test-case name="35284reM64.i tokoe:invalid" result="pass"/><test-case name="35285reM65 tokoe:valid" result="pass"/><test-case name="35286reM65.i tokoe:invalid" result="pass"/><test-case name="35287reM66 tokoe:valid" result="pass"/><test-case name="35288reM66.i tokoe:invalid" result="pass"/><test-case name="35289reM67 tokoe:valid" result="pass"/><test-case name="35290reM67.i tokoe:invalid" result="pass"/><test-case name="35291reM68 tokoe:valid" result="pass"/><test-case name="35292reM68.i tokoe:invalid" result="pass"/><test-case name="35293reM69 tokoe:valid" result="pass"/><test-case name="35294reM69.i tokoe:invalid" result="pass"/><test-case name="35295reM70 tokoe:valid" result="pass"/><test-case name="35296reM70.i tokoe:invalid" result="pass"/><test-case name="35297reM71 tokoe:valid" result="pass"/><test-case name="35298reM71.i tokoe:invalid" result="pass"/><test-case name="35299reM72 tokoe:valid" result="pass"/><test-case name="35300reM72.i tokoe:invalid" result="pass"/><test-case name="35301reM73 tokoe:valid" result="pass"/><test-case name="35302reM73.i tokoe:invalid" result="pass"/><test-case name="35303reM77 tokoe:valid" result="fail"/><test-case name="35304reM77.i tokoe:invalid" result="pass"/><test-case name="35305reM78 tokoe:valid" result="pass"/><test-case name="35306reM78.i tokoe:invalid" result="pass"/><test-case name="35307reM79 tokoe:valid" result="pass"/><test-case name="35308reM79.i tokoe:invalid" result="pass"/><test-case name="35309reM80 tokoe:valid" result="pass"/><test-case name="35310reM80.i tokoe:invalid" result="pass"/><test-case name="35311reM81 tokoe:valid" result="pass"/><test-case name="35312reM81.i tokoe:invalid" result="pass"/><test-case name="35313reM82 tokoe:valid" result="pass"/><test-case name="35314reM82.i tokoe:invalid" result="pass"/><test-case name="35315reM83 tokoe:valid" result="pass"/><test-case name="35316reM83.i tokoe:invalid" result="pass"/><test-case name="35317reM84 tokoe:valid" result="pass"/><test-case name="35318reM84.i tokoe:invalid" result="pass"/><test-case name="35319reM86 tokoe:valid" result="pass"/><test-case name="35320reM86.i tokoe:invalid" result="pass"/><test-case name="35321reM87 tokoe:valid" result="pass"/><test-case name="35322reM87.i tokoe:invalid" result="pass"/><test-case name="35323reM88 tokoe:valid" result="pass"/><test-case name="35324reM88.i tokoe:invalid" result="pass"/><test-case name="35325reM89 tokoe:valid" result="pass"/><test-case name="35326reM89.i tokoe:invalid" result="pass"/><test-case name="35327reM90 tokoe:valid" result="pass"/><test-case name="35328reM90.i tokoe:invalid" result="pass"/><test-case name="35329reM91 tokoe:valid" result="pass"/><test-case name="35330reM91.i tokoe:invalid" result="pass"/><test-case name="35331reM92 tokoe:valid" result="pass"/><test-case name="35332reM92.i tokoe:invalid" result="pass"/><test-case name="35333reM93 tokoe:valid" result="pass"/><test-case name="35334reM93.i tokoe:invalid" result="pass"/><test-case name="35335reM94 tokoe:valid" result="pass"/><test-case name="35336reM94.i tokoe:invalid" result="pass"/><test-case name="35337reM95 tokoe:valid" result="pass"/><test-case name="35338reM95.i tokoe:invalid" result="pass"/><test-case name="35339reM96 tokoe:valid" result="pass"/><test-case name="35340reM96.i tokoe:invalid" result="pass"/><test-case name="35341reM97 tokoe:valid" result="pass"/><test-case name="35342reM97.i tokoe:invalid" result="pass"/><test-case name="35343reM99 tokoe:valid" result="pass"/><test-case name="35344reM99.i tokoe:invalid" result="pass"/><test-case name="35345reN1 tokoe:valid" result="pass"/><test-case name="35346reN1.i tokoe:invalid" result="pass"/><test-case name="35347reN2 tokoe:valid" result="pass"/><test-case name="35348reN2.i tokoe:invalid" result="pass"/><test-case name="35349reN3 tokoe:valid" result="pass"/><test-case name="35350reN3.i tokoe:invalid" result="pass"/><test-case name="35351reN4 tokoe:valid" result="pass"/><test-case name="35352reN4.i tokoe:invalid" result="pass"/><test-case name="35353reN5 tokoe:valid" result="pass"/><test-case name="35354reN5.i tokoe:invalid" result="pass"/><test-case name="35355reN6 tokoe:valid" result="pass"/><test-case name="35356reN6.i tokoe:invalid" result="pass"/><test-case name="35357reN8 tokoe:valid" result="pass"/><test-case name="35358reN8.i tokoe:invalid" result="pass"/><test-case name="35359reN9 tokoe:valid" result="pass"/><test-case name="35360reN9.i tokoe:invalid" result="pass"/><test-case name="35361reN10 tokoe:valid" result="pass"/><test-case name="35362reN10.i tokoe:invalid" result="pass"/><test-case name="35363reN11 tokoe:valid" result="pass"/><test-case name="35364reN11.i tokoe:invalid" result="pass"/><test-case name="35365reN12 tokoe:valid" result="pass"/><test-case name="35366reN12.i tokoe:invalid" result="pass"/><test-case name="35367reN13 tokoe:valid" result="pass"/><test-case name="35368reN13.i tokoe:invalid" result="pass"/><test-case name="35369reN14 tokoe:valid" result="pass"/><test-case name="35370reN14.i tokoe:invalid" result="pass"/><test-case name="35371reN15 tokoe:valid" result="pass"/><test-case name="35372reN15.i tokoe:invalid" result="pass"/><test-case name="35373reN16 tokoe:valid" result="pass"/><test-case name="35374reN16.i tokoe:invalid" result="pass"/><test-case name="35375reN17 tokoe:valid" result="pass"/><test-case name="35376reN17.i tokoe:invalid" result="pass"/><test-case name="35377reN18 tokoe:valid" result="pass"/><test-case name="35378reN18.i tokoe:invalid" result="pass"/><test-case name="35379reN19 tokoe:valid" result="pass"/><test-case name="35380reN19.i tokoe:invalid" result="pass"/><test-case name="35381reN20 tokoe:valid" result="pass"/><test-case name="35382reN20.i tokoe:invalid" result="pass"/><test-case name="35383reN21 tokoe:valid" result="pass"/><test-case name="35384reN21.i tokoe:invalid" result="pass"/><test-case name="35385reN22 tokoe:valid" result="pass"/><test-case name="35386reN22.i tokoe:invalid" result="pass"/><test-case name="35387reN23 tokoe:valid" result="pass"/><test-case name="35388reN23.i tokoe:invalid" result="pass"/><test-case name="35389reN24 tokoe:valid" result="pass"/><test-case name="35390reN24.i tokoe:invalid" result="pass"/><test-case name="35391reN25 tokoe:valid" result="pass"/><test-case name="35392reN25.i tokoe:invalid" result="pass"/><test-case name="35393reN26 tokoe:valid" result="pass"/><test-case name="35394reN26.i tokoe:invalid" result="pass"/><test-case name="35395reN27 tokoe:valid" result="pass"/><test-case name="35396reN27.i tokoe:invalid" result="pass"/><test-case name="35397reN28 tokoe:valid" result="pass"/><test-case name="35398reN28.i tokoe:invalid" result="pass"/><test-case name="35399reN29 tokoe:valid" result="pass"/><test-case name="35400reN29.i tokoe:invalid" result="pass"/><test-case name="35401reN30 tokoe:valid" result="pass"/><test-case name="35402reN30.i tokoe:invalid" result="pass"/><test-case name="35403reN31 tokoe:valid" result="pass"/><test-case name="35404reN31.i tokoe:invalid" result="pass"/><test-case name="35405reN32 tokoe:valid" result="pass"/><test-case name="35406reN32.i tokoe:invalid" result="pass"/><test-case name="35407reN33 tokoe:valid" result="pass"/><test-case name="35408reN33.i tokoe:invalid" result="pass"/><test-case name="35409reN34 tokoe:valid" result="pass"/><test-case name="35410reN34.i tokoe:invalid" result="pass"/><test-case name="35411reN35 tokoe:valid" result="pass"/><test-case name="35412reN35.i tokoe:invalid" result="pass"/><test-case name="35413reN36 tokoe:valid" result="pass"/><test-case name="35414reN36.i tokoe:invalid" result="pass"/><test-case name="35415reN37 tokoe:valid" result="pass"/><test-case name="35416reN37.i tokoe:invalid" result="pass"/><test-case name="35417reN38 tokoe:valid" result="pass"/><test-case name="35418reN38.i tokoe:invalid" result="pass"/><test-case name="35419reN39 tokoe:valid" result="pass"/><test-case name="35420reN39.i tokoe:invalid" result="pass"/><test-case name="35421reN40 tokoe:valid" result="pass"/><test-case name="35422reN40.i tokoe:invalid" result="pass"/><test-case name="35423reN41 tokoe:valid" result="pass"/><test-case name="35424reN41.i tokoe:invalid" result="pass"/><test-case name="35425reN42 tokoe:valid" result="pass"/><test-case name="35426reN42.i tokoe:invalid" result="pass"/><test-case name="35427reN43 tokoe:valid" result="pass"/><test-case name="35428reN43.i tokoe:invalid" result="pass"/><test-case name="35429reN44 tokoe:valid" result="pass"/><test-case name="35430reN44.i tokoe:invalid" result="pass"/><test-case name="35431reN45 tokoe:valid" result="pass"/><test-case name="35432reN45.i tokoe:invalid" result="pass"/><test-case name="35433reN46 tokoe:valid" result="pass"/><test-case name="35434reN46.i tokoe:invalid" result="pass"/><test-case name="35435reN47 tokoe:valid" result="pass"/><test-case name="35436reN47.i tokoe:invalid" result="pass"/><test-case name="35437reN48 tokoe:valid" result="pass"/><test-case name="35438reN48.i tokoe:invalid" result="pass"/><test-case name="35439reN49 tokoe:valid" result="pass"/><test-case name="35440reN49.i tokoe:invalid" result="pass"/><test-case name="35441reN50 tokoe:valid" result="pass"/><test-case name="35442reN50.i tokoe:invalid" result="pass"/><test-case name="35443reN51 tokoe:valid" result="pass"/><test-case name="35444reN51.i tokoe:invalid" result="pass"/><test-case name="35445reN52 tokoe:valid" result="pass"/><test-case name="35446reN52.i tokoe:invalid" result="pass"/><test-case name="35447reN53 tokoe:valid" result="pass"/><test-case name="35448reN53.i tokoe:invalid" result="pass"/><test-case name="35449reN54 tokoe:valid" result="pass"/><test-case name="35450reN54.i tokoe:invalid" result="pass"/><test-case name="35451reN55 tokoe:valid" result="pass"/><test-case name="35452reN55.i tokoe:invalid" result="pass"/><test-case name="35453reN56 tokoe:valid" result="pass"/><test-case name="35454reN56.i tokoe:invalid" result="pass"/><test-case name="35455reN57 tokoe:valid" result="pass"/><test-case name="35456reN57.i tokoe:invalid" result="pass"/><test-case name="35457reN58 tokoe:valid" result="pass"/><test-case name="35458reN58.i tokoe:invalid" result="pass"/><test-case name="35459reN59 tokoe:valid" result="pass"/><test-case name="35460reN59.i tokoe:invalid" result="pass"/><test-case name="35461reN60 tokoe:valid" result="pass"/><test-case name="35462reN60.i tokoe:invalid" result="pass"/><test-case name="35463reN61 tokoe:valid" result="pass"/><test-case name="35464reN61.i tokoe:invalid" result="pass"/><test-case name="35465reN62 tokoe:valid" result="pass"/><test-case name="35466reN62.i tokoe:invalid" result="pass"/><test-case name="35467reN63 tokoe:valid" result="pass"/><test-case name="35468reN63.i tokoe:invalid" result="pass"/><test-case name="35469reN64 tokoe:valid" result="pass"/><test-case name="35470reN64.i tokoe:invalid" result="pass"/><test-case name="35471reN65 tokoe:valid" result="pass"/><test-case name="35472reN65.i tokoe:invalid" result="pass"/><test-case name="35473reN66 tokoe:valid" result="pass"/><test-case name="35474reN66.i tokoe:invalid" result="pass"/><test-case name="35475reN67 tokoe:valid" result="pass"/><test-case name="35476reN67.i tokoe:invalid" result="pass"/><test-case name="35477reN68 tokoe:valid" result="pass"/><test-case name="35478reN68.i tokoe:invalid" result="pass"/><test-case name="35479reN69 tokoe:valid" result="pass"/><test-case name="35480reN69.i tokoe:invalid" result="pass"/><test-case name="35481reN70 tokoe:valid" result="pass"/><test-case name="35482reN70.i tokoe:invalid" result="pass"/><test-case name="35483reN71 tokoe:valid" result="pass"/><test-case name="35484reN71.i tokoe:invalid" result="pass"/><test-case name="35485reN72 tokoe:valid" result="pass"/><test-case name="35486reN72.i tokoe:invalid" result="pass"/><test-case name="35487reN73 tokoe:valid" result="pass"/><test-case name="35488reN73.i tokoe:invalid" result="pass"/><test-case name="35489reN74 tokoe:valid" result="pass"/><test-case name="35490reN74.i tokoe:invalid" result="pass"/><test-case name="35491reN75 tokoe:valid" result="fail"/><test-case name="35492reN75.i tokoe:invalid" result="pass"/><test-case name="35493reN79 tokoe:valid" result="pass"/><test-case name="35494reN79.i tokoe:invalid" result="pass"/><test-case name="35495reN80 tokoe:valid" result="pass"/><test-case name="35496reN80.i tokoe:invalid" result="pass"/><test-case name="35497reN81 tokoe:valid" result="pass"/><test-case name="35498reN81.i tokoe:invalid" result="pass"/><test-case name="35499reN82 tokoe:valid" result="pass"/><test-case name="35500reN82.i tokoe:invalid" result="pass"/><test-case name="35501reN83 tokoe:valid" result="pass"/><test-case name="35502reN83.i tokoe:invalid" result="pass"/><test-case name="35503reN84 tokoe:valid" result="pass"/><test-case name="35504reN84.i tokoe:invalid" result="pass"/><test-case name="35505reN85 tokoe:valid" result="pass"/><test-case name="35506reN85.i tokoe:invalid" result="pass"/><test-case name="35507reN86 tokoe:valid" result="pass"/><test-case name="35508reN86.i tokoe:invalid" result="pass"/><test-case name="35509reN87 tokoe:valid" result="pass"/><test-case name="35510reN87.i tokoe:invalid" result="pass"/><test-case name="35511reN88 tokoe:valid" result="pass"/><test-case name="35512reN88.i tokoe:invalid" result="pass"/><test-case name="35513reN89 tokoe:valid" result="pass"/><test-case name="35514reN89.i tokoe:invalid" result="pass"/><test-case name="35515reN90 tokoe:valid" result="pass"/><test-case name="35516reN90.i tokoe:invalid" result="pass"/><test-case name="35517reN91 tokoe:valid" result="pass"/><test-case name="35518reN91.i tokoe:invalid" result="pass"/><test-case name="35519reN92 tokoe:valid" result="pass"/><test-case name="35520reN92.i tokoe:invalid" result="pass"/><test-case name="35521reN93 tokoe:valid" result="pass"/><test-case name="35522reN93.i tokoe:invalid" result="pass"/><test-case name="35523reN94 tokoe:valid" result="pass"/><test-case name="35524reN94.i tokoe:invalid" result="pass"/><test-case name="35525reN95 tokoe:valid" result="pass"/><test-case name="35526reN95.i tokoe:invalid" result="pass"/><test-case name="35527reN96 tokoe:valid" result="pass"/><test-case name="35528reN96.i tokoe:invalid" result="pass"/><test-case name="35529reN97 tokoe:valid" result="pass"/><test-case name="35530reN97.i tokoe:invalid" result="pass"/><test-case name="35531reN98 tokoe:valid" result="pass"/><test-case name="35532reN98.i tokoe:invalid" result="pass"/><test-case name="35533reO1 tokoe:valid" result="pass"/><test-case name="35534reO1.v tokoe:valid" result="pass"/><test-case name="35535reO2 tokoe:valid" result="pass"/><test-case name="35536reO2.v tokoe:valid" result="pass"/><test-case name="35537reO3 tokoe:valid" result="pass"/><test-case name="35538reO3.i tokoe:invalid" result="pass"/><test-case name="35539reO4 tokoe:valid" result="pass"/><test-case name="35540reO4.i tokoe:invalid" result="pass"/><test-case name="35541reP1 tokoe:valid" result="pass"/><test-case name="35542reP1.v tokoe:valid" result="pass"/><test-case name="35543reP2 tokoe:valid" result="pass"/><test-case name="35544reP2.v tokoe:valid" result="pass"/><test-case name="35545reP3 tokoe:valid" result="pass"/><test-case name="35546reP3.v tokoe:valid" result="pass"/><test-case name="35547reP4 tokoe:valid" result="pass"/><test-case name="35548reP4.v tokoe:valid" result="pass"/><test-case name="35549reP5 tokoe:valid" result="pass"/><test-case name="35550reP5.i tokoe:invalid" result="pass"/><test-case name="35551reP6 tokoe:valid" result="pass"/><test-case name="35552reP6.v tokoe:valid" result="pass"/><test-case name="35553reP7 tokoe:valid" result="pass"/><test-case name="35554reP7.v tokoe:valid" result="pass"/><test-case name="35555reP8 tokoe:valid" result="pass"/><test-case name="35556reP8.i tokoe:invalid" result="pass"/><test-case name="35557reP9 tokoe:valid" result="pass"/><test-case name="35558reP9.i tokoe:invalid" result="pass"/><test-case name="35559reP10 tokoe:valid" result="pass"/><test-case name="35560reP10.i tokoe:invalid" result="pass"/><test-case name="35561reP11 tokoe:valid" result="pass"/><test-case name="35562reP11.v tokoe:valid" result="pass"/><test-case name="35563reP12 tokoe:valid" result="pass"/><test-case name="35564reP12.v tokoe:valid" result="pass"/><test-case name="35565reP13 tokoe:valid" result="pass"/><test-case name="35566reP13.v tokoe:valid" result="pass"/><test-case name="35567reP14 tokoe:valid" result="pass"/><test-case name="35568reP14.i tokoe:invalid" result="pass"/><test-case name="35569reP15 tokoe:valid" result="pass"/><test-case name="35570reP15.i tokoe:invalid" result="pass"/><test-case name="35571reP16 tokoe:valid" result="pass"/><test-case name="35572reP16.i tokoe:invalid" result="pass"/><test-case name="35573reP17 tokoe:valid" result="pass"/><test-case name="35574reP17.i tokoe:invalid" result="pass"/><test-case name="35575reP18 tokoe:valid" result="pass"/><test-case name="35576reP18.v tokoe:valid" result="pass"/><test-case name="35577reP19 tokoe:valid" result="pass"/><test-case name="35578reP19.i tokoe:invalid" result="pass"/><test-case name="35579reP20 tokoe:valid" result="pass"/><test-case name="35580reP20.i tokoe:invalid" result="pass"/><test-case name="35581reP21 tokoe:valid" result="pass"/><test-case name="35582reP21.i tokoe:invalid" result="pass"/><test-case name="35583reP22 tokoe:valid" result="pass"/><test-case name="35584reP22.i tokoe:invalid" result="pass"/><test-case name="35585reP23 tokoe:valid" result="pass"/><test-case name="35586reP23.i tokoe:invalid" result="pass"/><test-case name="35587reP24 tokoe:valid" result="pass"/><test-case name="35588reP24.i tokoe:invalid" result="pass"/><test-case name="35589reP25 tokoe:valid" result="pass"/><test-case name="35590reP25.v tokoe:valid" result="pass"/><test-case name="35591reP26 tokoe:valid" result="pass"/><test-case name="35592reP26.v tokoe:valid" result="pass"/><test-case name="35593reP27 tokoe:valid" result="pass"/><test-case name="35594reP27.v tokoe:valid" result="pass"/><test-case name="35595reP28 tokoe:valid" result="pass"/><test-case name="35596reP28.i tokoe:invalid" result="pass"/><test-case name="35597reP29 tokoe:valid" result="pass"/><test-case name="35598reP29.i tokoe:invalid" result="pass"/><test-case name="35599reP30 tokoe:valid" result="pass"/><test-case name="35600reP30.i tokoe:invalid" result="pass"/><test-case name="35601reQ1 tokoe:valid" result="pass"/><test-case name="35602reQ1.v tokoe:valid" result="pass"/><test-case name="35603reQ2 tokoe:valid" result="pass"/><test-case name="35604reQ2.v tokoe:valid" result="pass"/><test-case name="35605reQ3 tokoe:valid" result="pass"/><test-case name="35606reQ3.v tokoe:valid" result="pass"/><test-case name="35607reQ4 tokoe:valid" result="pass"/><test-case name="35608reQ4.i tokoe:invalid" result="pass"/><test-case name="35609reQ5 tokoe:valid" result="pass"/><test-case name="35610reQ5.i tokoe:invalid" result="pass"/><test-case name="35611reQ6 tokoe:valid" result="pass"/><test-case name="35612reQ6.i tokoe:invalid" result="pass"/><test-case name="35613reQ7 tokoe:valid" result="pass"/><test-case name="35614reQ7.i tokoe:invalid" result="pass"/><test-case name="35615reQ8 tokoe:valid" result="pass"/><test-case name="35616reQ8.v tokoe:valid" result="pass"/><test-case name="35617reQ9 tokoe:valid" result="pass"/><test-case name="35618reQ9.i tokoe:invalid" result="pass"/><test-case name="35619reQ10 tokoe:valid" result="pass"/><test-case name="35620reQ10.v tokoe:valid" result="pass"/><test-case name="35621reQ11 tokoe:valid" result="pass"/><test-case name="35622reQ11.i tokoe:invalid" result="pass"/><test-case name="35623reQ12 tokoe:valid" result="pass"/><test-case name="35624reQ12.v tokoe:valid" result="pass"/><test-case name="35625reQ13 tokoe:valid" result="pass"/><test-case name="35626reQ13.i tokoe:invalid" result="fail"/><test-case name="35627reQ14 tokoe:valid" result="pass"/><test-case name="35628reQ14.i tokoe:invalid" result="pass"/><test-case name="35629reQ15 tokoe:valid" result="pass"/><test-case name="35630reQ15.i tokoe:invalid" result="pass"/><test-case name="35631reQ16 tokoe:valid" result="pass"/><test-case name="35632reQ16.i tokoe:invalid" result="pass"/><test-case name="35633reQ17 tokoe:valid" result="pass"/><test-case name="35634reQ17.v tokoe:valid" result="pass"/><test-case name="35635reQ18 tokoe:valid" result="pass"/><test-case name="35636reQ18.v tokoe:valid" result="pass"/><test-case name="35637reQ19 tokoe:valid" result="pass"/><test-case name="35638reQ19.v tokoe:valid" result="pass"/><test-case name="35639reQ20 tokoe:valid" result="pass"/><test-case name="35640reQ20.v tokoe:valid" result="pass"/><test-case name="35641reQ21 tokoe:valid" result="pass"/><test-case name="35642reQ21.v tokoe:valid" result="fail"/><test-case name="35643reQ22 tokoe:valid" result="pass"/><test-case name="35644reQ22.v tokoe:valid" result="fail"/><test-case name="35645reQ23 tokoe:valid" result="pass"/><test-case name="35646reQ23.i tokoe:invalid" result="pass"/><test-case name="35647reQ24 tokoe:valid" result="pass"/><test-case name="35648reQ24.i tokoe:invalid" result="pass"/><test-case name="35649reR1 tokoe:valid" result="pass"/><test-case name="35650reR1.v tokoe:valid" result="pass"/><test-case name="35651reR2 tokoe:valid" result="pass"/><test-case name="35652reR2.v tokoe:valid" result="pass"/><test-case name="35653reR3 tokoe:valid" result="pass"/><test-case name="35654reR3.v tokoe:valid" result="pass"/><test-case name="35655reR4 tokoe:valid" result="pass"/><test-case name="35656reR4.i tokoe:invalid" result="pass"/><test-case name="35657reR5 tokoe:valid" result="pass"/><test-case name="35658reR5.i tokoe:invalid" result="pass"/><test-case name="35659reR6 tokoe:valid" result="pass"/><test-case name="35660reR6.i tokoe:invalid" result="pass"/><test-case name="35661reR7 tokoe:valid" result="pass"/><test-case name="35662reR7.i tokoe:invalid" result="pass"/><test-case name="35663reR8 tokoe:valid" result="pass"/><test-case name="35664reR8.v tokoe:valid" result="pass"/><test-case name="35665reR9 tokoe:valid" result="pass"/><test-case name="35666reR9.v tokoe:valid" result="pass"/><test-case name="35667reR10 tokoe:valid" result="pass"/><test-case name="35668reR10.i tokoe:invalid" result="pass"/><test-case name="35669reR11 tokoe:valid" result="pass"/><test-case name="35670reR11.i tokoe:invalid" result="pass"/><test-case name="35671reR12 tokoe:valid" result="pass"/><test-case name="35672reR12.v tokoe:valid" result="pass"/><test-case name="35673reR13 tokoe:valid" result="pass"/><test-case name="35674reR13.v tokoe:valid" result="pass"/><test-case name="35675reR14 tokoe:valid" result="pass"/><test-case name="35676reR14.v tokoe:valid" result="pass"/><test-case name="35677reR15 tokoe:valid" result="pass"/><test-case name="35678reR15.i tokoe:invalid" result="pass"/><test-case name="35679reR16 tokoe:valid" result="pass"/><test-case name="35680reR16.i tokoe:invalid" result="pass"/><test-case name="35681reR17 tokoe:valid" result="pass"/><test-case name="35682reR17.i tokoe:invalid" result="pass"/><test-case name="35683reR18 tokoe:valid" result="pass"/><test-case name="35684reR18.i tokoe:invalid" result="pass"/><test-case name="35685reR19 tokoe:valid" result="pass"/><test-case name="35686reR19.v tokoe:valid" result="pass"/><test-case name="35687reR20 tokoe:valid" result="pass"/><test-case name="35688reR20.v tokoe:valid" result="pass"/><test-case name="35689reR21 tokoe:valid" result="pass"/><test-case name="35690reR21.v tokoe:valid" result="pass"/><test-case name="35691reR22 tokoe:valid" result="pass"/><test-case name="35692reR22.v tokoe:valid" result="pass"/><test-case name="35693reR23 tokoe:valid" result="pass"/><test-case name="35694reR23.i tokoe:invalid" result="pass"/><test-case name="35695reR24 tokoe:valid" result="pass"/><test-case name="35696reR24.v tokoe:valid" result="pass"/><test-case name="35697reR25 tokoe:valid" result="pass"/><test-case name="35698reR25.v tokoe:valid" result="pass"/><test-case name="35699reR26 tokoe:valid" result="pass"/><test-case name="35700reR26.i tokoe:invalid" result="pass"/><test-case name="35701reR27 tokoe:valid" result="pass"/><test-case name="35702reR27.i tokoe:invalid" result="pass"/><test-case name="35703reR28 tokoe:valid" result="pass"/><test-case name="35704reR28.i tokoe:invalid" result="pass"/><test-case name="35705reR29 tokoe:valid" result="pass"/><test-case name="35706reR29.i tokoe:invalid" result="pass"/><test-case name="35707reS1 tokoe:valid" result="pass"/><test-case name="35708reS1.v tokoe:valid" result="pass"/><test-case name="35709reS3 tokoe:valid" result="pass"/><test-case name="35710reS3.v tokoe:valid" result="pass"/><test-case name="35711reS5 tokoe:valid" result="pass"/><test-case name="35712reS5.v tokoe:valid" result="pass"/><test-case name="35713reS6 tokoe:valid" result="pass"/><test-case name="35714reS6.v tokoe:valid" result="pass"/><test-case name="35715reS7 tokoe:valid" result="pass"/><test-case name="35716reS7.v tokoe:valid" result="pass"/><test-case name="35717reS8 tokoe:valid" result="pass"/><test-case name="35718reS8.v tokoe:valid" result="pass"/><test-case name="35719reS9 tokoe:valid" result="pass"/><test-case name="35720reS9.v tokoe:valid" result="pass"/><test-case name="35721reS10 tokoe:valid" result="pass"/><test-case name="35722reS10.v tokoe:valid" result="pass"/><test-case name="35723reS11 tokoe:valid" result="pass"/><test-case name="35724reS11.v tokoe:valid" result="pass"/><test-case name="35725reS12 tokoe:valid" result="pass"/><test-case name="35726reS12.v tokoe:valid" result="pass"/><test-case name="35727reS13 tokoe:valid" result="pass"/><test-case name="35728reS13.v tokoe:valid" result="pass"/><test-case name="35729reS14 tokoe:valid" result="pass"/><test-case name="35730reS14.v tokoe:valid" result="pass"/><test-case name="35731reS15 tokoe:valid" result="pass"/><test-case name="35732reS15.v tokoe:valid" result="pass"/><test-case name="35733reS16 tokoe:valid" result="pass"/><test-case name="35734reS16.v tokoe:valid" result="pass"/><test-case name="35735reS17 tokoe:valid" result="pass"/><test-case name="35736reS17.v tokoe:valid" result="fail"/><test-case name="35737reS18 tokoe:valid" result="pass"/><test-case name="35738reS18.v tokoe:valid" result="pass"/><test-case name="35739reS19 tokoe:valid" result="pass"/><test-case name="35740reS19.v tokoe:valid" result="pass"/><test-case name="35741reS20 tokoe:valid" result="pass"/><test-case name="35742reS20.v tokoe:valid" result="pass"/><test-case name="35743reS22 tokoe:valid" result="pass"/><test-case name="35744reS22.v tokoe:valid" result="pass"/><test-case name="35745reS23 tokoe:valid" result="pass"/><test-case name="35746reS23.v tokoe:valid" result="pass"/><test-case name="35747reS24 tokoe:valid" result="pass"/><test-case name="35748reS24.v tokoe:valid" result="pass"/><test-case name="35749reS25 tokoe:valid" result="pass"/><test-case name="35750reS25.v tokoe:valid" result="pass"/><test-case name="35751reS26 tokoe:valid" result="pass"/><test-case name="35752reS26.v tokoe:valid" result="pass"/><test-case name="35753reS27 tokoe:valid" result="pass"/><test-case name="35754reS27.v tokoe:valid" result="pass"/><test-case name="35755reS28 tokoe:valid" result="pass"/><test-case name="35756reS28.v tokoe:valid" result="pass"/><test-case name="35757reS29 tokoe:valid" result="pass"/><test-case name="35758reS29.v tokoe:valid" result="pass"/><test-case name="35759reS30 tokoe:valid" result="pass"/><test-case name="35760reS30.v tokoe:valid" result="pass"/><test-case name="35761reS31 tokoe:valid" result="pass"/><test-case name="35762reS31.v tokoe:valid" result="pass"/><test-case name="35763reS32 tokoe:valid" result="pass"/><test-case name="35764reS32.v tokoe:valid" result="pass"/><test-case name="35765reS33 tokoe:valid" result="pass"/><test-case name="35766reS33.v tokoe:valid" result="pass"/><test-case name="35767reS34 tokoe:valid" result="pass"/><test-case name="35768reS34.v tokoe:valid" result="pass"/><test-case name="35769reS35 tokoe:valid" result="pass"/><test-case name="35770reS35.v tokoe:valid" result="pass"/><test-case name="35771reS36 tokoe:valid" result="pass"/><test-case name="35772reS36.v tokoe:valid" result="pass"/><test-case name="35773reS37 tokoe:valid" result="pass"/><test-case name="35774reS37.v tokoe:valid" result="pass"/><test-case name="35775reS38 tokoe:valid" result="pass"/><test-case name="35776reS38.v tokoe:valid" result="fail"/><test-case name="35777reS39 tokoe:valid" result="pass"/><test-case name="35778reS39.v tokoe:valid" result="pass"/><test-case name="35779reS40 tokoe:valid" result="pass"/><test-case name="35780reS40.v tokoe:valid" result="pass"/><test-case name="35781reS41 tokoe:valid" result="pass"/><test-case name="35782reS41.v tokoe:valid" result="pass"/><test-case name="35783reS43 tokoe:valid" result="pass"/><test-case name="35784reS43.i tokoe:invalid" result="pass"/><test-case name="35785reS44 tokoe:valid" result="pass"/><test-case name="35786reS44.i tokoe:invalid" result="pass"/><test-case name="35787reS45 tokoe:valid" result="pass"/><test-case name="35788reS45.i tokoe:invalid" result="pass"/><test-case name="35789reS46 tokoe:valid" result="pass"/><test-case name="35790reS46.i tokoe:invalid" result="pass"/><test-case name="35791reS47 tokoe:valid" result="pass"/><test-case name="35792reS47.i tokoe:invalid" result="pass"/><test-case name="35793reS48 tokoe:valid" result="pass"/><test-case name="35794reS48.i tokoe:invalid" result="pass"/><test-case name="35795reS49 tokoe:valid" result="pass"/><test-case name="35796reS49.i tokoe:invalid" result="pass"/><test-case name="35797reS50 tokoe:valid" result="pass"/><test-case name="35798reS50.i tokoe:invalid" result="pass"/><test-case name="35799reS51 tokoe:valid" result="pass"/><test-case name="35800reS51.i tokoe:invalid" result="fail"/><test-case name="35801reS52 tokoe:valid" result="pass"/><test-case name="35802reS52.i tokoe:invalid" result="pass"/><test-case name="35803reS53 tokoe:valid" result="pass"/><test-case name="35804reS53.i tokoe:invalid" result="pass"/><test-case name="35805reS54 tokoe:valid" result="pass"/><test-case name="35806reS54.i tokoe:invalid" result="pass"/><test-case name="35807reS55 tokoe:valid" result="pass"/><test-case name="35808reS55.i tokoe:invalid" result="pass"/><test-case name="35809reS56 tokoe:valid" result="pass"/><test-case name="35810reS56.i tokoe:invalid" result="pass"/><test-case name="35811reS57 tokoe:valid" result="pass"/><test-case name="35812reS57.i tokoe:invalid" result="pass"/><test-case name="35813reS58 tokoe:valid" result="pass"/><test-case name="35814reS58.i tokoe:invalid" result="pass"/><test-case name="35815reS59 tokoe:valid" result="pass"/><test-case name="35816reS59.i tokoe:invalid" result="pass"/><test-case name="35817reS60 tokoe:valid" result="pass"/><test-case name="35818reS60.i tokoe:invalid" result="pass"/><test-case name="35819reS61 tokoe:valid" result="pass"/><test-case name="35820reS61.i tokoe:invalid" result="pass"/><test-case name="35821reS62 tokoe:valid" result="pass"/><test-case name="35822reS62.i tokoe:invalid" result="pass"/><test-case name="35823reS63 tokoe:valid" result="pass"/><test-case name="35824reS63.i tokoe:invalid" result="pass"/><test-case name="35825reS64 tokoe:valid" result="pass"/><test-case name="35826reS64.i tokoe:invalid" result="pass"/><test-case name="35827reS65 tokoe:valid" result="pass"/><test-case name="35828reS65.i tokoe:invalid" result="pass"/><test-case name="35829reS66 tokoe:valid" result="pass"/><test-case name="35830reS66.i tokoe:invalid" result="pass"/><test-case name="35831reS67 tokoe:valid" result="pass"/><test-case name="35832reS67.i tokoe:invalid" result="pass"/><test-case name="35833reS68 tokoe:valid" result="pass"/><test-case name="35834reS68.i tokoe:invalid" result="pass"/><test-case name="35835reS69 tokoe:valid" result="pass"/><test-case name="35836reS69.i tokoe:invalid" result="pass"/><test-case name="35837reS70 tokoe:valid" result="pass"/><test-case name="35838reS70.i tokoe:invalid" result="pass"/><test-case name="35839reS71 tokoe:valid" result="pass"/><test-case name="35840reS71.i tokoe:invalid" result="pass"/><test-case name="35841reS72 tokoe:valid" result="pass"/><test-case name="35842reS72.i tokoe:invalid" result="pass"/><test-case name="35843reS73 tokoe:valid" result="pass"/><test-case name="35844reS73.i tokoe:invalid" result="pass"/><test-case name="35845reS74 tokoe:valid" result="pass"/><test-case name="35846reS74.i tokoe:invalid" result="pass"/><test-case name="35847reS75 tokoe:valid" result="pass"/><test-case name="35848reS75.i tokoe:invalid" result="pass"/><test-case name="35849reS76 tokoe:valid" result="pass"/><test-case name="35850reS76.i tokoe:invalid" result="pass"/><test-case name="35851reS77 tokoe:valid" result="pass"/><test-case name="35852reS77.i tokoe:invalid" result="pass"/><test-case name="35853reS78 tokoe:valid" result="pass"/><test-case name="35854reS78.i tokoe:invalid" result="pass"/><test-case name="35855reS79 tokoe:valid" result="pass"/><test-case name="35856reS79.i tokoe:invalid" result="pass"/><test-case name="35857reS80 tokoe:valid" result="pass"/><test-case name="35858reS80.i tokoe:invalid" result="pass"/><test-case name="35859reS81 tokoe:valid" result="pass"/><test-case name="35860reS81.i tokoe:invalid" result="pass"/><test-case name="35861reS82 tokoe:valid" result="pass"/><test-case name="35862reS82.i tokoe:invalid" result="pass"/><test-case name="35863reS83 tokoe:valid" result="pass"/><test-case name="35864reS83.i tokoe:invalid" result="pass"/><test-case name="35865reS84 tokoe:valid" result="pass"/><test-case name="35866reS84.i tokoe:invalid" result="pass"/><test-case name="35867reT1 tokoe:valid" result="pass"/><test-case name="35868reT1.i tokoe:invalid" result="pass"/><test-case name="35869reT2 tokoe:valid" result="pass"/><test-case name="35870reT2.i tokoe:invalid" result="pass"/><test-case name="35871reT3 tokoe:valid" result="pass"/><test-case name="35872reT3.i tokoe:invalid" result="pass"/><test-case name="35873reT4 tokoe:valid" result="pass"/><test-case name="35874reT4.i tokoe:invalid" result="pass"/><test-case name="35875reT5 tokoe:valid" result="pass"/><test-case name="35876reT5.i tokoe:invalid" result="pass"/><test-case name="35877reT7 tokoe:valid" result="pass"/><test-case name="35878reT7.i tokoe:invalid" result="pass"/><test-case name="35879reT9 tokoe:valid" result="pass"/><test-case name="35880reT9.i tokoe:invalid" result="pass"/><test-case name="35881reT10 tokoe:valid" result="pass"/><test-case name="35882reT10.i tokoe:invalid" result="pass"/><test-case name="35883reT11 tokoe:valid" result="pass"/><test-case name="35884reT11.i tokoe:invalid" result="pass"/><test-case name="35885reT12 tokoe:valid" result="pass"/><test-case name="35886reT12.i tokoe:invalid" result="pass"/><test-case name="35887reT13 tokoe:valid" result="pass"/><test-case name="35888reT13.i tokoe:invalid" result="pass"/><test-case name="35889reT14 tokoe:valid" result="pass"/><test-case name="35890reT14.i tokoe:invalid" result="pass"/><test-case name="35891reT15 tokoe:valid" result="pass"/><test-case name="35892reT15.i tokoe:invalid" result="pass"/><test-case name="35893reT16 tokoe:valid" result="pass"/><test-case name="35894reT16.i tokoe:invalid" result="pass"/><test-case name="35895reT17 tokoe:valid" result="pass"/><test-case name="35896reT17.i tokoe:invalid" result="fail"/><test-case name="35897reT18 tokoe:valid" result="pass"/><test-case name="35898reT18.i tokoe:invalid" result="pass"/><test-case name="35899reT19 tokoe:valid" result="pass"/><test-case name="35900reT19.i tokoe:invalid" result="pass"/><test-case name="35901reT20 tokoe:valid" result="pass"/><test-case name="35902reT20.i tokoe:invalid" result="pass"/><test-case name="35903reT21 tokoe:valid" result="pass"/><test-case name="35904reT21.i tokoe:invalid" result="pass"/><test-case name="35905reT22 tokoe:valid" result="pass"/><test-case name="35906reT22.i tokoe:invalid" result="pass"/><test-case name="35907reT23 tokoe:valid" result="pass"/><test-case name="35908reT23.i tokoe:invalid" result="pass"/><test-case name="35909reT24 tokoe:valid" result="pass"/><test-case name="35910reT24.i tokoe:invalid" result="pass"/><test-case name="35911reT25 tokoe:valid" result="pass"/><test-case name="35912reT25.i tokoe:invalid" result="pass"/><test-case name="35913reT26 tokoe:valid" result="pass"/><test-case name="35914reT26.i tokoe:invalid" result="pass"/><test-case name="35915reT27 tokoe:valid" result="pass"/><test-case name="35916reT27.i tokoe:invalid" result="pass"/><test-case name="35917reT28 tokoe:valid" result="pass"/><test-case name="35918reT28.i tokoe:invalid" result="pass"/><test-case name="35919reT29 tokoe:valid" result="pass"/><test-case name="35920reT29.i tokoe:invalid" result="pass"/><test-case name="35921reT30 tokoe:valid" result="pass"/><test-case name="35922reT30.i tokoe:invalid" result="pass"/><test-case name="35923reT31 tokoe:valid" result="pass"/><test-case name="35924reT31.i tokoe:invalid" result="pass"/><test-case name="35925reT32 tokoe:valid" result="pass"/><test-case name="35926reT32.i tokoe:invalid" result="pass"/><test-case name="35927reT33 tokoe:valid" result="pass"/><test-case name="35928reT33.i tokoe:invalid" result="pass"/><test-case name="35929reT34 tokoe:valid" result="pass"/><test-case name="35930reT34.i tokoe:invalid" result="pass"/><test-case name="35931reT35 tokoe:valid" result="pass"/><test-case name="35932reT35.i tokoe:invalid" result="pass"/><test-case name="35933reT36 tokoe:valid" result="pass"/><test-case name="35934reT36.i tokoe:invalid" result="pass"/><test-case name="35935reT37 tokoe:valid" result="pass"/><test-case name="35936reT37.i tokoe:invalid" result="pass"/><test-case name="35937reT38 tokoe:valid" result="pass"/><test-case name="35938reT38.i tokoe:invalid" result="fail"/><test-case name="35939reT39 tokoe:valid" result="pass"/><test-case name="35940reT39.i tokoe:invalid" result="pass"/><test-case name="35941reT40 tokoe:valid" result="pass"/><test-case name="35942reT40.i tokoe:invalid" result="pass"/><test-case name="35943reT41 tokoe:valid" result="pass"/><test-case name="35944reT41.i tokoe:invalid" result="pass"/><test-case name="35945reT42 tokoe:valid" result="pass"/><test-case name="35946reT42.i tokoe:invalid" result="pass"/><test-case name="35947reT43 tokoe:valid" result="pass"/><test-case name="35948reT43.v tokoe:valid" result="pass"/><test-case name="35949reT44 tokoe:valid" result="pass"/><test-case name="35950reT44.v tokoe:valid" result="pass"/><test-case name="35951reT45 tokoe:valid" result="pass"/><test-case name="35952reT45.v tokoe:valid" result="pass"/><test-case name="35953reT46 tokoe:valid" result="pass"/><test-case name="35954reT46.v tokoe:valid" result="pass"/><test-case name="35955reT47 tokoe:valid" result="pass"/><test-case name="35956reT47.v tokoe:valid" result="pass"/><test-case name="35957reT48 tokoe:valid" result="pass"/><test-case name="35958reT48.v tokoe:valid" result="pass"/><test-case name="35959reT49 tokoe:valid" result="pass"/><test-case name="35960reT49.v tokoe:valid" result="pass"/><test-case name="35961reT50 tokoe:valid" result="pass"/><test-case name="35962reT50.v tokoe:valid" result="pass"/><test-case name="35963reT51 tokoe:valid" result="pass"/><test-case name="35964reT51.v tokoe:valid" result="fail"/><test-case name="35965reT52 tokoe:valid" result="pass"/><test-case name="35966reT52.v tokoe:valid" result="pass"/><test-case name="35967reT53 tokoe:valid" result="pass"/><test-case name="35968reT53.v tokoe:valid" result="pass"/><test-case name="35969reT54 tokoe:valid" result="pass"/><test-case name="35970reT54.v tokoe:valid" result="pass"/><test-case name="35971reT55 tokoe:valid" result="pass"/><test-case name="35972reT55.v tokoe:valid" result="pass"/><test-case name="35973reT56 tokoe:valid" result="pass"/><test-case name="35974reT56.v tokoe:valid" result="pass"/><test-case name="35975reT57 tokoe:valid" result="pass"/><test-case name="35976reT57.v tokoe:valid" result="pass"/><test-case name="35977reT58 tokoe:valid" result="pass"/><test-case name="35978reT58.v tokoe:valid" result="pass"/><test-case name="35979reT59 tokoe:valid" result="pass"/><test-case name="35980reT59.v tokoe:valid" result="pass"/><test-case name="35981reT60 tokoe:valid" result="pass"/><test-case name="35982reT60.v tokoe:valid" result="pass"/><test-case name="35983reT61 tokoe:valid" result="pass"/><test-case name="35984reT61.v tokoe:valid" result="pass"/><test-case name="35985reT62 tokoe:valid" result="pass"/><test-case name="35986reT62.v tokoe:valid" result="pass"/><test-case name="35987reT64 tokoe:valid" result="pass"/><test-case name="35988reT64.v tokoe:valid" result="pass"/><test-case name="35989reT65 tokoe:valid" result="pass"/><test-case name="35990reT65.v tokoe:valid" result="pass"/><test-case name="35991reT66 tokoe:valid" result="pass"/><test-case name="35992reT66.v tokoe:valid" result="pass"/><test-case name="35993reT67 tokoe:valid" result="pass"/><test-case name="35994reT67.v tokoe:valid" result="pass"/><test-case name="35995reT68 tokoe:valid" result="pass"/><test-case name="35996reT68.v tokoe:valid" result="pass"/><test-case name="35997reT69 tokoe:valid" result="pass"/><test-case name="35998reT69.v tokoe:valid" result="pass"/><test-case name="35999reT70 tokoe:valid" result="pass"/><test-case name="36000reT70.v tokoe:valid" result="pass"/><test-case name="36001reT71 tokoe:valid" result="pass"/><test-case name="36002reT71.v tokoe:valid" result="pass"/><test-case name="36003reT72 tokoe:valid" result="pass"/><test-case name="36004reT72.v tokoe:valid" result="pass"/><test-case name="36005reT73 tokoe:valid" result="pass"/><test-case name="36006reT73.v tokoe:valid" result="pass"/><test-case name="36007reT74 tokoe:valid" result="pass"/><test-case name="36008reT74.v tokoe:valid" result="pass"/><test-case name="36009reT75 tokoe:valid" result="pass"/><test-case name="36010reT75.v tokoe:valid" result="pass"/><test-case name="36011reT76 tokoe:valid" result="pass"/><test-case name="36012reT76.v tokoe:valid" result="pass"/><test-case name="36013reT77 tokoe:valid" result="pass"/><test-case name="36014reT77.v tokoe:valid" result="pass"/><test-case name="36015reT78 tokoe:valid" result="pass"/><test-case name="36016reT78.v tokoe:valid" result="pass"/><test-case name="36017reT79 tokoe:valid" result="pass"/><test-case name="36018reT79.v tokoe:valid" result="pass"/><test-case name="36019reT80 tokoe:valid" result="pass"/><test-case name="36020reT80.v tokoe:valid" result="pass"/><test-case name="36021reT81 tokoe:valid" result="pass"/><test-case name="36022reT81.v tokoe:valid" result="pass"/><test-case name="36023reT82 tokoe:valid" result="pass"/><test-case name="36024reT82.v tokoe:valid" result="pass"/><test-case name="36025reT83 tokoe:valid" result="pass"/><test-case name="36026reT83.v tokoe:valid" result="pass"/><test-case name="36027reU3 tokoe:valid" result="pass"/><test-case name="36028reU3.i tokoe:invalid" result="pass"/><test-case name="36029reU4 tokoe:valid" result="pass"/><test-case name="36030reU4.i tokoe:invalid" result="pass"/><test-case name="36031reU5 tokoe:valid" result="pass"/><test-case name="36032reU5.i tokoe:invalid" result="pass"/><test-case name="36033reU6 tokoe:valid" result="pass"/><test-case name="36034reU6.i tokoe:invalid" result="fail"/><test-case name="36035reU7 tokoe:valid" result="pass"/><test-case name="36036reU7.i tokoe:invalid" result="pass"/><test-case name="36037reU8 tokoe:valid" result="pass"/><test-case name="36038reU8.i tokoe:invalid" result="pass"/><test-case name="36039reU9 tokoe:valid" result="pass"/><test-case name="36040reU9.i tokoe:invalid" result="pass"/><test-case name="36041reU10 tokoe:valid" result="pass"/><test-case name="36042reU10.i tokoe:invalid" result="pass"/><test-case name="36043reU11 tokoe:valid" result="pass"/><test-case name="36044reU11.i tokoe:invalid" result="pass"/><test-case name="36045reU12 tokoe:valid" result="pass"/><test-case name="36046reU12.i tokoe:invalid" result="pass"/><test-case name="36047reU13 tokoe:valid" result="pass"/><test-case name="36048reU13.i tokoe:invalid" result="pass"/><test-case name="36049reU14 tokoe:valid" result="pass"/><test-case name="36050reU14.i tokoe:invalid" result="pass"/><test-case name="36051reU15 tokoe:valid" result="pass"/><test-case name="36052reU15.i tokoe:invalid" result="pass"/><test-case name="36053reV2 tokoe:valid" result="pass"/><test-case name="36054reV2.i tokoe:invalid" result="pass"/><test-case name="36055reV3 tokoe:valid" result="pass"/><test-case name="36056reV3.i tokoe:invalid" result="pass"/><test-case name="36057reV4 tokoe:valid" result="pass"/><test-case name="36058reV4.i tokoe:invalid" result="pass"/><test-case name="36059reV5 tokoe:valid" result="pass"/><test-case name="36060reV5.i tokoe:invalid" result="pass"/><test-case name="36061reV6 tokoe:valid" result="pass"/><test-case name="36062reV6.i tokoe:invalid" result="pass"/><test-case name="36063reV7 tokoe:valid" result="pass"/><test-case name="36064reV7.i tokoe:invalid" result="pass"/><test-case name="36065reV8 tokoe:valid" result="pass"/><test-case name="36066reV8.i tokoe:invalid" result="pass"/><test-case name="36067reV9 tokoe:valid" result="pass"/><test-case name="36068reV9.i tokoe:invalid" result="pass"/><test-case name="36069reV10 tokoe:valid" result="pass"/><test-case name="36070reV10.i tokoe:invalid" result="pass"/><test-case name="36071reV11 tokoe:valid" result="pass"/><test-case name="36072reV11.i tokoe:invalid" result="pass"/><test-case name="36073reV12 tokoe:valid" result="pass"/><test-case name="36074reV12.i tokoe:invalid" result="pass"/><test-case name="36075reV13 tokoe:valid" result="pass"/><test-case name="36076reV13.i tokoe:invalid" result="pass"/><test-case name="36077reV14 tokoe:valid" result="pass"/><test-case name="36078reV14.i tokoe:invalid" result="pass"/><test-case name="36079reV15 tokoe:valid" result="pass"/><test-case name="36080reV15.i tokoe:invalid" result="pass"/><test-case name="36081reV16 tokoe:valid" result="pass"/><test-case name="36082reV16.i tokoe:invalid" result="pass"/><test-case name="36083reV17 tokoe:valid" result="pass"/><test-case name="36084reV17.i tokoe:invalid" result="pass"/><test-case name="36085reV18 tokoe:valid" result="pass"/><test-case name="36086reV18.i tokoe:invalid" result="pass"/><test-case name="36087reV19 tokoe:valid" result="pass"/><test-case name="36088reV19.i tokoe:invalid" result="pass"/><test-case name="36089reV20 tokoe:valid" result="pass"/><test-case name="36090reV20.i tokoe:invalid" result="pass"/><test-case name="36091reV21 tokoe:valid" result="pass"/><test-case name="36092reV21.i tokoe:invalid" result="pass"/><test-case name="36093reV22 tokoe:valid" result="pass"/><test-case name="36094reV22.i tokoe:invalid" result="pass"/><test-case name="36095reV23 tokoe:valid" result="pass"/><test-case name="36096reV23.i tokoe:invalid" result="pass"/><test-case name="36097reV24 tokoe:valid" result="pass"/><test-case name="36098reV24.i tokoe:invalid" result="pass"/><test-case name="36099reV25 tokoe:valid" result="pass"/><test-case name="36100reV25.i tokoe:invalid" result="pass"/><test-case name="36101reV26 tokoe:valid" result="pass"/><test-case name="36102reV26.i tokoe:invalid" result="pass"/><test-case name="36103reV27 tokoe:valid" result="pass"/><test-case name="36104reV27.i tokoe:invalid" result="pass"/><test-case name="36105reV28 tokoe:valid" result="pass"/><test-case name="36106reV28.i tokoe:invalid" result="pass"/><test-case name="36107reV29 tokoe:valid" result="pass"/><test-case name="36108reV29.i tokoe:invalid" result="pass"/><test-case name="36109reV30 tokoe:valid" result="pass"/><test-case name="36110reV30.i tokoe:invalid" result="pass"/><test-case name="36111reV31 tokoe:valid" result="pass"/><test-case name="36112reV31.i tokoe:invalid" result="pass"/><test-case name="36113reV32 tokoe:valid" result="pass"/><test-case name="36114reV32.i tokoe:invalid" result="pass"/><test-case name="36115reV33 tokoe:valid" result="pass"/><test-case name="36116reV33.i tokoe:invalid" result="fail"/><test-case name="36117reV34 tokoe:valid" result="pass"/><test-case name="36118reV34.i tokoe:invalid" result="fail"/><test-case name="36119reV35 tokoe:valid" result="pass"/><test-case name="36120reV35.i tokoe:invalid" result="fail"/><test-case name="36121reV36 tokoe:valid" result="pass"/><test-case name="36122reV36.i tokoe:invalid" result="fail"/><test-case name="36123reV37 tokoe:valid" result="pass"/><test-case name="36124reV37.i tokoe:invalid" result="fail"/><test-case name="36125reV38 tokoe:valid" result="pass"/><test-case name="36126reV38.i tokoe:invalid" result="fail"/><test-case name="36127reV39 tokoe:valid" result="pass"/><test-case name="36128reV39.i tokoe:invalid" result="fail"/><test-case name="36129reV40 tokoe:valid" result="pass"/><test-case name="36130reV40.i tokoe:invalid" result="fail"/><test-case name="36131reV41 tokoe:valid" result="pass"/><test-case name="36132reV41.i tokoe:invalid" result="fail"/><test-case name="36133reV42 tokoe:valid" result="pass"/><test-case name="36134reV42.i tokoe:invalid" result="fail"/><test-case name="36135reV43 tokoe:valid" result="pass"/><test-case name="36136reV43.i tokoe:invalid" result="pass"/><test-case name="36137reDA1 tokoe:valid" result="pass"/><test-case name="36138reDA1.v tokoe:valid" result="pass"/><test-case name="36139reDA2 tokoe:valid" result="pass"/><test-case name="36140reDA2.i tokoe:invalid" result="pass"/><test-case name="36141reDA3 tokoe:valid" result="pass"/><test-case name="36142reDA3.i tokoe:invalid" result="pass"/><test-case name="36143reDA4 tokoe:valid" result="pass"/><test-case name="36144reDA4.v tokoe:valid" result="pass"/><test-case name="36145reDA5 tokoe:valid" result="pass"/><test-case name="36146reDA5.v tokoe:valid" result="pass"/><test-case name="36147reDA6 tokoe:valid" result="pass"/><test-case name="36148reDA6.v tokoe:valid" result="pass"/><test-case name="36149reDA7 tokoe:valid" result="pass"/><test-case name="36150reDA8 tokoe:valid" result="pass"/><test-case name="36151reDA9 tokoe:valid" result="pass"/><test-case name="36152reDA9.v tokoe:valid" result="pass"/><test-case name="36153reDA10 tokoe:valid" result="pass"/><test-case name="36154reDA10.i tokoe:invalid" result="pass"/><test-case name="36155reDA11 tokoe:valid" result="pass"/><test-case name="36156reDA11.i tokoe:invalid" result="pass"/><test-case name="36157reDA12 tokoe:valid" result="pass"/><test-case name="36158reDA12.i tokoe:invalid" result="pass"/><test-case name="36159reDA13 tokoe:valid" result="pass"/><test-case name="36160reDA13.i tokoe:invalid" result="pass"/><test-case name="36161reDA14 tokoe:valid" result="pass"/><test-case name="36162reDA14.i tokoe:invalid" result="pass"/><test-case name="36163reDA15 tokoe:valid" result="pass"/><test-case name="36164reDA15.v tokoe:valid" result="pass"/><test-case name="36165reDB1 tokoe:valid" result="pass"/><test-case name="36166reDB1.v tokoe:valid" result="pass"/><test-case name="36167reDB2 tokoe:valid" result="pass"/><test-case name="36168reDB2.v tokoe:valid" result="pass"/><test-case name="36169reDB3 tokoe:valid" result="pass"/><test-case name="36170reDB3.i tokoe:invalid" result="pass"/><test-case name="36171reDB4 tokoe:valid" result="pass"/><test-case name="36172reDB4.i tokoe:invalid" result="pass"/><test-case name="36173reDB5 tokoe:valid" result="pass"/><test-case name="36174reDB5.i tokoe:invalid" result="pass"/><test-case name="36175reDB6 tokoe:valid" result="pass"/><test-case name="36176reDB6.i tokoe:invalid" result="pass"/><test-case name="36177reDC1 tokoe:valid" result="pass"/><test-case name="36178reDC1.v tokoe:valid" result="pass"/><test-case name="36179reDC2 tokoe:valid" result="pass"/><test-case name="36180reDC2.v tokoe:valid" result="pass"/><test-case name="36181reDC3 tokoe:valid" result="pass"/><test-case name="36182reDC3.v tokoe:valid" result="pass"/><test-case name="36183reDC4 tokoe:valid" result="pass"/><test-case name="36184reDC4.v tokoe:valid" result="pass"/><test-case name="36185reDC5 tokoe:valid" result="pass"/><test-case name="36186reDC5.v tokoe:valid" result="pass"/><test-case name="36187reDD1 tokoe:valid" result="pass"/><test-case name="36188reDD1.v tokoe:valid" result="pass"/><test-case name="36189reDD2 tokoe:valid" result="pass"/><test-case name="36190reDD2.i tokoe:invalid" result="pass"/><test-case name="36191reDD3 tokoe:valid" result="pass"/><test-case name="36192reDD3.i tokoe:invalid" result="pass"/><test-case name="36193reDD4 tokoe:valid" result="pass"/><test-case name="36194reDD4.i tokoe:invalid" result="pass"/><test-case name="36195reDD5 tokoe:valid" result="pass"/><test-case name="36196reDD5.i tokoe:invalid" result="pass"/><test-case name="36197reDD6 tokoe:valid" result="pass"/><test-case name="36198reDD6.i tokoe:invalid" result="pass"/><test-case name="36199reDD7 tokoe:valid" result="pass"/><test-case name="36200reDD7.i tokoe:invalid" result="pass"/><test-case name="36201reDD8 tokoe:valid" result="pass"/><test-case name="36202reDD8.i tokoe:invalid" result="pass"/><test-case name="36203reDE1 tokoe:valid" result="pass"/><test-case name="36204reDE1.v tokoe:valid" result="pass"/><test-case name="36205reDE2 tokoe:valid" result="pass"/><test-case name="36206reDE2.i tokoe:invalid" result="pass"/><test-case name="36207reDE3 tokoe:valid" result="pass"/><test-case name="36208reDE3.i tokoe:invalid" result="pass"/><test-case name="36209reDE4 tokoe:valid" result="pass"/><test-case name="36210reDE4.i tokoe:invalid" result="pass"/><test-case name="36211reDF1 tokoe:valid" result="pass"/><test-case name="36212reDF1.v tokoe:valid" result="pass"/><test-case name="36213reDF2 tokoe:valid" result="pass"/><test-case name="36214reDF2.v tokoe:valid" result="pass"/><test-case name="36215reDF3 tokoe:valid" result="pass"/><test-case name="36216reDF3.i tokoe:invalid" result="pass"/><test-case name="36217reDF5 tokoe:valid" result="pass"/><test-case name="36218reDF5.i tokoe:invalid" result="pass"/><test-case name="36219reDG1 tokoe:valid" result="pass"/><test-case name="36220reDG1.v tokoe:valid" result="pass"/><test-case name="36221reDG3 tokoe:valid" result="pass"/><test-case name="36222reDG3.v tokoe:valid" result="pass"/><test-case name="36223reDG4 tokoe:valid" result="pass"/><test-case name="36224reDG4.i tokoe:invalid" result="pass"/><test-case name="36225reDG5 tokoe:valid" result="pass"/><test-case name="36226reDG5.v tokoe:valid" result="pass"/><test-case name="36227reDG6 tokoe:valid" result="pass"/><test-case name="36228reDG6.v tokoe:valid" result="pass"/><test-case name="36229reDG7 tokoe:valid" result="pass"/><test-case name="36230reDG7.v tokoe:valid" result="fail"/><test-case name="36231reDH2 tokoe:valid" result="pass"/><test-case name="36232reDH2.v tokoe:valid" result="pass"/><test-case name="36233reDH3 tokoe:valid" result="pass"/><test-case name="36234reDH3.v tokoe:valid" result="pass"/><test-case name="36235reDH4 tokoe:valid" result="pass"/><test-case name="36236reDH4.v tokoe:valid" result="pass"/><test-case name="36237reDH5 tokoe:valid" result="pass"/><test-case name="36238reDH5.v tokoe:valid" result="pass"/><test-case name="36239reDH6 tokoe:valid" result="pass"/><test-case name="36240reDH6.v tokoe:valid" result="pass"/><test-case name="36241reDH7 tokoe:valid" result="pass"/><test-case name="36242reDH7.v tokoe:valid" result="pass"/><test-case name="36243reDH7a tokoe:valid" result="pass"/><test-case name="36244reDH7a.i tokoe:invalid" result="pass"/><test-case name="36245reDH10 tokoe:valid" result="pass"/><test-case name="36246reDH11 tokoe:valid" result="pass"/><test-case name="36247reDH11.v tokoe:valid" result="pass"/><test-case name="36248reDH12 tokoe:valid" result="pass"/><test-case name="36249reDI1 tokoe:valid" result="pass"/><test-case name="36250reDI1.v tokoe:valid" result="pass"/><test-case name="36251reDI2 tokoe:valid" result="pass"/><test-case name="36252reDI2.v tokoe:valid" result="pass"/><test-case name="36253reDI3 tokoe:valid" result="pass"/><test-case name="36254reDI3.i tokoe:invalid" result="pass"/><test-case name="36255reDI4 tokoe:valid" result="pass"/><test-case name="36256reDI4.i tokoe:invalid" result="pass"/><test-case name="36257reDI5 tokoe:valid" result="pass"/><test-case name="36258reDI5.i tokoe:invalid" result="pass"/><test-case name="36259reDI6 tokoe:valid" result="pass"/><test-case name="36260reDI6.v tokoe:valid" result="pass"/><test-case name="36261reDI7 tokoe:valid" result="pass"/><test-case name="36262reDI7.v tokoe:valid" result="pass"/><test-case name="36263reDI8 tokoe:valid" result="pass"/><test-case name="36264reDI8.v tokoe:valid" result="pass"/><test-case name="36265reDI9 tokoe:valid" result="pass"/><test-case name="36266reDI9.v tokoe:valid" result="pass"/><test-case name="36267reDI10 tokoe:valid" result="pass"/><test-case name="36268reDI10.v tokoe:valid" result="pass"/><test-case name="36269reDI11 tokoe:valid" result="pass"/><test-case name="36270reDI11.v tokoe:valid" result="pass"/><test-case name="36271reDI12 tokoe:valid" result="pass"/><test-case name="36272reDI12.i tokoe:invalid" result="pass"/><test-case name="36273reDI13 tokoe:valid" result="pass"/><test-case name="36274reDI13.i tokoe:invalid" result="pass"/><test-case name="36275reDI14 tokoe:valid" result="pass"/><test-case name="36276reDI14.v tokoe:valid" result="pass"/><test-case name="36277p1 tokoe:invalid" result="pass"/><test-case name="36278p2 tokoe:valid" result="pass"/><test-case name="36279p2.i tokoe:invalid" result="pass"/><test-case name="36280p3 tokoe:valid" result="pass"/><test-case name="36281p3.v tokoe:valid" result="pass"/><test-case name="36282p4 tokoe:valid" result="pass"/><test-case name="36283p4.i tokoe:invalid" result="pass"/><test-case name="36284p5 tokoe:valid" result="pass"/><test-case name="36285p5.v tokoe:valid" result="pass"/><test-case name="36286p6 tokoe:valid" result="pass"/><test-case name="36287p6.v tokoe:valid" result="pass"/><test-case name="36288p7 tokoe:valid" result="pass"/><test-case name="36289p7.i tokoe:invalid" result="pass"/><test-case name="36290p8 tokoe:valid" result="pass"/><test-case name="36291p8.v tokoe:valid" result="pass"/><test-case name="36292p9 tokoe:valid" result="pass"/><test-case name="36293p9.v tokoe:valid" result="pass"/><test-case name="36294p10 tokoe:valid" result="pass"/><test-case name="36295p10.i tokoe:invalid" result="pass"/><test-case name="36296p11 tokoe:valid" result="pass"/><test-case name="36297p11.v tokoe:valid" result="pass"/><test-case name="36298p12 tokoe:valid" result="pass"/><test-case name="36299p12.v tokoe:valid" result="pass"/><test-case name="36300p13 tokoe:valid" result="pass"/><test-case name="36301p13.v tokoe:valid" result="pass"/><test-case name="36302p14 tokoe:valid" result="pass"/><test-case name="36303p14.i tokoe:invalid" result="pass"/><test-case name="36304p15 tokoe:valid" result="pass"/><test-case name="36305p15.i tokoe:invalid" result="pass"/><test-case name="36306p16 tokoe:valid" result="pass"/><test-case name="36307p16.v tokoe:valid" result="pass"/><test-case name="36308p17 tokoe:valid" result="pass"/><test-case name="36309p17.v tokoe:valid" result="pass"/><test-case name="36310p18 tokoe:valid" result="pass"/><test-case name="36311p18.i tokoe:invalid" result="pass"/><test-case name="36312p19 tokoe:valid" result="pass"/><test-case name="36313p19.i tokoe:invalid" result="pass"/><test-case name="36314p20 tokoe:valid" result="pass"/><test-case name="36315p20.v tokoe:valid" result="pass"/><test-case name="36316p21 tokoe:valid" result="pass"/><test-case name="36317p21.i tokoe:invalid" result="fail"/><test-case name="36318RegexTest_1 tokoe:valid" result="pass"/><test-case name="36319RegexTest_1.v tokoe:valid" result="pass"/><test-case name="36320RegexTest_2 tokoe:valid" result="pass"/><test-case name="36321RegexTest_2.v tokoe:valid" result="pass"/><test-case name="36322RegexTest_3 tokoe:valid" result="pass"/><test-case name="36323RegexTest_3.v tokoe:valid" result="pass"/><test-case name="36324RegexTest_4 tokoe:valid" result="pass"/><test-case name="36325RegexTest_4.v tokoe:valid" result="pass"/><test-case name="36326RegexTest_5 tokoe:valid" result="pass"/><test-case name="36327RegexTest_5.v tokoe:valid" result="pass"/><test-case name="36328RegexTest_6 tokoe:valid" result="pass"/><test-case name="36329RegexTest_6.v tokoe:valid" result="pass"/><test-case name="36330RegexTest_7 tokoe:valid" result="pass"/><test-case name="36331RegexTest_7.i tokoe:invalid" result="pass"/><test-case name="36332RegexTest_8 tokoe:valid" result="pass"/><test-case name="36333RegexTest_8.i tokoe:invalid" result="pass"/><test-case name="36334RegexTest_10 tokoe:valid" result="pass"/><test-case name="36335RegexTest_10.i tokoe:invalid" result="pass"/><test-case name="36336RegexTest_12 tokoe:valid" result="pass"/><test-case name="36337RegexTest_12.i tokoe:invalid" result="pass"/><test-case name="36338RegexTest_13 tokoe:valid" result="pass"/><test-case name="36339RegexTest_13.i tokoe:invalid" result="pass"/><test-case name="36340RegexTest_20 tokoe:valid" result="pass"/><test-case name="36341RegexTest_20.v tokoe:valid" result="pass"/><test-case name="36342RegexTest_21 tokoe:valid" result="pass"/><test-case name="36343RegexTest_21.v tokoe:valid" result="pass"/><test-case name="36344RegexTest_35 tokoe:valid" result="pass"/><test-case name="36345RegexTest_35.i tokoe:invalid" result="pass"/><test-case name="36346RegexTest_36 tokoe:valid" result="pass"/><test-case name="36347RegexTest_36.i tokoe:invalid" result="pass"/><test-case name="36348RegexTest_37 tokoe:valid" result="pass"/><test-case name="36349RegexTest_37.i tokoe:invalid" result="pass"/><test-case name="36350RegexTest_38 tokoe:valid" result="pass"/><test-case name="36351RegexTest_38.i tokoe:invalid" result="pass"/><test-case name="36352RegexTest_39 tokoe:valid" result="pass"/><test-case name="36353RegexTest_39.i tokoe:invalid" result="pass"/><test-case name="36354RegexTest_40 tokoe:valid" result="pass"/><test-case name="36355RegexTest_40.i tokoe:invalid" result="pass"/><test-case name="36356RegexTest_41 tokoe:valid" result="pass"/><test-case name="36357RegexTest_41.v tokoe:valid" result="pass"/><test-case name="36358RegexTest_42 tokoe:valid" result="pass"/><test-case name="36359RegexTest_42.v tokoe:valid" result="pass"/><test-case name="36360RegexTest_63 tokoe:valid" result="pass"/><test-case name="36361RegexTest_63.i tokoe:invalid" result="pass"/><test-case name="36362RegexTest_66 tokoe:valid" result="pass"/><test-case name="36363RegexTest_66.i tokoe:invalid" result="pass"/><test-case name="36364RegexTest_67 tokoe:valid" result="pass"/><test-case name="36365RegexTest_67.i tokoe:invalid" result="pass"/><test-case name="36366RegexTest_68 tokoe:valid" result="pass"/><test-case name="36367RegexTest_68.i tokoe:invalid" result="pass"/><test-case name="36368RegexTest_69 tokoe:valid" result="pass"/><test-case name="36369RegexTest_69.i tokoe:invalid" result="pass"/><test-case name="36370RegexTest_70 tokoe:valid" result="pass"/><test-case name="36371RegexTest_70.i tokoe:invalid" result="pass"/><test-case name="36372RegexTest_71 tokoe:valid" result="pass"/><test-case name="36373RegexTest_71.i tokoe:invalid" result="pass"/><test-case name="36374RegexTest_72 tokoe:valid" result="pass"/><test-case name="36375RegexTest_72.v tokoe:valid" result="pass"/><test-case name="36376RegexTest_73 tokoe:valid" result="pass"/><test-case name="36377RegexTest_73.v tokoe:valid" result="pass"/><test-case name="36378RegexTest_74 tokoe:valid" result="pass"/><test-case name="36379RegexTest_74.i tokoe:invalid" result="pass"/><test-case name="36380RegexTest_75 tokoe:valid" result="pass"/><test-case name="36381RegexTest_75.i tokoe:invalid" result="pass"/><test-case name="36382RegexTest_76 tokoe:valid" result="pass"/><test-case name="36383RegexTest_76.i tokoe:invalid" result="pass"/><test-case name="36384RegexTest_77 tokoe:valid" result="pass"/><test-case name="36385RegexTest_77.i tokoe:invalid" result="pass"/><test-case name="36386RegexTest_78 tokoe:valid" result="pass"/><test-case name="36387RegexTest_78.i tokoe:invalid" result="pass"/><test-case name="36388RegexTest_79 tokoe:valid" result="pass"/><test-case name="36389RegexTest_79.i tokoe:invalid" result="pass"/><test-case name="36390RegexTest_80 tokoe:valid" result="pass"/><test-case name="36391RegexTest_80.v tokoe:valid" result="pass"/><test-case name="36392RegexTest_81 tokoe:valid" result="pass"/><test-case name="36393RegexTest_81.v tokoe:valid" result="pass"/><test-case name="36394RegexTest_117 tokoe:valid" result="pass"/><test-case name="36395RegexTest_117.i tokoe:invalid" result="pass"/><test-case name="36396RegexTest_118 tokoe:valid" result="pass"/><test-case name="36397RegexTest_118.i tokoe:invalid" result="pass"/><test-case name="36398RegexTest_175 tokoe:valid" result="pass"/><test-case name="36399RegexTest_175.i tokoe:invalid" result="pass"/><test-case name="36400RegexTest_176 tokoe:valid" result="pass"/><test-case name="36401RegexTest_176.i tokoe:invalid" result="pass"/><test-case name="36402RegexTest_177 tokoe:valid" result="pass"/><test-case name="36403RegexTest_177.i tokoe:invalid" result="pass"/><test-case name="36404RegexTest_180 tokoe:valid" result="pass"/><test-case name="36405RegexTest_180.i tokoe:invalid" result="pass"/><test-case name="36406RegexTest_181 tokoe:valid" result="pass"/><test-case name="36407RegexTest_181.i tokoe:invalid" result="pass"/><test-case name="36408RegexTest_182 tokoe:valid" result="pass"/><test-case name="36409RegexTest_182.i tokoe:invalid" result="pass"/><test-case name="36410RegexTest_234 tokoe:valid" result="pass"/><test-case name="36411RegexTest_234.v tokoe:valid" result="pass"/><test-case name="36412RegexTest_235 tokoe:valid" result="pass"/><test-case name="36413RegexTest_235.i tokoe:invalid" result="pass"/><test-case name="36414RegexTest_236 tokoe:valid" result="pass"/><test-case name="36415RegexTest_236.i tokoe:invalid" result="pass"/><test-case name="36416RegexTest_239 tokoe:valid" result="pass"/><test-case name="36417RegexTest_239.i tokoe:invalid" result="pass"/><test-case name="36418RegexTest_250 tokoe:valid" result="pass"/><test-case name="36419RegexTest_250.i tokoe:invalid" result="pass"/><test-case name="36420RegexTest_251 tokoe:valid" result="pass"/><test-case name="36421RegexTest_251.i tokoe:invalid" result="pass"/><test-case name="36422RegexTest_252 tokoe:valid" result="pass"/><test-case name="36423RegexTest_252.i tokoe:invalid" result="pass"/><test-case name="36424RegexTest_253 tokoe:valid" result="pass"/><test-case name="36425RegexTest_253.i tokoe:invalid" result="pass"/><test-case name="36426RegexTest_254 tokoe:valid" result="pass"/><test-case name="36427RegexTest_254.i tokoe:invalid" result="pass"/><test-case name="36428RegexTest_255 tokoe:valid" result="pass"/><test-case name="36429RegexTest_255.i tokoe:invalid" result="pass"/><test-case name="36430RegexTest_259 tokoe:valid" result="pass"/><test-case name="36431RegexTest_259.v tokoe:valid" result="pass"/><test-case name="36432RegexTest_260 tokoe:valid" result="pass"/><test-case name="36433RegexTest_260.v tokoe:valid" result="pass"/><test-case name="36434RegexTest_261 tokoe:valid" result="pass"/><test-case name="36435RegexTest_261.v tokoe:valid" result="pass"/><test-case name="36436RegexTest_262 tokoe:valid" result="pass"/><test-case name="36437RegexTest_262.v tokoe:valid" result="pass"/><test-case name="36438RegexTest_263 tokoe:valid" result="pass"/><test-case name="36439RegexTest_263.v tokoe:valid" result="pass"/><test-case name="36440RegexTest_264 tokoe:valid" result="pass"/><test-case name="36441RegexTest_264.v tokoe:valid" result="pass"/><test-case name="36442RegexTest_267 tokoe:valid" result="pass"/><test-case name="36443RegexTest_267.i tokoe:invalid" result="pass"/><test-case name="36444RegexTest_268 tokoe:valid" result="pass"/><test-case name="36445RegexTest_268.i tokoe:invalid" result="pass"/><test-case name="36446RegexTest_269 tokoe:valid" result="pass"/><test-case name="36447RegexTest_269.i tokoe:invalid" result="pass"/><test-case name="36448RegexTest_270 tokoe:valid" result="pass"/><test-case name="36449RegexTest_270.i tokoe:invalid" result="pass"/><test-case name="36450RegexTest_271 tokoe:valid" result="pass"/><test-case name="36451RegexTest_271.i tokoe:invalid" result="pass"/><test-case name="36452RegexTest_272 tokoe:valid" result="pass"/><test-case name="36453RegexTest_272.i tokoe:invalid" result="pass"/><test-case name="36454RegexTest_273 tokoe:valid" result="pass"/><test-case name="36455RegexTest_273.i tokoe:invalid" result="pass"/><test-case name="36456RegexTest_274 tokoe:valid" result="pass"/><test-case name="36457RegexTest_274.i tokoe:invalid" result="pass"/><test-case name="36458RegexTest_275 tokoe:valid" result="pass"/><test-case name="36459RegexTest_275.i tokoe:invalid" result="pass"/><test-case name="36460RegexTest_276 tokoe:valid" result="pass"/><test-case name="36461RegexTest_276.i tokoe:invalid" result="pass"/><test-case name="36462RegexTest_277 tokoe:valid" result="pass"/><test-case name="36463RegexTest_277.i tokoe:invalid" result="pass"/><test-case name="36464RegexTest_278 tokoe:valid" result="pass"/><test-case name="36465RegexTest_278.i tokoe:invalid" result="pass"/><test-case name="36466RegexTest_279 tokoe:valid" result="pass"/><test-case name="36467RegexTest_279.i tokoe:invalid" result="pass"/><test-case name="36468RegexTest_280 tokoe:valid" result="pass"/><test-case name="36469RegexTest_280.i tokoe:invalid" result="pass"/><test-case name="36470RegexTest_281 tokoe:valid" result="pass"/><test-case name="36471RegexTest_281.i tokoe:invalid" result="pass"/><test-case name="36472RegexTest_282 tokoe:valid" result="pass"/><test-case name="36473RegexTest_282.i tokoe:invalid" result="pass"/><test-case name="36474RegexTest_283 tokoe:valid" result="pass"/><test-case name="36475RegexTest_283.i tokoe:invalid" result="pass"/><test-case name="36476RegexTest_284 tokoe:valid" result="pass"/><test-case name="36477RegexTest_284.i tokoe:invalid" result="pass"/><test-case name="36478RegexTest_285 tokoe:valid" result="pass"/><test-case name="36479RegexTest_285.i tokoe:invalid" result="pass"/><test-case name="36480RegexTest_286 tokoe:valid" result="pass"/><test-case name="36481RegexTest_286.i tokoe:invalid" result="pass"/><test-case name="36482RegexTest_319 tokoe:valid" result="pass"/><test-case name="36483RegexTest_319.v tokoe:valid" result="pass"/><test-case name="36484RegexTest_322 tokoe:valid" result="fail"/><test-case name="36485RegexTest_322.i tokoe:invalid" result="pass"/><test-case name="36486RegexTest_323 tokoe:valid" result="fail"/><test-case name="36487RegexTest_323.i tokoe:invalid" result="pass"/><test-case name="36488RegexTest_324 tokoe:valid" result="fail"/><test-case name="36489RegexTest_324.i tokoe:invalid" result="pass"/><test-case name="36490RegexTest_325 tokoe:valid" result="fail"/><test-case name="36491RegexTest_325.i tokoe:invalid" result="pass"/><test-case name="36492RegexTest_326 tokoe:valid" result="fail"/><test-case name="36493RegexTest_326.i tokoe:invalid" result="pass"/><test-case name="36494RegexTest_327 tokoe:valid" result="fail"/><test-case name="36495RegexTest_327.i tokoe:invalid" result="pass"/><test-case name="36496RegexTest_328 tokoe:valid" result="fail"/><test-case name="36497RegexTest_328.i tokoe:invalid" result="pass"/><test-case name="36498RegexTest_329 tokoe:valid" result="fail"/><test-case name="36499RegexTest_329.i tokoe:invalid" result="pass"/><test-case name="36500RegexTest_332 tokoe:valid" result="fail"/><test-case name="36501RegexTest_332.i tokoe:invalid" result="pass"/><test-case name="36502RegexTest_333 tokoe:valid" result="fail"/><test-case name="36503RegexTest_333.i tokoe:invalid" result="pass"/><test-case name="36504RegexTest_334 tokoe:valid" result="fail"/><test-case name="36505RegexTest_334.i tokoe:invalid" result="pass"/><test-case name="36506RegexTest_335 tokoe:valid" result="fail"/><test-case name="36507RegexTest_335.i tokoe:invalid" result="pass"/><test-case name="36508RegexTest_336 tokoe:valid" result="fail"/><test-case name="36509RegexTest_336.i tokoe:invalid" result="pass"/><test-case name="36510RegexTest_337 tokoe:valid" result="fail"/><test-case name="36511RegexTest_337.i tokoe:invalid" result="pass"/><test-case name="36512RegexTest_339 tokoe:valid" result="fail"/><test-case name="36513RegexTest_339.i tokoe:invalid" result="pass"/><test-case name="36514RegexTest_340 tokoe:valid" result="fail"/><test-case name="36515RegexTest_340.i tokoe:invalid" result="pass"/><test-case name="36516RegexTest_341 tokoe:valid" result="fail"/><test-case name="36517RegexTest_341.i tokoe:invalid" result="pass"/><test-case name="36518RegexTest_342 tokoe:valid" result="fail"/><test-case name="36519RegexTest_342.i tokoe:invalid" result="pass"/><test-case name="36520RegexTest_343 tokoe:valid" result="fail"/><test-case name="36521RegexTest_343.i tokoe:invalid" result="pass"/><test-case name="36522RegexTest_344 tokoe:valid" result="fail"/><test-case name="36523RegexTest_344.i tokoe:invalid" result="pass"/><test-case name="36524RegexTest_345 tokoe:valid" result="fail"/><test-case name="36525RegexTest_345.i tokoe:invalid" result="pass"/><test-case name="36526RegexTest_346 tokoe:valid" result="fail"/><test-case name="36527RegexTest_346.i tokoe:invalid" result="pass"/><test-case name="36528RegexTest_347 tokoe:valid" result="fail"/><test-case name="36529RegexTest_347.i tokoe:invalid" result="pass"/><test-case name="36530RegexTest_348 tokoe:valid" result="fail"/><test-case name="36531RegexTest_348.i tokoe:invalid" result="pass"/><test-case name="36532RegexTest_349 tokoe:valid" result="fail"/><test-case name="36533RegexTest_349.i tokoe:invalid" result="pass"/><test-case name="36534RegexTest_350 tokoe:valid" result="fail"/><test-case name="36535RegexTest_350.i tokoe:invalid" result="pass"/><test-case name="36536RegexTest_352 tokoe:valid" result="fail"/><test-case name="36537RegexTest_352.i tokoe:invalid" result="pass"/><test-case name="36538RegexTest_353 tokoe:valid" result="fail"/><test-case name="36539RegexTest_353.i tokoe:invalid" result="pass"/><test-case name="36540RegexTest_354 tokoe:valid" result="fail"/><test-case name="36541RegexTest_354.i tokoe:invalid" result="pass"/><test-case name="36542RegexTest_356 tokoe:valid" result="fail"/><test-case name="36543RegexTest_356.i tokoe:invalid" result="pass"/><test-case name="36544RegexTest_357 tokoe:valid" result="fail"/><test-case name="36545RegexTest_357.i tokoe:invalid" result="pass"/><test-case name="36546RegexTest_358 tokoe:valid" result="fail"/><test-case name="36547RegexTest_358.i tokoe:invalid" result="pass"/><test-case name="36548RegexTest_359 tokoe:valid" result="fail"/><test-case name="36549RegexTest_359.i tokoe:invalid" result="pass"/><test-case name="36550RegexTest_363 tokoe:valid" result="fail"/><test-case name="36551RegexTest_363.i tokoe:invalid" result="pass"/><test-case name="36552RegexTest_364 tokoe:valid" result="fail"/><test-case name="36553RegexTest_364.i tokoe:invalid" result="pass"/><test-case name="36554RegexTest_365 tokoe:valid" result="fail"/><test-case name="36555RegexTest_365.i tokoe:invalid" result="pass"/><test-case name="36556RegexTest_367 tokoe:valid" result="fail"/><test-case name="36557RegexTest_367.i tokoe:invalid" result="pass"/><test-case name="36558RegexTest_370 tokoe:valid" result="fail"/><test-case name="36559RegexTest_370.i tokoe:invalid" result="pass"/><test-case name="36560RegexTest_371 tokoe:valid" result="fail"/><test-case name="36561RegexTest_371.i tokoe:invalid" result="pass"/><test-case name="36562RegexTest_372 tokoe:valid" result="fail"/><test-case name="36563RegexTest_372.i tokoe:invalid" result="pass"/><test-case name="36564RegexTest_373 tokoe:valid" result="fail"/><test-case name="36565RegexTest_373.i tokoe:invalid" result="pass"/><test-case name="36566RegexTest_374 tokoe:valid" result="fail"/><test-case name="36567RegexTest_374.i tokoe:invalid" result="pass"/><test-case name="36568RegexTest_375 tokoe:valid" result="fail"/><test-case name="36569RegexTest_375.i tokoe:invalid" result="pass"/><test-case name="36570RegexTest_420 tokoe:valid" result="fail"/><test-case name="36571RegexTest_420.i tokoe:invalid" result="pass"/><test-case name="36572RegexTest_421 tokoe:valid" result="fail"/><test-case name="36573RegexTest_421.i tokoe:invalid" result="pass"/><test-case name="36574RegexTest_422 tokoe:valid" result="fail"/><test-case name="36575RegexTest_422.i tokoe:invalid" result="pass"/><test-case name="36576RegexTest_424 tokoe:valid" result="fail"/><test-case name="36577RegexTest_424.i tokoe:invalid" result="pass"/><test-case name="36578RegexTest_425 tokoe:valid" result="fail"/><test-case name="36579RegexTest_425.i tokoe:invalid" result="pass"/><test-case name="36580RegexTest_426 tokoe:valid" result="fail"/><test-case name="36581RegexTest_426.i tokoe:invalid" result="pass"/><test-case name="36582RegexTest_429 tokoe:valid" result="fail"/><test-case name="36583RegexTest_429.i tokoe:invalid" result="pass"/><test-case name="36584RegexTest_430 tokoe:valid" result="fail"/><test-case name="36585RegexTest_430.i tokoe:invalid" result="pass"/><test-case name="36586RegexTest_433 tokoe:valid" result="fail"/><test-case name="36587RegexTest_433.i tokoe:invalid" result="pass"/><test-case name="36588RegexTest_434 tokoe:valid" result="fail"/><test-case name="36589RegexTest_434.i tokoe:invalid" result="pass"/><test-case name="36590RegexTest_438 tokoe:valid" result="fail"/><test-case name="36591RegexTest_438.i tokoe:invalid" result="pass"/><test-case name="36592RegexTest_439 tokoe:valid" result="fail"/><test-case name="36593RegexTest_439.i tokoe:invalid" result="pass"/><test-case name="36594RegexTest_459 tokoe:valid" result="fail"/><test-case name="36595RegexTest_459.i tokoe:invalid" result="pass"/><test-case name="36596RegexTest_460 tokoe:valid" result="fail"/><test-case name="36597RegexTest_460.i tokoe:invalid" result="pass"/><test-case name="36598RegexTest_461 tokoe:valid" result="fail"/><test-case name="36599RegexTest_461.i tokoe:invalid" result="pass"/><test-case name="36600RegexTest_462 tokoe:valid" result="fail"/><test-case name="36601RegexTest_462.i tokoe:invalid" result="pass"/><test-case name="36602RegexTest_466 tokoe:valid" result="pass"/><test-case name="36603RegexTest_466.i tokoe:invalid" result="pass"/><test-case name="36604RegexTest_467 tokoe:valid" result="pass"/><test-case name="36605RegexTest_467.i tokoe:invalid" result="pass"/><test-case name="36606RegexTest_468 tokoe:valid" result="pass"/><test-case name="36607RegexTest_468.i tokoe:invalid" result="pass"/><test-case name="36608RegexTest_474 tokoe:valid" result="pass"/><test-case name="36609RegexTest_474.i tokoe:invalid" result="pass"/><test-case name="36610RegexTest_475 tokoe:valid" result="fail"/><test-case name="36611RegexTest_475.i tokoe:invalid" result="pass"/><test-case name="36612RegexTest_476 tokoe:valid" result="fail"/><test-case name="36613RegexTest_476.i tokoe:invalid" result="pass"/><test-case name="36614RegexTest_488 tokoe:valid" result="pass"/><test-case name="36615RegexTest_488.i tokoe:invalid" result="pass"/><test-case name="36616RegexTest_489 tokoe:valid" result="pass"/><test-case name="36617RegexTest_489.i tokoe:invalid" result="pass"/><test-case name="36618RegexTest_491 tokoe:valid" result="pass"/><test-case name="36619RegexTest_491.i tokoe:invalid" result="pass"/><test-case name="36620RegexTest_492 tokoe:valid" result="pass"/><test-case name="36621RegexTest_492.i tokoe:invalid" result="pass"/><test-case name="36622RegexTest_493 tokoe:valid" result="pass"/><test-case name="36623RegexTest_493.i tokoe:invalid" result="pass"/><test-case name="36624RegexTest_494 tokoe:valid" result="pass"/><test-case name="36625RegexTest_494.i tokoe:invalid" result="pass"/><test-case name="36626RegexTest_495 tokoe:valid" result="pass"/><test-case name="36627RegexTest_495.v tokoe:valid" result="pass"/><test-case name="36628RegexTest_496 tokoe:valid" result="pass"/><test-case name="36629RegexTest_496.i tokoe:invalid" result="pass"/><test-case name="36630RegexTest_497 tokoe:valid" result="pass"/><test-case name="36631RegexTest_497.i tokoe:invalid" result="pass"/><test-case name="36632RegexTest_498 tokoe:valid" result="pass"/><test-case name="36633RegexTest_498.i tokoe:invalid" result="pass"/><test-case name="36634RegexTest_499 tokoe:valid" result="pass"/><test-case name="36635RegexTest_499.i tokoe:invalid" result="pass"/><test-case name="36636RegexTest_500 tokoe:valid" result="pass"/><test-case name="36637RegexTest_500.i tokoe:invalid" result="pass"/><test-case name="36638RegexTest_501 tokoe:valid" result="pass"/><test-case name="36639RegexTest_501.i tokoe:invalid" result="pass"/><test-case name="36640RegexTest_502 tokoe:valid" result="pass"/><test-case name="36641RegexTest_502.i tokoe:invalid" result="pass"/><test-case name="36642RegexTest_503 tokoe:valid" result="pass"/><test-case name="36643RegexTest_503.i tokoe:invalid" result="pass"/><test-case name="36644RegexTest_504 tokoe:valid" result="pass"/><test-case name="36645RegexTest_504.i tokoe:invalid" result="pass"/><test-case name="36646RegexTest_506 tokoe:valid" result="pass"/><test-case name="36647RegexTest_506.i tokoe:invalid" result="pass"/><test-case name="36648RegexTest_508 tokoe:valid" result="pass"/><test-case name="36649RegexTest_508.i tokoe:invalid" result="pass"/><test-case name="36650RegexTest_513 tokoe:valid" result="pass"/><test-case name="36651RegexTest_513.v tokoe:valid" result="pass"/><test-case name="36652RegexTest_514 tokoe:valid" result="pass"/><test-case name="36653RegexTest_514.i tokoe:invalid" result="pass"/><test-case name="36654RegexTest_515 tokoe:valid" result="pass"/><test-case name="36655RegexTest_515.v tokoe:valid" result="pass"/><test-case name="36656RegexTest_520 tokoe:valid" result="pass"/><test-case name="36657RegexTest_520.i tokoe:invalid" result="pass"/><test-case name="36658RegexTest_522 tokoe:valid" result="pass"/><test-case name="36659RegexTest_522.v tokoe:valid" result="pass"/><test-case name="36660RegexTest_525 tokoe:valid" result="pass"/><test-case name="36661RegexTest_525.v tokoe:valid" result="pass"/><test-case name="36662RegexTest_528 tokoe:valid" result="pass"/><test-case name="36663RegexTest_528.i tokoe:invalid" result="pass"/><test-case name="36664RegexTest_529 tokoe:valid" result="pass"/><test-case name="36665RegexTest_529.i tokoe:invalid" result="pass"/><test-case name="36666RegexTest_530 tokoe:valid" result="pass"/><test-case name="36667RegexTest_530.v tokoe:valid" result="pass"/><test-case name="36668RegexTest_531 tokoe:valid" result="pass"/><test-case name="36669RegexTest_531.i tokoe:invalid" result="pass"/><test-case name="36670RegexTest_532 tokoe:valid" result="pass"/><test-case name="36671RegexTest_532.i tokoe:invalid" result="pass"/><test-case name="36672RegexTest_533 tokoe:valid" result="pass"/><test-case name="36673RegexTest_533.i tokoe:invalid" result="pass"/><test-case name="36674RegexTest_535 tokoe:valid" result="pass"/><test-case name="36675RegexTest_535.v tokoe:valid" result="pass"/><test-case name="36676RegexTest_536 tokoe:valid" result="pass"/><test-case name="36677RegexTest_537 tokoe:valid" result="pass"/><test-case name="36678RegexTest_538 tokoe:valid" result="pass"/><test-case name="36679RegexTest_539 tokoe:valid" result="pass"/><test-case name="36680RegexTest_540 tokoe:valid" result="pass"/><test-case name="36681RegexTest_541 tokoe:valid" result="pass"/><test-case name="36682RegexTest_542 tokoe:valid" result="pass"/><test-case name="36683RegexTest_543 tokoe:valid" result="pass"/><test-case name="36684RegexTest_544 tokoe:valid" result="pass"/><test-case name="36685RegexTest_545 tokoe:valid" result="pass"/><test-case name="36686RegexTest_546 tokoe:valid" result="pass"/><test-case name="36687RegexTest_547 tokoe:valid" result="pass"/><test-case name="36688RegexTest_548 tokoe:valid" result="pass"/><test-case name="36689RegexTest_549 tokoe:valid" result="pass"/><test-case name="36690RegexTest_550 tokoe:valid" result="pass"/><test-case name="36691RegexTest_551 tokoe:valid" result="pass"/><test-case name="36692RegexTest_552 tokoe:valid" result="pass"/><test-case name="36693RegexTest_553 tokoe:valid" result="pass"/><test-case name="36694RegexTest_554 tokoe:valid" result="pass"/><test-case name="36695RegexTest_555 tokoe:valid" result="pass"/><test-case name="36696RegexTest_556 tokoe:valid" result="pass"/><test-case name="36697RegexTest_557 tokoe:valid" result="pass"/><test-case name="36698RegexTest_558 tokoe:valid" result="pass"/><test-case name="36699RegexTest_559 tokoe:valid" result="pass"/><test-case name="36700RegexTest_560 tokoe:valid" result="pass"/><test-case name="36701RegexTest_561 tokoe:valid" result="pass"/><test-case name="36702RegexTest_562 tokoe:valid" result="pass"/><test-case name="36703RegexTest_563 tokoe:valid" result="pass"/><test-case name="36704RegexTest_564 tokoe:valid" result="pass"/><test-case name="36705RegexTest_565 tokoe:valid" result="pass"/><test-case name="36706RegexTest_566 tokoe:valid" result="pass"/><test-case name="36707RegexTest_567 tokoe:valid" result="pass"/><test-case name="36708RegexTest_568 tokoe:valid" result="pass"/><test-case name="36709RegexTest_569 tokoe:valid" result="pass"/><test-case name="36710RegexTest_570 tokoe:valid" result="pass"/><test-case name="36711RegexTest_571 tokoe:valid" result="pass"/><test-case name="36712RegexTest_572 tokoe:valid" result="pass"/><test-case name="36713RegexTest_573 tokoe:valid" result="pass"/><test-case name="36714RegexTest_574 tokoe:valid" result="pass"/><test-case name="36715RegexTest_575 tokoe:valid" result="pass"/><test-case name="36716RegexTest_576 tokoe:valid" result="pass"/><test-case name="36717RegexTest_577 tokoe:valid" result="pass"/><test-case name="36718RegexTest_578 tokoe:valid" result="pass"/><test-case name="36719RegexTest_579 tokoe:valid" result="pass"/><test-case name="36720RegexTest_580 tokoe:valid" result="pass"/><test-case name="36721RegexTest_581 tokoe:valid" result="pass"/><test-case name="36722RegexTest_582 tokoe:valid" result="pass"/><test-case name="36723RegexTest_583 tokoe:invalid" result="fail"/><test-case name="36724RegexTest_584 tokoe:invalid" result="pass"/><test-case name="36725RegexTest_585 tokoe:invalid" result="pass"/><test-case name="36726RegexTest_588 tokoe:valid" result="pass"/><test-case name="36727RegexTest_589 tokoe:valid" result="pass"/><test-case name="36728RegexTest_590 tokoe:valid" result="pass"/><test-case name="36729RegexTest_591 tokoe:valid" result="pass"/><test-case name="36730RegexTest_606 tokoe:valid" result="pass"/><test-case name="36731RegexTest_607 tokoe:valid" result="pass"/><test-case name="36732RegexTest_608 tokoe:valid" result="pass"/><test-case name="36733RegexTest_609 tokoe:valid" result="pass"/><test-case name="36734RegexTest_610 tokoe:valid" result="pass"/><test-case name="36735RegexTest_611 tokoe:valid" result="pass"/><test-case name="36736RegexTest_612 tokoe:valid" result="pass"/><test-case name="36737RegexTest_613 tokoe:valid" result="pass"/><test-case name="36738RegexTest_614 tokoe:valid" result="pass"/><test-case name="36739RegexTest_615 tokoe:valid" result="pass"/><test-case name="36740RegexTest_616 tokoe:valid" result="pass"/><test-case name="36741RegexTest_617 tokoe:valid" result="pass"/><test-case name="36742RegexTest_618 tokoe:valid" result="pass"/><test-case name="36743RegexTest_619 tokoe:valid" result="pass"/><test-case name="36744RegexTest_620 tokoe:valid" result="pass"/><test-case name="36745RegexTest_621 tokoe:valid" result="pass"/><test-case name="36746RegexTest_622 tokoe:valid" result="pass"/><test-case name="36747RegexTest_623 tokoe:valid" result="pass"/><test-case name="36748RegexTest_624 tokoe:valid" result="pass"/><test-case name="36749RegexTest_625 tokoe:valid" result="pass"/><test-case name="36750RegexTest_626 tokoe:valid" result="pass"/><test-case name="36751RegexTest_627 tokoe:valid" result="pass"/><test-case name="36752RegexTest_628 tokoe:valid" result="pass"/><test-case name="36753RegexTest_629 tokoe:valid" result="pass"/><test-case name="36754RegexTest_630 tokoe:valid" result="pass"/><test-case name="36755RegexTest_631 tokoe:valid" result="pass"/><test-case name="36756RegexTest_632 tokoe:valid" result="pass"/><test-case name="36757RegexTest_633 tokoe:invalid" result="pass"/><test-case name="36758RegexTest_634 tokoe:invalid" result="pass"/><test-case name="36759RegexTest_635 tokoe:valid" result="pass"/><test-case name="36760RegexTest_636 tokoe:invalid" result="pass"/><test-case name="36761RegexTest_637 tokoe:valid" result="pass"/><test-case name="36762RegexTest_638 tokoe:valid" result="pass"/><test-case name="36763RegexTest_639 tokoe:valid" result="pass"/><test-case name="36764RegexTest_640 tokoe:valid" result="pass"/><test-case name="36765RegexTest_641 tokoe:invalid" result="pass"/><test-case name="36766RegexTest_642 tokoe:invalid" result="pass"/><test-case name="36767RegexTest_643 tokoe:valid" result="pass"/><test-case name="36768RegexTest_644 tokoe:valid" result="pass"/><test-case name="36769RegexTest_645 tokoe:valid" result="pass"/><test-case name="36770RegexTest_646 tokoe:valid" result="pass"/><test-case name="36771RegexTest_647 tokoe:invalid" result="pass"/><test-case name="36772RegexTest_649 tokoe:valid" result="pass"/><test-case name="36773RegexTest_650 tokoe:valid" result="pass"/><test-case name="36774RegexTest_651 tokoe:valid" result="pass"/><test-case name="36775RegexTest_652 tokoe:valid" result="pass"/><test-case name="36776RegexTest_653 tokoe:valid" result="pass"/><test-case name="36777RegexTest_654 tokoe:valid" result="pass"/><test-case name="36778RegexTest_656 tokoe:valid" result="pass"/><test-case name="36779RegexTest_657 tokoe:valid" result="pass"/><test-case name="36780RegexTest_658 tokoe:valid" result="pass"/><test-case name="36781RegexTest_659 tokoe:valid" result="pass"/><test-case name="36782RegexTest_660 tokoe:valid" result="pass"/><test-case name="36783RegexTest_661 tokoe:valid" result="pass"/><test-case name="36784RegexTest_662 tokoe:valid" result="pass"/><test-case name="36785RegexTest_663 tokoe:valid" result="pass"/><test-case name="36786RegexTest_664 tokoe:valid" result="pass"/><test-case name="36787RegexTest_665 tokoe:valid" result="pass"/><test-case name="36788RegexTest_666 tokoe:valid" result="pass"/><test-case name="36789RegexTest_667 tokoe:valid" result="pass"/><test-case name="36790RegexTest_668 tokoe:valid" result="pass"/><test-case name="36791RegexTest_669 tokoe:valid" result="pass"/><test-case name="36792RegexTest_670 tokoe:valid" result="pass"/><test-case name="36793RegexTest_671 tokoe:valid" result="pass"/><test-case name="36794RegexTest_672 tokoe:valid" result="pass"/><test-case name="36795RegexTest_673 tokoe:valid" result="pass"/><test-case name="36796RegexTest_674 tokoe:valid" result="pass"/><test-case name="36797RegexTest_675 tokoe:valid" result="pass"/><test-case name="36798RegexTest_676 tokoe:valid" result="pass"/><test-case name="36799RegexTest_677 tokoe:valid" result="pass"/><test-case name="36800RegexTest_678 tokoe:valid" result="pass"/><test-case name="36801RegexTest_679 tokoe:valid" result="pass"/><test-case name="36802RegexTest_680 tokoe:valid" result="pass"/><test-case name="36803RegexTest_681 tokoe:valid" result="pass"/><test-case name="36804RegexTest_682 tokoe:valid" result="pass"/><test-case name="36805RegexTest_683 tokoe:valid" result="pass"/><test-case name="36806RegexTest_684 tokoe:valid" result="pass"/><test-case name="36807RegexTest_685 tokoe:valid" result="pass"/><test-case name="36808RegexTest_686 tokoe:valid" result="pass"/><test-case name="36809RegexTest_687 tokoe:valid" result="pass"/><test-case name="36810RegexTest_689 tokoe:valid" result="pass"/><test-case name="36811RegexTest_690 tokoe:valid" result="pass"/><test-case name="36812RegexTest_691 tokoe:valid" result="pass"/><test-case name="36813RegexTest_692 tokoe:valid" result="pass"/><test-case name="36814RegexTest_693 tokoe:valid" result="pass"/><test-case name="36815RegexTest_694 tokoe:valid" result="pass"/><test-case name="36816RegexTest_695 tokoe:valid" result="pass"/><test-case name="36817RegexTest_699 tokoe:invalid" result="fail"/><test-case name="36818RegexTest_708 tokoe:valid" result="pass"/><test-case name="36819RegexTest_709 tokoe:valid" result="pass"/><test-case name="36820RegexTest_710 tokoe:valid" result="pass"/><test-case name="36821RegexTest_711 tokoe:valid" result="pass"/><test-case name="36822RegexTest_712 tokoe:valid" result="pass"/><test-case name="36823RegexTest_713 tokoe:valid" result="pass"/><test-case name="36824RegexTest_714 tokoe:valid" result="pass"/><test-case name="36825RegexTest_715 tokoe:valid" result="pass"/><test-case name="36826RegexTest_716 tokoe:valid" result="pass"/><test-case name="36827RegexTest_720 tokoe:valid" result="pass"/><test-case name="36828RegexTest_721 tokoe:valid" result="pass"/><test-case name="36829RegexTest_722 tokoe:valid" result="pass"/><test-case name="36830RegexTest_723 tokoe:valid" result="pass"/><test-case name="36831RegexTest_734 tokoe:valid" result="pass"/><test-case name="36832RegexTest_735 tokoe:valid" result="pass"/><test-case name="36833RegexTest_736 tokoe:valid" result="pass"/><test-case name="36834RegexTest_737 tokoe:valid" result="pass"/><test-case name="36835RegexTest_738 tokoe:valid" result="pass"/><test-case name="36836RegexTest_739 tokoe:valid" result="pass"/><test-case name="36837RegexTest_740 tokoe:valid" result="pass"/><test-case name="36838RegexTest_741 tokoe:valid" result="pass"/><test-case name="36839RegexTest_742 tokoe:valid" result="pass"/><test-case name="36840RegexTest_744 tokoe:valid" result="pass"/><test-case name="36841RegexTest_745 tokoe:valid" result="pass"/><test-case name="36842RegexTest_746 tokoe:valid" result="pass"/><test-case name="36843RegexTest_747 tokoe:valid" result="pass"/><test-case name="36844RegexTest_748 tokoe:valid" result="pass"/><test-case name="36845RegexTest_749 tokoe:valid" result="pass"/><test-case name="36846RegexTest_750 tokoe:valid" result="pass"/><test-case name="36847RegexTest_751 tokoe:valid" result="pass"/><test-case name="36848RegexTest_752 tokoe:invalid" result="fail"/><test-case name="36849RegexTest_753 tokoe:invalid" result="pass"/><test-case name="36850RegexTest_754 tokoe:invalid" result="pass"/><test-case name="36851RegexTest_757 tokoe:valid" result="pass"/><test-case name="36852RegexTest_758 tokoe:valid" result="pass"/><test-case name="36853RegexTest_759 tokoe:valid" result="pass"/><test-case name="36854RegexTest_760 tokoe:valid" result="pass"/><test-case name="36855RegexTest_763 tokoe:valid" result="pass"/><test-case name="36856RegexTest_764 tokoe:valid" result="pass"/><test-case name="36857RegexTest_765 tokoe:valid" result="pass"/><test-case name="36858RegexTest_766 tokoe:invalid" result="pass"/><test-case name="36859RegexTest_767 tokoe:invalid" result="pass"/><test-case name="36860RegexTest_768 tokoe:valid" result="pass"/><test-case name="36861RegexTest_769 tokoe:invalid" result="pass"/><test-case name="36862RegexTest_770 tokoe:valid" result="pass"/><test-case name="36863RegexTest_771 tokoe:valid" result="pass"/><test-case name="36864RegexTest_772 tokoe:valid" result="pass"/><test-case name="36865RegexTest_773 tokoe:valid" result="pass"/><test-case name="36866RegexTest_774 tokoe:invalid" result="pass"/><test-case name="36867RegexTest_775 tokoe:invalid" result="pass"/><test-case name="36868RegexTest_776 tokoe:valid" result="pass"/><test-case name="36869RegexTest_777 tokoe:valid" result="pass"/><test-case name="36870RegexTest_778 tokoe:valid" result="pass"/><test-case name="36871RegexTest_779 tokoe:valid" result="pass"/><test-case name="36872RegexTest_780 tokoe:invalid" result="pass"/><test-case name="36873RegexTest_784 tokoe:valid" result="pass"/><test-case name="36874RegexTest_785 tokoe:valid" result="pass"/><test-case name="36875RegexTest_786 tokoe:valid" result="pass"/><test-case name="36876RegexTest_787 tokoe:valid" result="pass"/><test-case name="36877RegexTest_788 tokoe:valid" result="pass"/><test-case name="36878RegexTest_789 tokoe:valid" result="pass"/><test-case name="36879RegexTest_792 tokoe:valid" result="pass"/><test-case name="36880RegexTest_793 tokoe:valid" result="pass"/><test-case name="36881RegexTest_794 tokoe:valid" result="pass"/><test-case name="36882RegexTest_795 tokoe:valid" result="pass"/><test-case name="36883RegexTest_796 tokoe:valid" result="pass"/><test-case name="36884RegexTest_797 tokoe:valid" result="pass"/><test-case name="36885RegexTest_798 tokoe:valid" result="pass"/><test-case name="36886RegexTest_799 tokoe:valid" result="pass"/><test-case name="36887RegexTest_800 tokoe:valid" result="pass"/><test-case name="36888RegexTest_801 tokoe:valid" result="pass"/><test-case name="36889RegexTest_802 tokoe:valid" result="pass"/><test-case name="36890RegexTest_803 tokoe:valid" result="pass"/><test-case name="36891RegexTest_804 tokoe:valid" result="pass"/><test-case name="36892RegexTest_805 tokoe:valid" result="pass"/><test-case name="36893RegexTest_806 tokoe:valid" result="pass"/><test-case name="36894RegexTest_807 tokoe:valid" result="pass"/><test-case name="36895RegexTest_808 tokoe:valid" result="pass"/><test-case name="36896RegexTest_809 tokoe:valid" result="pass"/><test-case name="36897RegexTest_810 tokoe:valid" result="pass"/><test-case name="36898RegexTest_811 tokoe:valid" result="pass"/><test-case name="36899RegexTest_812 tokoe:valid" result="pass"/><test-case name="36900RegexTest_813 tokoe:valid" result="pass"/><test-case name="36901RegexTest_814 tokoe:valid" result="pass"/><test-case name="36902RegexTest_815 tokoe:valid" result="pass"/><test-case name="36903RegexTest_816 tokoe:valid" result="pass"/><test-case name="36904RegexTest_817 tokoe:valid" result="pass"/><test-case name="36905RegexTest_818 tokoe:valid" result="pass"/><test-case name="36906RegexTest_819 tokoe:valid" result="pass"/><test-case name="36907RegexTest_820 tokoe:valid" result="pass"/><test-case name="36908RegexTest_821 tokoe:valid" result="pass"/><test-case name="36909RegexTest_822 tokoe:valid" result="pass"/><test-case name="36910RegexTest_823 tokoe:valid" result="pass"/><test-case name="36911RegexTest_825 tokoe:valid" result="pass"/><test-case name="36912RegexTest_828 tokoe:valid" result="pass"/><test-case name="36913RegexTest_829 tokoe:valid" result="pass"/><test-case name="36914RegexTest_830 tokoe:valid" result="pass"/><test-case name="36915RegexTest_831 tokoe:valid" result="pass"/><test-case name="36916RegexTest_832 tokoe:valid" result="pass"/><test-case name="36917RegexTest_833 tokoe:valid" result="pass"/><test-case name="36918RegexTest_834 tokoe:valid" result="pass"/><test-case name="36919RegexTest_835 tokoe:valid" result="pass"/><test-case name="36920RegexTest_849 tokoe:valid" result="pass"/><test-case name="36921RegexTest_850 tokoe:invalid" result="pass"/><test-case name="36922RegexTest_858 tokoe:valid" result="pass"/><test-case name="36923RegexTest_859 tokoe:valid" result="pass"/><test-case name="36924RegexTest_867 tokoe:valid" result="pass"/><test-case name="36925RegexTest_868 tokoe:valid" result="pass"/><test-case name="36926RegexTest_869 tokoe:valid" result="pass"/><test-case name="36927RegexTest_882 tokoe:valid" result="pass"/><test-case name="36928RegexTest_883 tokoe:valid" result="pass"/><test-case name="36929RegexTest_884 tokoe:valid" result="pass"/><test-case name="36930RegexTest_885 tokoe:valid" result="pass"/><test-case name="36931RegexTest_886 tokoe:valid" result="pass"/><test-case name="36932RegexTest_887 tokoe:valid" result="pass"/><test-case name="36933RegexTest_927 tokoe:valid" result="pass"/><test-case name="36934RegexTest_947 tokoe:valid" result="pass"/><test-case name="36935RegexTest_948 tokoe:valid" result="pass"/><test-case name="36936RegexTest_965 tokoe:invalid" result="pass"/><test-case name="36937RegexTest_966 tokoe:invalid" result="pass"/><test-case name="36938RegexTest_973 tokoe:valid" result="pass"/><test-case name="36939RegexTest_978 tokoe:valid" result="pass"/><test-case name="36940RegexTest_979 tokoe:valid" result="pass"/><test-case name="36941RegexTest_980 tokoe:valid" result="pass"/><test-case name="36942RegexTest_981 tokoe:valid" result="pass"/><test-case name="36943RegexTest_982 tokoe:valid" result="pass"/><test-case name="36944RegexTest_983 tokoe:valid" result="pass"/><test-case name="36945RegexTest_984 tokoe:valid" result="pass"/><test-case name="36946RegexTest_985 tokoe:valid" result="pass"/><test-case name="36947RegexTest_986 tokoe:valid" result="pass"/><test-case name="36948RegexTest_987 tokoe:valid" result="pass"/><test-case name="36949RegexTest_992 tokoe:invalid" result="pass"/><test-case name="36950RegexTest_993 tokoe:invalid" result="fail"/><test-case name="36951RegexTest_999 tokoe:invalid" result="pass"/><test-case name="36952RegexTest_1005 tokoe:valid" result="pass"/><test-case name="36953RegexTest_1006 tokoe:valid" result="pass"/><test-case name="36954RegexTest_1020 tokoe:valid" result="pass"/><test-case name="36955RegexTest_1021 tokoe:valid" result="pass"/><test-case name="36956RegexTest_1022 tokoe:valid" result="pass"/><test-case name="36957RegexTest_1023 tokoe:valid" result="pass"/><test-case name="36958RegexTest_1024 tokoe:valid" result="pass"/><test-case name="36959RegexTest_1025 tokoe:valid" result="pass"/><test-case name="36960RegexTest_1026 tokoe:valid" result="pass"/><test-case name="36961RegexTest_1027 tokoe:valid" result="pass"/><test-case name="36962RegexTest_1028 tokoe:valid" result="pass"/><test-case name="36963RegexTest_1029 tokoe:valid" result="pass"/><test-case name="36964RegexTest_1030 tokoe:valid" result="pass"/><test-case name="36965RegexTest_1031 tokoe:valid" result="pass"/><test-case name="36966RegexTest_1032 tokoe:valid" result="pass"/><test-case name="36967RegexTest_1033 tokoe:valid" result="pass"/><test-case name="36968RegexTest_1034 tokoe:valid" result="pass"/><test-case name="36969RegexTest_1035 tokoe:valid" result="pass"/><test-case name="36970RegexTest_1036 tokoe:valid" result="pass"/><test-case name="36971RegexTest_1037 tokoe:valid" result="pass"/><test-case name="36972RegexTest_1038 tokoe:valid" result="pass"/><test-case name="36973RegexTest_1039 tokoe:valid" result="pass"/><test-case name="36974RegexTest_1040 tokoe:valid" result="pass"/><test-case name="36975RegexTest_1041 tokoe:valid" result="pass"/><test-case name="36976RegexTest_1042 tokoe:valid" result="pass"/><test-case name="36977RegexTest_1043 tokoe:valid" result="pass"/><test-case name="36978RegexTest_1044 tokoe:valid" result="pass"/><test-case name="36979RegexTest_1045 tokoe:valid" result="pass"/><test-case name="36980RegexTest_1046 tokoe:valid" result="pass"/><test-case name="36981RegexTest_1047 tokoe:valid" result="pass"/><test-case name="36982RegexTest_1048 tokoe:valid" result="pass"/><test-case name="36983RegexTest_1049 tokoe:valid" result="pass"/><test-case name="36984RegexTest_1050 tokoe:valid" result="pass"/><test-case name="36985RegexTest_1051 tokoe:valid" result="pass"/><test-case name="36986RegexTest_1052 tokoe:valid" result="pass"/><test-case name="36987RegexTest_1053 tokoe:valid" result="pass"/><test-case name="36988RegexTest_1054 tokoe:valid" result="pass"/><test-case name="36989RegexTest_1055 tokoe:valid" result="pass"/><test-case name="36990RegexTest_1056 tokoe:valid" result="pass"/><test-case name="36991RegexTest_1057 tokoe:valid" result="pass"/><test-case name="36992RegexTest_1058 tokoe:valid" result="pass"/><test-case name="36993RegexTest_1059 tokoe:valid" result="pass"/><test-case name="36994RegexTest_1060 tokoe:valid" result="pass"/><test-case name="36995RegexTest_1061 tokoe:valid" result="pass"/><test-case name="36996RegexTest_1062 tokoe:valid" result="pass"/><test-case name="36997RegexTest_1063 tokoe:valid" result="pass"/><test-case name="36998RegexTest_1064 tokoe:valid" result="pass"/><test-case name="36999RegexTest_1065 tokoe:valid" result="pass"/><test-case name="37000RegexTest_1066 tokoe:valid" result="pass"/><test-case name="37001RegexTest_1067 tokoe:invalid" result="fail"/><test-case name="37002RegexTest_1068 tokoe:invalid" result="pass"/><test-case name="37003RegexTest_1069 tokoe:invalid" result="pass"/><test-case name="37004RegexTest_1072 tokoe:valid" result="pass"/><test-case name="37005RegexTest_1073 tokoe:valid" result="pass"/><test-case name="37006RegexTest_1074 tokoe:valid" result="pass"/><test-case name="37007RegexTest_1075 tokoe:valid" result="pass"/><test-case name="37008RegexTest_1090 tokoe:valid" result="pass"/><test-case name="37009RegexTest_1091 tokoe:valid" result="pass"/><test-case name="37010RegexTest_1092 tokoe:valid" result="pass"/><test-case name="37011RegexTest_1093 tokoe:valid" result="pass"/><test-case name="37012RegexTest_1094 tokoe:valid" result="pass"/><test-case name="37013RegexTest_1095 tokoe:valid" result="pass"/><test-case name="37014RegexTest_1096 tokoe:valid" result="pass"/><test-case name="37015RegexTest_1097 tokoe:valid" result="pass"/><test-case name="37016RegexTest_1098 tokoe:valid" result="pass"/><test-case name="37017RegexTest_1099 tokoe:valid" result="pass"/><test-case name="37018RegexTest_1100 tokoe:valid" result="pass"/><test-case name="37019RegexTest_1101 tokoe:valid" result="pass"/><test-case name="37020RegexTest_1102 tokoe:valid" result="pass"/><test-case name="37021RegexTest_1103 tokoe:valid" result="pass"/><test-case name="37022RegexTest_1104 tokoe:valid" result="pass"/><test-case name="37023RegexTest_1105 tokoe:valid" result="pass"/><test-case name="37024RegexTest_1106 tokoe:valid" result="pass"/><test-case name="37025RegexTest_1107 tokoe:valid" result="pass"/><test-case name="37026RegexTest_1108 tokoe:valid" result="pass"/><test-case name="37027RegexTest_1109 tokoe:valid" result="pass"/><test-case name="37028RegexTest_1110 tokoe:valid" result="pass"/><test-case name="37029RegexTest_1111 tokoe:valid" result="pass"/><test-case name="37030RegexTest_1112 tokoe:valid" result="pass"/><test-case name="37031RegexTest_1113 tokoe:valid" result="pass"/><test-case name="37032RegexTest_1114 tokoe:valid" result="pass"/><test-case name="37033RegexTest_1115 tokoe:valid" result="pass"/><test-case name="37034RegexTest_1116 tokoe:valid" result="pass"/><test-case name="37035RegexTest_1117 tokoe:invalid" result="pass"/><test-case name="37036RegexTest_1118 tokoe:invalid" result="pass"/><test-case name="37037RegexTest_1119 tokoe:valid" result="pass"/><test-case name="37038RegexTest_1120 tokoe:invalid" result="pass"/><test-case name="37039RegexTest_1121 tokoe:valid" result="pass"/><test-case name="37040RegexTest_1122 tokoe:valid" result="pass"/><test-case name="37041RegexTest_1123 tokoe:valid" result="pass"/><test-case name="37042RegexTest_1124 tokoe:valid" result="pass"/><test-case name="37043RegexTest_1125 tokoe:invalid" result="pass"/><test-case name="37044RegexTest_1126 tokoe:invalid" result="pass"/><test-case name="37045RegexTest_1127 tokoe:valid" result="pass"/><test-case name="37046RegexTest_1128 tokoe:valid" result="pass"/><test-case name="37047RegexTest_1129 tokoe:valid" result="pass"/><test-case name="37048RegexTest_1130 tokoe:valid" result="pass"/><test-case name="37049RegexTest_1131 tokoe:invalid" result="pass"/><test-case name="37050RegexTest_1133 tokoe:valid" result="pass"/><test-case name="37051RegexTest_1134 tokoe:valid" result="pass"/><test-case name="37052RegexTest_1135 tokoe:valid" result="pass"/><test-case name="37053RegexTest_1136 tokoe:valid" result="pass"/><test-case name="37054RegexTest_1137 tokoe:valid" result="pass"/><test-case name="37055RegexTest_1138 tokoe:valid" result="pass"/><test-case name="37056RegexTest_1140 tokoe:valid" result="pass"/><test-case name="37057RegexTest_1141 tokoe:valid" result="pass"/><test-case name="37058RegexTest_1142 tokoe:valid" result="pass"/><test-case name="37059RegexTest_1143 tokoe:valid" result="pass"/><test-case name="37060RegexTest_1144 tokoe:valid" result="pass"/><test-case name="37061RegexTest_1145 tokoe:valid" result="pass"/><test-case name="37062RegexTest_1146 tokoe:valid" result="pass"/><test-case name="37063RegexTest_1147 tokoe:valid" result="pass"/><test-case name="37064RegexTest_1148 tokoe:valid" result="pass"/><test-case name="37065RegexTest_1149 tokoe:valid" result="pass"/><test-case name="37066RegexTest_1150 tokoe:valid" result="pass"/><test-case name="37067RegexTest_1151 tokoe:valid" result="pass"/><test-case name="37068RegexTest_1152 tokoe:valid" result="pass"/><test-case name="37069RegexTest_1153 tokoe:valid" result="pass"/><test-case name="37070RegexTest_1154 tokoe:valid" result="pass"/><test-case name="37071RegexTest_1155 tokoe:valid" result="pass"/><test-case name="37072RegexTest_1156 tokoe:valid" result="pass"/><test-case name="37073RegexTest_1157 tokoe:valid" result="pass"/><test-case name="37074RegexTest_1158 tokoe:valid" result="pass"/><test-case name="37075RegexTest_1159 tokoe:valid" result="pass"/><test-case name="37076RegexTest_1160 tokoe:valid" result="pass"/><test-case name="37077RegexTest_1161 tokoe:valid" result="pass"/><test-case name="37078RegexTest_1162 tokoe:valid" result="pass"/><test-case name="37079RegexTest_1163 tokoe:valid" result="pass"/><test-case name="37080RegexTest_1164 tokoe:valid" result="pass"/><test-case name="37081RegexTest_1165 tokoe:valid" result="pass"/><test-case name="37082RegexTest_1166 tokoe:valid" result="pass"/><test-case name="37083RegexTest_1167 tokoe:valid" result="pass"/><test-case name="37084RegexTest_1168 tokoe:valid" result="pass"/><test-case name="37085RegexTest_1169 tokoe:valid" result="pass"/><test-case name="37086RegexTest_1170 tokoe:valid" result="pass"/><test-case name="37087RegexTest_1171 tokoe:valid" result="pass"/><test-case name="37088RegexTest_1173 tokoe:valid" result="pass"/><test-case name="37089RegexTest_1174 tokoe:valid" result="pass"/><test-case name="37090RegexTest_1175 tokoe:valid" result="pass"/><test-case name="37091RegexTest_1176 tokoe:valid" result="pass"/><test-case name="37092RegexTest_1177 tokoe:valid" result="pass"/><test-case name="37093RegexTest_1178 tokoe:valid" result="pass"/><test-case name="37094RegexTest_1179 tokoe:valid" result="pass"/><test-case name="37095RegexTest_1183 tokoe:invalid" result="fail"/><test-case name="37096RegexTest_1192 tokoe:valid" result="pass"/><test-case name="37097RegexTest_1193 tokoe:valid" result="pass"/><test-case name="37098RegexTest_1194 tokoe:valid" result="pass"/><test-case name="37099RegexTest_1195 tokoe:valid" result="pass"/><test-case name="37100RegexTest_1196 tokoe:valid" result="pass"/><test-case name="37101RegexTest_1197 tokoe:valid" result="pass"/><test-case name="37102RegexTest_1198 tokoe:valid" result="pass"/><test-case name="37103RegexTest_1199 tokoe:valid" result="pass"/><test-case name="37104RegexTest_1200 tokoe:valid" result="pass"/><test-case name="37105RegexTest_1204 tokoe:valid" result="pass"/><test-case name="37106RegexTest_1205 tokoe:valid" result="pass"/><test-case name="37107RegexTest_1206 tokoe:valid" result="pass"/><test-case name="37108RegexTest_1207 tokoe:valid" result="pass"/><test-case name="37109RegexTest_1218 tokoe:valid" result="pass"/><test-case name="37110RegexTest_1219 tokoe:valid" result="pass"/><test-case name="37111RegexTest_1220 tokoe:valid" result="pass"/><test-case name="37112RegexTest_1221 tokoe:valid" result="pass"/><test-case name="37113RegexTest_1222 tokoe:valid" result="pass"/><test-case name="37114RegexTest_1223 tokoe:valid" result="pass"/><test-case name="37115RegexTest_1224 tokoe:valid" result="pass"/><test-case name="37116RegexTest_1225 tokoe:valid" result="pass"/><test-case name="37117RegexTest_1226 tokoe:valid" result="pass"/><test-case name="37118RegexTest_1228 tokoe:valid" result="pass"/><test-case name="37119RegexTest_1229 tokoe:valid" result="pass"/><test-case name="37120RegexTest_1230 tokoe:valid" result="pass"/><test-case name="37121RegexTest_1231 tokoe:valid" result="pass"/><test-case name="37122RegexTest_1232 tokoe:valid" result="pass"/><test-case name="37123RegexTest_1233 tokoe:valid" result="pass"/><test-case name="37124RegexTest_1234 tokoe:valid" result="pass"/><test-case name="37125RegexTest_1235 tokoe:valid" result="pass"/><test-case name="37126RegexTest_1236 tokoe:invalid" result="fail"/><test-case name="37127RegexTest_1237 tokoe:invalid" result="pass"/><test-case name="37128RegexTest_1238 tokoe:invalid" result="pass"/><test-case name="37129RegexTest_1241 tokoe:valid" result="pass"/><test-case name="37130RegexTest_1242 tokoe:valid" result="pass"/><test-case name="37131RegexTest_1243 tokoe:valid" result="pass"/><test-case name="37132RegexTest_1244 tokoe:valid" result="pass"/><test-case name="37133RegexTest_1247 tokoe:valid" result="pass"/><test-case name="37134RegexTest_1248 tokoe:valid" result="pass"/><test-case name="37135RegexTest_1249 tokoe:valid" result="pass"/><test-case name="37136RegexTest_1250 tokoe:invalid" result="pass"/><test-case name="37137RegexTest_1251 tokoe:invalid" result="pass"/><test-case name="37138RegexTest_1252 tokoe:valid" result="pass"/><test-case name="37139RegexTest_1253 tokoe:invalid" result="pass"/><test-case name="37140RegexTest_1254 tokoe:valid" result="pass"/><test-case name="37141RegexTest_1255 tokoe:valid" result="pass"/><test-case name="37142RegexTest_1256 tokoe:valid" result="pass"/><test-case name="37143RegexTest_1257 tokoe:valid" result="pass"/><test-case name="37144RegexTest_1258 tokoe:invalid" result="pass"/><test-case name="37145RegexTest_1259 tokoe:invalid" result="pass"/><test-case name="37146RegexTest_1260 tokoe:valid" result="pass"/><test-case name="37147RegexTest_1261 tokoe:valid" result="pass"/><test-case name="37148RegexTest_1262 tokoe:valid" result="pass"/><test-case name="37149RegexTest_1263 tokoe:valid" result="pass"/><test-case name="37150RegexTest_1264 tokoe:invalid" result="pass"/><test-case name="37151RegexTest_1268 tokoe:valid" result="pass"/><test-case name="37152RegexTest_1269 tokoe:valid" result="pass"/><test-case name="37153RegexTest_1270 tokoe:valid" result="pass"/><test-case name="37154RegexTest_1271 tokoe:valid" result="pass"/><test-case name="37155RegexTest_1272 tokoe:valid" result="pass"/><test-case name="37156RegexTest_1273 tokoe:valid" result="pass"/><test-case name="37157RegexTest_1276 tokoe:valid" result="pass"/><test-case name="37158RegexTest_1277 tokoe:valid" result="pass"/><test-case name="37159RegexTest_1278 tokoe:valid" result="pass"/><test-case name="37160RegexTest_1279 tokoe:valid" result="pass"/><test-case name="37161RegexTest_1280 tokoe:valid" result="pass"/><test-case name="37162RegexTest_1281 tokoe:valid" result="pass"/><test-case name="37163RegexTest_1282 tokoe:valid" result="pass"/><test-case name="37164RegexTest_1283 tokoe:valid" result="pass"/><test-case name="37165RegexTest_1284 tokoe:valid" result="pass"/><test-case name="37166RegexTest_1285 tokoe:valid" result="pass"/><test-case name="37167RegexTest_1286 tokoe:valid" result="pass"/><test-case name="37168RegexTest_1287 tokoe:valid" result="pass"/><test-case name="37169RegexTest_1288 tokoe:valid" result="pass"/><test-case name="37170RegexTest_1289 tokoe:valid" result="pass"/><test-case name="37171RegexTest_1290 tokoe:valid" result="pass"/><test-case name="37172RegexTest_1291 tokoe:valid" result="pass"/><test-case name="37173RegexTest_1292 tokoe:valid" result="pass"/><test-case name="37174RegexTest_1293 tokoe:valid" result="pass"/><test-case name="37175RegexTest_1294 tokoe:valid" result="pass"/><test-case name="37176RegexTest_1295 tokoe:valid" result="pass"/><test-case name="37177RegexTest_1296 tokoe:valid" result="pass"/><test-case name="37178RegexTest_1297 tokoe:valid" result="pass"/><test-case name="37179RegexTest_1298 tokoe:valid" result="pass"/><test-case name="37180RegexTest_1299 tokoe:valid" result="pass"/><test-case name="37181RegexTest_1300 tokoe:valid" result="pass"/><test-case name="37182RegexTest_1301 tokoe:valid" result="pass"/><test-case name="37183RegexTest_1302 tokoe:valid" result="pass"/><test-case name="37184RegexTest_1303 tokoe:valid" result="pass"/><test-case name="37185RegexTest_1304 tokoe:valid" result="pass"/><test-case name="37186RegexTest_1305 tokoe:valid" result="pass"/><test-case name="37187RegexTest_1306 tokoe:valid" result="pass"/><test-case name="37188RegexTest_1307 tokoe:valid" result="pass"/><test-case name="37189RegexTest_1309 tokoe:valid" result="pass"/><test-case name="37190RegexTest_1312 tokoe:valid" result="pass"/><test-case name="37191RegexTest_1313 tokoe:valid" result="pass"/><test-case name="37192RegexTest_1314 tokoe:valid" result="pass"/><test-case name="37193RegexTest_1315 tokoe:valid" result="pass"/><test-case name="37194RegexTest_1316 tokoe:valid" result="pass"/><test-case name="37195RegexTest_1317 tokoe:valid" result="pass"/><test-case name="37196RegexTest_1318 tokoe:valid" result="pass"/><test-case name="37197RegexTest_1319 tokoe:valid" result="pass"/><test-case name="37198RegexTest_1333 tokoe:valid" result="pass"/><test-case name="37199RegexTest_1334 tokoe:invalid" result="pass"/><test-case name="37200RegexTest_1342 tokoe:valid" result="pass"/><test-case name="37201RegexTest_1343 tokoe:valid" result="pass"/><test-case name="37202RegexTest_1351 tokoe:valid" result="pass"/><test-case name="37203RegexTest_1352 tokoe:valid" result="pass"/><test-case name="37204RegexTest_1353 tokoe:valid" result="pass"/><test-case name="37205RegexTest_1366 tokoe:valid" result="pass"/><test-case name="37206RegexTest_1367 tokoe:valid" result="pass"/><test-case name="37207RegexTest_1368 tokoe:valid" result="pass"/><test-case name="37208RegexTest_1369 tokoe:valid" result="pass"/><test-case name="37209RegexTest_1370 tokoe:valid" result="pass"/><test-case name="37210RegexTest_1371 tokoe:valid" result="pass"/><test-case name="37211RegexTest_1411 tokoe:valid" result="pass"/><test-case name="37212RegexTest_1431 tokoe:valid" result="pass"/><test-case name="37213RegexTest_1432 tokoe:valid" result="pass"/><test-case name="37214RegexTest_1449 tokoe:invalid" result="pass"/><test-case name="37215RegexTest_1450 tokoe:invalid" result="pass"/><test-case name="37216RegexTest_1457 tokoe:valid" result="pass"/><test-case name="37217RegexTest_1462 tokoe:valid" result="pass"/><test-case name="37218RegexTest_1463 tokoe:valid" result="pass"/><test-case name="37219RegexTest_1464 tokoe:valid" result="pass"/><test-case name="37220RegexTest_1465 tokoe:valid" result="pass"/><test-case name="37221RegexTest_1466 tokoe:valid" result="pass"/><test-case name="37222RegexTest_1467 tokoe:valid" result="pass"/><test-case name="37223RegexTest_1468 tokoe:valid" result="pass"/><test-case name="37224RegexTest_1469 tokoe:valid" result="pass"/><test-case name="37225RegexTest_1470 tokoe:valid" result="pass"/><test-case name="37226RegexTest_1471 tokoe:valid" result="pass"/><test-case name="37227RegexTest_1476 tokoe:invalid" result="pass"/><test-case name="37228RegexTest_1477 tokoe:invalid" result="fail"/><test-case name="37229RegexTest_1483 tokoe:invalid" result="pass"/><test-case name="37230RegexTest_1489 tokoe:valid" result="pass"/><test-case name="37231RegexTest_1490 tokoe:valid" result="pass"/><test-case name="37232RegexTest_1504 tokoe:valid" result="pass"/><test-case name="37233RegexTest_1505 tokoe:valid" result="pass"/><test-case name="37234RegexTest_1506 tokoe:valid" result="pass"/><test-case name="37235RegexTest_1507 tokoe:valid" result="pass"/><test-case name="37236RegexTest_1508 tokoe:valid" result="pass"/><test-case name="37237RegexTest_1509 tokoe:valid" result="pass"/><test-case name="37238RegexTest_1510 tokoe:valid" result="pass"/><test-case name="37239RegexTest_1511 tokoe:valid" result="pass"/><test-case name="37240RegexTest_1512 tokoe:valid" result="pass"/><test-case name="37241RegexTest_1513 tokoe:valid" result="pass"/><test-case name="37242RegexTest_1514 tokoe:valid" result="pass"/><test-case name="37243RegexTest_1515 tokoe:valid" result="pass"/><test-case name="37244RegexTest_1516 tokoe:valid" result="pass"/><test-case name="37245RegexTest_1517 tokoe:valid" result="pass"/><test-case name="37246RegexTest_1518 tokoe:valid" result="pass"/><test-case name="37247RegexTest_1519 tokoe:valid" result="pass"/><test-case name="37248RegexTest_1520 tokoe:valid" result="pass"/><test-case name="37249RegexTest_1521 tokoe:valid" result="pass"/><test-case name="37250RegexTest_1522 tokoe:valid" result="pass"/><test-case name="37251RegexTest_1523 tokoe:valid" result="pass"/><test-case name="37252RegexTest_1524 tokoe:valid" result="pass"/><test-case name="37253RegexTest_1525 tokoe:valid" result="pass"/><test-case name="37254RegexTest_1526 tokoe:valid" result="pass"/><test-case name="37255RegexTest_1527 tokoe:valid" result="pass"/><test-case name="37256RegexTest_1528 tokoe:valid" result="pass"/><test-case name="37257RegexTest_1529 tokoe:valid" result="pass"/><test-case name="37258RegexTest_1530 tokoe:valid" result="pass"/><test-case name="37259RegexTest_1531 tokoe:valid" result="pass"/><test-case name="37260RegexTest_1532 tokoe:valid" result="pass"/><test-case name="37261RegexTest_1533 tokoe:valid" result="pass"/><test-case name="37262RegexTest_1534 tokoe:valid" result="pass"/><test-case name="37263RegexTest_1535 tokoe:valid" result="pass"/><test-case name="37264RegexTest_1536 tokoe:valid" result="pass"/><test-case name="37265RegexTest_1537 tokoe:valid" result="pass"/><test-case name="37266RegexTest_1538 tokoe:valid" result="pass"/><test-case name="37267RegexTest_1539 tokoe:valid" result="pass"/><test-case name="37268RegexTest_1540 tokoe:valid" result="pass"/><test-case name="37269RegexTest_1541 tokoe:valid" result="pass"/><test-case name="37270BasicLatin tokoe:valid" result="pass"/><test-case name="37271BasicLatin.v tokoe:valid" result="pass"/><test-case name="37272Latin-1Supplement tokoe:valid" result="pass"/><test-case name="37273Latin-1Supplement.v tokoe:valid" result="pass"/><test-case name="37274LatinExtended-A tokoe:valid" result="pass"/><test-case name="37275LatinExtended-A.v tokoe:valid" result="pass"/><test-case name="37276LatinExtended-B tokoe:valid" result="pass"/><test-case name="37277LatinExtended-B.v tokoe:valid" result="pass"/><test-case name="37278IPAExtensions tokoe:valid" result="pass"/><test-case name="37279IPAExtensions.v tokoe:valid" result="pass"/><test-case name="37280SpacingModifierLetters tokoe:valid" result="pass"/><test-case name="37281SpacingModifierLetters.v tokoe:valid" result="pass"/><test-case name="37282CombiningDiacriticalMarks tokoe:valid" result="pass"/><test-case name="37283CombiningDiacriticalMarks.v tokoe:valid" result="pass"/><test-case name="37284Cyrillic tokoe:valid" result="pass"/><test-case name="37285Cyrillic.v tokoe:valid" result="pass"/><test-case name="37286Armenian tokoe:valid" result="pass"/><test-case name="37287Armenian.v tokoe:valid" result="pass"/><test-case name="37288Hebrew tokoe:valid" result="pass"/><test-case name="37289Hebrew.v tokoe:valid" result="pass"/><test-case name="37290Arabic tokoe:valid" result="pass"/><test-case name="37291Arabic.v tokoe:valid" result="pass"/><test-case name="37292Syriac tokoe:valid" result="pass"/><test-case name="37293Syriac.v tokoe:valid" result="pass"/><test-case name="37294Thaana tokoe:valid" result="pass"/><test-case name="37295Thaana.v tokoe:valid" result="pass"/><test-case name="37296Devanagari tokoe:valid" result="pass"/><test-case name="37297Devanagari.v tokoe:valid" result="pass"/><test-case name="37298Bengali tokoe:valid" result="pass"/><test-case name="37299Bengali.v tokoe:valid" result="pass"/><test-case name="37300Gurmukhi tokoe:valid" result="pass"/><test-case name="37301Gurmukhi.v tokoe:valid" result="pass"/><test-case name="37302Gujarati tokoe:valid" result="pass"/><test-case name="37303Gujarati.v tokoe:valid" result="pass"/><test-case name="37304Oriya tokoe:valid" result="pass"/><test-case name="37305Oriya.v tokoe:valid" result="pass"/><test-case name="37306Tamil tokoe:valid" result="pass"/><test-case name="37307Tamil.v tokoe:valid" result="pass"/><test-case name="37308Telugu tokoe:valid" result="pass"/><test-case name="37309Telugu.v tokoe:valid" result="pass"/><test-case name="37310Kannada tokoe:valid" result="pass"/><test-case name="37311Kannada.v tokoe:valid" result="pass"/><test-case name="37312Malayalam tokoe:valid" result="pass"/><test-case name="37313Malayalam.v tokoe:valid" result="pass"/><test-case name="37314Sinhala tokoe:valid" result="pass"/><test-case name="37315Sinhala.v tokoe:valid" result="pass"/><test-case name="37316Thai tokoe:valid" result="pass"/><test-case name="37317Thai.v tokoe:valid" result="pass"/><test-case name="37318Lao tokoe:valid" result="pass"/><test-case name="37319Lao.v tokoe:valid" result="pass"/><test-case name="37320Tibetan tokoe:valid" result="pass"/><test-case name="37321Tibetan.v tokoe:valid" result="pass"/><test-case name="37322Myanmar tokoe:valid" result="pass"/><test-case name="37323Myanmar.v tokoe:valid" result="pass"/><test-case name="37324Georgian tokoe:valid" result="pass"/><test-case name="37325Georgian.v tokoe:valid" result="pass"/><test-case name="37326HangulJamo tokoe:valid" result="pass"/><test-case name="37327HangulJamo.v tokoe:valid" result="pass"/><test-case name="37328Ethiopic tokoe:valid" result="pass"/><test-case name="37329Ethiopic.v tokoe:valid" result="pass"/><test-case name="37330Cherokee tokoe:valid" result="pass"/><test-case name="37331Cherokee.v tokoe:valid" result="pass"/><test-case name="37332UnifiedCanadianAboriginalSyllabics tokoe:valid" result="pass"/><test-case name="37333UnifiedCanadianAboriginalSyllabics.v tokoe:valid" result="pass"/><test-case name="37334Ogham tokoe:valid" result="pass"/><test-case name="37335Ogham.v tokoe:valid" result="pass"/><test-case name="37336Runic tokoe:valid" result="pass"/><test-case name="37337Runic.v tokoe:valid" result="pass"/><test-case name="37338Khmer tokoe:valid" result="pass"/><test-case name="37339Khmer.v tokoe:valid" result="pass"/><test-case name="37340Mongolian tokoe:valid" result="pass"/><test-case name="37341Mongolian.v tokoe:valid" result="pass"/><test-case name="37342LatinExtendedAdditional tokoe:valid" result="pass"/><test-case name="37343LatinExtendedAdditional.v tokoe:valid" result="pass"/><test-case name="37344GreekExtended tokoe:valid" result="pass"/><test-case name="37345GreekExtended.v tokoe:valid" result="pass"/><test-case name="37346GeneralPunctuation tokoe:valid" result="pass"/><test-case name="37347GeneralPunctuation.v tokoe:valid" result="pass"/><test-case name="37348SuperscriptsandSubscripts tokoe:valid" result="pass"/><test-case name="37349SuperscriptsandSubscripts.v tokoe:valid" result="pass"/><test-case name="37350CurrencySymbols tokoe:valid" result="pass"/><test-case name="37351CurrencySymbols.v tokoe:valid" result="pass"/><test-case name="37352LetterlikeSymbols tokoe:valid" result="pass"/><test-case name="37353LetterlikeSymbols.v tokoe:valid" result="pass"/><test-case name="37354NumberForms tokoe:valid" result="pass"/><test-case name="37355NumberForms.v tokoe:valid" result="pass"/><test-case name="37356Arrows tokoe:valid" result="pass"/><test-case name="37357Arrows.v tokoe:valid" result="pass"/><test-case name="37358MathematicalOperators tokoe:valid" result="pass"/><test-case name="37359MathematicalOperators.v tokoe:valid" result="pass"/><test-case name="37360MiscellaneousTechnical tokoe:valid" result="pass"/><test-case name="37361MiscellaneousTechnical.v tokoe:valid" result="pass"/><test-case name="37362ControlPictures tokoe:valid" result="pass"/><test-case name="37363ControlPictures.v tokoe:valid" result="pass"/><test-case name="37364OpticalCharacterRecognition tokoe:valid" result="pass"/><test-case name="37365OpticalCharacterRecognition.v tokoe:valid" result="pass"/><test-case name="37366EnclosedAlphanumerics tokoe:valid" result="pass"/><test-case name="37367EnclosedAlphanumerics.v tokoe:valid" result="pass"/><test-case name="37368BoxDrawing tokoe:valid" result="pass"/><test-case name="37369BoxDrawing.v tokoe:valid" result="pass"/><test-case name="37370BlockElements tokoe:valid" result="pass"/><test-case name="37371BlockElements.v tokoe:valid" result="pass"/><test-case name="37372GeometricShapes tokoe:valid" result="pass"/><test-case name="37373GeometricShapes.v tokoe:valid" result="pass"/><test-case name="37374MiscellaneousSymbols tokoe:valid" result="pass"/><test-case name="37375MiscellaneousSymbols.v tokoe:valid" result="pass"/><test-case name="37376Dingbats tokoe:valid" result="pass"/><test-case name="37377Dingbats.v tokoe:valid" result="pass"/><test-case name="37378BraillePatterns tokoe:valid" result="pass"/><test-case name="37379BraillePatterns.v tokoe:valid" result="pass"/><test-case name="37380CJKRadicalsSupplement tokoe:valid" result="pass"/><test-case name="37381CJKRadicalsSupplement.v tokoe:valid" result="pass"/><test-case name="37382KangxiRadicals tokoe:valid" result="pass"/><test-case name="37383KangxiRadicals.v tokoe:valid" result="pass"/><test-case name="37384IdeographicDescriptionCharacters tokoe:valid" result="pass"/><test-case name="37385IdeographicDescriptionCharacters.v tokoe:valid" result="pass"/><test-case name="37386CJKSymbolsandPunctuation tokoe:valid" result="pass"/><test-case name="37387CJKSymbolsandPunctuation.v tokoe:valid" result="pass"/><test-case name="37388Hiragana tokoe:valid" result="pass"/><test-case name="37389Hiragana.v tokoe:valid" result="pass"/><test-case name="37390Katakana tokoe:valid" result="pass"/><test-case name="37391Katakana.v tokoe:valid" result="pass"/><test-case name="37392Bopomofo tokoe:valid" result="pass"/><test-case name="37393Bopomofo.v tokoe:valid" result="pass"/><test-case name="37394HangulCompatibilityJamo tokoe:valid" result="pass"/><test-case name="37395HangulCompatibilityJamo.v tokoe:valid" result="pass"/><test-case name="37396Kanbun tokoe:valid" result="pass"/><test-case name="37397Kanbun.v tokoe:valid" result="pass"/><test-case name="37398BopomofoExtended tokoe:valid" result="pass"/><test-case name="37399BopomofoExtended.v tokoe:valid" result="pass"/><test-case name="37400EnclosedCJKLettersandMonths tokoe:valid" result="pass"/><test-case name="37401EnclosedCJKLettersandMonths.v tokoe:valid" result="pass"/><test-case name="37402CJKCompatibility tokoe:valid" result="pass"/><test-case name="37403CJKCompatibility.v tokoe:valid" result="pass"/><test-case name="37404CJKUnifiedIdeographs tokoe:valid" result="pass"/><test-case name="37405CJKUnifiedIdeographs.v tokoe:valid" result="pass"/><test-case name="37406YiSyllables tokoe:valid" result="pass"/><test-case name="37407YiSyllables.v tokoe:valid" result="pass"/><test-case name="37408YiRadicals tokoe:valid" result="pass"/><test-case name="37409YiRadicals.v tokoe:valid" result="pass"/><test-case name="37410HighSurrogates tokoe:valid" result="fail"/><test-case name="37411HighSurrogates.i tokoe:invalid" result="pass"/><test-case name="37412CJKCompatibilityIdeographs tokoe:valid" result="pass"/><test-case name="37413CJKCompatibilityIdeographs.v tokoe:valid" result="pass"/><test-case name="37414AlphabeticPresentationForms tokoe:valid" result="pass"/><test-case name="37415AlphabeticPresentationForms.v tokoe:valid" result="pass"/><test-case name="37416ArabicPresentationForms-A tokoe:valid" result="pass"/><test-case name="37417ArabicPresentationForms-A.v tokoe:valid" result="pass"/><test-case name="37418CombiningHalfMarks tokoe:valid" result="pass"/><test-case name="37419CombiningHalfMarks.v tokoe:valid" result="pass"/><test-case name="37420CJKCompatibilityForms tokoe:valid" result="pass"/><test-case name="37421CJKCompatibilityForms.v tokoe:valid" result="pass"/><test-case name="37422SmallFormVariants tokoe:valid" result="pass"/><test-case name="37423SmallFormVariants.v tokoe:valid" result="pass"/><test-case name="37424HalfwidthandFullwidthForms tokoe:valid" result="pass"/><test-case name="37425HalfwidthandFullwidthForms.v tokoe:valid" result="pass"/><test-case name="37426Specials tokoe:valid" result="pass"/><test-case name="37427Specials.v tokoe:valid" result="pass"/><test-case name="37428reZ002 tokoe:valid" result="pass"/><test-case name="37429reZ002.i tokoe:invalid" result="fail"/><test-case name="37430reZ003v tokoe:valid" result="pass"/><test-case name="37431reZ003v.v tokoe:valid" result="fail"/><test-case name="37432reZ004v tokoe:valid" result="pass"/><test-case name="37433reZ004v.v tokoe:valid" result="fail"/><test-case name="37434reZ004i tokoe:valid" result="pass"/><test-case name="37435reZ004i.i tokoe:invalid" result="pass"/><test-case name="37436reZ005v tokoe:valid" result="pass"/><test-case name="37437reZ005v.v tokoe:valid" result="pass"/><test-case name="37438reZ005i tokoe:valid" result="pass"/><test-case name="37439reZ005i.i tokoe:invalid" result="pass"/><test-case name="37440reZ006v tokoe:valid" result="pass"/><test-case name="37441reZ006v.v tokoe:valid" result="pass"/><test-case name="37442reZ006i tokoe:valid" result="pass"/><test-case name="37443reZ006i.i tokoe:invalid" result="fail"/><test-case name="37444schA1 tokoe:valid" result="pass"/><test-case name="37445schA1.v tokoe:valid" result="pass"/><test-case name="37446schA3 tokoe:valid" result="pass"/><test-case name="37447schA3.v tokoe:valid" result="pass"/><test-case name="37448schA4.v tokoe:valid" result="pass"/><test-case name="37449schB1 tokoe:valid" result="pass"/><test-case name="37450schB1i tokoe:invalid" result="pass"/><test-case name="37451schB2 tokoe:valid" result="pass"/><test-case name="37452schB3 tokoe:invalid" result="pass"/><test-case name="37453schB4 tokoe:invalid" result="pass"/><test-case name="37454schB5 tokoe:invalid" result="pass"/><test-case name="37455schB8 tokoe:valid" result="pass"/><test-case name="37456schC2 tokoe:invalid" result="pass"/><test-case name="37457schC3 tokoe:valid" result="pass"/><test-case name="37458schC3.v tokoe:valid" result="pass"/><test-case name="37459schC4 tokoe:valid" result="pass"/><test-case name="37460schC4.v tokoe:valid" result="pass"/><test-case name="37461schC5 tokoe:invalid" result="pass"/><test-case name="37462schD5 tokoe:valid" result="pass"/><test-case name="37463schD5.v tokoe:valid" result="pass"/><test-case name="37464schD7 tokoe:valid" result="pass"/><test-case name="37465schD7.v tokoe:valid" result="pass"/><test-case name="37466schD10 tokoe:valid" result="pass"/><test-case name="37467schD10.v tokoe:valid" result="pass"/><test-case name="37468schD11 tokoe:valid" result="pass"/><test-case name="37469schE1 tokoe:valid" result="pass"/><test-case name="37470schE1i tokoe:invalid" result="pass"/><test-case name="37471schE2 tokoe:valid" result="pass"/><test-case name="37472schE3 tokoe:valid" result="pass"/><test-case name="37473schE4 tokoe:valid" result="pass"/><test-case name="37474schE4.v tokoe:valid" result="pass"/><test-case name="37475schE5 tokoe:invalid" result="pass"/><test-case name="37476schE6 tokoe:invalid" result="pass"/><test-case name="37477schE9 tokoe:valid" result="pass"/><test-case name="37478schE10 tokoe:invalid" result="pass"/><test-case name="37479schF1 tokoe:valid" result="pass"/><test-case name="37480schF1.v tokoe:valid" result="pass"/><test-case name="37481schF2 tokoe:valid" result="pass"/><test-case name="37482schF2.v tokoe:valid" result="pass"/><test-case name="37483schF3 tokoe:invalid" result="pass"/><test-case name="37484schF4 tokoe:invalid" result="pass"/><test-case name="37485schF5 tokoe:valid" result="pass"/><test-case name="37486schF5.v tokoe:valid" result="pass"/><test-case name="37487schF6 tokoe:invalid" result="pass"/><test-case name="37488schG1 tokoe:valid" result="pass"/><test-case name="37489schG1.v tokoe:valid" result="pass"/><test-case name="37490schG2 tokoe:valid" result="pass"/><test-case name="37491schG2.v tokoe:valid" result="pass"/><test-case name="37492schG4 tokoe:valid" result="fail"/><test-case name="37493schG4.v tokoe:valid" result="fail"/><test-case name="37494schG5 tokoe:valid" result="pass"/><test-case name="37495schG5.v tokoe:valid" result="pass"/><test-case name="37496schG7 tokoe:valid" result="fail"/><test-case name="37497schG7.v tokoe:valid" result="fail"/><test-case name="37498schG8 tokoe:valid" result="pass"/><test-case name="37499schG8.v tokoe:valid" result="pass"/><test-case name="37500schG10 tokoe:invalid" result="pass"/><test-case name="37501schG13 tokoe:invalid" result="pass"/><test-case name="37502schG14 tokoe:valid" result="fail"/><test-case name="37503schG15 tokoe:valid" result="pass"/><test-case name="37504schH1 tokoe:valid" result="pass"/><test-case name="37505schH2 tokoe:valid" result="pass"/><test-case name="37506schH3 tokoe:invalid" result="pass"/><test-case name="37507schH4 tokoe:invalid" result="pass"/><test-case name="37508schH5 tokoe:invalid" result="pass"/><test-case name="37509schH6 tokoe:invalid" result="pass"/><test-case name="37510schH9 tokoe:valid" result="pass"/><test-case name="37511schI2 tokoe:invalid" result="pass"/><test-case name="37512schI5 tokoe:invalid" result="pass"/><test-case name="37513schJ2 tokoe:invalid" result="pass"/><test-case name="37514schJ3 tokoe:invalid" result="pass"/><test-case name="37515schK2 tokoe:invalid" result="pass"/><test-case name="37516schK3 tokoe:invalid" result="pass"/><test-case name="37517schL1 tokoe:invalid" result="pass"/><test-case name="37518schL3 tokoe:invalid" result="pass"/><test-case name="37519schL6 tokoe:invalid" result="pass"/><test-case name="37520schL8 tokoe:invalid" result="pass"/><test-case name="37521schL10 tokoe:invalid" result="pass"/><test-case name="37522schM3 tokoe:invalid" result="pass"/><test-case name="37523schM4 tokoe:invalid" result="pass"/><test-case name="37524schM5 tokoe:invalid" result="pass"/><test-case name="37525schM8 tokoe:invalid" result="pass"/><test-case name="37526schM9 tokoe:valid" result="pass"/><test-case name="37527schM10 tokoe:invalid" result="pass"/><test-case name="37528schN4 tokoe:invalid" result="pass"/><test-case name="37529schN5 tokoe:invalid" result="pass"/><test-case name="37530schN6 tokoe:invalid" result="pass"/><test-case name="37531schN7 tokoe:invalid" result="pass"/><test-case name="37532schN10 tokoe:invalid" result="pass"/><test-case name="37533schN11 tokoe:valid" result="pass"/><test-case name="37534schN12 tokoe:invalid" result="pass"/><test-case name="37535schN13v tokoe:valid" result="pass"/><test-case name="37536schN13i tokoe:invalid" result="pass"/><test-case name="37537schO2 tokoe:invalid" result="pass"/><test-case name="37538schP1 tokoe:invalid" result="pass"/><test-case name="37539schP2 tokoe:valid" result="pass"/><test-case name="37540schP2.v tokoe:valid" result="pass"/><test-case name="37541schP3 tokoe:invalid" result="pass"/><test-case name="37542schQ1 tokoe:valid" result="pass"/><test-case name="37543schQ1.v tokoe:valid" result="pass"/><test-case name="37544schQ2 tokoe:invalid" result="pass"/><test-case name="37545schQ3 tokoe:valid" result="pass"/><test-case name="37546schQ3.v tokoe:valid" result="pass"/><test-case name="37547schQ4 tokoe:invalid" result="pass"/><test-case name="37548schR2 tokoe:valid" result="pass"/><test-case name="37549schR2.i tokoe:invalid" result="pass"/><test-case name="37550schR3 tokoe:invalid" result="pass"/><test-case name="37551schR4 tokoe:invalid" result="pass"/><test-case name="37552schR5 tokoe:invalid" result="pass"/><test-case name="37553schS1 tokoe:invalid" result="pass"/><test-case name="37554schT1 tokoe:invalid" result="pass"/><test-case name="37555schT2 tokoe:invalid" result="pass"/><test-case name="37556schT3 tokoe:valid" result="pass"/><test-case name="37557schT3.v tokoe:valid" result="pass"/><test-case name="37558schT6 tokoe:valid" result="pass"/><test-case name="37559schT6.i tokoe:invalid" result="pass"/><test-case name="37560schT9 tokoe:valid" result="pass"/><test-case name="37561schT9.v tokoe:valid" result="pass"/><test-case name="37562schT10 tokoe:valid" result="pass"/><test-case name="37563schT10.v tokoe:valid" result="pass"/><test-case name="37564schU2 tokoe:valid" result="pass"/><test-case name="37565schZ001_78029-a tokoe:invalid" result="pass"/><test-case name="37566schZ002_78029-b tokoe:invalid" result="pass"/><test-case name="37567schZ003_78029-c tokoe:invalid" result="pass"/><test-case name="37568schZ006 tokoe:invalid" result="pass"/><test-case name="37569schZ007 tokoe:valid" result="pass"/><test-case name="37570schZ008 tokoe:valid" result="pass"/><test-case name="37571schZ009 tokoe:valid" result="pass"/><test-case name="37572schZ010 tokoe:invalid" result="pass"/><test-case name="37573schZ011_a tokoe:invalid" result="pass"/><test-case name="37574schZ011_b tokoe:invalid" result="pass"/><test-case name="37575schZ011_c tokoe:invalid" result="pass"/><test-case name="37576schZ011_d tokoe:invalid" result="pass"/><test-case name="37577schZ012_b tokoe:valid" result="pass"/><test-case name="37578schZ012_c tokoe:valid" result="pass"/><test-case name="37579schZ013 tokoe:valid" result="pass"/><test-case name="37580schZ014_a tokoe:invalid" result="pass"/><test-case name="37581schZ014_b tokoe:invalid" result="pass"/><test-case name="37582schZ015 tokoe:valid" result="pass"/><test-case name="37583stA001 tokoe:valid" result="pass"/><test-case name="37584stA002 tokoe:invalid" result="pass"/><test-case name="37585stA003 tokoe:valid" result="pass"/><test-case name="37586stA004 tokoe:invalid" result="pass"/><test-case name="37587stA005 tokoe:invalid" result="pass"/><test-case name="37588stA006 tokoe:valid" result="pass"/><test-case name="37589stA007 tokoe:valid" result="pass"/><test-case name="37590stA008 tokoe:invalid" result="pass"/><test-case name="37591stA009 tokoe:invalid" result="pass"/><test-case name="37592stA010 tokoe:invalid" result="pass"/><test-case name="37593stA011 tokoe:invalid" result="pass"/><test-case name="37594stA012 tokoe:invalid" result="pass"/><test-case name="37595stA013 tokoe:invalid" result="pass"/><test-case name="37596stA014 tokoe:invalid" result="pass"/><test-case name="37597stA015 tokoe:invalid" result="pass"/><test-case name="37598stA016 tokoe:valid" result="pass"/><test-case name="37599stA017 tokoe:invalid" result="pass"/><test-case name="37600stA018 tokoe:valid" result="pass"/><test-case name="37601stA019 tokoe:valid" result="pass"/><test-case name="37602stA020 tokoe:valid" result="pass"/><test-case name="37603stB001 tokoe:invalid" result="pass"/><test-case name="37604stB002 tokoe:invalid" result="pass"/><test-case name="37605stB003 tokoe:valid" result="pass"/><test-case name="37606stB004 tokoe:invalid" result="pass"/><test-case name="37607stB005 tokoe:invalid" result="pass"/><test-case name="37608stB006 tokoe:valid" result="pass"/><test-case name="37609stB007 tokoe:invalid" result="pass"/><test-case name="37610stB008 tokoe:valid" result="pass"/><test-case name="37611stB009 tokoe:invalid" result="pass"/><test-case name="37612stB010 tokoe:invalid" result="pass"/><test-case name="37613stB011 tokoe:valid" result="pass"/><test-case name="37614stB012 tokoe:valid" result="pass"/><test-case name="37615stB013 tokoe:invalid" result="pass"/><test-case name="37616stB014 tokoe:invalid" result="pass"/><test-case name="37617stB015 tokoe:valid" result="pass"/><test-case name="37618stB016 tokoe:invalid" result="pass"/><test-case name="37619stB017 tokoe:invalid" result="pass"/><test-case name="37620stB018 tokoe:invalid" result="pass"/><test-case name="37621stB019 tokoe:invalid" result="pass"/><test-case name="37622stB020 tokoe:invalid" result="pass"/><test-case name="37623stB021 tokoe:invalid" result="pass"/><test-case name="37624stB022 tokoe:invalid" result="pass"/><test-case name="37625stB023 tokoe:invalid" result="pass"/><test-case name="37626stB024 tokoe:invalid" result="pass"/><test-case name="37627stC001 tokoe:valid" result="pass"/><test-case name="37628stC002 tokoe:invalid" result="pass"/><test-case name="37629stC003 tokoe:invalid" result="pass"/><test-case name="37630stC004 tokoe:invalid" result="pass"/><test-case name="37631stC005 tokoe:valid" result="pass"/><test-case name="37632stC006 tokoe:invalid" result="pass"/><test-case name="37633stC007 tokoe:valid" result="pass"/><test-case name="37634stC008 tokoe:invalid" result="pass"/><test-case name="37635stC009 tokoe:invalid" result="pass"/><test-case name="37636stC010 tokoe:valid" result="pass"/><test-case name="37637stC011 tokoe:invalid" result="pass"/><test-case name="37638stC012 tokoe:invalid" result="pass"/><test-case name="37639stC013 tokoe:invalid" result="pass"/><test-case name="37640stC014 tokoe:valid" result="pass"/><test-case name="37641stC015 tokoe:valid" result="pass"/><test-case name="37642stC016 tokoe:valid" result="pass"/><test-case name="37643stC017 tokoe:valid" result="pass"/><test-case name="37644stC018 tokoe:valid" result="pass"/><test-case name="37645stC019 tokoe:valid" result="pass"/><test-case name="37646stC020 tokoe:valid" result="pass"/><test-case name="37647stC021 tokoe:valid" result="pass"/><test-case name="37648stC022 tokoe:valid" result="pass"/><test-case name="37649stC023 tokoe:invalid" result="pass"/><test-case name="37650stC024 tokoe:valid" result="pass"/><test-case name="37651stC025 tokoe:valid" result="pass"/><test-case name="37652stC026 tokoe:valid" result="pass"/><test-case name="37653stC027 tokoe:invalid" result="pass"/><test-case name="37654stC028 tokoe:invalid" result="pass"/><test-case name="37655stC029 tokoe:invalid" result="pass"/><test-case name="37656stC030 tokoe:valid" result="pass"/><test-case name="37657stC031 tokoe:invalid" result="pass"/><test-case name="37658stC032 tokoe:invalid" result="pass"/><test-case name="37659stC033 tokoe:valid" result="pass"/><test-case name="37660stC034 tokoe:valid" result="pass"/><test-case name="37661stC034.i tokoe:invalid" result="pass"/><test-case name="37662stC035 tokoe:valid" result="pass"/><test-case name="37663stD001 tokoe:valid" result="pass"/><test-case name="37664stD002 tokoe:invalid" result="pass"/><test-case name="37665stD003 tokoe:valid" result="pass"/><test-case name="37666stD004 tokoe:invalid" result="pass"/><test-case name="37667stD005 tokoe:invalid" result="pass"/><test-case name="37668stD006 tokoe:valid" result="pass"/><test-case name="37669stD007 tokoe:valid" result="pass"/><test-case name="37670stD008 tokoe:valid" result="pass"/><test-case name="37671stD009 tokoe:invalid" result="pass"/><test-case name="37672stD010 tokoe:invalid" result="pass"/><test-case name="37673stD011 tokoe:valid" result="pass"/><test-case name="37674stD012 tokoe:valid" result="pass"/><test-case name="37675stD013 tokoe:valid" result="pass"/><test-case name="37676stD014 tokoe:valid" result="pass"/><test-case name="37677stD015 tokoe:invalid" result="pass"/><test-case name="37678stD016 tokoe:invalid" result="pass"/><test-case name="37679stD017 tokoe:invalid" result="pass"/><test-case name="37680stD018 tokoe:invalid" result="pass"/><test-case name="37681stD019 tokoe:invalid" result="pass"/><test-case name="37682stD020 tokoe:valid" result="pass"/><test-case name="37683stD021 tokoe:valid" result="pass"/><test-case name="37684stE001 tokoe:valid" result="pass"/><test-case name="37685stE002 tokoe:invalid" result="pass"/><test-case name="37686stE003 tokoe:valid" result="pass"/><test-case name="37687stE004 tokoe:invalid" result="pass"/><test-case name="37688stE005 tokoe:invalid" result="pass"/><test-case name="37689stE006 tokoe:valid" result="pass"/><test-case name="37690stE007 tokoe:valid" result="pass"/><test-case name="37691stE008 tokoe:invalid" result="pass"/><test-case name="37692stE009 tokoe:valid" result="pass"/><test-case name="37693stE010 tokoe:valid" result="pass"/><test-case name="37694stE011 tokoe:valid" result="pass"/><test-case name="37695stE012 tokoe:invalid" result="pass"/><test-case name="37696stE013 tokoe:valid" result="pass"/><test-case name="37697stE014 tokoe:valid" result="pass"/><test-case name="37698stE015 tokoe:invalid" result="pass"/><test-case name="37699stE016 tokoe:invalid" result="pass"/><test-case name="37700stE017 tokoe:valid" result="pass"/><test-case name="37701stE018 tokoe:invalid" result="pass"/><test-case name="37702stE050 tokoe:valid" result="pass"/><test-case name="37703stE050.v tokoe:valid" result="pass"/><test-case name="37704stE051 tokoe:valid" result="pass"/><test-case name="37705stE051.i tokoe:invalid" result="pass"/><test-case name="37706stE052 tokoe:valid" result="pass"/><test-case name="37707stE052.v tokoe:valid" result="pass"/><test-case name="37708stE053 tokoe:valid" result="pass"/><test-case name="37709stE053.i tokoe:invalid" result="pass"/><test-case name="37710stE054 tokoe:valid" result="pass"/><test-case name="37711stE054.i tokoe:invalid" result="fail"/><test-case name="37712stE055 tokoe:valid" result="pass"/><test-case name="37713stE055.v tokoe:valid" result="pass"/><test-case name="37714stE056 tokoe:valid" result="pass"/><test-case name="37715stE056.i tokoe:invalid" result="pass"/><test-case name="37716stE057 tokoe:valid" result="pass"/><test-case name="37717stE057.v tokoe:valid" result="pass"/><test-case name="37718stE058 tokoe:valid" result="pass"/><test-case name="37719stE058.v tokoe:valid" result="pass"/><test-case name="37720stE059 tokoe:valid" result="pass"/><test-case name="37721stE059.v tokoe:valid" result="pass"/><test-case name="37722stE060 tokoe:valid" result="pass"/><test-case name="37723stE060.v tokoe:valid" result="pass"/><test-case name="37724stE061 tokoe:valid" result="pass"/><test-case name="37725stE061.v tokoe:valid" result="pass"/><test-case name="37726stE062 tokoe:valid" result="pass"/><test-case name="37727stE062.v tokoe:valid" result="pass"/><test-case name="37728stE063 tokoe:valid" result="pass"/><test-case name="37729stE063.i tokoe:invalid" result="pass"/><test-case name="37730stE064 tokoe:valid" result="pass"/><test-case name="37731stE064.v tokoe:valid" result="pass"/><test-case name="37732stE065 tokoe:valid" result="pass"/><test-case name="37733stE065.v tokoe:valid" result="pass"/><test-case name="37734stE066 tokoe:valid" result="pass"/><test-case name="37735stE066.v tokoe:valid" result="pass"/><test-case name="37736stE067 tokoe:valid" result="pass"/><test-case name="37737stE067.v tokoe:valid" result="pass"/><test-case name="37738stE068 tokoe:valid" result="pass"/><test-case name="37739stE068.v tokoe:valid" result="pass"/><test-case name="37740stE069 tokoe:valid" result="pass"/><test-case name="37741stE069.v tokoe:valid" result="pass"/><test-case name="37742stE070 tokoe:valid" result="pass"/><test-case name="37743stE070.i tokoe:invalid" result="pass"/><test-case name="37744stE071 tokoe:valid" result="pass"/><test-case name="37745stE071.i tokoe:invalid" result="pass"/><test-case name="37746stE072 tokoe:valid" result="pass"/><test-case name="37747stE072.v tokoe:valid" result="pass"/><test-case name="37748stE073 tokoe:valid" result="pass"/><test-case name="37749stE073.i tokoe:invalid" result="pass"/><test-case name="37750stE073v tokoe:valid" result="pass"/><test-case name="37751stE073v.v tokoe:valid" result="pass"/><test-case name="37752stE074 tokoe:valid" result="pass"/><test-case name="37753stE074.i tokoe:invalid" result="pass"/><test-case name="37754ste074v tokoe:valid" result="pass"/><test-case name="37755ste074v.v tokoe:valid" result="pass"/><test-case name="37756stE075 tokoe:valid" result="fail"/><test-case name="37757stE075.i tokoe:invalid" result="pass"/><test-case name="37758stE076 tokoe:valid" result="pass"/><test-case name="37759stE076.i tokoe:invalid" result="pass"/><test-case name="37760stE077 tokoe:valid" result="pass"/><test-case name="37761stE077.v tokoe:valid" result="pass"/><test-case name="37762stE078 tokoe:valid" result="pass"/><test-case name="37763stE078.i tokoe:invalid" result="pass"/><test-case name="37764stE079 tokoe:valid" result="pass"/><test-case name="37765stE079.v tokoe:valid" result="pass"/><test-case name="37766stE080 tokoe:valid" result="pass"/><test-case name="37767stE080.v tokoe:valid" result="pass"/><test-case name="37768stE081 tokoe:valid" result="pass"/><test-case name="37769stE081.v tokoe:valid" result="pass"/><test-case name="37770stE082 tokoe:valid" result="pass"/><test-case name="37771stE082.i tokoe:invalid" result="pass"/><test-case name="37772stE090 tokoe:valid" result="pass"/><test-case name="37773stE090.v tokoe:valid" result="pass"/><test-case name="37774stE091 tokoe:valid" result="pass"/><test-case name="37775stE091.v tokoe:valid" result="pass"/><test-case name="37776stE092 tokoe:valid" result="pass"/><test-case name="37777stE092.v tokoe:valid" result="pass"/><test-case name="37778stE093 tokoe:valid" result="pass"/><test-case name="37779stE093.v tokoe:valid" result="pass"/><test-case name="37780stE094 tokoe:valid" result="pass"/><test-case name="37781stE094.v tokoe:valid" result="pass"/><test-case name="37782stE095 tokoe:valid" result="pass"/><test-case name="37783stE095.i tokoe:invalid" result="pass"/><test-case name="37784stE096 tokoe:valid" result="fail"/><test-case name="37785stE096.v tokoe:valid" result="fail"/><test-case name="37786stE097 tokoe:valid" result="fail"/><test-case name="37787stE097.i tokoe:invalid" result="pass"/><test-case name="37788ste098 tokoe:valid" result="pass"/><test-case name="37789ste098.i tokoe:invalid" result="pass"/><test-case name="37790ste099 tokoe:valid" result="pass"/><test-case name="37791ste099.v tokoe:valid" result="pass"/><test-case name="37792ste100 tokoe:valid" result="pass"/><test-case name="37793ste100.i tokoe:invalid" result="pass"/><test-case name="37794stF001 tokoe:valid" result="pass"/><test-case name="37795stF002 tokoe:valid" result="pass"/><test-case name="37796stF003 tokoe:valid" result="pass"/><test-case name="37797stF004 tokoe:valid" result="pass"/><test-case name="37798stF005 tokoe:invalid" result="pass"/><test-case name="37799stF006 tokoe:valid" result="pass"/><test-case name="37800stF007 tokoe:invalid" result="pass"/><test-case name="37801stF008 tokoe:invalid" result="pass"/><test-case name="37802stF009 tokoe:invalid" result="pass"/><test-case name="37803stF010 tokoe:invalid" result="pass"/><test-case name="37804stF011 tokoe:invalid" result="pass"/><test-case name="37805stF012 tokoe:invalid" result="pass"/><test-case name="37806stF013 tokoe:invalid" result="pass"/><test-case name="37807stF014 tokoe:invalid" result="pass"/><test-case name="37808stF015 tokoe:invalid" result="pass"/><test-case name="37809stF016 tokoe:valid" result="pass"/><test-case name="37810stF017 tokoe:valid" result="pass"/><test-case name="37811stF018 tokoe:invalid" result="pass"/><test-case name="37812stF019 tokoe:invalid" result="pass"/><test-case name="37813stF020 tokoe:invalid" result="pass"/><test-case name="37814stF021 tokoe:invalid" result="pass"/><test-case name="37815stF022 tokoe:invalid" result="pass"/><test-case name="37816stF023 tokoe:invalid" result="pass"/><test-case name="37817stF024 tokoe:invalid" result="pass"/><test-case name="37818stF025 tokoe:invalid" result="pass"/><test-case name="37819stF026 tokoe:invalid" result="pass"/><test-case name="37820stF027 tokoe:invalid" result="pass"/><test-case name="37821stF028 tokoe:invalid" result="pass"/><test-case name="37822stF029 tokoe:invalid" result="pass"/><test-case name="37823stF030 tokoe:invalid" result="pass"/><test-case name="37824stF031 tokoe:invalid" result="pass"/><test-case name="37825stF032 tokoe:valid" result="pass"/><test-case name="37826stF033 tokoe:invalid" result="pass"/><test-case name="37827stF034 tokoe:valid" result="pass"/><test-case name="37828stF035 tokoe:invalid" result="pass"/><test-case name="37829stF036 tokoe:valid" result="pass"/><test-case name="37830stF037 tokoe:invalid" result="pass"/><test-case name="37831stG001 tokoe:valid" result="pass"/><test-case name="37832stG001.v tokoe:valid" result="pass"/><test-case name="37833stG002 tokoe:valid" result="pass"/><test-case name="37834stG002.v tokoe:valid" result="pass"/><test-case name="37835stG003 tokoe:valid" result="pass"/><test-case name="37836stG003.i tokoe:invalid" result="pass"/><test-case name="37837stG004 tokoe:valid" result="pass"/><test-case name="37838stG004.v tokoe:valid" result="pass"/><test-case name="37839stG005 tokoe:valid" result="pass"/><test-case name="37840stG005.i tokoe:invalid" result="pass"/><test-case name="37841stG006 tokoe:valid" result="pass"/><test-case name="37842stG006.v tokoe:valid" result="pass"/><test-case name="37843stG007 tokoe:valid" result="pass"/><test-case name="37844stG007.i tokoe:invalid" result="pass"/><test-case name="37845stG008 tokoe:valid" result="pass"/><test-case name="37846stG008.v tokoe:valid" result="pass"/><test-case name="37847stG009 tokoe:valid" result="pass"/><test-case name="37848stG009.i tokoe:invalid" result="pass"/><test-case name="37849stG010 tokoe:valid" result="pass"/><test-case name="37850stG010.v tokoe:valid" result="pass"/><test-case name="37851stG011 tokoe:valid" result="pass"/><test-case name="37852stG011.i tokoe:invalid" result="pass"/><test-case name="37853stG012 tokoe:valid" result="pass"/><test-case name="37854stG012.v tokoe:valid" result="pass"/><test-case name="37855stG013 tokoe:valid" result="pass"/><test-case name="37856stG013.i tokoe:invalid" result="pass"/><test-case name="37857stH001 tokoe:valid" result="pass"/><test-case name="37858stH001.v tokoe:valid" result="pass"/><test-case name="37859stH002 tokoe:valid" result="pass"/><test-case name="37860stH002.i tokoe:invalid" result="pass"/><test-case name="37861stH003 tokoe:valid" result="pass"/><test-case name="37862stH003.v tokoe:valid" result="pass"/><test-case name="37863stH004 tokoe:valid" result="pass"/><test-case name="37864stH004.i tokoe:invalid" result="pass"/><test-case name="37865stH005 tokoe:valid" result="pass"/><test-case name="37866stH005.v tokoe:valid" result="pass"/><test-case name="37867stH006 tokoe:valid" result="pass"/><test-case name="37868stH006.i tokoe:invalid" result="pass"/><test-case name="37869stH007 tokoe:valid" result="pass"/><test-case name="37870stH007.v tokoe:valid" result="pass"/><test-case name="37871stH008 tokoe:valid" result="pass"/><test-case name="37872stH008.i tokoe:invalid" result="pass"/><test-case name="37873stI001 tokoe:valid" result="pass"/><test-case name="37874stI002 tokoe:valid" result="pass"/><test-case name="37875stI003 tokoe:valid" result="pass"/><test-case name="37876stI004 tokoe:invalid" result="pass"/><test-case name="37877stI005 tokoe:invalid" result="pass"/><test-case name="37878stJ001 tokoe:valid" result="pass"/><test-case name="37879stJ002 tokoe:valid" result="pass"/><test-case name="37880stJ003 tokoe:invalid" result="pass"/><test-case name="37881stJ004 tokoe:valid" result="pass"/><test-case name="37882stJ005 tokoe:valid" result="pass"/><test-case name="37883stJ006 tokoe:valid" result="pass"/><test-case name="37884stJ007 tokoe:valid" result="pass"/><test-case name="37885stJ008 tokoe:valid" result="pass"/><test-case name="37886stJ009 tokoe:invalid" result="pass"/><test-case name="37887stJ010 tokoe:invalid" result="pass"/><test-case name="37888stJ011 tokoe:invalid" result="pass"/><test-case name="37889stJ012 tokoe:invalid" result="pass"/><test-case name="37890stJ013 tokoe:invalid" result="pass"/><test-case name="37891stJ014 tokoe:invalid" result="pass"/><test-case name="37892stJ015 tokoe:invalid" result="pass"/><test-case name="37893stJ016 tokoe:invalid" result="pass"/><test-case name="37894stJ017 tokoe:invalid" result="pass"/><test-case name="37895stJ018 tokoe:invalid" result="pass"/><test-case name="37896stJ019 tokoe:invalid" result="pass"/><test-case name="37897stK001 tokoe:valid" result="pass"/><test-case name="37898stK002 tokoe:invalid" result="pass"/><test-case name="37899stK003 tokoe:invalid" result="pass"/><test-case name="37900stK004 tokoe:valid" result="pass"/><test-case name="37901stK005 tokoe:invalid" result="pass"/><test-case name="37902stK006 tokoe:invalid" result="pass"/><test-case name="37903stK007 tokoe:invalid" result="pass"/><test-case name="37904stK008 tokoe:valid" result="pass"/><test-case name="37905stK009 tokoe:valid" result="pass"/><test-case name="37906stK010 tokoe:invalid" result="pass"/><test-case name="37907stK011 tokoe:invalid" result="pass"/><test-case name="37908stK012 tokoe:invalid" result="pass"/><test-case name="37909stK013 tokoe:invalid" result="pass"/><test-case name="37910stK014 tokoe:invalid" result="pass"/><test-case name="37911stK015 tokoe:invalid" result="pass"/><test-case name="37912stK016 tokoe:invalid" result="pass"/><test-case name="37913stK017 tokoe:invalid" result="pass"/><test-case name="37914stK018 tokoe:invalid" result="pass"/><test-case name="37915stK019 tokoe:invalid" result="pass"/><test-case name="37916stZ001 tokoe:valid" result="pass"/><test-case name="37917stZ002 tokoe:invalid" result="pass"/><test-case name="37918stZ003 tokoe:invalid" result="pass"/><test-case name="37919stZ004 tokoe:valid" result="pass"/><test-case name="37920stZ004.v tokoe:valid" result="pass"/><test-case name="37921stZ005 tokoe:invalid" result="pass"/><test-case name="37922stZ006 tokoe:invalid" result="pass"/><test-case name="37923stZ008 tokoe:valid" result="pass"/><test-case name="37924stZ008.v tokoe:valid" result="pass"/><test-case name="37925stZ009 tokoe:invalid" result="pass"/><test-case name="37926stZ010 tokoe:invalid" result="pass"/><test-case name="37927stZ011 tokoe:invalid" result="pass"/><test-case name="37928stZ012 tokoe:invalid" result="pass"/><test-case name="37929stZ013 tokoe:invalid" result="pass"/><test-case name="37930stZ014 tokoe:invalid" result="pass"/><test-case name="37931stZ015 tokoe:valid" result="pass"/><test-case name="37932stZ015.v tokoe:valid" result="pass"/><test-case name="37933stZ016 tokoe:valid" result="pass"/><test-case name="37934stZ017 tokoe:valid" result="pass"/><test-case name="37935stZ018 tokoe:invalid" result="pass"/><test-case name="37936stZ019 tokoe:invalid" result="pass"/><test-case name="37937stZ020 tokoe:valid" result="pass"/><test-case name="37938stZ021 tokoe:valid" result="pass"/><test-case name="37939stZ022 tokoe:invalid" result="pass"/><test-case name="37940stZ023 tokoe:valid" result="pass"/><test-case name="37941stZ024 tokoe:valid" result="pass"/><test-case name="37942stZ025 tokoe:valid" result="pass"/><test-case name="37943stZ026 tokoe:invalid" result="pass"/><test-case name="37944stZ027 tokoe:invalid" result="pass"/><test-case name="37945stZ028 tokoe:invalid" result="pass"/><test-case name="37946stZ029 tokoe:valid" result="pass"/><test-case name="37947stZ030 tokoe:valid" result="pass"/><test-case name="37948stZ030.v tokoe:valid" result="pass"/><test-case name="37949stZ031 tokoe:valid" result="pass"/><test-case name="37950stZ031.v tokoe:valid" result="pass"/><test-case name="37951stZ032 tokoe:valid" result="pass"/><test-case name="37952stZ032.i tokoe:invalid" result="pass"/><test-case name="37953stZ033 tokoe:valid" result="pass"/><test-case name="37954stZ033.i tokoe:invalid" result="pass"/><test-case name="37955stZ034 tokoe:valid" result="pass"/><test-case name="37956stZ034.i tokoe:invalid" result="pass"/><test-case name="37957stZ035 tokoe:valid" result="pass"/><test-case name="37958stZ035.i tokoe:invalid" result="pass"/><test-case name="37959stZ036 tokoe:valid" result="pass"/><test-case name="37960stZ036.v tokoe:valid" result="pass"/><test-case name="37961stZ037 tokoe:valid" result="pass"/><test-case name="37962stZ037.i tokoe:invalid" result="fail"/><test-case name="37963stZ038 tokoe:invalid" result="pass"/><test-case name="37964stZ039 tokoe:valid" result="pass"/><test-case name="37965stZ039.i tokoe:invalid" result="pass"/><test-case name="37966stZ040 tokoe:valid" result="pass"/><test-case name="37967stZ040.v tokoe:valid" result="pass"/><test-case name="37968stZ042 tokoe:valid" result="pass"/><test-case name="37969stZ043 tokoe:valid" result="pass"/><test-case name="37970stZ043.v tokoe:valid" result="fail"/><test-case name="37971stZ044 tokoe:valid" result="pass"/><test-case name="37972stZ044.i tokoe:invalid" result="pass"/><test-case name="37973stZ045 tokoe:valid" result="pass"/><test-case name="37974stZ045.v tokoe:valid" result="pass"/><test-case name="37975stZ046 tokoe:valid" result="pass"/><test-case name="37976stZ046.v tokoe:valid" result="pass"/><test-case name="37977stZ048 tokoe:invalid" result="pass"/><test-case name="37978stZ049 tokoe:invalid" result="pass"/><test-case name="37979stZ050 tokoe:valid" result="pass"/><test-case name="37980stZ050.v tokoe:valid" result="pass"/><test-case name="37981stZ051 tokoe:valid" result="pass"/><test-case name="37982stZ051.i tokoe:invalid" result="pass"/><test-case name="37983stZ052 tokoe:valid" result="pass"/><test-case name="37984stZ052.v tokoe:valid" result="pass"/><test-case name="37985stZ053 tokoe:valid" result="pass"/><test-case name="37986stZ053.v tokoe:valid" result="pass"/><test-case name="37987stZ054 tokoe:valid" result="pass"/><test-case name="37988stZ054.v tokoe:valid" result="pass"/><test-case name="37989stZ056 tokoe:valid" result="pass"/><test-case name="37990stZ056.i tokoe:invalid" result="pass"/><test-case name="37991stZ057 tokoe:valid" result="pass"/><test-case name="37992stZ057.v tokoe:valid" result="pass"/><test-case name="37993stZ058.v tokoe:valid" result="pass"/><test-case name="37994stZ059.i tokoe:invalid" result="pass"/><test-case name="37995stZ060.i tokoe:invalid" result="pass"/><test-case name="37996stZ061.i tokoe:invalid" result="pass"/><test-case name="37997stZ062.v tokoe:valid" result="pass"/><test-case name="37998stZ063.v tokoe:valid" result="pass"/><test-case name="37999stZ064.i tokoe:invalid" result="pass"/><test-case name="38000stZ066.i tokoe:invalid" result="pass"/><test-case name="38001stZ067 tokoe:valid" result="pass"/><test-case name="38002stZ068 tokoe:valid" result="pass"/><test-case name="38003stZ069 tokoe:valid" result="pass"/><test-case name="38004stZ070 tokoe:invalid" result="pass"/><test-case name="38005stZ071 tokoe:valid" result="pass"/><test-case name="38006stZ071.v tokoe:valid" result="pass"/><test-case name="38007stZ072 tokoe:valid" result="pass"/><test-case name="38008stZ072.v tokoe:valid" result="pass"/><test-case name="38009stZ073b tokoe:valid" result="pass"/><test-case name="38010stZ073b.i tokoe:invalid" result="pass"/><test-case name="38011stZ074 tokoe:valid" result="pass"/><test-case name="38012stZ074.v tokoe:valid" result="pass"/><test-case name="38013stZ075 tokoe:valid" result="pass"/><test-case name="38014stZ075.v tokoe:valid" result="pass"/><test-case name="38015wildA001 tokoe:valid" result="pass"/><test-case name="38016wildA002 tokoe:valid" result="pass"/><test-case name="38017wildA003 tokoe:invalid" result="pass"/><test-case name="38018wildA004 tokoe:invalid" result="pass"/><test-case name="38019wildA005 tokoe:invalid" result="pass"/><test-case name="38020wildA006 tokoe:invalid" result="pass"/><test-case name="38021wildA007 tokoe:invalid" result="pass"/><test-case name="38022wildA008 tokoe:invalid" result="pass"/><test-case name="38023wildB010 tokoe:valid" result="pass"/><test-case name="38024wildB011 tokoe:valid" result="pass"/><test-case name="38025wildB012 tokoe:valid" result="pass"/><test-case name="38026wildB013 tokoe:valid" result="pass"/><test-case name="38027wildB014 tokoe:invalid" result="pass"/><test-case name="38028wildB015 tokoe:invalid" result="pass"/><test-case name="38029wildB016 tokoe:invalid" result="pass"/><test-case name="38030wildB017 tokoe:valid" result="pass"/><test-case name="38031wildB018 tokoe:valid" result="pass"/><test-case name="38032wildB019 tokoe:valid" result="pass"/><test-case name="38033wildB020 tokoe:invalid" result="pass"/><test-case name="38034wildB021 tokoe:valid" result="pass"/><test-case name="38035wildB022 tokoe:invalid" result="pass"/><test-case name="38036wildB023 tokoe:invalid" result="pass"/><test-case name="38037wildB024 tokoe:invalid" result="pass"/><test-case name="38038wildB025 tokoe:valid" result="pass"/><test-case name="38039wildB026 tokoe:valid" result="pass"/><test-case name="38040wildB027 tokoe:invalid" result="pass"/><test-case name="38041wildB028 tokoe:invalid" result="pass"/><test-case name="38042wildB029 tokoe:valid" result="pass"/><test-case name="38043wildC030 tokoe:valid" result="pass"/><test-case name="38044wildC031 tokoe:valid" result="pass"/><test-case name="38045wildC032 tokoe:valid" result="pass"/><test-case name="38046wildC033 tokoe:valid" result="pass"/><test-case name="38047wildC034 tokoe:valid" result="pass"/><test-case name="38048wildC035 tokoe:invalid" result="pass"/><test-case name="38049wildC036 tokoe:invalid" result="pass"/><test-case name="38050wildC037 tokoe:valid" result="pass"/><test-case name="38051wildC038 tokoe:valid" result="pass"/><test-case name="38052wildC039 tokoe:valid" result="pass"/><test-case name="38053wildC040 tokoe:valid" result="pass"/><test-case name="38054wildC041 tokoe:valid" result="pass"/><test-case name="38055wildC042 tokoe:valid" result="pass"/><test-case name="38056wildC043 tokoe:valid" result="pass"/><test-case name="38057wildC044 tokoe:valid" result="pass"/><test-case name="38058wildC045 tokoe:valid" result="pass"/><test-case name="38059wildC046 tokoe:valid" result="pass"/><test-case name="38060wildC047 tokoe:valid" result="pass"/><test-case name="38061wildC048 tokoe:valid" result="pass"/><test-case name="38062wildC049 tokoe:invalid" result="pass"/><test-case name="38063wildC050 tokoe:invalid" result="pass"/><test-case name="38064wildC051 tokoe:invalid" result="pass"/><test-case name="38065wildC052 tokoe:invalid" result="pass"/><test-case name="38066wildC053 tokoe:invalid" result="pass"/><test-case name="38067wildC054 tokoe:valid" result="pass"/><test-case name="38068wildC055 tokoe:invalid" result="pass"/><test-case name="38069wildC056 tokoe:invalid" result="pass"/><test-case name="38070wildC057 tokoe:invalid" result="pass"/><test-case name="38071wildC058 tokoe:invalid" result="pass"/><test-case name="38072wildC059 tokoe:valid" result="pass"/><test-case name="38073wildC060 tokoe:valid" result="pass"/><test-case name="38074wildC061 tokoe:valid" result="pass"/><test-case name="38075wildC062 tokoe:valid" result="pass"/><test-case name="38076wildC063 tokoe:valid" result="pass"/><test-case name="38077wildC064 tokoe:valid" result="pass"/><test-case name="38078wildC065 tokoe:valid" result="pass"/><test-case name="38079wildC066 tokoe:invalid" result="pass"/><test-case name="38080wildC067 tokoe:invalid" result="pass"/><test-case name="38081wildC068 tokoe:valid" result="pass"/><test-case name="38082wildC069 tokoe:valid" result="pass"/><test-case name="38083wildC070 tokoe:valid" result="pass"/><test-case name="38084wildD071 tokoe:invalid" result="pass"/><test-case name="38085wildD072 tokoe:valid" result="pass"/><test-case name="38086wildD073 tokoe:valid" result="pass"/><test-case name="38087wildD074 tokoe:valid" result="pass"/><test-case name="38088wildD075 tokoe:invalid" result="pass"/><test-case name="38089wildD076 tokoe:invalid" result="pass"/><test-case name="38090wildD077 tokoe:invalid" result="pass"/><test-case name="38091wildD078 tokoe:invalid" result="pass"/><test-case name="38092wildD079 tokoe:invalid" result="pass"/><test-case name="38093wildE001 tokoe:valid" result="pass"/><test-case name="38094wildE002 tokoe:invalid" result="pass"/><test-case name="38095wildF001 tokoe:valid" result="pass"/><test-case name="38096wildF002 tokoe:valid" result="pass"/><test-case name="38097wildF003 tokoe:valid" result="pass"/><test-case name="38098wildF004 tokoe:valid" result="pass"/><test-case name="38099wildF005 tokoe:valid" result="pass"/><test-case name="38100wildF006 tokoe:invalid" result="pass"/><test-case name="38101wildF007 tokoe:invalid" result="pass"/><test-case name="38102wildF008 tokoe:invalid" result="pass"/><test-case name="38103wildF009 tokoe:invalid" result="pass"/><test-case name="38104wildF010 tokoe:invalid" result="pass"/><test-case name="38105wildF011 tokoe:valid" result="pass"/><test-case name="38106wildF012 tokoe:invalid" result="pass"/><test-case name="38107wildF013 tokoe:invalid" result="pass"/><test-case name="38108wildF014 tokoe:invalid" result="pass"/><test-case name="38109wildF015 tokoe:invalid" result="pass"/><test-case name="38110wildF016 tokoe:invalid" result="pass"/><test-case name="38111wildF017 tokoe:valid" result="pass"/><test-case name="38112wildF018 tokoe:invalid" result="pass"/><test-case name="38113wildF019 tokoe:valid" result="pass"/><test-case name="38114wildF020 tokoe:valid" result="pass"/><test-case name="38115wildG001 tokoe:valid" result="pass"/><test-case name="38116wildG001.v tokoe:valid" result="pass"/><test-case name="38117wildG002 tokoe:valid" result="pass"/><test-case name="38118wildG002.v tokoe:valid" result="pass"/><test-case name="38119wildG003 tokoe:valid" result="pass"/><test-case name="38120wildG003.i tokoe:invalid" result="pass"/><test-case name="38121wildG004 tokoe:valid" result="pass"/><test-case name="38122wildG004.v tokoe:valid" result="pass"/><test-case name="38123wildG005 tokoe:valid" result="pass"/><test-case name="38124wildG005.i tokoe:invalid" result="pass"/><test-case name="38125wildG006 tokoe:valid" result="pass"/><test-case name="38126wildG006.v tokoe:valid" result="pass"/><test-case name="38127wildG007 tokoe:valid" result="pass"/><test-case name="38128wildG007.v tokoe:valid" result="pass"/><test-case name="38129wildG008 tokoe:valid" result="pass"/><test-case name="38130wildG008.i tokoe:invalid" result="pass"/><test-case name="38131wildG009 tokoe:valid" result="pass"/><test-case name="38132wildG009.i tokoe:invalid" result="pass"/><test-case name="38133wildG010 tokoe:valid" result="pass"/><test-case name="38134wildG010.v tokoe:valid" result="pass"/><test-case name="38135wildG011 tokoe:valid" result="pass"/><test-case name="38136wildG011.i tokoe:invalid" result="pass"/><test-case name="38137wildG012 tokoe:valid" result="pass"/><test-case name="38138wildG012.v tokoe:valid" result="pass"/><test-case name="38139wildG013 tokoe:valid" result="pass"/><test-case name="38140wildG013.v tokoe:valid" result="pass"/><test-case name="38141wildG014 tokoe:valid" result="pass"/><test-case name="38142wildG014.i tokoe:invalid" result="pass"/><test-case name="38143wildG015 tokoe:valid" result="pass"/><test-case name="38144wildG015.v tokoe:valid" result="pass"/><test-case name="38145wildG016 tokoe:valid" result="pass"/><test-case name="38146wildG016.v tokoe:valid" result="pass"/><test-case name="38147wildG017 tokoe:valid" result="pass"/><test-case name="38148wildG017.i tokoe:invalid" result="pass"/><test-case name="38149wildG018 tokoe:valid" result="pass"/><test-case name="38150wildG018.v tokoe:valid" result="pass"/><test-case name="38151wildG019 tokoe:valid" result="pass"/><test-case name="38152wildG019.i tokoe:invalid" result="pass"/><test-case name="38153wildG020 tokoe:valid" result="pass"/><test-case name="38154wildG020.i tokoe:invalid" result="pass"/><test-case name="38155wildG021 tokoe:valid" result="pass"/><test-case name="38156wildG021.v tokoe:valid" result="pass"/><test-case name="38157wildG022 tokoe:valid" result="pass"/><test-case name="38158wildG022.i tokoe:invalid" result="pass"/><test-case name="38159wildG023 tokoe:valid" result="pass"/><test-case name="38160wildG023.v tokoe:valid" result="pass"/><test-case name="38161wildG024 tokoe:valid" result="pass"/><test-case name="38162wildG024.i tokoe:invalid" result="pass"/><test-case name="38163wildG025 tokoe:valid" result="pass"/><test-case name="38164wildG025.i tokoe:invalid" result="pass"/><test-case name="38165wildG026 tokoe:valid" result="pass"/><test-case name="38166wildG026.v tokoe:valid" result="pass"/><test-case name="38167wildG027 tokoe:valid" result="pass"/><test-case name="38168wildG027.v tokoe:valid" result="pass"/><test-case name="38169wildG028 tokoe:valid" result="pass"/><test-case name="38170wildG028.i tokoe:invalid" result="pass"/><test-case name="38171wildG029 tokoe:valid" result="pass"/><test-case name="38172wildG029.i tokoe:invalid" result="pass"/><test-case name="38173wildG030 tokoe:valid" result="pass"/><test-case name="38174wildG030.i tokoe:invalid" result="pass"/><test-case name="38175wildG031 tokoe:valid" result="pass"/><test-case name="38176wildG031.v tokoe:valid" result="pass"/><test-case name="38177wildG032 tokoe:valid" result="pass"/><test-case name="38178wildG032.i tokoe:invalid" result="pass"/><test-case name="38179wildG033 tokoe:valid" result="pass"/><test-case name="38180wildG033.v tokoe:valid" result="pass"/><test-case name="38181wildG034 tokoe:valid" result="pass"/><test-case name="38182wildG034.i tokoe:invalid" result="pass"/><test-case name="38183wildG035 tokoe:valid" result="pass"/><test-case name="38184wildG035.v tokoe:valid" result="pass"/><test-case name="38185wildG036 tokoe:valid" result="pass"/><test-case name="38186wildG036.i tokoe:invalid" result="pass"/><test-case name="38187wildG037 tokoe:valid" result="pass"/><test-case name="38188wildG037.v tokoe:valid" result="pass"/><test-case name="38189wildG038 tokoe:valid" result="pass"/><test-case name="38190wildG038.v tokoe:valid" result="pass"/><test-case name="38191wildG039 tokoe:valid" result="pass"/><test-case name="38192wildG039.i tokoe:invalid" result="pass"/><test-case name="38193wildG040 tokoe:valid" result="pass"/><test-case name="38194wildG040.v tokoe:valid" result="pass"/><test-case name="38195wildH001 tokoe:valid" result="pass"/><test-case name="38196wildH001.i tokoe:invalid" result="pass"/><test-case name="38197wildH002 tokoe:valid" result="pass"/><test-case name="38198wildH002.i tokoe:invalid" result="pass"/><test-case name="38199wildH003 tokoe:valid" result="pass"/><test-case name="38200wildH003.v tokoe:valid" result="pass"/><test-case name="38201wildH004 tokoe:valid" result="pass"/><test-case name="38202wildH004.v tokoe:valid" result="pass"/><test-case name="38203wildH005 tokoe:valid" result="pass"/><test-case name="38204wildH005.v tokoe:valid" result="pass"/><test-case name="38205wildH006 tokoe:valid" result="pass"/><test-case name="38206wildH006.i tokoe:invalid" result="pass"/><test-case name="38207wildH007 tokoe:valid" result="pass"/><test-case name="38208wildH007.v tokoe:valid" result="pass"/><test-case name="38209wildH008 tokoe:valid" result="pass"/><test-case name="38210wildH008.i tokoe:invalid" result="pass"/><test-case name="38211wildH009 tokoe:valid" result="pass"/><test-case name="38212wildH009.v tokoe:valid" result="pass"/><test-case name="38213wildH010 tokoe:valid" result="pass"/><test-case name="38214wildH010.v tokoe:valid" result="pass"/><test-case name="38215wildH011 tokoe:valid" result="pass"/><test-case name="38216wildH011.v tokoe:valid" result="pass"/><test-case name="38217wildH012 tokoe:valid" result="pass"/><test-case name="38218wildH012.v tokoe:valid" result="pass"/><test-case name="38219wildI001 tokoe:valid" result="pass"/><test-case name="38220wildI002 tokoe:invalid" result="pass"/><test-case name="38221wildI003 tokoe:invalid" result="pass"/><test-case name="38222wildI004 tokoe:valid" result="pass"/><test-case name="38223wildI004.v tokoe:valid" result="pass"/><test-case name="38224wildI004i tokoe:valid" result="pass"/><test-case name="38225wildI004i.i tokoe:invalid" result="pass"/><test-case name="38226wildI005 tokoe:valid" result="pass"/><test-case name="38227wildI005.v tokoe:valid" result="pass"/><test-case name="38228wildI006 tokoe:valid" result="pass"/><test-case name="38229wildI006.v tokoe:valid" result="pass"/><test-case name="38230wildI007 tokoe:valid" result="pass"/><test-case name="38231wildI007.v tokoe:valid" result="pass"/><test-case name="38232wildI008 tokoe:valid" result="pass"/><test-case name="38233wildI009 tokoe:invalid" result="pass"/><test-case name="38234wildI010 tokoe:invalid" result="pass"/><test-case name="38235wildI011 tokoe:valid" result="pass"/><test-case name="38236wildI011.v tokoe:valid" result="pass"/><test-case name="38237wildI012 tokoe:valid" result="pass"/><test-case name="38238wildI012.v tokoe:valid" result="pass"/><test-case name="38239wildI013 tokoe:invalid" result="pass"/><test-case name="38240wildI014 tokoe:invalid" result="pass"/><test-case name="38241wildJ001 tokoe:valid" result="pass"/><test-case name="38242wildJ002 tokoe:valid" result="pass"/><test-case name="38243wildJ003 tokoe:invalid" result="pass"/><test-case name="38244wildJ004 tokoe:invalid" result="pass"/><test-case name="38245wildJ005 tokoe:invalid" result="pass"/><test-case name="38246wildJ006 tokoe:invalid" result="pass"/><test-case name="38247wildJ007 tokoe:invalid" result="pass"/><test-case name="38248wildJ008 tokoe:invalid" result="pass"/><test-case name="38249wildK001 tokoe:valid" result="pass"/><test-case name="38250wildK002 tokoe:invalid" result="pass"/><test-case name="38251wildK003 tokoe:valid" result="pass"/><test-case name="38252wildK004 tokoe:valid" result="pass"/><test-case name="38253wildK005 tokoe:valid" result="pass"/><test-case name="38254wildK006 tokoe:invalid" result="pass"/><test-case name="38255wildK007 tokoe:invalid" result="pass"/><test-case name="38256wildK008 tokoe:valid" result="pass"/><test-case name="38257wildK009 tokoe:valid" result="pass"/><test-case name="38258wildK010 tokoe:valid" result="pass"/><test-case name="38259wildK011 tokoe:valid" result="pass"/><test-case name="38260wildK012 tokoe:valid" result="pass"/><test-case name="38261wildK013 tokoe:valid" result="pass"/><test-case name="38262wildK014 tokoe:valid" result="pass"/><test-case name="38263wildK015 tokoe:valid" result="pass"/><test-case name="38264wildK016 tokoe:valid" result="pass"/><test-case name="38265wildK017 tokoe:valid" result="pass"/><test-case name="38266wildK018 tokoe:valid" result="pass"/><test-case name="38267wildK019 tokoe:valid" result="pass"/><test-case name="38268wildK020 tokoe:invalid" result="pass"/><test-case name="38269wildK021 tokoe:invalid" result="pass"/><test-case name="38270wildK022 tokoe:invalid" result="pass"/><test-case name="38271wildK023 tokoe:invalid" result="pass"/><test-case name="38272wildK024 tokoe:invalid" result="pass"/><test-case name="38273wildK025 tokoe:valid" result="pass"/><test-case name="38274wildK026 tokoe:invalid" result="pass"/><test-case name="38275wildK027 tokoe:invalid" result="pass"/><test-case name="38276wildK028 tokoe:invalid" result="pass"/><test-case name="38277wildK029 tokoe:invalid" result="pass"/><test-case name="38278wildK030 tokoe:valid" result="pass"/><test-case name="38279wildK031 tokoe:valid" result="pass"/><test-case name="38280wildK032 tokoe:valid" result="pass"/><test-case name="38281wildK033 tokoe:valid" result="pass"/><test-case name="38282wildK034 tokoe:valid" result="pass"/><test-case name="38283wildK035 tokoe:valid" result="pass"/><test-case name="38284wildK036 tokoe:valid" result="pass"/><test-case name="38285wildK037 tokoe:valid" result="pass"/><test-case name="38286wildK038 tokoe:invalid" result="pass"/><test-case name="38287wildK039 tokoe:valid" result="pass"/><test-case name="38288wildK040 tokoe:valid" result="pass"/><test-case name="38289wildK041 tokoe:valid" result="pass"/><test-case name="38290wildL001 tokoe:invalid" result="pass"/><test-case name="38291wildL002 tokoe:valid" result="pass"/><test-case name="38292wildL003 tokoe:valid" result="pass"/><test-case name="38293wildL004 tokoe:valid" result="pass"/><test-case name="38294wildL005 tokoe:invalid" result="pass"/><test-case name="38295wildL006 tokoe:invalid" result="pass"/><test-case name="38296wildL007 tokoe:invalid" result="pass"/><test-case name="38297wildL008 tokoe:invalid" result="pass"/><test-case name="38298wildL009 tokoe:invalid" result="pass"/><test-case name="38299wildM001 tokoe:valid" result="pass"/><test-case name="38300wildM002 tokoe:invalid" result="pass"/><test-case name="38301wildN001 tokoe:invalid" result="pass"/><test-case name="38302wildN002 tokoe:valid" result="pass"/><test-case name="38303wildN003 tokoe:valid" result="pass"/><test-case name="38304wildN004 tokoe:valid" result="pass"/><test-case name="38305wildN005 tokoe:valid" result="pass"/><test-case name="38306wildN006 tokoe:invalid" result="pass"/><test-case name="38307wildN007 tokoe:invalid" result="pass"/><test-case name="38308wildN008 tokoe:invalid" result="pass"/><test-case name="38309wildN009 tokoe:invalid" result="pass"/><test-case name="38310wildN010 tokoe:invalid" result="pass"/><test-case name="38311wildN011 tokoe:valid" result="pass"/><test-case name="38312wildN012 tokoe:invalid" result="pass"/><test-case name="38313wildN013 tokoe:invalid" result="pass"/><test-case name="38314wildN014 tokoe:invalid" result="pass"/><test-case name="38315wildN015 tokoe:invalid" result="pass"/><test-case name="38316wildN016 tokoe:invalid" result="pass"/><test-case name="38317wildN017 tokoe:valid" result="pass"/><test-case name="38318wildN018 tokoe:invalid" result="pass"/><test-case name="38319wildN019 tokoe:valid" result="pass"/><test-case name="38320wildN020 tokoe:valid" result="pass"/><test-case name="38321wildQ001 tokoe:invalid" result="pass"/><test-case name="38322wildQ002 tokoe:invalid" result="pass"/><test-case name="38323wildQ003 tokoe:invalid" result="pass"/><test-case name="38324wildQ004 tokoe:invalid" result="pass"/><test-case name="38325wildO001 tokoe:valid" result="pass"/><test-case name="38326wildO001.v tokoe:valid" result="pass"/><test-case name="38327wildO002 tokoe:valid" result="pass"/><test-case name="38328wildO002.v tokoe:valid" result="pass"/><test-case name="38329wildO003 tokoe:valid" result="pass"/><test-case name="38330wildO003.i tokoe:invalid" result="pass"/><test-case name="38331wildO004 tokoe:valid" result="pass"/><test-case name="38332wildO004.v tokoe:valid" result="pass"/><test-case name="38333wildO005 tokoe:valid" result="pass"/><test-case name="38334wildO005.v tokoe:valid" result="pass"/><test-case name="38335wildO006 tokoe:valid" result="pass"/><test-case name="38336wildO006.i tokoe:invalid" result="pass"/><test-case name="38337wildO007 tokoe:valid" result="pass"/><test-case name="38338wildO007.v tokoe:valid" result="pass"/><test-case name="38339wildO008 tokoe:valid" result="pass"/><test-case name="38340wildO008.i tokoe:invalid" result="pass"/><test-case name="38341wildO009 tokoe:valid" result="pass"/><test-case name="38342wildO009.i tokoe:invalid" result="pass"/><test-case name="38343wildO010 tokoe:valid" result="pass"/><test-case name="38344wildO010.v tokoe:valid" result="pass"/><test-case name="38345wildO011 tokoe:valid" result="pass"/><test-case name="38346wildO011.i tokoe:invalid" result="pass"/><test-case name="38347wildO012 tokoe:valid" result="pass"/><test-case name="38348wildO012.v tokoe:valid" result="pass"/><test-case name="38349wildO013 tokoe:valid" result="pass"/><test-case name="38350wildO013.v tokoe:valid" result="pass"/><test-case name="38351wildO014 tokoe:valid" result="pass"/><test-case name="38352wildO014.i tokoe:invalid" result="pass"/><test-case name="38353wildO015 tokoe:valid" result="pass"/><test-case name="38354wildO015.v tokoe:valid" result="pass"/><test-case name="38355wildO016 tokoe:valid" result="pass"/><test-case name="38356wildO016.v tokoe:valid" result="pass"/><test-case name="38357wildO017 tokoe:valid" result="pass"/><test-case name="38358wildO017.i tokoe:invalid" result="pass"/><test-case name="38359wildO018 tokoe:valid" result="pass"/><test-case name="38360wildO018.v tokoe:valid" result="pass"/><test-case name="38361wildO019 tokoe:valid" result="pass"/><test-case name="38362wildO019.v tokoe:valid" result="pass"/><test-case name="38363wildO020 tokoe:valid" result="pass"/><test-case name="38364wildO020.i tokoe:invalid" result="pass"/><test-case name="38365wildO021 tokoe:valid" result="pass"/><test-case name="38366wildO021.v tokoe:valid" result="pass"/><test-case name="38367wildO022 tokoe:valid" result="pass"/><test-case name="38368wildO022.i tokoe:invalid" result="pass"/><test-case name="38369wildO023 tokoe:valid" result="pass"/><test-case name="38370wildO023.v tokoe:valid" result="pass"/><test-case name="38371wildO024 tokoe:valid" result="pass"/><test-case name="38372wildO024.i tokoe:invalid" result="pass"/><test-case name="38373wildO025 tokoe:valid" result="pass"/><test-case name="38374wildO025.i tokoe:invalid" result="pass"/><test-case name="38375wildO026 tokoe:valid" result="pass"/><test-case name="38376wildO026.v tokoe:valid" result="pass"/><test-case name="38377wildO027 tokoe:valid" result="pass"/><test-case name="38378wildO027.v tokoe:valid" result="pass"/><test-case name="38379wildO028 tokoe:valid" result="pass"/><test-case name="38380wildO028.i tokoe:invalid" result="pass"/><test-case name="38381wildO029 tokoe:valid" result="pass"/><test-case name="38382wildO029.v tokoe:valid" result="pass"/><test-case name="38383wildO030 tokoe:valid" result="pass"/><test-case name="38384wildO030.i tokoe:invalid" result="pass"/><test-case name="38385wildO031 tokoe:valid" result="pass"/><test-case name="38386wildO031.v tokoe:valid" result="pass"/><test-case name="38387wildO032 tokoe:valid" result="pass"/><test-case name="38388wildO032.i tokoe:invalid" result="pass"/><test-case name="38389wildO033 tokoe:valid" result="pass"/><test-case name="38390wildO033.v tokoe:valid" result="pass"/><test-case name="38391wildO034 tokoe:valid" result="pass"/><test-case name="38392wildO034.i tokoe:invalid" result="pass"/><test-case name="38393wildO035 tokoe:valid" result="pass"/><test-case name="38394wildO035.i tokoe:invalid" result="pass"/><test-case name="38395wildO037 tokoe:valid" result="pass"/><test-case name="38396wildO037.v tokoe:valid" result="pass"/><test-case name="38397wildO038 tokoe:valid" result="pass"/><test-case name="38398wildO038.v tokoe:valid" result="pass"/><test-case name="38399wildO039 tokoe:valid" result="pass"/><test-case name="38400wildO039.i tokoe:invalid" result="pass"/><test-case name="38401wildO040 tokoe:valid" result="pass"/><test-case name="38402wildO040.v tokoe:valid" result="pass"/><test-case name="38403wildP001 tokoe:valid" result="pass"/><test-case name="38404wildP001.v tokoe:valid" result="pass"/><test-case name="38405wildP002 tokoe:valid" result="pass"/><test-case name="38406wildP002.i tokoe:invalid" result="pass"/><test-case name="38407wildP003 tokoe:valid" result="pass"/><test-case name="38408wildP003.v tokoe:valid" result="pass"/><test-case name="38409wildP004 tokoe:valid" result="pass"/><test-case name="38410wildP004.v tokoe:valid" result="pass"/><test-case name="38411wildP005 tokoe:valid" result="pass"/><test-case name="38412wildP005.v tokoe:valid" result="pass"/><test-case name="38413wildP006 tokoe:valid" result="pass"/><test-case name="38414wildP006.v tokoe:valid" result="pass"/><test-case name="38415wildZ001 tokoe:valid" result="pass"/><test-case name="38416wildZ001.i tokoe:invalid" result="pass"/><test-case name="38417wildZ002 tokoe:valid" result="pass"/><test-case name="38418wildZ002.v tokoe:valid" result="pass"/><test-case name="38419wildZ003 tokoe:valid" result="pass"/><test-case name="38420wildZ003.v tokoe:valid" result="fail"/><test-case name="38421wildZ004 tokoe:valid" result="pass"/><test-case name="38422wildZ004.v tokoe:valid" result="pass"/><test-case name="38423wildZ005 tokoe:valid" result="pass"/><test-case name="38424wildZ005.i tokoe:invalid" result="pass"/><test-case name="38425wildZ006 tokoe:valid" result="pass"/><test-case name="38426wildZ006.i tokoe:invalid" result="pass"/><test-case name="38427wildZ007 tokoe:valid" result="pass"/><test-case name="38428wildZ007.v tokoe:valid" result="pass"/><test-case name="38429wildZ008 tokoe:invalid" result="pass"/><test-case name="38430wildZ009 tokoe:invalid" result="pass"/><test-case name="38431wildZ009b tokoe:valid" result="pass"/><test-case name="38432wildZ011 tokoe:valid" result="pass"/><test-case name="38433wildZ011.i tokoe:invalid" result="pass"/><test-case name="38434wildZ013 tokoe:invalid" result="pass"/><test-case name="38435wildZ013a tokoe:valid" result="pass"/><test-case name="38436wildZ013a.i tokoe:invalid" result="pass"/><test-case name="38437wildZ013b tokoe:valid" result="pass"/><test-case name="38438wildZ013b.v tokoe:valid" result="pass"/><test-case name="38439wildZ013c tokoe:valid" result="pass"/><test-case name="38440wildZ013c.v tokoe:valid" result="pass"/><test-case name="38441wildZ013d tokoe:valid" result="pass"/><test-case name="38442wildZ013d.i tokoe:invalid" result="pass"/><test-case name="38443wildZ013e tokoe:valid" result="pass"/><test-case name="38444wildZ013e.i tokoe:invalid" result="pass"/><test-case name="38445wildZ013f tokoe:valid" result="pass"/><test-case name="38446wildZ013f.i tokoe:invalid" result="pass"/><test-case name="38447ipo1 tokoe:valid" result="pass"/><test-case name="38448ipo_1 tokoe:valid" result="pass"/><test-case name="38449ipo_2 tokoe:valid" result="pass"/><test-case name="38450ipo2 tokoe:valid" result="pass"/><test-case name="38451ipo_1 tokoe:valid" result="pass"/><test-case name="38452ipo_2 tokoe:valid" result="pass"/><test-case name="38453ipo3 tokoe:valid" result="pass"/><test-case name="38454ipo_1 tokoe:valid" result="pass"/><test-case name="38455ipo_2 tokoe:valid" result="pass"/><test-case name="38456ipo4 tokoe:valid" result="pass"/><test-case name="38457ipo_1 tokoe:valid" result="pass"/><test-case name="38458ipo_2 tokoe:valid" result="pass"/><test-case name="38459ipo5 tokoe:valid" result="pass"/><test-case name="38460ipo_1 tokoe:valid" result="pass"/><test-case name="38461ipo_2 tokoe:valid" result="pass"/><test-case name="38462ipo6 tokoe:valid" result="pass"/><test-case name="38463ipo_1 tokoe:valid" result="fail"/><test-case name="38464ipo_2 tokoe:valid" result="fail"/></test-suite-result>
\ No newline at end of file diff --git a/tests/auto/xmlpatternsschemats/TESTSUITE/.gitignore b/tests/auto/xmlpatternsschemats/TESTSUITE/.gitignore new file mode 100644 index 0000000..35cb85e --- /dev/null +++ b/tests/auto/xmlpatternsschemats/TESTSUITE/.gitignore @@ -0,0 +1,3 @@ +testSuites.xml +xmlschema2006-11-06 +xmlschema2006-11-06-new diff --git a/tests/auto/xmlpatternsschemats/TESTSUITE/unifyCatalog.xsl b/tests/auto/xmlpatternsschemats/TESTSUITE/unifyCatalog.xsl new file mode 100644 index 0000000..325f626 --- /dev/null +++ b/tests/auto/xmlpatternsschemats/TESTSUITE/unifyCatalog.xsl @@ -0,0 +1,21 @@ +<xsl:stylesheet version="2.0" + xmlns:ts="http://www.w3.org/XML/2004/xml-schema-test-suite/" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> + + <xsl:template match="ts:testSetRef"> + <xsl:apply-templates select="document(@xlink:href)"/> + </xsl:template> + + <!-- We make all URI references absolute. --> + <xsl:template match="@xlink:href"> + <xsl:attribute name="xlink:href" select="resolve-uri(., base-uri())"/> + </xsl:template> + + <xsl:template match="@*|node()"> + <xsl:copy> + <xsl:apply-templates select="@*|node()"/> + </xsl:copy> + </xsl:template> + +</xsl:stylesheet> diff --git a/tests/auto/xmlpatternsschemats/TESTSUITE/updateSuite.sh b/tests/auto/xmlpatternsschemats/TESTSUITE/updateSuite.sh new file mode 100755 index 0000000..1770f1e --- /dev/null +++ b/tests/auto/xmlpatternsschemats/TESTSUITE/updateSuite.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# This script updates the suite from W3C's server. +# +# NOTE: the files checked out CANNOT be added to Trolltech's +# repository at the moment, due to legal complications. + +DIRECTORY_NAME="xmlschema2006-11-06" +ARCHIVE_NAME="xsts-2007-06-20.tar.gz" + +rm -Rf $DIRECTORY_NAME + +wget http://www.w3.org/XML/2004/xml-schema-test-suite/xmlschema2006-11-06/$ARCHIVE_NAME +tar -xzf $ARCHIVE_NAME +rm $ARCHIVE_NAME + +CVSROOT=:pserver:anonymous@dev.w3.org:/sources/public cvs login +CVSROOT=:pserver:anonymous@dev.w3.org:/sources/public cvs checkout -d xmlschema2006-11-06-new XML/xml-schema-test-suite/2004-01-14/xmlschema2006-11-06 + +java net.sf.saxon.Transform -xsl:unifyCatalog.xsl $DIRECTORY_NAME/suite.xml > testSuites.xml diff --git a/tests/auto/xmlpatternsschemats/tst_xmlpatternsschemats.cpp b/tests/auto/xmlpatternsschemats/tst_xmlpatternsschemats.cpp new file mode 100644 index 0000000..7a6f4c8 --- /dev/null +++ b/tests/auto/xmlpatternsschemats/tst_xmlpatternsschemats.cpp @@ -0,0 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +****************************************************************************/ + +#include <QtTest/QtTest> + +#ifdef QTEST_XMLPATTERNS + +#include "tst_suitetest.h" + +/*! + \internal + \brief Test QXsdSchemaParser against W3C's XSD test suite. + */ +class tst_XmlPatternsSchemaTS : public tst_SuiteTest +{ + Q_OBJECT +public: + tst_XmlPatternsSchemaTS(); +protected: + virtual void catalogPath(QString &write) const; +}; + +tst_XmlPatternsSchemaTS::tst_XmlPatternsSchemaTS() + : tst_SuiteTest(tst_SuiteTest::XsdSuite) +{ +} + +void tst_XmlPatternsSchemaTS::catalogPath(QString &write) const +{ + write = QLatin1String("TESTSUITE/testSuites.xml"); +} + +QTEST_MAIN(tst_XmlPatternsSchemaTS) + +#include "tst_xmlpatternsschemats.moc" +#else +QTEST_NOOP_MAIN +#endif + +// vim: et:ts=4:sw=4:sts=4 diff --git a/tests/auto/xmlpatternsschemats/xmlpatternsschemats.pro b/tests/auto/xmlpatternsschemats/xmlpatternsschemats.pro new file mode 100644 index 0000000..4978c35 --- /dev/null +++ b/tests/auto/xmlpatternsschemats/xmlpatternsschemats.pro @@ -0,0 +1,23 @@ +load(qttest_p4) +SOURCES += tst_xmlpatternsschemats.cpp \ + ../qxmlquery/TestFundament.cpp + +include (../xmlpatterns.pri) + +contains(QT_CONFIG,xmlpatterns) { +HEADERS += ../xmlpatternsxqts/test/tst_suitetest.h +SOURCES += ../xmlpatternsxqts/test/tst_suitetest.cpp +} + +PATTERNIST_SDK = QtXmlPatternsSDK +if(!debug_and_release|build_pass):CONFIG(debug, debug|release) { + win32:PATTERNIST_SDK = $${PATTERNIST_SDK}d + else: PATTERNIST_SDK = $${PATTERNIST_SDK}_debug +} +LIBS += -l$$PATTERNIST_SDK + +INCLUDEPATH += $$QT_SOURCE_TREE/tests/auto/xmlpatternsxqts/lib/ \ + $$QT_BUILD_TREE/include/QtXmlPatterns/private \ + $$QT_SOURCE_TREE/tests/auto/xmlpatternsxqts/test \ + ../xmlpatternsxqts/test \ + ../xmlpatternsxqts/lib diff --git a/tests/auto/xmlpatternsvalidator/files/instance.xml b/tests/auto/xmlpatternsvalidator/files/instance.xml new file mode 100644 index 0000000..544ff8c --- /dev/null +++ b/tests/auto/xmlpatternsvalidator/files/instance.xml @@ -0,0 +1,3 @@ +<hello> + <world/> +</hello>
\ No newline at end of file diff --git a/tests/auto/xmlpatternsvalidator/files/invalid_schema.xsd b/tests/auto/xmlpatternsvalidator/files/invalid_schema.xsd new file mode 100644 index 0000000..99e3525 --- /dev/null +++ b/tests/auto/xmlpatternsvalidator/files/invalid_schema.xsd @@ -0,0 +1,12 @@ +<?xml version="1.0"?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + + <xsd:element name="hello"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="world" type="xsd:string" maxOccurs="-2345"/> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + +</xsd:schema> diff --git a/tests/auto/xmlpatternsvalidator/files/other_valid_schema.xsd b/tests/auto/xmlpatternsvalidator/files/other_valid_schema.xsd new file mode 100644 index 0000000..850ed92 --- /dev/null +++ b/tests/auto/xmlpatternsvalidator/files/other_valid_schema.xsd @@ -0,0 +1,12 @@ +<?xml version="1.0"?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + + <xsd:element name="olleh"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="dlrow" type="xsd:string" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + +</xsd:schema> diff --git a/tests/auto/xmlpatternsvalidator/files/sa_invalid_instance.xml b/tests/auto/xmlpatternsvalidator/files/sa_invalid_instance.xml new file mode 100644 index 0000000..1804e88 --- /dev/null +++ b/tests/auto/xmlpatternsvalidator/files/sa_invalid_instance.xml @@ -0,0 +1,3 @@ +<hello xsi:noNamespaceSchemaLocation="valid_schema.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <dlrow/> +</hello> diff --git a/tests/auto/xmlpatternsvalidator/files/sa_valid_instance.xml b/tests/auto/xmlpatternsvalidator/files/sa_valid_instance.xml new file mode 100644 index 0000000..47c980e --- /dev/null +++ b/tests/auto/xmlpatternsvalidator/files/sa_valid_instance.xml @@ -0,0 +1,3 @@ +<hello xsi:noNamespaceSchemaLocation="valid_schema.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <world/> +</hello> diff --git a/tests/auto/xmlpatternsvalidator/files/valid_schema.xsd b/tests/auto/xmlpatternsvalidator/files/valid_schema.xsd new file mode 100644 index 0000000..a1b765a --- /dev/null +++ b/tests/auto/xmlpatternsvalidator/files/valid_schema.xsd @@ -0,0 +1,12 @@ +<?xml version="1.0"?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + + <xsd:element name="hello"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="world" type="xsd:string" maxOccurs="unbounded"/> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + +</xsd:schema> diff --git a/tests/auto/xmlpatternsvalidator/tst_xmlpatternsvalidator.cpp b/tests/auto/xmlpatternsvalidator/tst_xmlpatternsvalidator.cpp new file mode 100644 index 0000000..9643e56 --- /dev/null +++ b/tests/auto/xmlpatternsvalidator/tst_xmlpatternsvalidator.cpp @@ -0,0 +1,174 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +****************************************************************************/ + +#include <QFile> +#include <QtTest/QtTest> + +#ifdef QTEST_XMLPATTERNS + +#include "../qxmlquery/TestFundament.h" +#include "../network-settings.h" + +/*! + \class tst_XmlPatterns + \internal + \since 4.6 + \brief Tests the command line interface, \c xmlpatternsvalidator, for the XML validation code. + */ +class tst_XmlPatternsValidator : public QObject + , private TestFundament +{ + Q_OBJECT + +public: + tst_XmlPatternsValidator(); + +private Q_SLOTS: + void initTestCase(); + void xsdSupport(); + void xsdSupport_data() const; + +private: + const QString m_command; + bool m_dontRun; +}; + +tst_XmlPatternsValidator::tst_XmlPatternsValidator() + : m_command(QLatin1String("xmlpatternsvalidator")) + , m_dontRun(false) +{ +} + +void tst_XmlPatternsValidator::initTestCase() +{ + QProcess process; + process.start(m_command); + + if(!process.waitForFinished()) + { + m_dontRun = true; + QEXPECT_FAIL("", "The command line tool is not in the path, most likely because Qt " + "has been partically built, such as only the sub-src rule. No tests will be run.", Abort); + QVERIFY(false); + } +} + +void tst_XmlPatternsValidator::xsdSupport() +{ + if(m_dontRun) + QSKIP("The command line utility is not in the path.", SkipAll); + +#ifdef Q_OS_WINCE + QSKIP("WinCE: This test uses unsupported WinCE functionality", SkipAll); +#endif + + QFETCH(int, expectedExitCode); + QFETCH(QStringList, arguments); + QFETCH(QString, cwd); + + QProcess process; + + if(!cwd.isEmpty()) + process.setWorkingDirectory(inputFile(cwd)); + + process.start(m_command, arguments); + + QCOMPARE(process.exitStatus(), QProcess::NormalExit); + QVERIFY(process.waitForFinished()); + + if(process.exitCode() != expectedExitCode) + QTextStream(stderr) << "foo:" << process.readAllStandardError(); + + QCOMPARE(process.exitCode(), expectedExitCode); +} + +void tst_XmlPatternsValidator::xsdSupport_data() const +{ +#ifdef Q_OS_WINCE + return; +#endif + + QTest::addColumn<int>("expectedExitCode"); + QTest::addColumn<QStringList>("arguments"); + QTest::addColumn<QString>("cwd"); + + QTest::newRow("No arguments") + << 2 + << QStringList() + << QString(); + + QTest::newRow("A valid schema") + << 0 + << QStringList(QLatin1String("files/valid_schema.xsd")) + << QString(); + + QTest::newRow("An invalid schema") + << 1 + << QStringList(QLatin1String("files/invalid_schema.xsd")) + << QString(); + + QTest::newRow("An instance and valid schema") + << 0 + << (QStringList() << QLatin1String("files/instance.xml") + << QLatin1String("files/valid_schema.xsd")) + << QString(); + + QTest::newRow("An instance and invalid schema") + << 1 + << (QStringList() << QLatin1String("files/instance.xml") + << QLatin1String("files/invalid_schema.xsd")) + << QString(); + + QTest::newRow("An instance and not matching schema") + << 1 + << (QStringList() << QLatin1String("files/instance.xml") + << QLatin1String("files/other_valid_schema.xsd")) + << QString(); + + QTest::newRow("Two instance documents") + << 1 + << (QStringList() << QLatin1String("files/instance.xml") + << QLatin1String("files/instance.xml")) + << QString(); + + QTest::newRow("Three instance documents") + << 2 + << (QStringList() << QLatin1String("files/instance.xml") + << QLatin1String("files/instance.xml") + << QLatin1String("files/instance.xml")) + << QString(); + + QTest::newRow("Two schema documents") + << 1 + << (QStringList() << QLatin1String("files/valid_schema.xsd") + << QLatin1String("files/valid_schema.xsd")) + << QString(); + + QTest::newRow("A schema aware valid instance document") + << 0 + << (QStringList() << QLatin1String("files/sa_valid_instance.xml")) + << QString(); + + QTest::newRow("A schema aware invalid instance document") + << 1 + << (QStringList() << QLatin1String("files/sa_invalid_instance.xml")) + << QString(); + + QTest::newRow("A non-schema aware instance document") + << 1 + << (QStringList() << QLatin1String("files/instance.xml")) + << QString(); +} + +QTEST_MAIN(tst_XmlPatternsValidator) + +#include "tst_xmlpatternsvalidator.moc" +#else +QTEST_NOOP_MAIN +#endif + +// vim: et:ts=4:sw=4:sts=4 diff --git a/tests/auto/xmlpatternsvalidator/xmlpatternsvalidator.pro b/tests/auto/xmlpatternsvalidator/xmlpatternsvalidator.pro new file mode 100644 index 0000000..7091840 --- /dev/null +++ b/tests/auto/xmlpatternsvalidator/xmlpatternsvalidator.pro @@ -0,0 +1,5 @@ +load(qttest_p4) +SOURCES += tst_xmlpatternsvalidator.cpp \ + ../qxmlquery/TestFundament.cpp + +include (../xmlpatterns.pri) diff --git a/tests/auto/xmlpatternsview/view/MainWindow.cpp b/tests/auto/xmlpatternsview/view/MainWindow.cpp index 734c1be..2723b1d 100644 --- a/tests/auto/xmlpatternsview/view/MainWindow.cpp +++ b/tests/auto/xmlpatternsview/view/MainWindow.cpp @@ -220,7 +220,8 @@ void MainWindow::on_actionOpen_triggered() if(fileName.isNull()) return; - openCatalog(QUrl::fromLocalFile(fileName), true, false); + m_currentSuiteType = TestSuite::XQuerySuite; + openCatalog(QUrl::fromLocalFile(fileName), true, TestSuite::XQuerySuite); } void MainWindow::on_actionOpenXSLTSCatalog_triggered() @@ -234,18 +235,34 @@ void MainWindow::on_actionOpenXSLTSCatalog_triggered() if(fileName.isNull()) return; - openCatalog(QUrl::fromLocalFile(fileName), true, true); + m_currentSuiteType = TestSuite::XsltSuite; + openCatalog(QUrl::fromLocalFile(fileName), true, TestSuite::XsltSuite); +} + +void MainWindow::on_actionOpenXSDTSCatalog_triggered() +{ + const QString fileName(QFileDialog::getOpenFileName(this, + QLatin1String("Open Test Suite Catalog"), + m_previousOpenedCatalog.toLocalFile(), + QLatin1String("Test Suite Catalog file (*.xml)"))); + + /* "If the user presses Cancel, it returns a null string." */ + if(fileName.isNull()) + return; + + m_currentSuiteType = TestSuite::XsdSuite; + openCatalog(QUrl::fromLocalFile(fileName), true, TestSuite::XsdSuite); } void MainWindow::openCatalog(const QUrl &fileName, const bool reportError, - const bool isXSLT) + const TestSuite::SuiteType suiteType) { setCurrentFile(fileName); m_previousOpenedCatalog = fileName; QString errorMsg; - TestSuite *const loadedSuite = TestSuite::openCatalog(fileName, errorMsg, false, isXSLT); + TestSuite *const loadedSuite = TestSuite::openCatalog(fileName, errorMsg, false, suiteType); if(!loadedSuite) { @@ -334,12 +351,12 @@ void MainWindow::readSettings() focusURI->setText(settings.value(QLatin1String("focusURI")).toString()); isXSLT20->setChecked(settings.value(QLatin1String("isXSLT20")).toBool()); compileOnly->setChecked(settings.value(QLatin1String("compileOnly")).toBool()); + m_currentSuiteType = (TestSuite::SuiteType)settings.value(QLatin1String("PreviousSuiteType"), isXSLT20->isChecked() ? TestSuite::XsltSuite : TestSuite::XQuerySuite).toInt(); /* Open the previously opened catalog. */ if(!m_previousOpenedCatalog.isEmpty()) { - /* We don't know what kind of catalog it is, so we just take a chance. */ - openCatalog(m_previousOpenedCatalog, false, isXSLT20->isChecked()); + openCatalog(m_previousOpenedCatalog, false, m_currentSuiteType); } sourceInput->setPlainText(settings.value(QLatin1String("sourceInput")).toString()); @@ -393,6 +410,7 @@ void MainWindow::writeSettings() settings.setValue(QLatin1String("size"), size()); settings.setValue(QLatin1String("sourceInput"), sourceInput->toPlainText()); settings.setValue(QLatin1String("PreviousOpenedCatalogFile"), m_previousOpenedCatalog); + settings.setValue(QLatin1String("PreviousSuiteType"), m_currentSuiteType); settings.setValue(QLatin1String("SelectedTab"), sourceTab->currentIndex()); settings.setValue(QLatin1String("ResultViewMethod"), testResultView->resultViewSelection->currentIndex()); @@ -470,7 +488,7 @@ void MainWindow::openRecentFile() { const QAction *const action = qobject_cast<QAction *>(sender()); if(action) - openCatalog(action->data().toUrl(), true, false); + openCatalog(action->data().toUrl(), true, TestSuite::XQuerySuite); } void MainWindow::closeEvent(QCloseEvent *ev) diff --git a/tests/auto/xmlpatternsview/view/MainWindow.h b/tests/auto/xmlpatternsview/view/MainWindow.h index a41ad77..21e1ecf 100644 --- a/tests/auto/xmlpatternsview/view/MainWindow.h +++ b/tests/auto/xmlpatternsview/view/MainWindow.h @@ -88,6 +88,7 @@ #include "ui_ui_MainWindow.h" #include "DebugExpressionFactory.h" +#include "TestSuite.h" QT_BEGIN_HEADER @@ -142,6 +143,8 @@ namespace QPatternistSDK void on_actionOpenXSLTSCatalog_triggered(); + void on_actionOpenXSDTSCatalog_triggered(); + /** * Executes the selected test case or test group. */ @@ -153,7 +156,7 @@ namespace QPatternistSDK * an informative message box will be displayed, if any errors occurred. */ void openCatalog(const QUrl &file, const bool reportError, - const bool isXSLT); + const TestSuite::SuiteType suitType); void openRecentFile(); @@ -205,6 +208,7 @@ namespace QPatternistSDK TestCaseView * testCaseView; TestResultView * testResultView; FunctionSignaturesView * functionView; + TestSuite::SuiteType m_currentSuiteType; }; } QT_END_NAMESPACE diff --git a/tests/auto/xmlpatternsview/view/ui_MainWindow.ui b/tests/auto/xmlpatternsview/view/ui_MainWindow.ui index 5d74331..0240350 100644 --- a/tests/auto/xmlpatternsview/view/ui_MainWindow.ui +++ b/tests/auto/xmlpatternsview/view/ui_MainWindow.ui @@ -234,6 +234,7 @@ </property> <addaction name="actionOpen"/> <addaction name="actionOpenXSLTSCatalog"/> + <addaction name="actionOpenXSDTSCatalog"/> <addaction name="actionExecute"/> <addaction name="separator"/> <addaction name="actionRestart"/> @@ -304,6 +305,14 @@ <string>Ctrl+L</string> </property> </action> + <action name="actionOpenXSDTSCatalog"> + <property name="text"> + <string>O&pen XSDTS Catalog...</string> + </property> + <property name="shortcut"> + <string>Ctrl+S</string> + </property> + </action> </widget> <resources/> <connections/> diff --git a/tests/auto/xmlpatternsxqts/lib/TestBaseLine.cpp b/tests/auto/xmlpatternsxqts/lib/TestBaseLine.cpp index 78b58c6..dd10b51 100644 --- a/tests/auto/xmlpatternsxqts/lib/TestBaseLine.cpp +++ b/tests/auto/xmlpatternsxqts/lib/TestBaseLine.cpp @@ -178,6 +178,7 @@ void TestBaseLine::toXML(XMLWriter &receiver) const { case XML: /* Fallthrough. */ case Fragment: /* Fallthrough. */ + case SchemaIsValid: /* Fallthrough. */ case Text: { QXmlAttributes inspectAtts; @@ -343,6 +344,8 @@ TestResult::Status TestBaseLine::verify(const QString &serializedInput) const { switch(m_type) { + case SchemaIsValid: + /* Fall through. */ case Text: { if(serializedInput == details()) @@ -491,6 +494,8 @@ QString TestBaseLine::displayName(const Type id) return QLatin1String("Inspect"); case ExpectedError: return QLatin1String("ExpectedError"); + case SchemaIsValid: + return QLatin1String("SchemaIsValid"); } Q_ASSERT(false); @@ -503,6 +508,8 @@ QString TestBaseLine::details() const return QString(); if(m_type == ExpectedError) /* We're an error code. */ return m_details; + if(m_type == SchemaIsValid) /* We're a schema validation information . */ + return m_details; if(m_details.isEmpty()) return m_details; diff --git a/tests/auto/xmlpatternsxqts/lib/TestBaseLine.h b/tests/auto/xmlpatternsxqts/lib/TestBaseLine.h index 4e1df67..07d14de 100644 --- a/tests/auto/xmlpatternsxqts/lib/TestBaseLine.h +++ b/tests/auto/xmlpatternsxqts/lib/TestBaseLine.h @@ -168,7 +168,14 @@ namespace QPatternistSDK * because an implementation does not support the feature is not * considered a correct result. */ - ExpectedError + ExpectedError, + + /** + * A special comparison for the schema validation tests. The details + * can only be 'true' or 'false' depending on whether it is a valid + * schema or not. + */ + SchemaIsValid }; /** diff --git a/tests/auto/xmlpatternsxqts/lib/TestGroup.cpp b/tests/auto/xmlpatternsxqts/lib/TestGroup.cpp index 40a3a9d..458a553 100644 --- a/tests/auto/xmlpatternsxqts/lib/TestGroup.cpp +++ b/tests/auto/xmlpatternsxqts/lib/TestGroup.cpp @@ -94,7 +94,7 @@ TestGroup::TestGroup(TreeItem *p) : m_parent(p) QVariant TestGroup::data(const Qt::ItemDataRole role, int column) const { - if(role != Qt::DisplayRole && role != Qt::BackgroundRole) + if(role != Qt::DisplayRole && role != Qt::BackgroundRole && role != Qt::ToolTipRole) return QVariant(); /* In ResultSummary, the first is the amount of passes and the second is the total. */ @@ -154,6 +154,10 @@ QVariant TestGroup::data(const Qt::ItemDataRole role, int column) const return QVariant(); } } + case Qt::ToolTipRole: + { + return description(); + } default: { Q_ASSERT_X(false, Q_FUNC_INFO, "This shouldn't be reached"); diff --git a/tests/auto/xmlpatternsxqts/lib/TestSuite.cpp b/tests/auto/xmlpatternsxqts/lib/TestSuite.cpp index 34334ec..9122860 100644 --- a/tests/auto/xmlpatternsxqts/lib/TestSuite.cpp +++ b/tests/auto/xmlpatternsxqts/lib/TestSuite.cpp @@ -91,6 +91,7 @@ #include "TestSuiteResult.h" #include "XMLWriter.h" #include "XSLTTestSuiteHandler.h" +#include "XSDTestSuiteHandler.h" #include "qdebug_p.h" #include "TestSuite.h" @@ -132,7 +133,7 @@ TestSuiteResult *TestSuite::runSuite() TestSuite *TestSuite::openCatalog(const QUrl &catalogURI, QString &errorMsg, const bool useExclusionList, - const bool isXSLTCatalog) + SuiteType suiteType) { pDebug() << "Opening catalog:" << catalogURI.toString(); QFile ts(catalogURI.toLocalFile()); @@ -167,14 +168,14 @@ TestSuite *TestSuite::openCatalog(const QUrl &catalogURI, return 0; } - return openCatalog(&ts, errorMsg, catalogURI, useExclusionList, isXSLTCatalog); + return openCatalog(&ts, errorMsg, catalogURI, useExclusionList, suiteType); } TestSuite *TestSuite::openCatalog(QIODevice *input, QString &errorMsg, const QUrl &fileName, const bool useExclusionList, - const bool isXSLTCatalog) + SuiteType suiteType) { Q_ASSERT(input); @@ -183,10 +184,12 @@ TestSuite *TestSuite::openCatalog(QIODevice *input, HandlerPtr loader; - if(isXSLTCatalog) - loader = HandlerPtr(new XSLTTestSuiteHandler(fileName)); - else - loader = HandlerPtr(new TestSuiteHandler(fileName, useExclusionList)); + switch (suiteType) { + case XQuerySuite: loader = HandlerPtr(new TestSuiteHandler(fileName, useExclusionList)); break; + case XsltSuite: loader = HandlerPtr(new XSLTTestSuiteHandler(fileName)); break; + case XsdSuite: loader = HandlerPtr(new XSDTestSuiteHandler(fileName)); break; + default: Q_ASSERT(false); break; + } reader.setContentHandler(loader.data()); @@ -198,8 +201,13 @@ TestSuite *TestSuite::openCatalog(QIODevice *input, return 0; } - TestSuite *const suite = isXSLTCatalog ? static_cast<XSLTTestSuiteHandler *>(loader.data())->testSuite() - : static_cast<TestSuiteHandler *>(loader.data())->testSuite(); + TestSuite *suite = 0; + switch (suiteType) { + case XQuerySuite: suite = static_cast<TestSuiteHandler *>(loader.data())->testSuite(); break; + case XsltSuite: suite = static_cast<XSLTTestSuiteHandler *>(loader.data())->testSuite(); break; + case XsdSuite: suite = static_cast<XSDTestSuiteHandler *>(loader.data())->testSuite(); break; + default: Q_ASSERT(false); break; + } if(suite) return suite; diff --git a/tests/auto/xmlpatternsxqts/lib/TestSuite.h b/tests/auto/xmlpatternsxqts/lib/TestSuite.h index 4fc489b..7b057b8 100644 --- a/tests/auto/xmlpatternsxqts/lib/TestSuite.h +++ b/tests/auto/xmlpatternsxqts/lib/TestSuite.h @@ -112,6 +112,16 @@ namespace QPatternistSDK class Q_PATTERNISTSDK_EXPORT TestSuite : public TestContainer { public: + /** + * Describes the type of test suite. + */ + enum SuiteType + { + XQuerySuite, ///< The test suite for XQuery + XsltSuite, ///< The test suite for XSLT + XsdSuite ///< The test suite for XML Schema + }; + TestSuite(); virtual QVariant data(const Qt::ItemDataRole role, int column) const; @@ -148,7 +158,7 @@ namespace QPatternistSDK static TestSuite *openCatalog(const QUrl &catalogFile, QString &errorMsg, const bool useExclusionList, - const bool isXSLTCatalog = false); + SuiteType type); void toXML(XMLWriter &receiver, TestCase *const tc) const; @@ -177,7 +187,7 @@ namespace QPatternistSDK QString &errorMsg, const QUrl &fileName, const bool useExclusionList, - const bool isXSLTCatalog); + SuiteType type); QString m_version; QDate m_designDate; }; diff --git a/tests/auto/xmlpatternsxqts/lib/TreeModel.cpp b/tests/auto/xmlpatternsxqts/lib/TreeModel.cpp index 172e68c..ff98b3e 100644 --- a/tests/auto/xmlpatternsxqts/lib/TreeModel.cpp +++ b/tests/auto/xmlpatternsxqts/lib/TreeModel.cpp @@ -118,9 +118,14 @@ QVariant TreeModel::headerData(int section, Qt::Orientation orientation, int rol return QVariant(); } -void TreeModel::childChanged(TreeItem *) +void TreeModel::childChanged(TreeItem *item) { - layoutChanged(); + if (item) { + const QModelIndex index = createIndex(item->row(), 0, item); + dataChanged(index, index); + } else { + layoutChanged(); + } } QModelIndex TreeModel::index(int row, int column, const QModelIndex &p) const diff --git a/tests/auto/xmlpatternsxqts/lib/XSDTSTestCase.cpp b/tests/auto/xmlpatternsxqts/lib/XSDTSTestCase.cpp new file mode 100644 index 0000000..b19eb91 --- /dev/null +++ b/tests/auto/xmlpatternsxqts/lib/XSDTSTestCase.cpp @@ -0,0 +1,346 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the Patternist project on Trolltech Labs. +** +** $TROLLTECH_GPL_LICENSE$ +** +*************************************************************************** +*/ + +#include <QColor> +#include <QFile> +#include <QFileInfo> +#include <QVariant> +#include <QtDebug> + +#include "XSDTSTestCase.h" + +#include "qxmlschema.h" +#include "qxmlschemavalidator.h" + +using namespace QPatternistSDK; +using namespace QPatternist; + +XSDTSTestCase::XSDTSTestCase(const Scenario scen, TreeItem *p, TestType testType) + : m_scenario(scen) + , m_parent(p) + , m_testType(testType) +{ +} + +XSDTSTestCase::~XSDTSTestCase() +{ + qDeleteAll(m_baseLines); +} + +TestResult::List XSDTSTestCase::execute(const ExecutionStage, TestSuite*) +{ + ErrorHandler errHandler; + ErrorHandler::installQtMessageHandler(&errHandler); + + TestResult::List retval; + TestResult::Status resultStatus = TestResult::Unknown; + QString serialized; + + if (m_testType == SchemaTest) { + executeSchemaTest(resultStatus, serialized, &errHandler); + } else { + executeInstanceTest(resultStatus, serialized, &errHandler); + } + + resultStatus = TestBaseLine::scan(serialized, baseLines()); + Q_ASSERT(resultStatus != TestResult::Unknown); + + m_result = new TestResult(name(), resultStatus, 0, errHandler.messages(), + QPatternist::Item::List(), serialized); + retval.append(m_result); + ErrorHandler::installQtMessageHandler(0); + changed(this); + return retval; +} + +void XSDTSTestCase::executeSchemaTest(TestResult::Status &resultStatus, QString &serialized, QAbstractMessageHandler *handler) +{ + QFile file(m_schemaUri.path()); + if (!file.open(QIODevice::ReadOnly)) { + resultStatus = TestResult::Fail; + serialized = QString(); + return; + } + + QXmlSchema schema; + schema.setMessageHandler(handler); + schema.load(&file, m_schemaUri); + + if (schema.isValid()) { + resultStatus = TestResult::Pass; + serialized = QString::fromLatin1("true"); + } else { + resultStatus = TestResult::Pass; + serialized = QString::fromLatin1("false"); + } +} + +void XSDTSTestCase::executeInstanceTest(TestResult::Status &resultStatus, QString &serialized, QAbstractMessageHandler *handler) +{ + QFile instanceFile(m_instanceUri.path()); + if (!instanceFile.open(QIODevice::ReadOnly)) { + resultStatus = TestResult::Fail; + serialized = QString(); + return; + } + + QXmlSchema schema; + if (m_schemaUri.isValid()) { + QFile file(m_schemaUri.path()); + if (!file.open(QIODevice::ReadOnly)) { + resultStatus = TestResult::Fail; + serialized = QString(); + return; + } + + schema.setMessageHandler(handler); + schema.load(&file, m_schemaUri); + + if (!schema.isValid()) { + resultStatus = TestResult::Pass; + serialized = QString::fromLatin1("false"); + return; + } + } + + QXmlSchemaValidator validator(schema); + validator.setMessageHandler(handler); + + qDebug("check %s", qPrintable(m_instanceUri.path())); + if (validator.validate(&instanceFile, m_instanceUri)) { + resultStatus = TestResult::Pass; + serialized = QString::fromLatin1("true"); + } else { + resultStatus = TestResult::Pass; + serialized = QString::fromLatin1("false"); + } +} + +QVariant XSDTSTestCase::data(const Qt::ItemDataRole role, int column) const +{ + if(role == Qt::DisplayRole) + { + if(column == 0) + return title(); + + const TestResult *const tr = testResult(); + if(!tr) + { + if(column == 1) + return TestResult::displayName(TestResult::NotTested); + else + return QString(); + } + const TestResult::Status status = tr->status(); + + switch(column) + { + case 1: + return status == TestResult::Pass ? QString(QChar::fromLatin1('1')) + : QString(QChar::fromLatin1('0')); + case 2: + return status == TestResult::Fail ? QString(QChar::fromLatin1('1')) + : QString(QChar::fromLatin1('0')); + default: + return QString(); + } + } + + if(role != Qt::BackgroundRole) + return QVariant(); + + const TestResult *const tr = testResult(); + + if(!tr) + { + if(column == 0) + return Qt::yellow; + else + return QVariant(); + } + + const TestResult::Status status = tr->status(); + + if(status == TestResult::NotTested || status == TestResult::Unknown) + return Qt::yellow; + + switch(column) + { + case 1: + return status == TestResult::Pass ? Qt::green : QVariant(); + case 2: + return status == TestResult::Fail ? Qt::red : QVariant(); + default: + return QVariant(); + } +} + +QString XSDTSTestCase::sourceCode(bool &ok) const +{ + QFile file((m_testType == SchemaTest ? m_schemaUri : m_instanceUri).toLocalFile()); + + QString err; + + if(!file.exists()) + err = QString::fromLatin1("Error: %1 does not exist.").arg(file.fileName()); + else if(!QFileInfo(file.fileName()).isFile()) + err = QString::fromLatin1("Error: %1 is not a file, cannot display it.").arg(file.fileName()); + else if(!file.open(QIODevice::ReadOnly)) + err = QString::fromLatin1("Error: Could not open %1. Likely a permission error.") + .arg(file.fileName()); + + if(err.isNull()) /* No errors. */ + { + ok = true; + /* Scary, we assume the query is stored in UTF-8. */ + return QString::fromUtf8(file.readAll()); + } + else + { + ok = false; + return err; + } +} + +int XSDTSTestCase::columnCount() const +{ + return 2; +} + +void XSDTSTestCase::addBaseLine(TestBaseLine *line) +{ + m_baseLines.append(line); +} + +QString XSDTSTestCase::name() const +{ + return m_name; +} + +QString XSDTSTestCase::creator() const +{ + return m_creator; +} + +QString XSDTSTestCase::description() const +{ + return m_description; +} + +QDate XSDTSTestCase::lastModified() const +{ + return m_lastModified; +} + +bool XSDTSTestCase::isXPath() const +{ + return false; +} + +TestCase::Scenario XSDTSTestCase::scenario() const +{ + return m_scenario; +} + +void XSDTSTestCase::setName(const QString &n) +{ + m_name = n; +} + +void XSDTSTestCase::setCreator(const QString &ctor) +{ + m_creator = ctor; +} + +void XSDTSTestCase::setDescription(const QString &descriptionP) +{ + m_description = descriptionP; +} + +void XSDTSTestCase::setLastModified(const QDate &date) +{ + m_lastModified = date; +} + +void XSDTSTestCase::setSchemaUri(const QUrl &uri) +{ + m_schemaUri = uri; +} + +void XSDTSTestCase::setInstanceUri(const QUrl &uri) +{ + m_instanceUri = uri; +} + +TreeItem *XSDTSTestCase::parent() const +{ + return m_parent; +} + +QString XSDTSTestCase::title() const +{ + return m_name; +} + +TestBaseLine::List XSDTSTestCase::baseLines() const +{ + Q_ASSERT_X(!m_baseLines.isEmpty(), Q_FUNC_INFO, + qPrintable(QString::fromLatin1("The test %1 has no base lines, it should have at least one.").arg(name()))); + return m_baseLines; +} + +QUrl XSDTSTestCase::schemaUri() const +{ + return m_schemaUri; +} + +QUrl XSDTSTestCase::instanceUri() const +{ + return m_instanceUri; +} + +void XSDTSTestCase::setContextItemSource(const QUrl &uri) +{ + m_contextItemSource = uri; +} + +QUrl XSDTSTestCase::contextItemSource() const +{ + return m_contextItemSource; +} + +void XSDTSTestCase::setParent(TreeItem *const p) +{ + m_parent = p; +} + +QPatternist::ExternalVariableLoader::Ptr XSDTSTestCase::externalVariableLoader() const +{ + return QPatternist::ExternalVariableLoader::Ptr(); +} + +TestResult *XSDTSTestCase::testResult() const +{ + return m_result; +} + +TestItem::ResultSummary XSDTSTestCase::resultSummary() const +{ + if(m_result) + return ResultSummary(m_result->status() == TestResult::Pass ? 1 : 0, + 1); + + return ResultSummary(0, 1); +} + +// vim: et:ts=4:sw=4:sts=4 + diff --git a/tests/auto/xmlpatternsxqts/lib/XSDTSTestCase.h b/tests/auto/xmlpatternsxqts/lib/XSDTSTestCase.h new file mode 100644 index 0000000..ce84988 --- /dev/null +++ b/tests/auto/xmlpatternsxqts/lib/XSDTSTestCase.h @@ -0,0 +1,130 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the Patternist project on Trolltech Labs. +** +** $TROLLTECH_GPL_LICENSE$ +** +*************************************************************************** +*/ + +#ifndef PatternistSDK_XSDTSTestCase_H +#define PatternistSDK_XSDTSTestCase_H + +#include <QDate> +#include <QString> +#include <QUrl> + +#include "TestBaseLine.h" +#include "TestCase.h" + +QT_BEGIN_HEADER + +namespace QPatternistSDK +{ + /** + * @short Represents a test case in a test suite in the XML Query Test Suite. + * + * TestCase is a memory representation of a test case, and maps + * to the @c test-case element in the XQuery Test Suite test + * case catalog. + * + * @ingroup PatternistSDK + * @author Frans Englich <fenglich@trolltech.com> + */ + class Q_PATTERNISTSDK_EXPORT XSDTSTestCase : public TestCase + { + public: + enum TestType + { + SchemaTest, + InstanceTest + }; + + XSDTSTestCase(const Scenario scen, TreeItem *parent, TestType testType); + virtual ~XSDTSTestCase(); + + /** + * Executes the test, and returns the result. The returned list + * will always contain exactly one TestResult. + * + * @p stage is ignored when running out-of-process. + */ + virtual TestResult::List execute(const ExecutionStage stage, + TestSuite *ts); + /** + * The identifier, the name of the test. For example, "Literals034". + * The name of a test case must be unique. + */ + virtual QString name() const; + virtual QString creator() const; + virtual QString description() const; + /** + * @returns the query inside the file, specified by testCasePath(). Loading + * of the file is not cached in order to avoid complications. + * @param ok is set to @c false if loading the query file fails + */ + virtual QString sourceCode(bool &ok) const; + virtual QUrl schemaUri() const; + virtual QUrl instanceUri() const; + virtual QUrl testCasePath() const {return QUrl();} + virtual QDate lastModified() const; + + bool isXPath() const; + + /** + * What kind of test case this is, what kind of scenario it takes part + * of. For example, whether the test case should evaluate normally or fail. + */ + Scenario scenario() const; + + void setCreator(const QString &creator); + void setLastModified(const QDate &date); + void setDescription(const QString &description); + void setName(const QString &name); + void setSchemaUri(const QUrl &uri); + void setInstanceUri(const QUrl &uri); + void setTestCasePath(const QUrl &uri) {} + void setContextItemSource(const QUrl &uri); + void addBaseLine(TestBaseLine *lines); + + virtual TreeItem *parent() const; + + virtual QVariant data(const Qt::ItemDataRole role, int column) const; + + virtual QString title() const; + virtual TestBaseLine::List baseLines() const; + + virtual int columnCount() const; + + virtual QUrl contextItemSource() const; + void setParent(TreeItem *const parent); + virtual QPatternist::ExternalVariableLoader::Ptr externalVariableLoader() const; + virtual TestResult *testResult() const; + virtual ResultSummary resultSummary() const; + + private: + void executeSchemaTest(TestResult::Status &resultStatus, QString &serialized, QAbstractMessageHandler *handler); + void executeInstanceTest(TestResult::Status &resultStatus, QString &serialized, QAbstractMessageHandler *handler); + + QString m_name; + QString m_creator; + QString m_description; + QUrl m_schemaUri; + QUrl m_instanceUri; + QDate m_lastModified; + const Scenario m_scenario; + TreeItem * m_parent; + TestBaseLine::List m_baseLines; + QUrl m_contextItemSource; + TestType m_testType; + QPointer<TestResult> m_result; + }; +} + +QT_END_HEADER + +#endif +// vim: et:ts=4:sw=4:sts=4 diff --git a/tests/auto/xmlpatternsxqts/lib/XSDTestSuiteHandler.cpp b/tests/auto/xmlpatternsxqts/lib/XSDTestSuiteHandler.cpp new file mode 100644 index 0000000..b6ee379 --- /dev/null +++ b/tests/auto/xmlpatternsxqts/lib/XSDTestSuiteHandler.cpp @@ -0,0 +1,881 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the Patternist project on Trolltech Labs. +** +** $TROLLTECH_GPL_LICENSE$ +** +*************************************************************************** +*/ + +#include <QtDebug> + +#include "qacceltreeresourceloader_p.h" +#include "qnetworkaccessdelegator_p.h" + +#include "Global.h" +#include "TestBaseLine.h" +#include "TestGroup.h" + +#include "XSDTestSuiteHandler.h" +#include "XSDTSTestCase.h" + +using namespace QPatternistSDK; + +extern QNetworkAccessManager s_networkManager; + +XSDTestSuiteHandler::XSDTestSuiteHandler(const QUrl &catalogFile) : m_ts(0) + , m_catalogFile(catalogFile) + , m_inSchemaTest(false) + , m_inInstanceTest(false) + , m_inTestGroup(false) + , m_inDescription(false) + , m_schemaBlacklisted(false) + , m_counter(0) +{ + Q_ASSERT(!m_catalogFile.isRelative()); + m_ts = new TestSuite(); + m_topLevelGroup = new TestGroup(m_ts); + m_topLevelGroup->setTitle("XML Schema Test Suite"); + m_ts->appendChild(m_topLevelGroup); + + // exclude these test cases, as they break our current state machine + m_blackList << QLatin1String("addB099") + << QLatin1String("addB118") + << QLatin1String("elemJ003") + << QLatin1String("elemJ011") + << QLatin1String("elemZ004") + << QLatin1String("elemZ020") + << QLatin1String("groupH021v") + << QLatin1String("groupJ009v") + << QLatin1String("name00101m2") + << QLatin1String("schL5") + << QLatin1String("ste110") + << QLatin1String("stZ007") + << QLatin1String("stZ047") + << QLatin1String("stZ055") + << QLatin1String("addB049") + << QLatin1String("addB068") + << QLatin1String("addB078") + << QLatin1String("addB078A") + << QLatin1String("addB078B") + << QLatin1String("addB167") + << QLatin1String("addB191") + << QLatin1String("isDefault060_2") + << QLatin1String("isDefault069") + << QLatin1String("annotB025") + << QLatin1String("base64Binary_enumeration003_1321") + << QLatin1String("anyURI_a001_1336") + << QLatin1String("anyURI_a001_1336") + << QLatin1String("anyURI_a003_1338") + << QLatin1String("anyURI_a004_1339") + << QLatin1String("anyURI_b004_1354") + << QLatin1String("anyURI_b004_1354") + << QLatin1String("anyURI_b006_1356") + << QLatin1String("QName_length001_1357") + << QLatin1String("QName_length003_1359") + << QLatin1String("QName_minLength003_1362") + << QLatin1String("QName_maxLength001_1364") + << QLatin1String("NOTATION_length001_1372") + << QLatin1String("NOTATION_length003_1374") + << QLatin1String("NOTATION_minLength003_1377") + << QLatin1String("NOTATION_maxLength001_1379") + << QLatin1String("hexBinary003_2069") + << QLatin1String("QName009_2092") + << QLatin1String("dtZ107447_a_2245") + << QLatin1String("elemE001") + << QLatin1String("elemE002") + << QLatin1String("elemE003") + << QLatin1String("elemE004") + << QLatin1String("elemE005") + << QLatin1String("elemT026") + << QLatin1String("elemT027") + << QLatin1String("elemT028") + << QLatin1String("elemT029") + << QLatin1String("elemT054") + << QLatin1String("elemT055") + << QLatin1String("elemT056") + << QLatin1String("elemT057") + << QLatin1String("elemZ006") + << QLatin1String("elemZ007") + << QLatin1String("elemZ026") + << QLatin1String("elemZ027_c") + << QLatin1String("elemZ028c") + << QLatin1String("elemZ028d") + << QLatin1String("elemZ028f1") + << QLatin1String("elemZ028f1") + << QLatin1String("elemZ028f2") + << QLatin1String("elemZ028f2") + << QLatin1String("elemZ028f3") + << QLatin1String("elemZ028f3") + << QLatin1String("elemZ031") + << QLatin1String("errF001") + << QLatin1String("idC019") + << QLatin1String("idL100") + << QLatin1String("idZ011") + << QLatin1String("idZ015") + << QLatin1String("mgO013") + << QLatin1String("particlesA012") + << QLatin1String("particlesA013") + << QLatin1String("particlesA014") + << QLatin1String("particlesA015") + << QLatin1String("particlesHa161") + << QLatin1String("particlesHb008") + << QLatin1String("particlesHb011") + << QLatin1String("particlesIe003") + << QLatin1String("particlesIg003") + << QLatin1String("particlesIg004") + << QLatin1String("particlesJb003") + << QLatin1String("particlesJd003") + << QLatin1String("particlesJf003") + << QLatin1String("particlesJk003") + << QLatin1String("particlesOb001") + << QLatin1String("particlesOb002") + << QLatin1String("particlesOb004") + << QLatin1String("particlesOb008") + << QLatin1String("particlesOb009") + << QLatin1String("particlesOb013") + << QLatin1String("particlesOb018") + << QLatin1String("particlesQ005") + << QLatin1String("particlesS002") + << QLatin1String("particlesT002") + << QLatin1String("particlesT009") + << QLatin1String("particlesT014") + << QLatin1String("particlesV001") + << QLatin1String("particlesV002") + << QLatin1String("particlesV020") + << QLatin1String("particlesZ001") + << QLatin1String("particlesZ005") + << QLatin1String("particlesZ007") + << QLatin1String("particlesZ023") + << QLatin1String("particlesZ024") + << QLatin1String("particlesZ026") + << QLatin1String("particlesZ028") + << QLatin1String("particlesZ033_c") + << QLatin1String("particlesZ033_d") + << QLatin1String("particlesZ033_e") + << QLatin1String("particlesZ033_f") + << QLatin1String("particlesZ033_g") + << QLatin1String("particlesZ034_a1") + << QLatin1String("particlesZ034_a2") + << QLatin1String("particlesZ034_a3") + << QLatin1String("particlesZ034_b") + << QLatin1String("particlesZ035_a") + << QLatin1String("particlesZ035_b") + << QLatin1String("particlesZ036_a") + << QLatin1String("particlesZ036_b1") + << QLatin1String("particlesZ036_b2") + << QLatin1String("particlesZ036_c") +/* + << QLatin1String("reC65") + << QLatin1String("reC66") + << QLatin1String("reC67") + << QLatin1String("reC68") + << QLatin1String("reF58") + << QLatin1String("reG50") + << QLatin1String("reJ11") + << QLatin1String("reJ13") + << QLatin1String("reJ19") + << QLatin1String("reJ21") + << QLatin1String("reJ23") + << QLatin1String("reJ25") + << QLatin1String("reJ29") + << QLatin1String("reJ31") + << QLatin1String("reJ33") + << QLatin1String("reJ35") + << QLatin1String("reJ61") + << QLatin1String("reJ69") + << QLatin1String("reJ75") + << QLatin1String("reJ77") + << QLatin1String("reL98") + << QLatin1String("reL99") + << QLatin1String("reM98") + << QLatin1String("reN99") + << QLatin1String("reS21") + << QLatin1String("reS42") + << QLatin1String("reT63") + << QLatin1String("reT84") + << QLatin1String("reDG2") + << QLatin1String("RegexTest_9") + << QLatin1String("RegexTest_11") + << QLatin1String("RegexTest_14") + << QLatin1String("RegexTest_15") + << QLatin1String("RegexTest_16") + << QLatin1String("RegexTest_17") + << QLatin1String("RegexTest_23") + << QLatin1String("RegexTest_24") + << QLatin1String("RegexTest_25") + << QLatin1String("RegexTest_26") + << QLatin1String("RegexTest_27") + << QLatin1String("RegexTest_28") + << QLatin1String("RegexTest_30") + << QLatin1String("RegexTest_30") + << QLatin1String("RegexTest_33") + << QLatin1String("RegexTest_34") + << QLatin1String("RegexTest_34") + << QLatin1String("RegexTest_43") + << QLatin1String("RegexTest_44") + << QLatin1String("RegexTest_45") + << QLatin1String("RegexTest_46") + << QLatin1String("RegexTest_47") + << QLatin1String("RegexTest_48") + << QLatin1String("RegexTest_49") + << QLatin1String("RegexTest_50") + << QLatin1String("RegexTest_51") + << QLatin1String("RegexTest_52") + << QLatin1String("RegexTest_53") + << QLatin1String("RegexTest_54") + << QLatin1String("RegexTest_55") + << QLatin1String("RegexTest_56") + << QLatin1String("RegexTest_57") + << QLatin1String("RegexTest_57") + << QLatin1String("RegexTest_58") + << QLatin1String("RegexTest_58") + << QLatin1String("RegexTest_65") + << QLatin1String("RegexTest_113") + << QLatin1String("RegexTest_116") + << QLatin1String("RegexTest_119") + << QLatin1String("RegexTest_120") + << QLatin1String("RegexTest_121") + << QLatin1String("RegexTest_141") + << QLatin1String("RegexTest_142") + << QLatin1String("RegexTest_143") + << QLatin1String("RegexTest_145") + << QLatin1String("RegexTest_146") + << QLatin1String("RegexTest_147") + << QLatin1String("RegexTest_148") + << QLatin1String("RegexTest_149") + << QLatin1String("RegexTest_150") + << QLatin1String("RegexTest_151") + << QLatin1String("RegexTest_152") + << QLatin1String("RegexTest_154") + << QLatin1String("RegexTest_155") + << QLatin1String("RegexTest_156") + << QLatin1String("RegexTest_157") + << QLatin1String("RegexTest_158") + << QLatin1String("RegexTest_163") + << QLatin1String("RegexTest_164") + << QLatin1String("RegexTest_165") + << QLatin1String("RegexTest_166") + << QLatin1String("RegexTest_167") + << QLatin1String("RegexTest_168") + << QLatin1String("RegexTest_169") + << QLatin1String("RegexTest_170") + << QLatin1String("RegexTest_171") + << QLatin1String("RegexTest_172") + << QLatin1String("RegexTest_173") + << QLatin1String("RegexTest_174") + << QLatin1String("RegexTest_178") + << QLatin1String("RegexTest_194") + << QLatin1String("RegexTest_194") + << QLatin1String("RegexTest_195") + << QLatin1String("RegexTest_195") + << QLatin1String("RegexTest_196") + << QLatin1String("RegexTest_196") + << QLatin1String("RegexTest_197") + << QLatin1String("RegexTest_198") + << QLatin1String("RegexTest_199") + << QLatin1String("RegexTest_200") + << QLatin1String("RegexTest_200") + << QLatin1String("RegexTest_201") + << QLatin1String("RegexTest_201") + << QLatin1String("RegexTest_202") + << QLatin1String("RegexTest_202") + << QLatin1String("RegexTest_203") + << QLatin1String("RegexTest_204") + << QLatin1String("RegexTest_205") + << QLatin1String("RegexTest_206") + << QLatin1String("RegexTest_207") + << QLatin1String("RegexTest_208") + << QLatin1String("RegexTest_209") + << QLatin1String("RegexTest_209") + << QLatin1String("RegexTest_210") + << QLatin1String("RegexTest_210") + << QLatin1String("RegexTest_211") + << QLatin1String("RegexTest_211") + << QLatin1String("RegexTest_212") + << QLatin1String("RegexTest_213") + << QLatin1String("RegexTest_214") + << QLatin1String("RegexTest_215") + << QLatin1String("RegexTest_216") + << QLatin1String("RegexTest_217") + << QLatin1String("RegexTest_218") + << QLatin1String("RegexTest_220") + << QLatin1String("RegexTest_221") + << QLatin1String("RegexTest_222") + << QLatin1String("RegexTest_226") + << QLatin1String("RegexTest_230") + << QLatin1String("RegexTest_232") + << QLatin1String("RegexTest_233") + << QLatin1String("RegexTest_294") + << QLatin1String("RegexTest_294") + << QLatin1String("RegexTest_295") + << QLatin1String("RegexTest_295") + << QLatin1String("RegexTest_299") + << QLatin1String("RegexTest_300") + << QLatin1String("RegexTest_301") + << QLatin1String("RegexTest_302") + << QLatin1String("RegexTest_303") + << QLatin1String("RegexTest_304") + << QLatin1String("RegexTest_305") + << QLatin1String("RegexTest_306") + << QLatin1String("RegexTest_307") + << QLatin1String("RegexTest_308") + << QLatin1String("RegexTest_309") + << QLatin1String("RegexTest_310") + << QLatin1String("RegexTest_311") + << QLatin1String("RegexTest_312") + << QLatin1String("RegexTest_313") + << QLatin1String("RegexTest_314") + << QLatin1String("RegexTest_315") + << QLatin1String("RegexTest_315") + << QLatin1String("RegexTest_316") + << QLatin1String("RegexTest_316") + << QLatin1String("RegexTest_317") + << QLatin1String("RegexTest_317") + << QLatin1String("RegexTest_440") + << QLatin1String("RegexTest_441") + << QLatin1String("RegexTest_442") + << QLatin1String("RegexTest_443") + << QLatin1String("RegexTest_448") + << QLatin1String("RegexTest_449") + << QLatin1String("RegexTest_450") + << QLatin1String("RegexTest_451") + << QLatin1String("RegexTest_458") + << QLatin1String("RegexTest_464") + << QLatin1String("RegexTest_464") + << QLatin1String("RegexTest_465") + << QLatin1String("RegexTest_469") + << QLatin1String("RegexTest_470") + << QLatin1String("RegexTest_471") + << QLatin1String("RegexTest_472") + << QLatin1String("RegexTest_473") + << QLatin1String("RegexTest_477") + << QLatin1String("RegexTest_478") + << QLatin1String("RegexTest_478") + << QLatin1String("RegexTest_479") + << QLatin1String("RegexTest_480") + << QLatin1String("RegexTest_481") + << QLatin1String("RegexTest_482") + << QLatin1String("RegexTest_482") + << QLatin1String("RegexTest_483") + << QLatin1String("RegexTest_483") + << QLatin1String("RegexTest_484") + << QLatin1String("RegexTest_487") + << QLatin1String("RegexTest_516") + << QLatin1String("RegexTest_516") + << QLatin1String("RegexTest_517") + << QLatin1String("RegexTest_517") + << QLatin1String("RegexTest_518") + << QLatin1String("RegexTest_518") + << QLatin1String("RegexTest_519") + << QLatin1String("RegexTest_519") + << QLatin1String("RegexTest_521") + << QLatin1String("RegexTest_523") + << QLatin1String("RegexTest_524") + << QLatin1String("RegexTest_524") + << QLatin1String("RegexTest_586") + << QLatin1String("RegexTest_587") + << QLatin1String("RegexTest_592") + << QLatin1String("RegexTest_593") + << QLatin1String("RegexTest_594") + << QLatin1String("RegexTest_595") + << QLatin1String("RegexTest_596") + << QLatin1String("RegexTest_597") + << QLatin1String("RegexTest_598") + << QLatin1String("RegexTest_599") + << QLatin1String("RegexTest_600") + << QLatin1String("RegexTest_601") + << QLatin1String("RegexTest_602") + << QLatin1String("RegexTest_603") + << QLatin1String("RegexTest_604") + << QLatin1String("RegexTest_605") + << QLatin1String("RegexTest_648") + << QLatin1String("RegexTest_655") + << QLatin1String("RegexTest_688") + << QLatin1String("RegexTest_696") + << QLatin1String("RegexTest_697") + << QLatin1String("RegexTest_698") + << QLatin1String("RegexTest_700") + << QLatin1String("RegexTest_701") + << QLatin1String("RegexTest_702") + << QLatin1String("RegexTest_703") + << QLatin1String("RegexTest_704") + << QLatin1String("RegexTest_705") + << QLatin1String("RegexTest_706") + << QLatin1String("RegexTest_707") + << QLatin1String("RegexTest_717") + << QLatin1String("RegexTest_718") + << QLatin1String("RegexTest_719") + << QLatin1String("RegexTest_724") + << QLatin1String("RegexTest_725") + << QLatin1String("RegexTest_726") + << QLatin1String("RegexTest_727") + << QLatin1String("RegexTest_728") + << QLatin1String("RegexTest_729") + << QLatin1String("RegexTest_730") + << QLatin1String("RegexTest_731") + << QLatin1String("RegexTest_732") + << QLatin1String("RegexTest_733") + << QLatin1String("RegexTest_743") + << QLatin1String("RegexTest_755") + << QLatin1String("RegexTest_756") + << QLatin1String("RegexTest_761") + << QLatin1String("RegexTest_762") + << QLatin1String("RegexTest_781") + << QLatin1String("RegexTest_782") + << QLatin1String("RegexTest_783") + << QLatin1String("RegexTest_790") + << QLatin1String("RegexTest_791") + << QLatin1String("RegexTest_824") + << QLatin1String("RegexTest_826") + << QLatin1String("RegexTest_827") + << QLatin1String("RegexTest_836") + << QLatin1String("RegexTest_837") + << QLatin1String("RegexTest_841") + << QLatin1String("RegexTest_842") + << QLatin1String("RegexTest_843") + << QLatin1String("RegexTest_844") + << QLatin1String("RegexTest_845") + << QLatin1String("RegexTest_846") + << QLatin1String("RegexTest_847") + << QLatin1String("RegexTest_848") + << QLatin1String("RegexTest_851") + << QLatin1String("RegexTest_852") + << QLatin1String("RegexTest_853") + << QLatin1String("RegexTest_854") + << QLatin1String("RegexTest_855") + << QLatin1String("RegexTest_856") + << QLatin1String("RegexTest_857") + << QLatin1String("RegexTest_861") + << QLatin1String("RegexTest_862") + << QLatin1String("RegexTest_863") + << QLatin1String("RegexTest_864") + << QLatin1String("RegexTest_865") + << QLatin1String("RegexTest_866") + << QLatin1String("RegexTest_870") + << QLatin1String("RegexTest_879") + << QLatin1String("RegexTest_880") + << QLatin1String("RegexTest_888") + << QLatin1String("RegexTest_889") + << QLatin1String("RegexTest_890") + << QLatin1String("RegexTest_891") + << QLatin1String("RegexTest_892") + << QLatin1String("RegexTest_893") + << QLatin1String("RegexTest_894") + << QLatin1String("RegexTest_895") + << QLatin1String("RegexTest_896") + << QLatin1String("RegexTest_897") + << QLatin1String("RegexTest_898") + << QLatin1String("RegexTest_899") + << QLatin1String("RegexTest_900") + << QLatin1String("RegexTest_901") + << QLatin1String("RegexTest_902") + << QLatin1String("RegexTest_903") + << QLatin1String("RegexTest_904") + << QLatin1String("RegexTest_905") + << QLatin1String("RegexTest_906") + << QLatin1String("RegexTest_907") + << QLatin1String("RegexTest_908") + << QLatin1String("RegexTest_909") + << QLatin1String("RegexTest_910") + << QLatin1String("RegexTest_911") + << QLatin1String("RegexTest_912") + << QLatin1String("RegexTest_913") + << QLatin1String("RegexTest_914") + << QLatin1String("RegexTest_915") + << QLatin1String("RegexTest_916") + << QLatin1String("RegexTest_917") + << QLatin1String("RegexTest_918") + << QLatin1String("RegexTest_919") + << QLatin1String("RegexTest_920") + << QLatin1String("RegexTest_921") + << QLatin1String("RegexTest_922") + << QLatin1String("RegexTest_923") + << QLatin1String("RegexTest_924") + << QLatin1String("RegexTest_925") + << QLatin1String("RegexTest_926") + << QLatin1String("RegexTest_928") + << QLatin1String("RegexTest_929") + << QLatin1String("RegexTest_930") + << QLatin1String("RegexTest_936") + << QLatin1String("RegexTest_937") + << QLatin1String("RegexTest_938") + << QLatin1String("RegexTest_939") + << QLatin1String("RegexTest_940") + << QLatin1String("RegexTest_941") + << QLatin1String("RegexTest_942") + << QLatin1String("RegexTest_943") + << QLatin1String("RegexTest_944") + << QLatin1String("RegexTest_945") + << QLatin1String("RegexTest_946") + << QLatin1String("RegexTest_949") + << QLatin1String("RegexTest_950") + << QLatin1String("RegexTest_951") + << QLatin1String("RegexTest_952") + << QLatin1String("RegexTest_953") + << QLatin1String("RegexTest_954") + << QLatin1String("RegexTest_955") + << QLatin1String("RegexTest_956") + << QLatin1String("RegexTest_957") + << QLatin1String("RegexTest_958") + << QLatin1String("RegexTest_959") + << QLatin1String("RegexTest_960") + << QLatin1String("RegexTest_961") + << QLatin1String("RegexTest_962") + << QLatin1String("RegexTest_963") + << QLatin1String("RegexTest_964") + << QLatin1String("RegexTest_976") + << QLatin1String("RegexTest_977") + << QLatin1String("RegexTest_988") + << QLatin1String("RegexTest_989") + << QLatin1String("RegexTest_990") + << QLatin1String("RegexTest_991") + << QLatin1String("RegexTest_994") + << QLatin1String("RegexTest_995") + << QLatin1String("RegexTest_996") + << QLatin1String("RegexTest_997") + << QLatin1String("RegexTest_1000") + << QLatin1String("RegexTest_1001") + << QLatin1String("RegexTest_1002") + << QLatin1String("RegexTest_1003") + << QLatin1String("RegexTest_1004") + << QLatin1String("RegexTest_1007") + << QLatin1String("RegexTest_1008") + << QLatin1String("RegexTest_1009") + << QLatin1String("RegexTest_1010") + << QLatin1String("RegexTest_1011") + << QLatin1String("RegexTest_1012") + << QLatin1String("RegexTest_1013") + << QLatin1String("RegexTest_1014") + << QLatin1String("RegexTest_1015") + << QLatin1String("RegexTest_1016") + << QLatin1String("RegexTest_1017") + << QLatin1String("RegexTest_1018") + << QLatin1String("RegexTest_1019") + << QLatin1String("RegexTest_1070") + << QLatin1String("RegexTest_1071") + << QLatin1String("RegexTest_1076") + << QLatin1String("RegexTest_1077") + << QLatin1String("RegexTest_1078") + << QLatin1String("RegexTest_1079") + << QLatin1String("RegexTest_1080") + << QLatin1String("RegexTest_1081") + << QLatin1String("RegexTest_1082") + << QLatin1String("RegexTest_1083") + << QLatin1String("RegexTest_1084") + << QLatin1String("RegexTest_1085") + << QLatin1String("RegexTest_1086") + << QLatin1String("RegexTest_1087") + << QLatin1String("RegexTest_1088") + << QLatin1String("RegexTest_1089") + << QLatin1String("RegexTest_1132") + << QLatin1String("RegexTest_1139") + << QLatin1String("RegexTest_1172") + << QLatin1String("RegexTest_1180") + << QLatin1String("RegexTest_1181") + << QLatin1String("RegexTest_1182") + << QLatin1String("RegexTest_1184") + << QLatin1String("RegexTest_1185") + << QLatin1String("RegexTest_1186") + << QLatin1String("RegexTest_1187") + << QLatin1String("RegexTest_1188") + << QLatin1String("RegexTest_1189") + << QLatin1String("RegexTest_1190") + << QLatin1String("RegexTest_1191") + << QLatin1String("RegexTest_1201") + << QLatin1String("RegexTest_1202") + << QLatin1String("RegexTest_1203") + << QLatin1String("RegexTest_1208") + << QLatin1String("RegexTest_1209") + << QLatin1String("RegexTest_1210") + << QLatin1String("RegexTest_1211") + << QLatin1String("RegexTest_1212") + << QLatin1String("RegexTest_1213") + << QLatin1String("RegexTest_1214") + << QLatin1String("RegexTest_1215") + << QLatin1String("RegexTest_1216") + << QLatin1String("RegexTest_1217") + << QLatin1String("RegexTest_1227") + << QLatin1String("RegexTest_1239") + << QLatin1String("RegexTest_1240") + << QLatin1String("RegexTest_1245") + << QLatin1String("RegexTest_1246") + << QLatin1String("RegexTest_1265") + << QLatin1String("RegexTest_1266") + << QLatin1String("RegexTest_1267") + << QLatin1String("RegexTest_1274") + << QLatin1String("RegexTest_1275") + << QLatin1String("RegexTest_1308") + << QLatin1String("RegexTest_1310") + << QLatin1String("RegexTest_1311") + << QLatin1String("RegexTest_1320") + << QLatin1String("RegexTest_1321") + << QLatin1String("RegexTest_1322") + << QLatin1String("RegexTest_1323") + << QLatin1String("RegexTest_1324") + << QLatin1String("RegexTest_1325") + << QLatin1String("RegexTest_1326") + << QLatin1String("RegexTest_1327") + << QLatin1String("RegexTest_1328") + << QLatin1String("RegexTest_1329") + << QLatin1String("RegexTest_1330") + << QLatin1String("RegexTest_1331") + << QLatin1String("RegexTest_1332") + << QLatin1String("RegexTest_1335") + << QLatin1String("RegexTest_1336") + << QLatin1String("RegexTest_1337") + << QLatin1String("RegexTest_1338") + << QLatin1String("RegexTest_1339") + << QLatin1String("RegexTest_1340") + << QLatin1String("RegexTest_1341") + << QLatin1String("RegexTest_1345") + << QLatin1String("RegexTest_1346") + << QLatin1String("RegexTest_1347") + << QLatin1String("RegexTest_1348") + << QLatin1String("RegexTest_1349") + << QLatin1String("RegexTest_1350") + << QLatin1String("RegexTest_1354") + << QLatin1String("RegexTest_1363") + << QLatin1String("RegexTest_1364") + << QLatin1String("RegexTest_1365") + << QLatin1String("RegexTest_1372") + << QLatin1String("RegexTest_1373") + << QLatin1String("RegexTest_1374") + << QLatin1String("RegexTest_1375") + << QLatin1String("RegexTest_1376") + << QLatin1String("RegexTest_1377") + << QLatin1String("RegexTest_1378") + << QLatin1String("RegexTest_1379") + << QLatin1String("RegexTest_1380") + << QLatin1String("RegexTest_1381") + << QLatin1String("RegexTest_1382") + << QLatin1String("RegexTest_1383") + << QLatin1String("RegexTest_1384") + << QLatin1String("RegexTest_1385") + << QLatin1String("RegexTest_1386") + << QLatin1String("RegexTest_1387") + << QLatin1String("RegexTest_1388") + << QLatin1String("RegexTest_1389") + << QLatin1String("RegexTest_1390") + << QLatin1String("RegexTest_1391") + << QLatin1String("RegexTest_1392") + << QLatin1String("RegexTest_1393") + << QLatin1String("RegexTest_1394") + << QLatin1String("RegexTest_1395") + << QLatin1String("RegexTest_1396") + << QLatin1String("RegexTest_1397") + << QLatin1String("RegexTest_1398") + << QLatin1String("RegexTest_1399") + << QLatin1String("RegexTest_1400") + << QLatin1String("RegexTest_1401") + << QLatin1String("RegexTest_1402") + << QLatin1String("RegexTest_1403") + << QLatin1String("RegexTest_1404") + << QLatin1String("RegexTest_1405") + << QLatin1String("RegexTest_1406") + << QLatin1String("RegexTest_1407") + << QLatin1String("RegexTest_1408") + << QLatin1String("RegexTest_1409") + << QLatin1String("RegexTest_1410") + << QLatin1String("RegexTest_1412") + << QLatin1String("RegexTest_1413") + << QLatin1String("RegexTest_1414") + << QLatin1String("RegexTest_1420") + << QLatin1String("RegexTest_1421") + << QLatin1String("RegexTest_1422") + << QLatin1String("RegexTest_1423") + << QLatin1String("RegexTest_1424") + << QLatin1String("RegexTest_1425") + << QLatin1String("RegexTest_1426") + << QLatin1String("RegexTest_1427") + << QLatin1String("RegexTest_1428") + << QLatin1String("RegexTest_1429") + << QLatin1String("RegexTest_1430") + << QLatin1String("RegexTest_1433") + << QLatin1String("RegexTest_1434") + << QLatin1String("RegexTest_1435") + << QLatin1String("RegexTest_1436") + << QLatin1String("RegexTest_1437") + << QLatin1String("RegexTest_1438") + << QLatin1String("RegexTest_1439") + << QLatin1String("RegexTest_1440") + << QLatin1String("RegexTest_1441") + << QLatin1String("RegexTest_1442") + << QLatin1String("RegexTest_1443") + << QLatin1String("RegexTest_1444") + << QLatin1String("RegexTest_1445") + << QLatin1String("RegexTest_1446") + << QLatin1String("RegexTest_1447") + << QLatin1String("RegexTest_1448") + << QLatin1String("RegexTest_1451") + << QLatin1String("RegexTest_1452") + << QLatin1String("RegexTest_1453") + << QLatin1String("RegexTest_1454") + << QLatin1String("RegexTest_1455") + << QLatin1String("RegexTest_1456") + << QLatin1String("RegexTest_1472") + << QLatin1String("RegexTest_1473") + << QLatin1String("RegexTest_1474") + << QLatin1String("RegexTest_1475") + << QLatin1String("RegexTest_1478") + << QLatin1String("RegexTest_1479") + << QLatin1String("RegexTest_1480") + << QLatin1String("RegexTest_1481") + << QLatin1String("RegexTest_1484") + << QLatin1String("RegexTest_1485") + << QLatin1String("RegexTest_1486") + << QLatin1String("RegexTest_1487") + << QLatin1String("RegexTest_1488") + << QLatin1String("RegexTest_1491") + << QLatin1String("RegexTest_1492") + << QLatin1String("RegexTest_1493") + << QLatin1String("RegexTest_1494") + << QLatin1String("RegexTest_1495") + << QLatin1String("RegexTest_1496") + << QLatin1String("RegexTest_1497") + << QLatin1String("RegexTest_1498") + << QLatin1String("RegexTest_1499") + << QLatin1String("RegexTest_1500") + << QLatin1String("RegexTest_1501") + << QLatin1String("RegexTest_1502") + << QLatin1String("RegexTest_1503") + << QLatin1String("RegexTest_1543") + << QLatin1String("RegexTest_1544") + << QLatin1String("reZ001") +*/ + << QLatin1String("schA2") + << QLatin1String("schA5") + << QLatin1String("schA7") + << QLatin1String("schD8") + << QLatin1String("schG3") + << QLatin1String("schG6") + << QLatin1String("schG9") + << QLatin1String("schG11") + << QLatin1String("schG12") + << QLatin1String("schU1") + << QLatin1String("schU3") + << QLatin1String("schU4") + << QLatin1String("schU5") + << QLatin1String("schZ004") + << QLatin1String("schZ005") + << QLatin1String("schZ012_a") + << QLatin1String("stZ041") + << QLatin1String("wildZ010"); +} + +bool XSDTestSuiteHandler::startElement(const QString &namespaceURI, + const QString &localName, + const QString &/*qName*/, + const QXmlAttributes &atts) +{ + if(namespaceURI != QString::fromLatin1("http://www.w3.org/XML/2004/xml-schema-test-suite/")) + return true; + + if (localName == QLatin1String("testSet")) { + m_currentTestSet = new TestGroup(m_topLevelGroup); + Q_ASSERT(m_currentTestSet); + m_currentTestSet->setTitle(atts.value("name")); + m_topLevelGroup->appendChild(m_currentTestSet); + } else if (localName == QLatin1String("testGroup")) { + m_currentTestGroup = new TestGroup(m_currentTestSet); + Q_ASSERT(m_currentTestGroup); + m_currentTestGroup->setTitle(atts.value("name")); + m_currentTestSet->appendChild(m_currentTestGroup); + m_inTestGroup = true; + } else if (localName == QLatin1String("schemaTest")) { + if (m_blackList.contains(atts.value("name"))) { + m_currentTestCase = 0; + m_schemaBlacklisted = true; + return true; + } + m_schemaBlacklisted = false; + + m_currentTestCase = new XSDTSTestCase(TestCase::Standard, m_currentTestGroup, XSDTSTestCase::SchemaTest); + Q_ASSERT(m_currentTestCase); + m_counter++; + m_currentTestCase->setName(QString::number(m_counter) + atts.value("name")); + m_currentTestGroup->appendChild(m_currentTestCase); + m_currentTestCase->setParent(m_currentTestGroup); + + m_inSchemaTest = true; + } else if (localName == QLatin1String("instanceTest")) { + if (m_schemaBlacklisted) { + m_currentTestCase = 0; + return true; + } + + m_currentTestCase = new XSDTSTestCase(TestCase::Standard, m_currentTestGroup, XSDTSTestCase::InstanceTest); + Q_ASSERT(m_currentTestCase); + m_counter++; + m_currentTestCase->setName(QString::number(m_counter) + atts.value("name")); + m_currentTestGroup->appendChild(m_currentTestCase); + + m_inInstanceTest = true; + } else if (localName == QLatin1String("schemaDocument") || localName == QLatin1String("instanceDocument")) { + if (m_inSchemaTest) { + m_currentTestCase->setSchemaUri(QUrl(atts.value("xlink:href"))); + if (m_currentSchemaLink.isEmpty()) // we only use the first schema document for validation + m_currentSchemaLink = atts.value("xlink:href"); + } + if (m_inInstanceTest) { + m_currentTestCase->setInstanceUri(QUrl(atts.value("xlink:href"))); + m_currentTestCase->setSchemaUri(QUrl(m_currentSchemaLink)); + } + } else if (localName == QLatin1String("expected") && (m_inSchemaTest || m_inInstanceTest)) { + TestBaseLine *baseLine = new TestBaseLine(TestBaseLine::SchemaIsValid); + if (atts.value("validity") == QLatin1String("valid")) { + baseLine->setDetails(QLatin1String("true")); + m_currentTestCase->setName(m_currentTestCase->name() + QLatin1String(" tokoe:valid")); + } else { + baseLine->setDetails(QLatin1String("false")); + m_currentTestCase->setName(m_currentTestCase->name() + QLatin1String(" tokoe:invalid")); + } + + m_currentTestCase->addBaseLine(baseLine); + } else if (localName == QLatin1String("documentation") && m_inTestGroup) { + m_inDescription = true; + } + + return true; +} + +bool XSDTestSuiteHandler::endElement(const QString &namespaceURI, + const QString &localName, + const QString &/*qName*/) +{ + if (localName == QLatin1String("testGroup")) { + m_inTestGroup = false; + m_currentTestGroup->setDescription(m_documentation); + m_documentation.clear(); + m_currentSchemaLink.clear(); + + if (m_currentTestGroup->childCount() == 0) + m_currentTestSet->removeLast(); + } else if (localName == QLatin1String("schemaTest")) + m_inSchemaTest = false; + else if (localName == QLatin1String("instanceTest")) + m_inInstanceTest = false; + else if (localName == QLatin1String("documentation")) + m_inDescription = false; + + return true; +} + +bool XSDTestSuiteHandler::characters(const QString &ch) +{ + if (m_inDescription) + m_documentation += ch; + + return true; +} + +TestSuite *XSDTestSuiteHandler::testSuite() const +{ + return m_ts; +} + +// vim: et:ts=4:sw=4:sts=4 + diff --git a/tests/auto/xmlpatternsxqts/lib/XSDTestSuiteHandler.h b/tests/auto/xmlpatternsxqts/lib/XSDTestSuiteHandler.h new file mode 100644 index 0000000..8c57e82 --- /dev/null +++ b/tests/auto/xmlpatternsxqts/lib/XSDTestSuiteHandler.h @@ -0,0 +1,90 @@ +/**************************************************************************** +** +** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the Patternist project on Trolltech Labs. +** +** $TROLLTECH_GPL_LICENSE$ +** +*************************************************************************** +*/ + +#ifndef PatternistSDK_XSDTestSuiteHandler_H +#define PatternistSDK_XSDTestSuiteHandler_H + +#include <QUrl> +#include <QXmlDefaultHandler> + +#include "ExternalSourceLoader.h" +#include "TestSuite.h" +#include "XQTSTestCase.h" + +QT_BEGIN_HEADER + +namespace QPatternistSDK +{ + class TestBaseLine; + class TestGroup; + class XSDTSTestCase; + + /** + * @short Creates a TestSuite from the XSD Test Suite. + * + * The created TestSuite can be retrieved via testSuite(). + * + * @note XSDTestSuiteHandler assumes the XML is valid by having been validated + * against the W3C XML Schema. It has no safety checks for that the XML format + * is correct but is hard coded for it. Thus, the behavior is undefined if + * the XML is invalid. + * + * @ingroup PatternistSDK + * @author Tobias Koenig <tobias.koenig@trolltech.com> + */ + class Q_PATTERNISTSDK_EXPORT XSDTestSuiteHandler : public QXmlDefaultHandler + { + public: + /** + * @param catalogFile the URI for the catalog file being parsed. This + * URI is used for creating absolute URIs for files mentioned in + * the catalog with relative URIs. + * @param useExclusionList whether excludeTestGroups.txt should be used to ignore + * test groups when loading + */ + XSDTestSuiteHandler(const QUrl &catalogFile); + virtual bool characters(const QString &ch); + + virtual bool endElement(const QString &namespaceURI, + const QString &localName, + const QString &qName); + virtual bool startElement(const QString &namespaceURI, + const QString &localName, + const QString &qName, + const QXmlAttributes &atts); + + virtual TestSuite *testSuite() const; + + private: + TestSuite* m_ts; + const QUrl m_catalogFile; + + TestGroup* m_topLevelGroup; + TestGroup* m_currentTestSet; + TestGroup* m_currentTestGroup; + XSDTSTestCase* m_currentTestCase; + bool m_inSchemaTest; + bool m_inInstanceTest; + bool m_inTestGroup; + bool m_inDescription; + bool m_schemaBlacklisted; + QString m_documentation; + QString m_currentSchemaLink; + int m_counter; + QSet<QString> m_blackList; + }; +} + +QT_END_HEADER + +#endif +// vim: et:ts=4:sw=4:sts=4 diff --git a/tests/auto/xmlpatternsxqts/lib/lib.pro b/tests/auto/xmlpatternsxqts/lib/lib.pro index 5b12d63..cb9453a 100644 --- a/tests/auto/xmlpatternsxqts/lib/lib.pro +++ b/tests/auto/xmlpatternsxqts/lib/lib.pro @@ -50,6 +50,8 @@ HEADERS = ASTItem.h \ Worker.h \ XMLWriter.h \ XQTSTestCase.h \ + XSDTestSuiteHandler.h \ + XSDTSTestCase.h \ XSLTTestSuiteHandler.h SOURCES = ASTItem.cpp \ @@ -75,4 +77,6 @@ SOURCES = ASTItem.cpp \ Worker.cpp \ XMLWriter.cpp \ XQTSTestCase.cpp \ + XSDTestSuiteHandler.cpp \ + XSDTSTestCase.cpp \ XSLTTestSuiteHandler.cpp diff --git a/tests/auto/xmlpatternsxqts/test/tst_suitetest.cpp b/tests/auto/xmlpatternsxqts/test/tst_suitetest.cpp index 5d61436..0f44058 100644 --- a/tests/auto/xmlpatternsxqts/test/tst_suitetest.cpp +++ b/tests/auto/xmlpatternsxqts/test/tst_suitetest.cpp @@ -55,11 +55,11 @@ using namespace QPatternistSDK; -tst_SuiteTest::tst_SuiteTest(const bool isXSLT, +tst_SuiteTest::tst_SuiteTest(const SuiteType suiteType, const bool alwaysRun) : m_existingBaseline(inputFile(QLatin1String("Baseline.xml"))) , m_candidateBaseline(inputFile(QLatin1String("CandidateBaseline.xml"))) , m_abortRun(!alwaysRun && !QFile::exists(QLatin1String("runTests"))) - , m_isXSLT(isXSLT) + , m_suiteType(suiteType) { } @@ -86,7 +86,16 @@ void tst_SuiteTest::runTestSuite() const QString errMsg; const QFileInfo fi(m_catalogPath); const QUrl catalogPath(QUrl::fromLocalFile(fi.absoluteFilePath())); - TestSuite *const ts = TestSuite::openCatalog(catalogPath, errMsg, true, m_isXSLT); + + TestSuite::SuiteType suiteType; + switch (m_suiteType) { + case XQuerySuite: suiteType = TestSuite::XQuerySuite; + case XsltSuite: suiteType = TestSuite::XsltSuite; + case XsdSuite: suiteType = TestSuite::XsdSuite; + default: break; + } + + TestSuite *const ts = TestSuite::openCatalog(catalogPath, errMsg, true, suiteType); QVERIFY2(ts, qPrintable(QString::fromLatin1("Failed to open the catalog, maybe it doesn't exist or is broken: %1").arg(errMsg))); diff --git a/tests/auto/xmlpatternsxqts/test/tst_suitetest.h b/tests/auto/xmlpatternsxqts/test/tst_suitetest.h index effa887..fdf82d5 100644 --- a/tests/auto/xmlpatternsxqts/test/tst_suitetest.h +++ b/tests/auto/xmlpatternsxqts/test/tst_suitetest.h @@ -50,13 +50,21 @@ \class tst_SuiteTest \internal \since 4.5 - \brief Base class for tst_XmlPatternsXQTS and tst_XmlPatternsXSLTS. + \brief Base class for tst_XmlPatternsXQTS, tst_XmlPatternsXSLTS and tst_XmlPatternsXSDTS. */ class tst_SuiteTest : public QObject , private TestFundament { Q_OBJECT +public: + enum SuiteType + { + XQuerySuite, + XsltSuite, + XsdSuite + }; + protected: /** * @p isXSLT is @c true if the catalog opened is an @@ -65,7 +73,7 @@ protected: * @p alwaysRun is @c true if the test should always be run, * regardless of if the file runTests exists. */ - tst_SuiteTest(const bool isXSLT, + tst_SuiteTest(SuiteType type, const bool alwaysRun = false); /** @@ -91,7 +99,7 @@ private: const QString m_existingBaseline; const QString m_candidateBaseline; const bool m_abortRun; - const bool m_isXSLT; + const SuiteType m_suiteType; }; #endif diff --git a/tests/auto/xmlpatternsxqts/test/tst_xmlpatternsxqts.cpp b/tests/auto/xmlpatternsxqts/test/tst_xmlpatternsxqts.cpp index 6330784..4154b16 100644 --- a/tests/auto/xmlpatternsxqts/test/tst_xmlpatternsxqts.cpp +++ b/tests/auto/xmlpatternsxqts/test/tst_xmlpatternsxqts.cpp @@ -61,7 +61,7 @@ public: virtual void catalogPath(QString &write) const; }; -tst_XmlPatternsXQTS::tst_XmlPatternsXQTS() : tst_SuiteTest(false) +tst_XmlPatternsXQTS::tst_XmlPatternsXQTS() : tst_SuiteTest(tst_SuiteTest::XQuerySuite) { } diff --git a/tests/auto/xmlpatternsxslts/tst_xmlpatternsxslts.cpp b/tests/auto/xmlpatternsxslts/tst_xmlpatternsxslts.cpp index 16091f6..d89974c 100644 --- a/tests/auto/xmlpatternsxslts/tst_xmlpatternsxslts.cpp +++ b/tests/auto/xmlpatternsxslts/tst_xmlpatternsxslts.cpp @@ -61,7 +61,7 @@ protected: virtual void catalogPath(QString &write) const; }; -tst_XmlPatternsXSLTS::tst_XmlPatternsXSLTS() : tst_SuiteTest(true) +tst_XmlPatternsXSLTS::tst_XmlPatternsXSLTS() : tst_SuiteTest(tst_SuiteTest::XsltSuite) { } diff --git a/tests/benchmarks/benchmarks.pro b/tests/benchmarks/benchmarks.pro index 70289e2..cc1a358 100644 --- a/tests/benchmarks/benchmarks.pro +++ b/tests/benchmarks/benchmarks.pro @@ -8,7 +8,8 @@ SUBDIRS = containers-associative \ qiodevice \ qpixmap \ blendbench \ - qstringlist \ + qstring \ + qstringlist \ qmatrix4x4 \ qobject \ qrect \ diff --git a/tests/benchmarks/qdir/tst_qdir.cpp b/tests/benchmarks/qdir/tst_qdir.cpp index 6405645..7977e28 100644 --- a/tests/benchmarks/qdir/tst_qdir.cpp +++ b/tests/benchmarks/qdir/tst_qdir.cpp @@ -1,9 +1,13 @@ #include <QtTest/QtTest> -#include<dirent.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <unistd.h> +#ifdef Q_OS_WIN +# include <windows.h> +#else +# include <sys/stat.h> +# include <sys/types.h> +# include <dirent.h> +# include <unistd.h> +#endif class Test : public QObject{ Q_OBJECT @@ -73,10 +77,29 @@ private slots: } } } -#ifndef Q_OS_WIN + void testLowLevel() { +#ifdef Q_OS_WIN + const wchar_t *dirpath = (wchar_t*)testdir.absolutePath().utf16(); + wchar_t appendedPath[MAX_PATH]; + wcscpy(appendedPath, dirpath); + wcscat(appendedPath, L"\\*"); + + WIN32_FIND_DATA fd; + HANDLE hSearch = FindFirstFileW(appendedPath, &fd); + QVERIFY(hSearch == INVALID_HANDLE_VALUE); + + QBENCHMARK { + do { + + } while (FindNextFile(hSearch, &fd)); + } + FindClose(hSearch); +#else QDir testdir(QDir::tempPath() + QLatin1String("/test_speed")); DIR *dir = opendir(qPrintable(testdir.absolutePath())); + QVERIFY(dir); + QVERIFY(!chdir(qPrintable(testdir.absolutePath()))); QBENCHMARK { struct dirent *item = readdir(dir); @@ -90,8 +113,8 @@ private slots: } } closedir(dir); - } #endif + } }; QTEST_MAIN(Test) diff --git a/tests/benchmarks/qstring/main.cpp b/tests/benchmarks/qstring/main.cpp index 2c218df..b53b284 100644 --- a/tests/benchmarks/qstring/main.cpp +++ b/tests/benchmarks/qstring/main.cpp @@ -39,6 +39,7 @@ ** ****************************************************************************/ #include <QStringList> +#include <QFile> #include <qtest.h> class tst_QString: public QObject @@ -47,6 +48,7 @@ class tst_QString: public QObject private slots: void equals() const; void equals_data() const; + void fromUtf8() const; }; void tst_QString::equals() const @@ -118,6 +120,22 @@ void tst_QString::equals_data() const << QString::fromRawData(ptr + 1, 58) << QString::fromRawData(ptr + 3, 58); } +void tst_QString::fromUtf8() const +{ + QFile file(SRCDIR "utf-8.txt"); + if (!file.open(QFile::ReadOnly)) { + qFatal("Cannot open input file"); + return; + } + QByteArray data = file.readAll(); + const char *d = data.constData(); + int size = data.size(); + + QBENCHMARK { + QString::fromUtf8(d, size); + } +} + QTEST_MAIN(tst_QString) #include "main.moc" diff --git a/tests/benchmarks/qstring/qstring.pro b/tests/benchmarks/qstring/qstring.pro index 74423e7..6aad1c0 100644 --- a/tests/benchmarks/qstring/qstring.pro +++ b/tests/benchmarks/qstring/qstring.pro @@ -2,3 +2,11 @@ load(qttest_p4) TARGET = tst_qstring QT -= gui SOURCES += main.cpp + +wince*:{ + DEFINES += SRCDIR=\\\"\\\" +} else { + DEFINES += SRCDIR=\\\"$$PWD/\\\" +} + + diff --git a/tests/benchmarks/qstring/utf-8.txt b/tests/benchmarks/qstring/utf-8.txt new file mode 100644 index 0000000..a8a58de --- /dev/null +++ b/tests/benchmarks/qstring/utf-8.txt @@ -0,0 +1,72 @@ +Språk: Norsk +Γλώσσα: Ελληνικά +Язык: Русский +언어 : 한국어 +言語: 日本語 +Langage : Français +Språk: Norsk +Γλώσσα: Ελληνικά +Язык: Русский +언어 : 한국어 +言語: 日本語 +Langage : Français +Språk: Norsk +Γλώσσα: Ελληνικά +Язык: Русский +언어 : 한국어 +言語: 日本語 +Langage : Français +Språk: Norsk +Γλώσσα: Ελληνικά +Язык: Русский +언어 : 한국어 +言語: 日本語 +Langage : Français +Språk: Norsk +Γλώσσα: Ελληνικά +Язык: Русский +언어 : 한국어 +言語: 日本語 +Langage : Français +Språk: Norsk +Γλώσσα: Ελληνικά +Язык: Русский +언어 : 한국어 +言語: 日本語 +Langage : Français +Språk: Norsk +Γλώσσα: Ελληνικά +Язык: Русский +언어 : 한국어 +言語: 日本語 +Langage : Français +Språk: Norsk +Γλώσσα: Ελληνικά +Язык: Русский +언어 : 한국어 +言語: 日本語 +Langage : Français +Språk: Norsk +Γλώσσα: Ελληνικά +Язык: Русский +언어 : 한국어 +言語: 日本語 +Langage : Français +Språk: Norsk +Γλώσσα: Ελληνικά +Язык: Русский +언어 : 한국어 +言語: 日本語 +Langage : Français +Språk: Norsk +Γλώσσα: Ελληνικά +Язык: Русский +언어 : 한국어 +言語: 日本語 +Langage : Français +Språk: Norsk +Γλώσσα: Ελληνικά +Язык: Русский +언어 : 한국어 +言語: 日本語 +Langage : Français diff --git a/tests/manual/qdesktopwidget/main.cpp b/tests/manual/qdesktopwidget/main.cpp new file mode 100644 index 0000000..1afc82e --- /dev/null +++ b/tests/manual/qdesktopwidget/main.cpp @@ -0,0 +1,188 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtGui> + +class DesktopView : public QGraphicsView +{ + Q_OBJECT +public: + DesktopView() + : that(0) + { + scene = new QGraphicsScene; + setScene(scene); + + QDesktopWidget *desktop = QApplication::desktop(); + connect(desktop, SIGNAL(resized(int)), this, SLOT(updateScene())); + connect(desktop, SIGNAL(workAreaResized(int)), this, SLOT(updateScene())); + connect(desktop, SIGNAL(screenCountChanged(int)), this, SLOT(updateScene())); + + updateScene(); + + QTransform transform; + transform.scale(0.25, 0.25); + setTransform(transform); + + setBackgroundBrush(Qt::darkGray); + } + +protected: + void moveEvent(QMoveEvent *e) + { + if (that) { + that->setRect(appRect()); + scene->update(); + } + QGraphicsView::moveEvent(e); + } + void resizeEvent(QResizeEvent *e) + { + if (that) { + that->setRect(appRect()); + } + QGraphicsView::resizeEvent(e); + } + +private slots: + void updateScene() + { + scene->clear(); + + const QDesktopWidget *desktop = QApplication::desktop(); + const bool isVirtualDesktop = desktop->isVirtualDesktop(); + const int homeScreen = desktop->screenNumber(this); + + QRect sceneRect; + int screenCount = desktop->screenCount(); + for (int s = 0; s < screenCount; ++s) { + const bool isPrimary = desktop->primaryScreen() == s; + const QRect screenRect = desktop->screenGeometry(s); + const QRect workRect = desktop->availableGeometry(s); + const QBrush fillBrush = palette().brush(isPrimary ? QPalette::Active : QPalette::Inactive, QPalette::Highlight); + QGraphicsRectItem *screen = new QGraphicsRectItem(0, 0, screenRect.width(), screenRect.height()); + + if (isVirtualDesktop) { + thatRoot = QPoint(); + screen->setPos(screenRect.x(), screenRect.y()); + } else { + // for non-virtual desktops we assume that screens are + // simply next to each other + if (s) + screen->setPos(sceneRect.right(), 0); + if (s == homeScreen) + thatRoot = screen->pos().toPoint(); + } + + screen->setBrush(fillBrush); + scene->addItem(screen); + sceneRect.setLeft(qMin(sceneRect.left(), screenRect.left())); + sceneRect.setRight(qMax(sceneRect.right(), screenRect.right())); + sceneRect.setTop(qMin(sceneRect.top(), screenRect.top())); + sceneRect.setBottom(qMax(sceneRect.bottom(), screenRect.bottom())); + + QGraphicsRectItem *workArea = new QGraphicsRectItem(screen); + workArea->setRect(0, 0, workRect.width(), workRect.height()); + workArea->setPos(workRect.x() - screenRect.x(), workRect.y() - screenRect.y()); + workArea->setBrush(Qt::white); + + QGraphicsSimpleTextItem *screenNumber = new QGraphicsSimpleTextItem(workArea); + screenNumber->setText(QString::number(s)); + screenNumber->setPen(QPen(Qt::black, 1)); + screenNumber->setBrush(fillBrush); + screenNumber->setFont(QFont("Arial Black", 18)); + screenNumber->setTransform(QTransform().scale(10, 10)); + screenNumber->setTransformOrigin(screenNumber->boundingRect().center()); + QSizeF center = (workRect.size() - screenNumber->boundingRect().size()) / 2; + screenNumber->setPos(center.width(), center.height()); + + screen->show(); + screen->setZValue(1); + } + + if (isVirtualDesktop) { + QGraphicsRectItem *virtualDesktop = new QGraphicsRectItem; + virtualDesktop->setRect(sceneRect); + virtualDesktop->setPen(QPen(Qt::black)); + virtualDesktop->setBrush(Qt::DiagCrossPattern); + scene->addItem(virtualDesktop); + virtualDesktop->setZValue(-1); + virtualDesktop->show(); + } + + that = new QGraphicsRectItem; + that->setBrush(Qt::red); + that->setOpacity(0.5); + that->setZValue(2); + that->setRect(appRect()); + that->show(); + scene->addItem(that); + + scene->setSceneRect(sceneRect); + scene->update(); + } + + QRect appRect() const + { + QRect rect = frameGeometry(); + if (!QApplication::desktop()->isVirtualDesktop()) { + rect.translate(thatRoot); + } + return rect; + } + +private: + QGraphicsScene *scene; + QGraphicsRectItem *that; + QPoint thatRoot; +}; + +#include "main.moc" + +int main(int argc, char **argv) +{ + QApplication app(argc, argv); + + DesktopView view; + view.show(); + + return app.exec(); +} diff --git a/tests/manual/qdesktopwidget/qdesktopwidget.pro b/tests/manual/qdesktopwidget/qdesktopwidget.pro new file mode 100644 index 0000000..93d56eb --- /dev/null +++ b/tests/manual/qdesktopwidget/qdesktopwidget.pro @@ -0,0 +1,2 @@ +TEMPLATE = app +SOURCES += main.cpp diff --git a/tools/assistant/tools/assistant/assistant.rc b/tools/assistant/tools/assistant/assistant.rc index b4786ce..deaf40c 100644 --- a/tools/assistant/tools/assistant/assistant.rc +++ b/tools/assistant/tools/assistant/assistant.rc @@ -1 +1,32 @@ +#include "winver.h" + IDI_ICON1 ICON DISCARDABLE "assistant.ico" + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,0,0,0 + PRODUCTVERSION 1,0,0,0 + FILEFLAGS 0x0L + FILEFLAGSMASK 0x3fL + FILEOS 0x00040004L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "000004b0" + BEGIN + VALUE "CompanyName", "Nokia Corporation and/or its subsidiary(-ies)" + VALUE "FileDescription", "Qt Assistant" + VALUE "FileVersion", "1.0.0.0" + VALUE "LegalCopyright", "Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies)." + VALUE "InternalName", "assistant.exe" + VALUE "OriginalFilename", "assistant.exe" + VALUE "ProductName", "Qt Assistant" + VALUE "ProductVersion", "1.0.0.0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0, 1200 + END +END diff --git a/tools/assistant/tools/assistant/mainwindow.cpp b/tools/assistant/tools/assistant/mainwindow.cpp index 617ac4d..7926020 100644 --- a/tools/assistant/tools/assistant/mainwindow.cpp +++ b/tools/assistant/tools/assistant/mainwindow.cpp @@ -93,6 +93,8 @@ MainWindow::MainWindow(CmdLineParser *cmdLine, QWidget *parent) , m_qtDocInstaller(0) , m_connectedInitSignals(false) { + setToolButtonStyle(Qt::ToolButtonFollowStyle); + if (usesDefaultCollection()) { MainWindow::collectionFileDirectory(true); m_helpEngine = new QHelpEngine(MainWindow::defaultHelpCollectionFileName(), @@ -429,6 +431,7 @@ void MainWindow::setupActions() SLOT(printPreview())); m_printAction = menu->addAction(tr("&Print..."), m_centralWidget, SLOT(print())); + m_printAction->setPriority(QAction::LowPriority); m_printAction->setIcon(QIcon(resourcePath + QLatin1String("/print.png"))); m_printAction->setShortcut(QKeySequence::Print); @@ -448,12 +451,15 @@ void MainWindow::setupActions() menu = menuBar()->addMenu(tr("&Edit")); m_copyAction = menu->addAction(tr("&Copy selected Text"), m_centralWidget, SLOT(copySelection())); + m_copyAction->setPriority(QAction::LowPriority); + m_copyAction->setIconText("&Copy"); m_copyAction->setIcon(QIcon(resourcePath + QLatin1String("/editcopy.png"))); m_copyAction->setShortcuts(QKeySequence::Copy); m_copyAction->setEnabled(false); m_findAction = menu->addAction(tr("&Find in Text..."), m_centralWidget, SLOT(showTextSearch())); + m_findAction->setIconText("&Find"); m_findAction->setIcon(QIcon(resourcePath + QLatin1String("/find.png"))); m_findAction->setShortcuts(QKeySequence::Find); @@ -472,16 +478,19 @@ void MainWindow::setupActions() m_viewMenu = menuBar()->addMenu(tr("&View")); m_zoomInAction = m_viewMenu->addAction(tr("Zoom &in"), m_centralWidget, SLOT(zoomIn())); + m_zoomInAction->setPriority(QAction::LowPriority); m_zoomInAction->setIcon(QIcon(resourcePath + QLatin1String("/zoomin.png"))); m_zoomInAction->setShortcut(QKeySequence::ZoomIn); m_zoomOutAction = m_viewMenu->addAction(tr("Zoom &out"), m_centralWidget, SLOT(zoomOut())); + m_zoomOutAction->setPriority(QAction::LowPriority); m_zoomOutAction->setIcon(QIcon(resourcePath + QLatin1String("/zoomout.png"))); m_zoomOutAction->setShortcut(QKeySequence::ZoomOut); m_resetZoomAction = m_viewMenu->addAction(tr("Normal &Size"), m_centralWidget, SLOT(resetZoom())); + m_resetZoomAction->setPriority(QAction::LowPriority); m_resetZoomAction->setIcon(QIcon(resourcePath + QLatin1String("/resetzoom.png"))); m_resetZoomAction->setShortcut(tr("Ctrl+0")); @@ -507,12 +516,14 @@ void MainWindow::setupActions() m_backAction->setIcon(QIcon(resourcePath + QLatin1String("/previous.png"))); m_nextAction = menu->addAction(tr("&Forward"), m_centralWidget, SLOT(forward())); + m_nextAction->setPriority(QAction::LowPriority); m_nextAction->setEnabled(false); m_nextAction->setShortcuts(QKeySequence::Forward); m_nextAction->setIcon(QIcon(resourcePath + QLatin1String("/next.png"))); m_syncAction = menu->addAction(tr("Sync with Table of Contents"), this, SLOT(syncContents())); + m_syncAction->setIconText("Sync"); m_syncAction->setIcon(QIcon(resourcePath + QLatin1String("/synctoc.png"))); menu->addSeparator(); diff --git a/tools/checksdk/cesdkhandler.cpp b/tools/checksdk/cesdkhandler.cpp index 48452a3..677d003 100644 --- a/tools/checksdk/cesdkhandler.cpp +++ b/tools/checksdk/cesdkhandler.cpp @@ -71,15 +71,15 @@ bool CeSdkHandler::parse() // look at the file at %VCInstallDir%/vcpackages/WCE.VCPlatform.config // and scan through all installed sdks... m_list.clear(); - VCInstallDir = qgetenv("VCInstallDir"); + VCInstallDir = QString::fromLatin1(qgetenv("VCInstallDir")); VCInstallDir += QLatin1String("\\"); - VSInstallDir = qgetenv("VSInstallDir"); + VSInstallDir = QString::fromLatin1(qgetenv("VSInstallDir")); VSInstallDir += QLatin1String("\\"); if (VCInstallDir.isEmpty() || VSInstallDir.isEmpty()) return false; QDir vStudioDir(VCInstallDir); - if (!vStudioDir.cd("vcpackages")) + if (!vStudioDir.cd(QLatin1String("vcpackages"))) return false; QFile configFile(vStudioDir.absoluteFilePath(QLatin1String("WCE.VCPlatform.config"))); @@ -118,6 +118,7 @@ bool CeSdkHandler::parse() qWarning() << "XML ERROR:" << xml.lineNumber() << ": " << xml.errorString(); return false; } + return m_list.size() > 0 ? true : false; } diff --git a/tools/checksdk/cesdkhandler.h b/tools/checksdk/cesdkhandler.h index 04d3bdf..6ec26db 100644 --- a/tools/checksdk/cesdkhandler.h +++ b/tools/checksdk/cesdkhandler.h @@ -102,8 +102,8 @@ inline QList<CeSdkInfo> CeSdkHandler::listAll() const inline QString CeSdkHandler::fixPaths(QString path) const { - QString str = QDir::toNativeSeparators(QDir::cleanPath(path.replace(VCINSTALL_MACRO, VCInstallDir).replace(VSINSTALL_MACRO, VSInstallDir).replace(QLatin1String("$(PATH)"), QLatin1String("%PATH%")))); - if (str.endsWith(';')) + QString str = QDir::toNativeSeparators(QDir::cleanPath(path.replace(QLatin1String(VCINSTALL_MACRO), VCInstallDir).replace(QLatin1String(VSINSTALL_MACRO), VSInstallDir).replace(QLatin1String("$(PATH)"), QLatin1String("%PATH%")))); + if (str.endsWith(QLatin1Char(';'))) str.truncate(str.length() - 1); return str; } diff --git a/tools/checksdk/checksdk.pro b/tools/checksdk/checksdk.pro index e364f26..a513981 100644 --- a/tools/checksdk/checksdk.pro +++ b/tools/checksdk/checksdk.pro @@ -32,40 +32,5 @@ SOURCES += \ HEADERS += \ cesdkhandler.h -# Bootstrapped Input -SOURCES += \ - $$QT_SOURCE_TREE/src/corelib/kernel/qmetatype.cpp \ - $$QT_SOURCE_TREE/src/corelib/kernel/qvariant.cpp \ - $$QT_SOURCE_TREE/src/corelib/tools/qstring.cpp \ - $$QT_SOURCE_TREE/src/corelib/tools/qstringlist.cpp \ - $$QT_SOURCE_TREE/src/corelib/io/qfile.cpp \ - $$QT_SOURCE_TREE/src/corelib/io/qdir.cpp \ - $$QT_SOURCE_TREE/src/corelib/io/qfsfileengine.cpp \ - $$QT_SOURCE_TREE/src/corelib/io/qabstractfileengine.cpp \ - $$QT_SOURCE_TREE/src/corelib/io/qfsfileengine_win.cpp \ - $$QT_SOURCE_TREE/src/corelib/io/qfsfileengine_iterator.cpp \ - $$QT_SOURCE_TREE/src/corelib/io/qfsfileengine_iterator_win.cpp \ - $$QT_SOURCE_TREE/src/corelib/io/qfileinfo.cpp \ - $$QT_SOURCE_TREE/src/corelib/io/qtemporaryfile.cpp \ - $$QT_SOURCE_TREE/src/corelib/io/qdiriterator.cpp \ - $$QT_SOURCE_TREE/src/corelib/io/qiodevice.cpp \ - $$QT_SOURCE_TREE/src/corelib/io/qbuffer.cpp \ - $$QT_SOURCE_TREE/src/corelib/io/qtextstream.cpp \ - $$QT_SOURCE_TREE/src/corelib/io/qurl.cpp \ - $$QT_SOURCE_TREE/src/corelib/tools/qdatetime.cpp \ - $$QT_SOURCE_TREE/src/corelib/tools/qlocale.cpp \ - $$QT_SOURCE_TREE/src/corelib/tools/qbytearray.cpp \ - $$QT_SOURCE_TREE/src/corelib/tools/qbytearraymatcher.cpp \ - $$QT_SOURCE_TREE/src/corelib/tools/qvector.cpp \ - $$QT_SOURCE_TREE/src/corelib/tools/qvsnprintf.cpp \ - $$QT_SOURCE_TREE/src/corelib/tools/qlistdata.cpp \ - $$QT_SOURCE_TREE/src/corelib/tools/qhash.cpp \ - $$QT_SOURCE_TREE/src/corelib/global/qglobal.cpp \ - $$QT_SOURCE_TREE/src/corelib/global/qmalloc.cpp \ - $$QT_SOURCE_TREE/src/corelib/global/qnumeric.cpp \ - $$QT_SOURCE_TREE/src/corelib/xml/qxmlstream.cpp \ - $$QT_SOURCE_TREE/src/corelib/xml/qxmlutils.cpp \ - $$QT_SOURCE_TREE/src/corelib/tools/qregexp.cpp \ - $$QT_SOURCE_TREE/src/corelib/tools/qmap.cpp \ - $$QT_SOURCE_TREE/src/corelib/tools/qbitarray.cpp \ - $$QT_BUILD_TREE/src/corelib/global/qconfig.cpp +include(../../src/tools/bootstrap/bootstrap.pri) + diff --git a/tools/checksdk/main.cpp b/tools/checksdk/main.cpp index 2dd7214..6322eb7 100644 --- a/tools/checksdk/main.cpp +++ b/tools/checksdk/main.cpp @@ -46,17 +46,17 @@ void usage() { - qDebug() << "SDK Scanner - Convenience Tool to setup your environment"; - qDebug() << " for crosscompilation to Windows CE"; - qDebug() << "Options:"; - qDebug() << "-help This output"; - qDebug() << "-list List all available SDKs"; - qDebug() << "-sdk <name> Select specified SDK."; - qDebug() << " Note: SDK names with spaces need to be"; - qDebug() << " specified in parenthesis"; - qDebug() << " default: Windows Mobile 5.0 Pocket PC SDK (ARMV4I)"; - qDebug() << "-script <file> Create a script file which can be launched"; - qDebug() << " to setup your environment for specified SDK"; + printf("SDK Scanner - Convenience Tool to setup your environment\n"); + printf(" for crosscompilation to Windows CE\n"); + printf("Options:\n"); + printf("-help This output\n"); + printf("-list List all available SDKs\n"); + printf("-sdk <name> Select specified SDK.\n"); + printf(" Note: SDK names with spaces need to be\n"); + printf(" specified in parenthesis\n"); + printf(" default: Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\n"); + printf("-script <file> Create a script file which can be launched\n"); + printf(" to setup your environment for specified SDK\n"); } int main(int argc, char **argv) @@ -106,9 +106,12 @@ int main(int argc, char **argv) QList<CeSdkInfo> list = handler.listAll(); if (operationList) { - qDebug() << "Available SDKs:"; - for (QList<CeSdkInfo>::iterator it = list.begin(); it != list.end(); ++it) - qDebug() << "SDK Name:" << it->name(); + printf("Available SDKs:\n"); + for (QList<CeSdkInfo>::iterator it = list.begin(); it != list.end(); ++it) { + printf("SDK Name: "); + printf(qPrintable(it->name())); + printf("\n"); + } return 0; } @@ -132,10 +135,13 @@ int main(int argc, char **argv) includePath = QString::fromLatin1("INCLUDE=") + it->includePath(); libPath = QString::fromLatin1("LIB=") + it->libPath(); if (scriptFile.isEmpty()) { - qDebug() << "Please set up your environment with the following paths:"; - qDebug() << qPrintable(binPath); - qDebug() << qPrintable(includePath); - qDebug() << qPrintable(libPath); + printf("Please set up your environment with the following paths:\n"); + printf(qPrintable(binPath)); + printf("\n"); + printf(qPrintable(includePath)); + printf("\n"); + printf(qPrintable(libPath)); + printf("\n"); return 0; } else { QFile file(scriptFile); diff --git a/tools/configure/configure.pro b/tools/configure/configure.pro index fdeab29..eeec62a 100644 --- a/tools/configure/configure.pro +++ b/tools/configure/configure.pro @@ -32,6 +32,7 @@ HEADERS = configureapp.h environment.h tools.h\ $$QT_SOURCE_TREE/src/corelib/tools/qlist.h \ $$QT_SOURCE_TREE/src/corelib/tools/qlocale.h \ $$QT_SOURCE_TREE/src/corelib/tools/qvector.h \ + $$QT_SOURCE_TREE/src/corelib/codecs/qutfcodec_p.h \ $$QT_SOURCE_TREE/src/corelib/codecs/qtextcodec.h \ $$QT_SOURCE_TREE/src/corelib/global/qglobal.h \ $$QT_SOURCE_TREE/src/corelib/global/qnumeric.h \ @@ -64,6 +65,7 @@ SOURCES = main.cpp configureapp.cpp environment.cpp tools.cpp \ $$QT_SOURCE_TREE/src/corelib/tools/qlistdata.cpp \ $$QT_SOURCE_TREE/src/corelib/tools/qlocale.cpp \ $$QT_SOURCE_TREE/src/corelib/tools/qvector.cpp \ + $$QT_SOURCE_TREE/src/corelib/codecs/qutfcodec.cpp \ $$QT_SOURCE_TREE/src/corelib/codecs/qtextcodec.cpp \ $$QT_SOURCE_TREE/src/corelib/global/qglobal.cpp \ $$QT_SOURCE_TREE/src/corelib/global/qnumeric.cpp \ diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp index 0a8880d..728527d 100644 --- a/tools/configure/configureapp.cpp +++ b/tools/configure/configureapp.cpp @@ -3121,6 +3121,7 @@ void Configure::buildQmake() void Configure::buildHostTools() { + dictionary[ "DONE" ] = "yes"; if (!dictionary.contains("XQMAKESPEC")) return; @@ -3344,7 +3345,6 @@ void Configure::generateMakefiles() } else { cout << "Processing of project files have been disabled." << endl; cout << "Only use this option if you really know what you're doing." << endl << endl; - dictionary[ "DONE" ] = "yes"; return; } } diff --git a/tools/configure/main.cpp b/tools/configure/main.cpp index 0e13c7a..e5c04cc 100644 --- a/tools/configure/main.cpp +++ b/tools/configure/main.cpp @@ -95,7 +95,7 @@ int runConfigure( int argc, char** argv ) #endif if( !app.isDone() ) app.generateMakefiles(); - if( !app.isDone() && app.isOk() ) + if( !app.isDone() ) app.buildHostTools(); if( !app.isDone() ) app.showSummary(); diff --git a/tools/designer/src/components/propertyeditor/designerpropertymanager.cpp b/tools/designer/src/components/propertyeditor/designerpropertymanager.cpp index fb1a5bb..ca55b15 100644 --- a/tools/designer/src/components/propertyeditor/designerpropertymanager.cpp +++ b/tools/designer/src/components/propertyeditor/designerpropertymanager.cpp @@ -254,8 +254,11 @@ void TextEditor::resourceActionActivated() { QString oldPath = m_editor->text(); if (oldPath.startsWith(QLatin1String("qrc:"))) - oldPath = oldPath.mid(4); - const QString newPath = IconSelector::choosePixmapResource(m_core, m_core->resourceModel(), oldPath, this); + oldPath.remove(0, 4); + // returns ':/file' + QString newPath = IconSelector::choosePixmapResource(m_core, m_core->resourceModel(), oldPath, this); + if (newPath.startsWith(QLatin1Char(':'))) + newPath.remove(0, 1); if (newPath.isEmpty() || newPath == oldPath) return; const QString newText = QLatin1String("qrc:") + newPath; diff --git a/tools/designer/src/designer/Info_mac.plist b/tools/designer/src/designer/Info_mac.plist index 8632a6d..f19176f 100644 --- a/tools/designer/src/designer/Info_mac.plist +++ b/tools/designer/src/designer/Info_mac.plist @@ -22,7 +22,7 @@ <string>ui</string> </array> <key>CFBundleTypeIconFile</key> - <string>@ICON@</string> + <string>uifile.icns</string> <key>CFBundleTypeRole</key> <string>Editor</string> <key>LSIsAppleDefaultForType</key> diff --git a/tools/designer/src/designer/designer.pro b/tools/designer/src/designer/designer.pro index e7fa038..aa6850c 100644 --- a/tools/designer/src/designer/designer.pro +++ b/tools/designer/src/designer/designer.pro @@ -78,6 +78,9 @@ mac { ICON = designer.icns QMAKE_INFO_PLIST = Info_mac.plist TARGET = Designer + FILETYPES.files = uifile.icns + FILETYPES.path = Contents/Resources + QMAKE_BUNDLE_DATA += FILETYPES } target.path=$$[QT_INSTALL_BINS] diff --git a/tools/designer/src/designer/designer.rc b/tools/designer/src/designer/designer.rc index 4b6324b..1f8bc0a 100644 --- a/tools/designer/src/designer/designer.rc +++ b/tools/designer/src/designer/designer.rc @@ -1,2 +1,32 @@ +#include "winver.h" + IDI_ICON1 ICON DISCARDABLE "designer.ico" +VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,0,0,0 + PRODUCTVERSION 1,0,0,0 + FILEFLAGS 0x0L + FILEFLAGSMASK 0x3fL + FILEOS 0x00040004L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "000004b0" + BEGIN + VALUE "CompanyName", "Nokia Corporation and/or its subsidiary(-ies)" + VALUE "FileDescription", "Qt Designer" + VALUE "FileVersion", "1.0.0.0" + VALUE "LegalCopyright", "Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies)." + VALUE "InternalName", "designer" + VALUE "OriginalFilename", "designer.exe" + VALUE "ProductName", "Qt Designer" + VALUE "ProductVersion", "1.0.0.0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0, 1200 + END +END diff --git a/tools/designer/src/designer/uifile.icns b/tools/designer/src/designer/uifile.icns Binary files differnew file mode 100644 index 0000000..2473ea4 --- /dev/null +++ b/tools/designer/src/designer/uifile.icns diff --git a/tools/designer/src/lib/shared/widgetfactory.cpp b/tools/designer/src/lib/shared/widgetfactory.cpp index 6c45daf..7080ed3 100644 --- a/tools/designer/src/lib/shared/widgetfactory.cpp +++ b/tools/designer/src/lib/shared/widgetfactory.cpp @@ -834,9 +834,11 @@ bool WidgetFactory::isPassiveInteractor(QWidget *widget) if (isTabBarInteractor(tabBar)) m_lastWasAPassiveInteractor = true; return m_lastWasAPassiveInteractor; - } else if (qobject_cast<QSizeGrip*>(widget)) +#ifndef QT_NO_SIZEGRIP + } else if (qobject_cast<QSizeGrip*>(widget)) { return (m_lastWasAPassiveInteractor = true); - else if (qobject_cast<QMdiSubWindow*>(widget)) +#endif + } else if (qobject_cast<QMdiSubWindow*>(widget)) return (m_lastWasAPassiveInteractor = true); else if (qobject_cast<QAbstractButton*>(widget) && (qobject_cast<QTabBar*>(widget->parent()) || qobject_cast<QToolBox*>(widget->parent()))) return (m_lastWasAPassiveInteractor = true); diff --git a/tools/linguist/lconvert/main.cpp b/tools/linguist/lconvert/main.cpp index 4bed02f..1381595 100644 --- a/tools/linguist/lconvert/main.cpp +++ b/tools/linguist/lconvert/main.cpp @@ -81,8 +81,11 @@ static int usage(const QStringList &args) " --output-format <outformat>\n" " Specify output format. See -if.\n\n" " --input-codec <codec>\n" - " Specify encoding for QM input files. Default is 'Latin1'.\n" - " UTF-8 is always tried as well, corresponding to the trUtf8() function.\n\n" + " Specify encoding for QM and PO input files. Default is 'Latin1'\n" + " for QM and 'UTF-8' for PO files. UTF-8 is always tried as well for\n" + " QM, corresponding to the possible use of the trUtf8() function.\n\n" + " --output-codec <codec>\n" + " Specify encoding for PO output files. Default is 'UTF-8'.\n\n" " --drop-tags <regexp>\n" " Drop named extra tags when writing TS or XLIFF files.\n" " May be specified repeatedly.\n\n" @@ -141,7 +144,6 @@ int main(int argc, char *argv[]) Translator::LocationsType locations = Translator::DefaultLocations; ConversionData cd; - cd.m_codecForSource = "Latin1"; Translator tr; for (int i = 1; i < args.size(); ++i) { @@ -174,6 +176,10 @@ int main(int argc, char *argv[]) if (++i >= args.size()) return usage(args); cd.m_codecForSource = args[i].toLatin1(); + } else if (args[i] == QLatin1String("-output-codec")) { + if (++i >= args.size()) + return usage(args); + cd.m_outputCodec = args[i].toLatin1(); } else if (args[i] == QLatin1String("-drop-tag")) { if (++i >= args.size()) return usage(args); @@ -257,6 +263,11 @@ int main(int argc, char *argv[]) if (locations != Translator::DefaultLocations) tr.setLocationsType(locations); + tr.normalizeTranslations(cd); + if (!cd.errors().isEmpty()) { + qWarning("%s", qPrintable(cd.error())); + cd.clearErrors(); + } if (!tr.save(outFileName, cd, outFormat)) { qWarning("%s", qPrintable(cd.error())); return 3; diff --git a/tools/linguist/linguist/linguist.rc b/tools/linguist/linguist/linguist.rc index 865e021..5ff37ca 100644 --- a/tools/linguist/linguist/linguist.rc +++ b/tools/linguist/linguist/linguist.rc @@ -1 +1,32 @@ +#include "winver.h" + IDI_ICON1 ICON DISCARDABLE "linguist.ico" + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,0,0,0 + PRODUCTVERSION 1,0,0,0 + FILEFLAGS 0x0L + FILEFLAGSMASK 0x3fL + FILEOS 0x00040004L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "000004b0" + BEGIN + VALUE "CompanyName", "Nokia Corporation and/or its subsidiary(-ies)" + VALUE "FileDescription", "Qt Linguist" + VALUE "FileVersion", "1.0.0.0" + VALUE "LegalCopyright", "Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies)." + VALUE "InternalName", "linguist" + VALUE "OriginalFilename", "linguist.exe" + VALUE "ProductName", "Qt Linguist" + VALUE "ProductVersion", "1.0.0.0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0, 1200 + END +END diff --git a/tools/linguist/linguist/messagemodel.cpp b/tools/linguist/linguist/messagemodel.cpp index 6bbf6f3..9995220 100644 --- a/tools/linguist/linguist/messagemodel.cpp +++ b/tools/linguist/linguist/messagemodel.cpp @@ -139,7 +139,7 @@ DataModel::DataModel(QObject *parent) QStringList DataModel::normalizedTranslations(const MessageItem &m) const { - return Translator::normalizedTranslations(m.message(), m_language, m_country); + return Translator::normalizedTranslations(m.message(), m_numerusForms.count()); } ContextItem *DataModel::contextItem(int context) const diff --git a/tools/linguist/lrelease/main.cpp b/tools/linguist/lrelease/main.cpp index d3b9937..5cb9e1a 100644 --- a/tools/linguist/lrelease/main.cpp +++ b/tools/linguist/lrelease/main.cpp @@ -121,6 +121,7 @@ static bool releaseTranslator(Translator &tor, const QString &qmFileName, } ConversionData cd; + tor.normalizeTranslations(cd); cd.m_verbose = verbose; cd.m_ignoreUnfinished = ignoreUnfinished; cd.m_idBased = idBased; diff --git a/tools/linguist/lupdate/main.cpp b/tools/linguist/lupdate/main.cpp index 7cf7b54..e2acbbb 100644 --- a/tools/linguist/lupdate/main.cpp +++ b/tools/linguist/lupdate/main.cpp @@ -203,6 +203,11 @@ static void updateTsFiles(const Translator &fetchedTor, const QStringList &tsFil out.stripObsoleteMessages(); out.stripEmptyContexts(); + out.normalizeTranslations(cd); + if (!cd.errors().isEmpty()) { + printOut(cd.error()); + cd.clearErrors(); + } if (!out.save(fileName, cd, QLatin1String("auto"))) { printOut(cd.error()); *fail = true; diff --git a/tools/linguist/shared/abstractproitemvisitor.h b/tools/linguist/shared/abstractproitemvisitor.h index 0691fdc..43e79e0 100644 --- a/tools/linguist/shared/abstractproitemvisitor.h +++ b/tools/linguist/shared/abstractproitemvisitor.h @@ -49,19 +49,23 @@ QT_BEGIN_NAMESPACE struct AbstractProItemVisitor { virtual ~AbstractProItemVisitor() {} - virtual bool visitBeginProBlock(ProBlock *block) = 0; - virtual bool visitEndProBlock(ProBlock *block) = 0; - virtual bool visitBeginProVariable(ProVariable *variable) = 0; - virtual bool visitEndProVariable(ProVariable *variable) = 0; + virtual ProItem::ProItemReturn visitBeginProBlock(ProBlock *block) = 0; + virtual void visitEndProBlock(ProBlock *block) = 0; - virtual bool visitBeginProFile(ProFile *value) = 0; - virtual bool visitEndProFile(ProFile *value) = 0; + virtual ProItem::ProItemReturn visitProLoopIteration() = 0; + virtual void visitProLoopCleanup() = 0; - virtual bool visitProValue(ProValue *value) = 0; - virtual bool visitProFunction(ProFunction *function) = 0; - virtual bool visitProOperator(ProOperator *function) = 0; - virtual bool visitProCondition(ProCondition *function) = 0; + virtual void visitBeginProVariable(ProVariable *variable) = 0; + virtual void visitEndProVariable(ProVariable *variable) = 0; + + virtual ProItem::ProItemReturn visitBeginProFile(ProFile *value) = 0; + virtual ProItem::ProItemReturn visitEndProFile(ProFile *value) = 0; + + virtual void visitProValue(ProValue *value) = 0; + virtual ProItem::ProItemReturn visitProFunction(ProFunction *function) = 0; + virtual void visitProOperator(ProOperator *function) = 0; + virtual void visitProCondition(ProCondition *function) = 0; }; QT_END_NAMESPACE diff --git a/tools/linguist/shared/po.cpp b/tools/linguist/shared/po.cpp index e22aa7d..796d012 100644 --- a/tools/linguist/shared/po.cpp +++ b/tools/linguist/shared/po.cpp @@ -359,6 +359,7 @@ bool loadPO(Translator &translator, QIODevice &dev, ConversionData &cd) const QChar quote = QLatin1Char('"'); const QChar newline = QLatin1Char('\n'); QTextStream in(&dev); + in.setCodec(cd.m_codecForSource.isEmpty() ? "UTF-8" : cd.m_codecForSource); bool error = false; // format of a .po file entry: @@ -554,7 +555,7 @@ bool savePO(const Translator &translator, QIODevice &dev, ConversionData &cd) { bool ok = true; QTextStream out(&dev); - //qDebug() << "OUT CODEC: " << out.codec()->name(); + out.setCodec(cd.m_outputCodec.isEmpty() ? "UTF-8" : cd.m_outputCodec); bool first = true; if (translator.messages().isEmpty() || !translator.messages().first().sourceText().isEmpty()) { @@ -636,7 +637,7 @@ bool savePO(const Translator &translator, QIODevice &dev, ConversionData &cd) if (plural.isEmpty()) plural = msg.sourceText(); out << poEscapedString(prefix, QLatin1String("msgid_plural"), noWrap, plural); - QStringList translations = translator.normalizedTranslations(msg, cd, &ok); + const QStringList &translations = msg.translations(); for (int i = 0; i != translations.size(); ++i) { QString str = translations.at(i); str.replace(QChar(Translator::BinaryVariantSeparator), diff --git a/tools/linguist/shared/profileevaluator.cpp b/tools/linguist/shared/profileevaluator.cpp index 0ce27af..5a9095a 100644 --- a/tools/linguist/shared/profileevaluator.cpp +++ b/tools/linguist/shared/profileevaluator.cpp @@ -60,7 +60,7 @@ #ifdef Q_OS_UNIX #include <unistd.h> #include <sys/utsname.h> -#elif defined(Q_OS_WIN32) +#else #include <Windows.h> #endif #include <stdio.h> @@ -171,16 +171,18 @@ public: /////////////// Evaluating pro file contents // implementation of AbstractProItemVisitor - bool visitBeginProBlock(ProBlock *block); - bool visitEndProBlock(ProBlock *block); - bool visitBeginProVariable(ProVariable *variable); - bool visitEndProVariable(ProVariable *variable); - bool visitBeginProFile(ProFile *value); - bool visitEndProFile(ProFile *value); - bool visitProValue(ProValue *value); - bool visitProFunction(ProFunction *function); - bool visitProOperator(ProOperator *oper); - bool visitProCondition(ProCondition *condition); + ProItem::ProItemReturn visitBeginProBlock(ProBlock *block); + void visitEndProBlock(ProBlock *block); + ProItem::ProItemReturn visitProLoopIteration(); + void visitProLoopCleanup(); + void visitBeginProVariable(ProVariable *variable); + void visitEndProVariable(ProVariable *variable); + ProItem::ProItemReturn visitBeginProFile(ProFile *value); + ProItem::ProItemReturn visitEndProFile(ProFile *value); + void visitProValue(ProValue *value); + ProItem::ProItemReturn visitProFunction(ProFunction *function); + void visitProOperator(ProOperator *oper); + void visitProCondition(ProCondition *condition); QStringList valuesDirect(const QString &variableName) const { return m_valuemap[variableName]; } QStringList values(const QString &variableName) const; @@ -191,6 +193,7 @@ public: bool isActiveConfig(const QString &config, bool regex = false); QStringList expandVariableReferences(const QString &value); + void doVariableReplace(QString *str); QStringList evaluateExpandFunction(const QString &function, const QString &arguments); QString format(const char *format) const; @@ -198,17 +201,22 @@ public: QString currentDirectory() const; ProFile *currentProFile() const; - bool evaluateConditionalFunction(const QString &function, const QString &arguments, bool *result); - bool evaluateFile(const QString &fileName, bool *result); - bool evaluateFeatureFile(const QString &fileName, bool *result); + ProItem::ProItemReturn evaluateConditionalFunction(const QString &function, const QString &arguments); + bool evaluateFile(const QString &fileName); + bool evaluateFeatureFile(const QString &fileName); + + static inline ProItem::ProItemReturn returnBool(bool b) + { return b ? ProItem::ReturnTrue : ProItem::ReturnFalse; } + + QStringList evaluateFunction(ProBlock *funcPtr, const QStringList &argumentsList, bool *ok); QStringList qmakeFeaturePaths(); - enum { ConditionTrue, ConditionFalse, ConditionElse }; - int m_condition; - int m_prevCondition; - bool m_updateCondition; - bool m_invertNext; + struct State { + bool condition; + bool prevCondition; + } m_sts; + bool m_invertNext; // Short-lived, so not in State int m_skipLevel; bool m_cumulative; bool m_isFirstVariableValue; @@ -217,6 +225,14 @@ public: QString m_origfile; QString m_oldPath; // To restore the current path to the path QStack<ProFile*> m_profileStack; // To handle 'include(a.pri), so we can track back to 'a.pro' when finished with 'a.pri' + struct ProLoop { + QString variable; + QStringList oldVarVal; + QStringList list; + int index; + bool infinite; + }; + QStack<ProLoop> m_loopStack; // we need the following two variables for handling // CONFIG = foo bar $$CONFIG @@ -228,10 +244,23 @@ public: QHash<QString, QString> m_properties; QString m_outputDir; + bool m_definingTest; + QString m_definingFunc; + QHash<QString, ProBlock *> m_testFunctions; + QHash<QString, ProBlock *> m_replaceFunctions; + QStringList m_returnValue; + QStack<QHash<QString, QStringList> > m_valuemapStack; + QStack<QHash<const ProFile*, QHash<QString, QStringList> > > m_filevaluemapStack; + int m_prevLineNo; // Checking whether we're assigning the same TARGET ProFile *m_prevProFile; // See m_prevLineNo }; +#if (!defined(__GNUC__) || __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 3)) && !defined(__SUNPRO_CC) +Q_DECLARE_TYPEINFO(ProFileEvaluator::Private::State, Q_PRIMITIVE_TYPE); +Q_DECLARE_TYPEINFO(ProFileEvaluator::Private::ProLoop, Q_MOVABLE_TYPE); +#endif + ProFileEvaluator::Private::Private(ProFileEvaluator *q_) : q(q_) { @@ -244,11 +273,12 @@ ProFileEvaluator::Private::Private(ProFileEvaluator *q_) m_cumulative = true; // Evaluator state - m_updateCondition = false; - m_condition = ConditionFalse; + m_sts.condition = false; + m_sts.prevCondition = false; m_invertNext = false; m_skipLevel = 0; m_isFirstVariableValue = true; + m_definingFunc.clear(); } bool ProFileEvaluator::Private::read(ProFile *pro) @@ -560,91 +590,125 @@ void ProFileEvaluator::Private::updateItem() } -bool ProFileEvaluator::Private::visitBeginProBlock(ProBlock *block) +ProItem::ProItemReturn ProFileEvaluator::Private::visitBeginProBlock(ProBlock *block) { - if (block->blockKind() == ProBlock::ScopeKind) { - m_updateCondition = true; + if (block->blockKind() & ProBlock::ScopeContentsKind) { + if (!m_definingFunc.isEmpty()) { + if (!m_skipLevel || m_cumulative) { + QHash<QString, ProBlock *> *hash = + (m_definingTest ? &m_testFunctions : &m_replaceFunctions); + if (ProBlock *def = hash->value(m_definingFunc)) + def->deref(); + hash->insert(m_definingFunc, block); + block->ref(); + block->setBlockKind(block->blockKind() | ProBlock::FunctionBodyKind); + } + m_definingFunc.clear(); + return ProItem::ReturnSkip; + } else if (!(block->blockKind() & ProBlock::FunctionBodyKind)) { + if (!m_sts.condition) + ++m_skipLevel; + else + Q_ASSERT(!m_skipLevel); + } + } else { if (!m_skipLevel) { - m_prevCondition = m_condition; - m_condition = ConditionFalse; + if (m_sts.condition) { + m_sts.prevCondition = true; + m_sts.condition = false; + } } else { - Q_ASSERT(m_condition != ConditionTrue); + Q_ASSERT(!m_sts.condition); } - } else if (block->blockKind() & ProBlock::ScopeContentsKind) { - m_updateCondition = false; - if (m_condition != ConditionTrue) - ++m_skipLevel; - else - Q_ASSERT(!m_skipLevel); } - return true; + return ProItem::ReturnTrue; } -bool ProFileEvaluator::Private::visitEndProBlock(ProBlock *block) +void ProFileEvaluator::Private::visitEndProBlock(ProBlock *block) { - if (block->blockKind() & ProBlock::ScopeContentsKind) { + if ((block->blockKind() & ProBlock::ScopeContentsKind) + && !(block->blockKind() & ProBlock::FunctionBodyKind)) { if (m_skipLevel) { - Q_ASSERT(m_condition != ConditionTrue); + Q_ASSERT(!m_sts.condition); --m_skipLevel; - } else { + } else if (!(block->blockKind() & ProBlock::SingleLine)) { // Conditionals contained inside this block may have changed the state. // So we reset it here to make an else following us do the right thing. - m_condition = ConditionTrue; + m_sts.condition = true; } } - return true; } -bool ProFileEvaluator::Private::visitBeginProVariable(ProVariable *variable) +ProItem::ProItemReturn ProFileEvaluator::Private::visitProLoopIteration() +{ + ProLoop &loop = m_loopStack.top(); + + if (loop.infinite) { + if (!loop.variable.isEmpty()) + m_valuemap[loop.variable] = QStringList(QString::number(loop.index++)); + if (loop.index > 1000) { + q->errorMessage(format("ran into infinite loop (> 1000 iterations).")); + return ProItem::ReturnFalse; + } + } else { + QString val; + do { + if (loop.index >= loop.list.count()) + return ProItem::ReturnFalse; + val = loop.list.at(loop.index++); + } while (val.isEmpty()); // stupid, but qmake is like that + m_valuemap[loop.variable] = QStringList(val); + } + return ProItem::ReturnTrue; +} + +void ProFileEvaluator::Private::visitProLoopCleanup() +{ + ProLoop &loop = m_loopStack.top(); + m_valuemap[loop.variable] = loop.oldVarVal; + m_loopStack.pop_back(); +} + +void ProFileEvaluator::Private::visitBeginProVariable(ProVariable *variable) { m_lastVarName = variable->variable(); m_variableOperator = variable->variableOperator(); m_isFirstVariableValue = true; m_tempValuemap = m_valuemap; m_tempFilevaluemap = m_filevaluemap; - return true; } -bool ProFileEvaluator::Private::visitEndProVariable(ProVariable *variable) +void ProFileEvaluator::Private::visitEndProVariable(ProVariable *variable) { Q_UNUSED(variable); m_valuemap = m_tempValuemap; m_filevaluemap = m_tempFilevaluemap; m_lastVarName.clear(); - return true; } -bool ProFileEvaluator::Private::visitProOperator(ProOperator *oper) +void ProFileEvaluator::Private::visitProOperator(ProOperator *oper) { m_invertNext = (oper->operatorKind() == ProOperator::NotOperator); - return true; } -bool ProFileEvaluator::Private::visitProCondition(ProCondition *cond) +void ProFileEvaluator::Private::visitProCondition(ProCondition *cond) { if (!m_skipLevel) { - if (cond->text().toLower() == QLatin1String("else")) { - // The state ConditionElse makes sure that subsequential elses are ignored. - // That's braindead, but qmake is like that. - if (m_prevCondition == ConditionTrue) - m_condition = ConditionElse; - else if (m_prevCondition == ConditionFalse) - m_condition = ConditionTrue; - } else if (m_condition == ConditionFalse) { - if (isActiveConfig(cond->text(), true) ^ m_invertNext) - m_condition = ConditionTrue; + if (!cond->text().compare(QLatin1String("else"), Qt::CaseInsensitive)) { + m_sts.condition = !m_sts.prevCondition; + } else { + m_sts.prevCondition = false; + if (!m_sts.condition && isActiveConfig(cond->text(), true) ^ m_invertNext) + m_sts.condition = true; } } m_invertNext = false; - return true; } -bool ProFileEvaluator::Private::visitBeginProFile(ProFile * pro) +ProItem::ProItemReturn ProFileEvaluator::Private::visitBeginProFile(ProFile * pro) { PRE(pro); - bool ok = true; m_lineNo = pro->lineNumber(); - if (m_origfile.isEmpty()) m_origfile = pro->fileName(); if (m_oldPath.isEmpty()) { @@ -662,21 +726,20 @@ bool ProFileEvaluator::Private::visitBeginProFile(ProFile * pro) m_cumulative = false; // This is what qmake does, everything set in the mkspec is also set // But this also creates a lot of problems - evaluateFile(mkspecDirectory + QLatin1String("/default/qmake.conf"), &ok); - evaluateFile(mkspecDirectory + QLatin1String("/features/default_pre.prf"), &ok); + evaluateFile(mkspecDirectory + QLatin1String("/default/qmake.conf")); + evaluateFile(mkspecDirectory + QLatin1String("/features/default_pre.prf")); m_cumulative = cumulative; } - ok = QDir::setCurrent(pro->directoryName()); + return returnBool(QDir::setCurrent(pro->directoryName())); } - return ok; + return ProItem::ReturnTrue; } -bool ProFileEvaluator::Private::visitEndProFile(ProFile * pro) +ProItem::ProItemReturn ProFileEvaluator::Private::visitEndProFile(ProFile * pro) { PRE(pro); - bool ok = true; m_lineNo = pro->lineNumber(); if (m_profileStack.count() == 1 && !m_oldPath.isEmpty()) { const QString &mkspecDirectory = propertyValue(QLatin1String("QMAKE_MKSPECS")); @@ -684,7 +747,7 @@ bool ProFileEvaluator::Private::visitEndProFile(ProFile * pro) bool cumulative = m_cumulative; m_cumulative = false; - evaluateFile(mkspecDirectory + QLatin1String("/features/default_post.prf"), &ok); + evaluateFile(mkspecDirectory + QLatin1String("/features/default_post.prf")); QSet<QString> processed; forever { @@ -694,9 +757,8 @@ bool ProFileEvaluator::Private::visitEndProFile(ProFile * pro) const QString config = configs[i].toLower(); if (!processed.contains(config)) { processed.insert(config); - evaluateFile(mkspecDirectory + QLatin1String("/features/") - + config + QLatin1String(".prf"), &ok); - if (ok) { + if (evaluateFile(mkspecDirectory + QLatin1String("/features/") + + config + QLatin1String(".prf"))) { finished = false; break; } @@ -706,13 +768,21 @@ bool ProFileEvaluator::Private::visitEndProFile(ProFile * pro) break; } + foreach (ProBlock *itm, m_replaceFunctions) + itm->deref(); + m_replaceFunctions.clear(); + foreach (ProBlock *itm, m_testFunctions) + itm->deref(); + m_testFunctions.clear(); + m_cumulative = cumulative; } m_profileStack.pop(); - ok = QDir::setCurrent(m_oldPath); + return returnBool(QDir::setCurrent(m_oldPath)); } - return ok; + + return ProItem::ReturnTrue; } static void replaceInList(QStringList *varlist, @@ -733,7 +803,7 @@ static void replaceInList(QStringList *varlist, } } -bool ProFileEvaluator::Private::visitProValue(ProValue *value) +void ProFileEvaluator::Private::visitProValue(ProValue *value) { PRE(value); m_lineNo = value->lineNumber(); @@ -804,16 +874,16 @@ bool ProFileEvaluator::Private::visitProValue(ProValue *value) { // DEFINES ~= s/a/b/?[gqi] - // FIXME: qmake variable-expands val first. + doVariableReplace(&val); if (val.length() < 4 || val[0] != QLatin1Char('s')) { q->logMessage(format("the ~= operator can handle only the s/// function.")); - return false; + break; } QChar sep = val.at(1); QStringList func = val.split(sep); if (func.count() < 3 || func.count() > 4) { q->logMessage(format("the s/// function expects 3 or 4 arguments.")); - return false; + break; } bool global = false, quote = false, case_sense = false; @@ -840,12 +910,16 @@ bool ProFileEvaluator::Private::visitProValue(ProValue *value) } m_isFirstVariableValue = false; - return true; } -bool ProFileEvaluator::Private::visitProFunction(ProFunction *func) +ProItem::ProItemReturn ProFileEvaluator::Private::visitProFunction(ProFunction *func) { - if (!m_updateCondition || m_condition == ConditionFalse) { + // Make sure that called subblocks don't inherit & destroy the state + bool invertThis = m_invertNext; + m_invertNext = false; + if (!m_skipLevel) + m_sts.prevCondition = false; + if (m_cumulative || !m_sts.condition) { QString text = func->text(); int lparen = text.indexOf(QLatin1Char('(')); int rparen = text.lastIndexOf(QLatin1Char(')')); @@ -853,16 +927,13 @@ bool ProFileEvaluator::Private::visitProFunction(ProFunction *func) QString arguments = text.mid(lparen + 1, rparen - lparen - 1); QString funcName = text.left(lparen); m_lineNo = func->lineNumber(); - bool result; - if (!evaluateConditionalFunction(funcName.trimmed(), arguments, &result)) { - m_invertNext = false; - return false; - } - if (!m_skipLevel && (result ^ m_invertNext)) - m_condition = ConditionTrue; + ProItem::ProItemReturn result = evaluateConditionalFunction(funcName.trimmed(), arguments); + if (result != ProItem::ReturnFalse && result != ProItem::ReturnTrue) + return result; + if (!m_skipLevel && ((result == ProItem::ReturnTrue) ^ invertThis)) + m_sts.condition = true; } - m_invertNext = false; - return true; + return ProItem::ReturnTrue; } @@ -988,6 +1059,11 @@ QString ProFileEvaluator::Private::currentDirectory() const return cur->directoryName(); } +void ProFileEvaluator::Private::doVariableReplace(QString *str) +{ + *str = expandVariableReferences(*str).join(QString(Option::field_sep)); +} + QStringList ProFileEvaluator::Private::expandVariableReferences(const QString &str) { QStringList ret; @@ -1202,10 +1278,49 @@ bool ProFileEvaluator::Private::isActiveConfig(const QString &config, bool regex return false; } +QStringList ProFileEvaluator::Private::evaluateFunction( + ProBlock *funcPtr, const QStringList &argumentsList, bool *ok) +{ + bool oki; + QStringList ret; + + if (m_valuemapStack.count() >= 100) { + q->errorMessage(format("ran into infinite recursion (depth > 100).")); + oki = false; + } else { + State sts = m_sts; + m_valuemapStack.push(m_valuemap); + m_filevaluemapStack.push(m_filevaluemap); + + QStringList args; + for (int i = 0; i < argumentsList.count(); ++i) { + QStringList theArgs = expandVariableReferences(argumentsList[i]); + args += theArgs; + m_valuemap[QString::number(i+1)] = theArgs; + } + m_valuemap[QLatin1String("ARGS")] = args; + oki = (funcPtr->Accept(this) != ProItem::ReturnFalse); // True || Return + ret = m_returnValue; + m_returnValue.clear(); + + m_valuemap = m_valuemapStack.pop(); + m_filevaluemap = m_filevaluemapStack.pop(); + m_sts = sts; + } + if (ok) + *ok = oki; + if (oki) + return ret; + return QStringList(); +} + QStringList ProFileEvaluator::Private::evaluateExpandFunction(const QString &func, const QString &arguments) { QStringList argumentsList = split_arg_list(arguments); + if (ProBlock *funcPtr = m_replaceFunctions.value(func, 0)) + return evaluateFunction(funcPtr, argumentsList, 0); + QStringList args; for (int i = 0; i < argumentsList.count(); ++i) args += expandVariableReferences(argumentsList[i]).join(Option::field_sep); @@ -1216,35 +1331,34 @@ QStringList ProFileEvaluator::Private::evaluateExpandFunction(const QString &fun E_UPPER, E_LOWER, E_FILES, E_PROMPT, E_RE_ESCAPE, E_REPLACE }; - static QHash<QString, int> *expands = 0; - if (!expands) { - expands = new QHash<QString, int>; - expands->insert(QLatin1String("member"), E_MEMBER); - expands->insert(QLatin1String("first"), E_FIRST); - expands->insert(QLatin1String("last"), E_LAST); - expands->insert(QLatin1String("cat"), E_CAT); - expands->insert(QLatin1String("fromfile"), E_FROMFILE); // implementation disabled (see comment below) - expands->insert(QLatin1String("eval"), E_EVAL); - expands->insert(QLatin1String("list"), E_LIST); - expands->insert(QLatin1String("sprintf"), E_SPRINTF); - expands->insert(QLatin1String("join"), E_JOIN); - expands->insert(QLatin1String("split"), E_SPLIT); - expands->insert(QLatin1String("basename"), E_BASENAME); - expands->insert(QLatin1String("dirname"), E_DIRNAME); - expands->insert(QLatin1String("section"), E_SECTION); - expands->insert(QLatin1String("find"), E_FIND); - expands->insert(QLatin1String("system"), E_SYSTEM); - expands->insert(QLatin1String("unique"), E_UNIQUE); - expands->insert(QLatin1String("quote"), E_QUOTE); - expands->insert(QLatin1String("escape_expand"), E_ESCAPE_EXPAND); - expands->insert(QLatin1String("upper"), E_UPPER); - expands->insert(QLatin1String("lower"), E_LOWER); - expands->insert(QLatin1String("re_escape"), E_RE_ESCAPE); - expands->insert(QLatin1String("files"), E_FILES); - expands->insert(QLatin1String("prompt"), E_PROMPT); // interactive, so cannot be implemented - expands->insert(QLatin1String("replace"), E_REPLACE); + static QHash<QString, int> expands; + if (expands.isEmpty()) { + expands.insert(QLatin1String("member"), E_MEMBER); + expands.insert(QLatin1String("first"), E_FIRST); + expands.insert(QLatin1String("last"), E_LAST); + expands.insert(QLatin1String("cat"), E_CAT); + expands.insert(QLatin1String("fromfile"), E_FROMFILE); // implementation disabled (see comment below) + expands.insert(QLatin1String("eval"), E_EVAL); + expands.insert(QLatin1String("list"), E_LIST); + expands.insert(QLatin1String("sprintf"), E_SPRINTF); + expands.insert(QLatin1String("join"), E_JOIN); + expands.insert(QLatin1String("split"), E_SPLIT); + expands.insert(QLatin1String("basename"), E_BASENAME); + expands.insert(QLatin1String("dirname"), E_DIRNAME); + expands.insert(QLatin1String("section"), E_SECTION); + expands.insert(QLatin1String("find"), E_FIND); + expands.insert(QLatin1String("system"), E_SYSTEM); + expands.insert(QLatin1String("unique"), E_UNIQUE); + expands.insert(QLatin1String("quote"), E_QUOTE); + expands.insert(QLatin1String("escape_expand"), E_ESCAPE_EXPAND); + expands.insert(QLatin1String("upper"), E_UPPER); + expands.insert(QLatin1String("lower"), E_LOWER); + expands.insert(QLatin1String("re_escape"), E_RE_ESCAPE); + expands.insert(QLatin1String("files"), E_FILES); + expands.insert(QLatin1String("prompt"), E_PROMPT); // interactive, so cannot be implemented + expands.insert(QLatin1String("replace"), E_REPLACE); } - ExpandFunc func_t = ExpandFunc(expands->value(func.toLower())); + ExpandFunc func_t = ExpandFunc(expands.value(func.toLower())); QStringList ret; @@ -1401,7 +1515,7 @@ QStringList ProFileEvaluator::Private::evaluateExpandFunction(const QString &fun bool singleLine = true; if (args.count() > 1) - singleLine = (args[1].toLower() == QLatin1String("true")); + singleLine = (!args[1].compare(QLatin1String("true"), Qt::CaseInsensitive)); QFile qfile(file); if (qfile.open(QIODevice::ReadOnly)) { @@ -1475,7 +1589,7 @@ QStringList ProFileEvaluator::Private::evaluateExpandFunction(const QString &fun FILE *proc = QT_POPEN(args[0].toLatin1(), "r"); bool singleLine = true; if (args.count() > 1) - singleLine = (args[1].toLower() == QLatin1String("true")); + singleLine = (!args[1].compare(QLatin1String("true"), Qt::CaseInsensitive)); QString output; while (proc && !feof(proc)) { int read_in = int(fread(buff, 1, 255, proc)); @@ -1557,7 +1671,7 @@ QStringList ProFileEvaluator::Private::evaluateExpandFunction(const QString &fun } else { bool recursive = false; if (args.count() == 2) - recursive = (args[1].toLower() == QLatin1String("true") || args[1].toInt()); + recursive = (!args[1].compare(QLatin1String("true"), Qt::CaseInsensitive) || args[1].toInt()); QStringList dirs; QString r = Option::fixPathToLocalOS(args[0]); int slash = r.lastIndexOf(QDir::separator()); @@ -1610,13 +1724,40 @@ QStringList ProFileEvaluator::Private::evaluateExpandFunction(const QString &fun return ret; } -bool ProFileEvaluator::Private::evaluateConditionalFunction(const QString &function, - const QString &arguments, bool *result) +ProItem::ProItemReturn ProFileEvaluator::Private::evaluateConditionalFunction( + const QString &function, const QString &arguments) { QStringList argumentsList = split_arg_list(arguments); + + if (ProBlock *funcPtr = m_testFunctions.value(function, 0)) { + bool ok; + QStringList ret = evaluateFunction(funcPtr, argumentsList, &ok); + if (ok) { + if (ret.isEmpty()) { + return ProItem::ReturnTrue; + } else { + if (ret.first() != QLatin1String("false")) { + if (ret.first() == QLatin1String("true")) { + return ProItem::ReturnTrue; + } else { + bool ok; + int val = ret.first().toInt(&ok); + if (ok) { + if (val) + return ProItem::ReturnTrue; + } else { + q->logMessage(format("Unexpected return value from test '%1': %2") + .arg(function).arg(ret.join(QLatin1String(" :: ")))); + } + } + } + } + } + return ProItem::ReturnFalse; + } + QString sep; sep.append(Option::field_sep); - QStringList args; for (int i = 0; i < argumentsList.count(); ++i) args += expandVariableReferences(argumentsList[i]).join(sep); @@ -1624,91 +1765,282 @@ bool ProFileEvaluator::Private::evaluateConditionalFunction(const QString &funct enum TestFunc { T_REQUIRES=1, T_GREATERTHAN, T_LESSTHAN, T_EQUALS, T_EXISTS, T_EXPORT, T_CLEAR, T_UNSET, T_EVAL, T_CONFIG, T_SYSTEM, T_RETURN, T_BREAK, T_NEXT, T_DEFINED, T_CONTAINS, T_INFILE, - T_COUNT, T_ISEMPTY, T_INCLUDE, T_LOAD, T_DEBUG, T_MESSAGE, T_IF }; - - static QHash<QString, int> *functions = 0; - if (!functions) { - functions = new QHash<QString, int>; - functions->insert(QLatin1String("requires"), T_REQUIRES); - functions->insert(QLatin1String("greaterThan"), T_GREATERTHAN); - functions->insert(QLatin1String("lessThan"), T_LESSTHAN); - functions->insert(QLatin1String("equals"), T_EQUALS); - functions->insert(QLatin1String("isEqual"), T_EQUALS); - functions->insert(QLatin1String("exists"), T_EXISTS); - functions->insert(QLatin1String("export"), T_EXPORT); - functions->insert(QLatin1String("clear"), T_CLEAR); - functions->insert(QLatin1String("unset"), T_UNSET); - functions->insert(QLatin1String("eval"), T_EVAL); - functions->insert(QLatin1String("CONFIG"), T_CONFIG); - functions->insert(QLatin1String("if"), T_IF); - functions->insert(QLatin1String("isActiveConfig"), T_CONFIG); - functions->insert(QLatin1String("system"), T_SYSTEM); - functions->insert(QLatin1String("return"), T_RETURN); - functions->insert(QLatin1String("break"), T_BREAK); - functions->insert(QLatin1String("next"), T_NEXT); - functions->insert(QLatin1String("defined"), T_DEFINED); - functions->insert(QLatin1String("contains"), T_CONTAINS); - functions->insert(QLatin1String("infile"), T_INFILE); - functions->insert(QLatin1String("count"), T_COUNT); - functions->insert(QLatin1String("isEmpty"), T_ISEMPTY); - functions->insert(QLatin1String("load"), T_LOAD); //v - functions->insert(QLatin1String("include"), T_INCLUDE); //v - functions->insert(QLatin1String("debug"), T_DEBUG); - functions->insert(QLatin1String("message"), T_MESSAGE); //v - functions->insert(QLatin1String("warning"), T_MESSAGE); //v - functions->insert(QLatin1String("error"), T_MESSAGE); //v + T_COUNT, T_ISEMPTY, T_INCLUDE, T_LOAD, T_DEBUG, T_MESSAGE, T_IF, + T_FOR, T_DEFINE_TEST, T_DEFINE_REPLACE }; + + static QHash<QString, int> functions; + if (functions.isEmpty()) { + functions.insert(QLatin1String("requires"), T_REQUIRES); + functions.insert(QLatin1String("greaterThan"), T_GREATERTHAN); + functions.insert(QLatin1String("lessThan"), T_LESSTHAN); + functions.insert(QLatin1String("equals"), T_EQUALS); + functions.insert(QLatin1String("isEqual"), T_EQUALS); + functions.insert(QLatin1String("exists"), T_EXISTS); + functions.insert(QLatin1String("export"), T_EXPORT); + functions.insert(QLatin1String("clear"), T_CLEAR); + functions.insert(QLatin1String("unset"), T_UNSET); + functions.insert(QLatin1String("eval"), T_EVAL); + functions.insert(QLatin1String("CONFIG"), T_CONFIG); + functions.insert(QLatin1String("if"), T_IF); + functions.insert(QLatin1String("isActiveConfig"), T_CONFIG); + functions.insert(QLatin1String("system"), T_SYSTEM); + functions.insert(QLatin1String("return"), T_RETURN); + functions.insert(QLatin1String("break"), T_BREAK); + functions.insert(QLatin1String("next"), T_NEXT); + functions.insert(QLatin1String("defined"), T_DEFINED); + functions.insert(QLatin1String("contains"), T_CONTAINS); + functions.insert(QLatin1String("infile"), T_INFILE); + functions.insert(QLatin1String("count"), T_COUNT); + functions.insert(QLatin1String("isEmpty"), T_ISEMPTY); + functions.insert(QLatin1String("load"), T_LOAD); //v + functions.insert(QLatin1String("include"), T_INCLUDE); //v + functions.insert(QLatin1String("debug"), T_DEBUG); + functions.insert(QLatin1String("message"), T_MESSAGE); //v + functions.insert(QLatin1String("warning"), T_MESSAGE); //v + functions.insert(QLatin1String("error"), T_MESSAGE); //v + functions.insert(QLatin1String("for"), T_FOR); //v + functions.insert(QLatin1String("defineTest"), T_DEFINE_TEST); //v + functions.insert(QLatin1String("defineReplace"), T_DEFINE_REPLACE); //v } - bool cond = false; - bool ok = true; - - TestFunc func_t = (TestFunc)functions->value(function); + TestFunc func_t = (TestFunc)functions.value(function); switch (func_t) { + case T_DEFINE_TEST: + m_definingTest = true; + goto defineFunc; + case T_DEFINE_REPLACE: + m_definingTest = false; + defineFunc: + if (args.count() != 1) { + q->logMessage(format("%s(function) requires one argument.").arg(function)); + return ProItem::ReturnFalse; + } + m_definingFunc = args.first(); + return ProItem::ReturnTrue; + case T_DEFINED: + if (args.count() < 1 || args.count() > 2) { + q->logMessage(format("defined(function, [\"test\"|\"replace\"])" + " requires one or two arguments.")); + return ProItem::ReturnFalse; + } + if (args.count() > 1) { + if (args[1] == QLatin1String("test")) + return returnBool(m_testFunctions.contains(args[0])); + else if (args[1] == QLatin1String("replace")) + return returnBool(m_replaceFunctions.contains(args[0])); + q->logMessage(format("defined(function, type):" + " unexpected type [%1].\n").arg(args[1])); + return ProItem::ReturnFalse; + } + return returnBool(m_replaceFunctions.contains(args[0]) + || m_testFunctions.contains(args[0])); + case T_RETURN: + m_returnValue = args; + // It is "safe" to ignore returns - due to qmake brokeness + // they cannot be used to terminate loops anyway. + if (m_skipLevel || m_cumulative) + return ProItem::ReturnTrue; + if (m_valuemapStack.isEmpty()) { + q->logMessage(format("unexpected return().")); + return ProItem::ReturnFalse; + } + return ProItem::ReturnReturn; + case T_EXPORT: + if (m_skipLevel && !m_cumulative) + return ProItem::ReturnTrue; + if (args.count() != 1) { + q->logMessage(format("export(variable) requires one argument.")); + return ProItem::ReturnFalse; + } + for (int i = 0; i < m_valuemapStack.size(); ++i) { + m_valuemapStack[i][args[0]] = m_valuemap[args[0]]; + m_filevaluemapStack[i][currentProFile()][args[0]] = + m_filevaluemap[currentProFile()][args[0]]; + } + return ProItem::ReturnTrue; #if 0 case T_INFILE: case T_REQUIRES: - case T_GREATERTHAN: - case T_LESSTHAN: - case T_EQUALS: - case T_EXPORT: - case T_CLEAR: - case T_UNSET: case T_EVAL: - case T_IF: - case T_RETURN: +#endif + case T_FOR: { + if (m_cumulative) // This is a no-win situation, so just pretend it's no loop + return ProItem::ReturnTrue; + if (m_skipLevel) + return ProItem::ReturnFalse; + if (args.count() > 2 || args.count() < 1) { + q->logMessage(format("for({var, list|var, forever|ever})" + " requires one or two arguments.")); + return ProItem::ReturnFalse; + } + ProLoop loop; + loop.infinite = false; + loop.index = 0; + QString it_list; + if (args.count() == 1) { + doVariableReplace(&args[0]); + it_list = args[0]; + if (args[0] != QLatin1String("ever")) { + q->logMessage(format("for({var, list|var, forever|ever})" + " requires one or two arguments.")); + return ProItem::ReturnFalse; + } + it_list = QLatin1String("forever"); + } else { + loop.variable = args[0]; + loop.oldVarVal = m_valuemap.value(loop.variable); + doVariableReplace(&args[1]); + it_list = args[1]; + } + loop.list = m_valuemap[it_list]; + if (loop.list.isEmpty()) { + if (it_list == QLatin1String("forever")) { + loop.infinite = true; + } else { + int dotdot = it_list.indexOf(QLatin1String("..")); + if (dotdot != -1) { + bool ok; + int start = it_list.left(dotdot).toInt(&ok); + if (ok) { + int end = it_list.mid(dotdot+2).toInt(&ok); + if (ok) { + if (start < end) { + for (int i = start; i <= end; i++) + loop.list << QString::number(i); + } else { + for (int i = start; i >= end; i--) + loop.list << QString::number(i); + } + } + } + } + } + } + m_loopStack.push(loop); + m_sts.condition = true; + return ProItem::ReturnLoop; + } case T_BREAK: + if (m_skipLevel) + return ProItem::ReturnFalse; + if (!m_loopStack.isEmpty()) + return ProItem::ReturnBreak; + // ### missing: breaking out of multiline blocks + q->logMessage(format("unexpected break().")); + return ProItem::ReturnFalse; case T_NEXT: - case T_DEFINED: -#endif + if (m_skipLevel) + return ProItem::ReturnFalse; + if (!m_loopStack.isEmpty()) + return ProItem::ReturnNext; + q->logMessage(format("unexpected next().")); + return ProItem::ReturnFalse; + case T_IF: { + if (args.count() != 1) { + q->logMessage(format("if(condition) requires one argument.")); + return ProItem::ReturnFalse; + } + QString cond = args.first(); + bool escaped = false; // This is more than qmake does + bool quoted = false; + bool ret = true; + bool orOp = false; + bool invert = false; + bool isFunc = false; + int parens = 0; + QString test; + test.reserve(20); + QString args; + args.reserve(50); + const QChar *d = cond.unicode(); + const QChar *ed = d + cond.length(); + while (d < ed) { + ushort c = (d++)->unicode(); + if (!escaped) { + if (c == '\\') { + escaped = true; + args += c; // Assume no-one quotes the test name + continue; + } else if (c == '"') { + quoted = !quoted; + args += c; // Ditto + continue; + } + } else { + escaped = false; + } + if (quoted) { + args += c; // Ditto + } else { + bool isOp = false; + if (c == '(') { + isFunc = true; + if (parens) + args += c; + ++parens; + } else if (c == ')') { + --parens; + if (parens) + args += c; + } else if (!parens) { + if (c == ':' || c == '|') + isOp = true; + else if (c == '!') + invert = true; + else + test += c; + } else { + args += c; + } + if (!parens && (isOp || d == ed)) { + // Yes, qmake doesn't shortcut evaluations here. We can't, either, + // as some test functions have side effects. + bool success; + if (isFunc) { + success = evaluateConditionalFunction(test, args); + } else { + success = isActiveConfig(test, true); + } + success ^= invert; + if (orOp) + ret |= success; + else + ret &= success; + orOp = (c == '|'); + invert = false; + isFunc = false; + test.clear(); + args.clear(); + } + } + } + return returnBool(ret); + } case T_CONFIG: { if (args.count() < 1 || args.count() > 2) { q->logMessage(format("CONFIG(config) requires one or two arguments.")); - ok = false; - break; + return ProItem::ReturnFalse; } if (args.count() == 1) { //cond = isActiveConfig(args.first()); XXX - break; + return ProItem::ReturnFalse; } const QStringList mutuals = args[1].split(QLatin1Char('|')); const QStringList &configs = valuesDirect(QLatin1String("CONFIG")); for (int i = configs.size() - 1; i >= 0; i--) { for (int mut = 0; mut < mutuals.count(); mut++) { if (configs[i] == mutuals[mut].trimmed()) { - cond = (configs[i] == args[0]); - goto done_T_CONFIG; + return returnBool(configs[i] == args[0]); } } } - done_T_CONFIG: - break; + return ProItem::ReturnFalse; } case T_CONTAINS: { if (args.count() < 2 || args.count() > 3) { q->logMessage(format("contains(var, val) requires two or three arguments.")); - ok = false; - break; + return ProItem::ReturnFalse; } QRegExp regx(args[1]); @@ -1717,8 +2049,7 @@ bool ProFileEvaluator::Private::evaluateConditionalFunction(const QString &funct for (int i = 0; i < l.size(); ++i) { const QString val = l[i]; if (regx.exactMatch(val) || val == args[1]) { - cond = true; - break; + return ProItem::ReturnTrue; } } } else { @@ -1727,140 +2058,172 @@ bool ProFileEvaluator::Private::evaluateConditionalFunction(const QString &funct const QString val = l[i]; for (int mut = 0; mut < mutuals.count(); mut++) { if (val == mutuals[mut].trimmed()) { - cond = (regx.exactMatch(val) || val == args[1]); - goto done_T_CONTAINS; + return returnBool(regx.exactMatch(val) || val == args[1]); } } } } - done_T_CONTAINS: - break; + return ProItem::ReturnFalse; } case T_COUNT: { if (args.count() != 2 && args.count() != 3) { q->logMessage(format("count(var, count, op=\"equals\") requires two or three arguments.")); - ok = false; - break; + return ProItem::ReturnFalse; } if (args.count() == 3) { QString comp = args[2]; if (comp == QLatin1String(">") || comp == QLatin1String("greaterThan")) { - cond = values(args.first()).count() > args[1].toInt(); + return returnBool(values(args.first()).count() > args[1].toInt()); } else if (comp == QLatin1String(">=")) { - cond = values(args.first()).count() >= args[1].toInt(); + return returnBool(values(args.first()).count() >= args[1].toInt()); } else if (comp == QLatin1String("<") || comp == QLatin1String("lessThan")) { - cond = values(args.first()).count() < args[1].toInt(); + return returnBool(values(args.first()).count() < args[1].toInt()); } else if (comp == QLatin1String("<=")) { - cond = values(args.first()).count() <= args[1].toInt(); - } else if (comp == QLatin1String("equals") || comp == QLatin1String("isEqual") || comp == QLatin1String("=") || comp == QLatin1String("==")) { - cond = values(args.first()).count() == args[1].toInt(); + return returnBool(values(args.first()).count() <= args[1].toInt()); + } else if (comp == QLatin1String("equals") || comp == QLatin1String("isEqual") + || comp == QLatin1String("=") || comp == QLatin1String("==")) { + return returnBool(values(args.first()).count() == args[1].toInt()); } else { - ok = false; q->logMessage(format("unexpected modifier to count(%2)").arg(comp)); + return ProItem::ReturnFalse; } - break; } - cond = values(args.first()).count() == args[1].toInt(); - break; + return returnBool(values(args.first()).count() == args[1].toInt()); + } + case T_GREATERTHAN: + case T_LESSTHAN: { + if (args.count() != 2) { + q->logMessage(format("%1(variable, value) requires two arguments.").arg(function)); + return ProItem::ReturnFalse; + } + QString rhs(args[1]), lhs(values(args[0]).join(QString(Option::field_sep))); + bool ok; + int rhs_int = rhs.toInt(&ok); + if (ok) { // do integer compare + int lhs_int = lhs.toInt(&ok); + if (ok) { + if (func_t == T_GREATERTHAN) + return returnBool(lhs_int > rhs_int); + return returnBool(lhs_int < rhs_int); + } + } + if (func_t == T_GREATERTHAN) + return returnBool(lhs > rhs); + return returnBool(lhs < rhs); + } + case T_EQUALS: + if (args.count() != 2) { + q->logMessage(format("%1(variable, value) requires two arguments.").arg(function)); + return ProItem::ReturnFalse; + } + return returnBool(values(args[0]).join(QString(Option::field_sep)) == args[1]); + case T_CLEAR: { + if (m_skipLevel && !m_cumulative) + return ProItem::ReturnFalse; + if (args.count() != 1) { + q->logMessage(format("%1(variable) requires one argument.").arg(function)); + return ProItem::ReturnFalse; + } + QHash<QString, QStringList>::Iterator it = m_valuemap.find(args[0]); + if (it == m_valuemap.end()) + return ProItem::ReturnFalse; + it->clear(); + return ProItem::ReturnTrue; + } + case T_UNSET: { + if (m_skipLevel && !m_cumulative) + return ProItem::ReturnFalse; + if (args.count() != 1) { + q->logMessage(format("%1(variable) requires one argument.").arg(function)); + return ProItem::ReturnFalse; + } + QHash<QString, QStringList>::Iterator it = m_valuemap.find(args[0]); + if (it == m_valuemap.end()) + return ProItem::ReturnFalse; + m_valuemap.erase(it); + return ProItem::ReturnTrue; } case T_INCLUDE: { if (m_skipLevel && !m_cumulative) - break; + return ProItem::ReturnFalse; QString parseInto; if (args.count() == 2) { parseInto = args[1]; } else if (args.count() != 1) { q->logMessage(format("include(file) requires one or two arguments.")); - ok = false; - break; + return ProItem::ReturnFalse; } QString fileName = args.first(); // ### this breaks if we have include(c:/reallystupid.pri) but IMHO that's really bad style. QDir currentProPath(currentDirectory()); fileName = QDir::cleanPath(currentProPath.absoluteFilePath(fileName)); - ok = evaluateFile(fileName, &ok); - break; + State sts = m_sts; + bool ok = evaluateFile(fileName); + m_sts = sts; + return returnBool(ok); } case T_LOAD: { if (m_skipLevel && !m_cumulative) - break; + return ProItem::ReturnFalse; QString parseInto; bool ignore_error = false; if (args.count() == 2) { QString sarg = args[1]; - ignore_error = (sarg.toLower() == QLatin1String("true") || sarg.toInt()); + ignore_error = (!sarg.compare(QLatin1String("true"), Qt::CaseInsensitive) || sarg.toInt()); } else if (args.count() != 1) { q->logMessage(format("load(feature) requires one or two arguments.")); - ok = false; - break; + return ProItem::ReturnFalse; } - ok = evaluateFeatureFile( args.first(), &cond); - break; + // XXX ignore_error unused + return returnBool(evaluateFeatureFile(args.first())); } case T_DEBUG: // Yup - do nothing. Nothing is going to enable debug output anyway. - break; + return ProItem::ReturnFalse; case T_MESSAGE: { if (args.count() != 1) { q->logMessage(format("%1(message) requires one argument.").arg(function)); - ok = false; - break; + return ProItem::ReturnFalse; } QString msg = fixEnvVariables(args.first()); - if (function == QLatin1String("error")) { - QStringList parents; - foreach (ProFile *proFile, m_profileStack) - parents.append(proFile->fileName()); - if (!parents.isEmpty()) - parents.takeLast(); - if (parents.isEmpty()) - q->fileMessage(format("Project ERROR: %1").arg(msg)); - else - q->fileMessage(format("Project ERROR: %1. File was included from: '%2'") - .arg(msg).arg(parents.join(QLatin1String("', '")))); - } else { - q->fileMessage(format("Project MESSAGE: %1").arg(msg)); - } - break; + q->fileMessage(QString::fromLatin1("Project %1: %2").arg(function.toUpper(), msg)); + // ### Consider real termination in non-cumulative mode + return returnBool(function != QLatin1String("error")); } #if 0 // Way too dangerous to enable. case T_SYSTEM: { if (args.count() != 1) { q->logMessage(format("system(exec) requires one argument.")); - ok = false; - break; + ProItem::ReturnFalse; } - ok = system(args.first().toLatin1().constData()) == 0; - break; + return returnBool(system(args.first().toLatin1().constData()) == 0); } #endif case T_ISEMPTY: { if (args.count() != 1) { q->logMessage(format("isEmpty(var) requires one argument.")); - ok = false; - break; + return ProItem::ReturnFalse; } QStringList sl = values(args.first()); if (sl.count() == 0) { - cond = true; + return ProItem::ReturnTrue; } else if (sl.count() > 0) { QString var = sl.first(); - cond = (var.isEmpty()); + if (var.isEmpty()) + return ProItem::ReturnTrue; } - break; + return ProItem::ReturnFalse; } case T_EXISTS: { if (args.count() != 1) { q->logMessage(format("exists(file) requires one argument.")); - ok = false; - break; + return ProItem::ReturnFalse; } QString file = args.first(); file = Option::fixPathToLocalOS(file); if (QFile::exists(file)) { - cond = true; - break; + return ProItem::ReturnTrue; } //regular expression I guess QString dirstr = currentDirectory(); @@ -1870,23 +2233,18 @@ bool ProFileEvaluator::Private::evaluateConditionalFunction(const QString &funct file = file.right(file.length() - slsh - 1); } if (file.contains(QLatin1Char('*')) || file.contains(QLatin1Char('?'))) - cond = QDir(dirstr).entryList(QStringList(file)).count(); + if (!QDir(dirstr).entryList(QStringList(file)).isEmpty()) + return ProItem::ReturnTrue; - break; + return ProItem::ReturnFalse; } case 0: - // This is too chatty currently (missing defineTest and defineReplace) - //q->logMessage(format("'%1' is not a recognized test function").arg(function)); - break; + q->logMessage(format("'%1' is not a recognized test function").arg(function)); + return ProItem::ReturnFalse; default: q->logMessage(format("Function '%1' is not implemented").arg(function)); - break; + return ProItem::ReturnFalse; } - - if (result) - *result = cond; - - return ok; } QStringList ProFileEvaluator::Private::values(const QString &variableName, @@ -2039,27 +2397,21 @@ void ProFileEvaluator::releaseParsedProFile(ProFile *proFile) delete proFile; } -bool ProFileEvaluator::Private::evaluateFile(const QString &fileName, bool *result) +bool ProFileEvaluator::Private::evaluateFile(const QString &fileName) { - bool ok = true; ProFile *pro = q->parsedProFile(fileName); if (pro) { m_profileStack.push(pro); - ok = pro->Accept(this); + bool ok = (pro->Accept(this) == ProItem::ReturnTrue); m_profileStack.pop(); q->releaseParsedProFile(pro); - - if (result) - *result = true; + return ok; } else { - if (result) - *result = false; + return false; } - - return ok; } -bool ProFileEvaluator::Private::evaluateFeatureFile(const QString &fileName, bool *result) +bool ProFileEvaluator::Private::evaluateFeatureFile(const QString &fileName) { QString fn; foreach (const QString &path, qmakeFeaturePaths()) { @@ -2078,7 +2430,7 @@ bool ProFileEvaluator::Private::evaluateFeatureFile(const QString &fileName, boo return false; bool cumulative = m_cumulative; m_cumulative = false; - bool ok = evaluateFile(fn, result); + bool ok = evaluateFile(fn); m_cumulative = cumulative; return ok; } @@ -2190,14 +2542,14 @@ ProFileEvaluator::TemplateType ProFileEvaluator::templateType() { QStringList templ = values(QLatin1String("TEMPLATE")); if (templ.count() >= 1) { - QString t = templ.last().toLower(); - if (t == QLatin1String("app")) + const QString &t = templ.last(); + if (!t.compare(QLatin1String("app"), Qt::CaseInsensitive)) return TT_Application; - if (t == QLatin1String("lib")) + if (!t.compare(QLatin1String("lib"), Qt::CaseInsensitive)) return TT_Library; - if (t == QLatin1String("script")) + if (!t.compare(QLatin1String("script"), Qt::CaseInsensitive)) return TT_Script; - if (t == QLatin1String("subdirs")) + if (!t.compare(QLatin1String("subdirs"), Qt::CaseInsensitive)) return TT_Subdirs; } return TT_Unknown; diff --git a/tools/linguist/shared/profileevaluator.h b/tools/linguist/shared/profileevaluator.h index 688022b..f3498c1 100644 --- a/tools/linguist/shared/profileevaluator.h +++ b/tools/linguist/shared/profileevaluator.h @@ -95,6 +95,9 @@ public: private: class Private; Private *d; + + // This doesn't help gcc 3.3 and sunpro ... + template<typename T> friend class QTypeInfo; }; QT_END_NAMESPACE diff --git a/tools/linguist/shared/proitems.cpp b/tools/linguist/shared/proitems.cpp index 471417e..905c67e 100644 --- a/tools/linguist/shared/proitems.cpp +++ b/tools/linguist/shared/proitems.cpp @@ -58,15 +58,21 @@ QString ProItem::comment() const } // --------------- ProBlock ---------------- + ProBlock::ProBlock(ProBlock *parent) { m_blockKind = 0; m_parent = parent; + m_refCount = 1; } ProBlock::~ProBlock() { - qDeleteAll(m_proitems); + foreach (ProItem *itm, m_proitems) + if (itm->kind() == BlockKind) + static_cast<ProBlock *>(itm)->deref(); + else + delete itm; } void ProBlock::appendItem(ProItem *proitem) @@ -109,14 +115,37 @@ ProItem::ProItemKind ProBlock::kind() const return ProItem::BlockKind; } -bool ProBlock::Accept(AbstractProItemVisitor *visitor) -{ - visitor->visitBeginProBlock(this); - foreach (ProItem *item, m_proitems) { - if (!item->Accept(visitor)) - return false; +ProItem::ProItemReturn ProBlock::Accept(AbstractProItemVisitor *visitor) +{ + if (visitor->visitBeginProBlock(this) == ReturnSkip) + return ReturnTrue; + ProItemReturn rt = ReturnTrue; + for (int i = 0; i < m_proitems.count(); ++i) { + rt = m_proitems.at(i)->Accept(visitor); + if (rt != ReturnTrue && rt != ReturnFalse) { + if (rt == ReturnLoop) { + rt = ReturnTrue; + while (visitor->visitProLoopIteration()) + for (int j = i; ++j < m_proitems.count(); ) { + rt = m_proitems.at(j)->Accept(visitor); + if (rt != ReturnTrue && rt != ReturnFalse) { + if (rt == ReturnNext) { + rt = ReturnTrue; + break; + } + if (rt == ReturnBreak) + rt = ReturnTrue; + goto do_break; + } + } + do_break: + visitor->visitProLoopCleanup(); + } + break; + } } - return visitor->visitEndProBlock(this); + visitor->visitEndProBlock(this); + return rt; } // --------------- ProVariable ---------------- @@ -148,14 +177,13 @@ QString ProVariable::variable() const return m_variable; } -bool ProVariable::Accept(AbstractProItemVisitor *visitor) +ProItem::ProItemReturn ProVariable::Accept(AbstractProItemVisitor *visitor) { visitor->visitBeginProVariable(this); - foreach (ProItem *item, m_proitems) { - if (!item->Accept(visitor)) - return false; - } - return visitor->visitEndProVariable(this); + foreach (ProItem *item, m_proitems) + item->Accept(visitor); // cannot fail + visitor->visitEndProVariable(this); + return ReturnTrue; } // --------------- ProValue ---------------- @@ -190,9 +218,10 @@ ProItem::ProItemKind ProValue::kind() const return ProItem::ValueKind; } -bool ProValue::Accept(AbstractProItemVisitor *visitor) +ProItem::ProItemReturn ProValue::Accept(AbstractProItemVisitor *visitor) { - return visitor->visitProValue(this); + visitor->visitProValue(this); + return ReturnTrue; } // --------------- ProFunction ---------------- @@ -216,7 +245,7 @@ ProItem::ProItemKind ProFunction::kind() const return ProItem::FunctionKind; } -bool ProFunction::Accept(AbstractProItemVisitor *visitor) +ProItem::ProItemReturn ProFunction::Accept(AbstractProItemVisitor *visitor) { return visitor->visitProFunction(this); } @@ -242,9 +271,10 @@ ProItem::ProItemKind ProCondition::kind() const return ProItem::ConditionKind; } -bool ProCondition::Accept(AbstractProItemVisitor *visitor) +ProItem::ProItemReturn ProCondition::Accept(AbstractProItemVisitor *visitor) { - return visitor->visitProCondition(this); + visitor->visitProCondition(this); + return ReturnTrue; } // --------------- ProOperator ---------------- @@ -268,9 +298,10 @@ ProItem::ProItemKind ProOperator::kind() const return ProItem::OperatorKind; } -bool ProOperator::Accept(AbstractProItemVisitor *visitor) +ProItem::ProItemReturn ProOperator::Accept(AbstractProItemVisitor *visitor) { - return visitor->visitProOperator(this); + visitor->visitProOperator(this); + return ReturnTrue; } // --------------- ProFile ---------------- @@ -315,13 +346,12 @@ bool ProFile::isModified() const return m_modified; } -bool ProFile::Accept(AbstractProItemVisitor *visitor) +ProItem::ProItemReturn ProFile::Accept(AbstractProItemVisitor *visitor) { - visitor->visitBeginProFile(this); - foreach (ProItem *item, m_proitems) { - if (!item->Accept(visitor)) - return false; - } + ProItemReturn rt; + if ((rt = visitor->visitBeginProFile(this)) != ReturnTrue) + return rt; + ProBlock::Accept(visitor); // cannot fail return visitor->visitEndProFile(this); } diff --git a/tools/linguist/shared/proitems.h b/tools/linguist/shared/proitems.h index aad0ba2..7833be1 100644 --- a/tools/linguist/shared/proitems.h +++ b/tools/linguist/shared/proitems.h @@ -60,6 +60,16 @@ public: BlockKind }; + enum ProItemReturn { + ReturnFalse, + ReturnTrue, + ReturnBreak, + ReturnNext, + ReturnLoop, + ReturnSkip, + ReturnReturn + }; + ProItem() : m_lineNumber(0) {} virtual ~ProItem() {} @@ -68,7 +78,7 @@ public: void setComment(const QString &comment); QString comment() const; - virtual bool Accept(AbstractProItemVisitor *visitor) = 0; + virtual ProItemReturn Accept(AbstractProItemVisitor *visitor) = 0; int lineNumber() const { return m_lineNumber; } void setLineNumber(int lineNumber) { m_lineNumber = lineNumber; } @@ -86,7 +96,8 @@ public: ScopeContentsKind = 0x02, VariableKind = 0x04, ProFileKind = 0x08, - SingleLine = 0x10 + FunctionBodyKind = 0x10, + SingleLine = 0x80 }; ProBlock(ProBlock *parent); @@ -102,14 +113,18 @@ public: void setParent(ProBlock *parent); ProBlock *parent() const; + void ref() { ++m_refCount; } + void deref() { if (!--m_refCount) delete this; } + ProItem::ProItemKind kind() const; - virtual bool Accept(AbstractProItemVisitor *visitor); + virtual ProItemReturn Accept(AbstractProItemVisitor *visitor); protected: QList<ProItem *> m_proitems; private: ProBlock *m_parent; int m_blockKind; + int m_refCount; }; class ProVariable : public ProBlock @@ -131,7 +146,7 @@ public: void setVariable(const QString &name); QString variable() const; - virtual bool Accept(AbstractProItemVisitor *visitor); + virtual ProItemReturn Accept(AbstractProItemVisitor *visitor); private: VariableOperator m_variableKind; QString m_variable; @@ -150,7 +165,7 @@ public: ProItem::ProItemKind kind() const; - virtual bool Accept(AbstractProItemVisitor *visitor); + virtual ProItemReturn Accept(AbstractProItemVisitor *visitor); private: QString m_value; ProVariable *m_variable; @@ -166,7 +181,7 @@ public: ProItem::ProItemKind kind() const; - virtual bool Accept(AbstractProItemVisitor *visitor); + virtual ProItemReturn Accept(AbstractProItemVisitor *visitor); private: QString m_text; }; @@ -181,7 +196,7 @@ public: ProItem::ProItemKind kind() const; - virtual bool Accept(AbstractProItemVisitor *visitor); + virtual ProItemReturn Accept(AbstractProItemVisitor *visitor); private: QString m_text; }; @@ -201,7 +216,7 @@ public: ProItem::ProItemKind kind() const; - virtual bool Accept(AbstractProItemVisitor *visitor); + virtual ProItemReturn Accept(AbstractProItemVisitor *visitor); private: OperatorKind m_operatorKind; }; @@ -219,7 +234,7 @@ public: void setModified(bool modified); bool isModified() const; - virtual bool Accept(AbstractProItemVisitor *visitor); + virtual ProItemReturn Accept(AbstractProItemVisitor *visitor); private: QString m_fileName; diff --git a/tools/linguist/shared/qm.cpp b/tools/linguist/shared/qm.cpp index 9523fde..638e997 100644 --- a/tools/linguist/shared/qm.cpp +++ b/tools/linguist/shared/qm.cpp @@ -552,7 +552,8 @@ bool loadQM(Translator &translator, QIODevice &dev, ConversionData &cd) size_t numItems = offsetLength / (2 * sizeof(quint32)); //qDebug() << "NUMITEMS: " << numItems; - QTextCodec *codec = QTextCodec::codecForName(cd.m_codecForSource); + QTextCodec *codec = QTextCodec::codecForName( + cd.m_codecForSource.isEmpty() ? "Latin1" : cd.m_codecForSource); QTextCodec *utf8Codec = 0; if (codec->name() != "UTF-8") utf8Codec = QTextCodec::codecForName("UTF-8"); diff --git a/tools/linguist/shared/translator.cpp b/tools/linguist/shared/translator.cpp index 305681d..62f4d10 100644 --- a/tools/linguist/shared/translator.cpp +++ b/tools/linguist/shared/translator.cpp @@ -517,16 +517,10 @@ QList<TranslatorMessage> Translator::translatedMessages() const return result; } -QStringList Translator::normalizedTranslations(const TranslatorMessage &msg, - QLocale::Language language, QLocale::Country country) +QStringList Translator::normalizedTranslations(const TranslatorMessage &msg, int numPlurals) { QStringList translations = msg.translations(); - int numTranslations = 1; - if (msg.isPlural() && language != QLocale::C) { - QStringList forms; - if (getNumerusInfo(language, country, 0, &forms)) - numTranslations = forms.count(); // includes singular - } + int numTranslations = msg.isPlural() ? numPlurals : 1; // make sure that the stringlist always have the size of the // language's current numerus, or 1 if its not plural @@ -540,21 +534,39 @@ QStringList Translator::normalizedTranslations(const TranslatorMessage &msg, return translations; } -QStringList Translator::normalizedTranslations(const TranslatorMessage &msg, - ConversionData &cd, bool *ok) const +void Translator::normalizeTranslations(ConversionData &cd) { + bool truncated = false; QLocale::Language l; QLocale::Country c; languageAndCountry(languageCode(), &l, &c); - QStringList translns = normalizedTranslations(msg, l, c); - if (msg.translations().size() > translns.size() && ok) { + int numPlurals = 1; + if (l != QLocale::C) { + QStringList forms; + if (getNumerusInfo(l, c, 0, &forms)) + numPlurals = forms.count(); // includes singular + } + for (int i = 0; i < m_messages.count(); ++i) { + const TranslatorMessage &msg = m_messages.at(i); + QStringList tlns = msg.translations(); + int ccnt = msg.isPlural() ? numPlurals : 1; + if (tlns.count() != ccnt) { + while (tlns.count() < ccnt) + tlns.append(QString()); + while (tlns.count() > ccnt) { + tlns.removeLast(); + truncated = true; + } + TranslatorMessage msg2(msg); + msg2.setTranslations(tlns); + m_messages[i] = msg2; + } + } + if (truncated) cd.appendError(QLatin1String( "Removed plural forms as the target language has less " "forms.\nIf this sounds wrong, possibly the target language is " "not set or recognized.\n")); - *ok = false; - } - return translns; } QString Translator::guessLanguageCodeFromFileName(const QString &filename) diff --git a/tools/linguist/shared/translator.h b/tools/linguist/shared/translator.h index fb17fd1..d0903a9 100644 --- a/tools/linguist/shared/translator.h +++ b/tools/linguist/shared/translator.h @@ -84,7 +84,8 @@ public: public: QString m_defaultContext; - QByteArray m_codecForSource; // CPP specific + QByteArray m_codecForSource; // CPP, PO & QM specific + QByteArray m_outputCodec; // PO specific QString m_sourceFileName; QString m_targetFileName; QDir m_sourceDir; @@ -158,8 +159,8 @@ public: static QString guessLanguageCodeFromFileName(const QString &fileName); QList<TranslatorMessage> messages() const; QList<TranslatorMessage> translatedMessages() const; - static QStringList normalizedTranslations(const TranslatorMessage &m, - QLocale::Language lang, QLocale::Country country); + static QStringList normalizedTranslations(const TranslatorMessage &m, int numPlurals); + void normalizeTranslations(ConversionData &cd); QStringList normalizedTranslations(const TranslatorMessage &m, ConversionData &cd, bool *ok) const; int messageCount() const { return m_messages.size(); } diff --git a/tools/linguist/shared/ts.cpp b/tools/linguist/shared/ts.cpp index 3efce15..5884997 100644 --- a/tools/linguist/shared/ts.cpp +++ b/tools/linguist/shared/ts.cpp @@ -693,8 +693,8 @@ bool saveTS(const Translator &translator, QIODevice &dev, ConversionData &cd, in t << " type=\"obsolete\""; if (msg.isPlural()) { t << ">"; - QStringList translns = translator.normalizedTranslations(msg, cd, &result); - for (int j = 0; j < qMax(1, translns.count()); ++j) { + const QStringList &translns = msg.translations(); + for (int j = 0; j < translns.count(); ++j) { t << "\n <numerusform"; writeVariants(t, " ", translns[j]); t << "</numerusform>"; diff --git a/tools/linguist/shared/xliff.cpp b/tools/linguist/shared/xliff.cpp index 1313172..c222b8d 100644 --- a/tools/linguist/shared/xliff.cpp +++ b/tools/linguist/shared/xliff.cpp @@ -243,13 +243,12 @@ static void writeComment(QTextStream &ts, const TranslatorMessage &msg, const QR } } -static void writeTransUnits(QTextStream &ts, const TranslatorMessage &msg, const QRegExp &drops, int indent, - const Translator &translator, ConversionData &cd, bool *ok) +static void writeTransUnits(QTextStream &ts, const TranslatorMessage &msg, const QRegExp &drops, int indent) { static int msgid; QString msgidstr = !msg.id().isEmpty() ? msg.id() : QString::fromAscii("_msg%1").arg(++msgid); - QStringList translns = translator.normalizedTranslations(msg, cd, ok); + QStringList translns = msg.translations(); QHash<QString, QString>::const_iterator it; QString pluralStr; QStringList sources(msg.sourceText()); @@ -349,8 +348,7 @@ static void writeTransUnits(QTextStream &ts, const TranslatorMessage &msg, const } } -static void writeMessage(QTextStream &ts, const TranslatorMessage &msg, const QRegExp &drops, int indent, - const Translator &translator, ConversionData &cd, bool *ok) +static void writeMessage(QTextStream &ts, const TranslatorMessage &msg, const QRegExp &drops, int indent) { if (msg.isPlural()) { writeIndent(ts, indent); @@ -364,12 +362,12 @@ static void writeMessage(QTextStream &ts, const TranslatorMessage &msg, const QR writeLineNumber(ts, msg, indent); writeComment(ts, msg, drops, indent); - writeTransUnits(ts, msg, drops, indent, translator, cd, ok); + writeTransUnits(ts, msg, drops, indent); --indent; writeIndent(ts, indent); ts << "</group>\n"; } else { - writeTransUnits(ts, msg, drops, indent, translator, cd, ok); + writeTransUnits(ts, msg, drops, indent); } } @@ -795,7 +793,7 @@ bool saveXLIFF(const Translator &translator, QIODevice &dev, ConversionData &cd) } foreach (const TranslatorMessage &msg, messageOrder[fn][ctx]) - writeMessage(ts, msg, drops, indent, translator, cd, &ok); + writeMessage(ts, msg, drops, indent); if (!ctx.isEmpty()) { --indent; diff --git a/tools/qdoc3/cppcodeparser.cpp b/tools/qdoc3/cppcodeparser.cpp index 6d703fb..4563f65 100644 --- a/tools/qdoc3/cppcodeparser.cpp +++ b/tools/qdoc3/cppcodeparser.cpp @@ -854,21 +854,25 @@ void CppCodeParser::processOtherMetaCommand(const Doc& doc, tr("The function either doesn't exist in any base class " "with the same signature or it exists but isn't virtual.")); } -#if 0 // Ideally, we would enable this check to warn whenever \reimp is used - // incorrectly, and only make the node internal if the function is a - // reimplementation of another function in a base class. + /* + Ideally, we would enable this check to warn whenever + \reimp is used incorrectly, and only make the node + internal if the function is a reimplementation of + another function in a base class. + */ else if (from->access() == Node::Private || from->parent()->access() == Node::Private) { - doc.location().warning( - tr("Base function for '\\%1' in %2() is private or internal") + doc.location().warning(tr("'\\%1' in %2() should be '\\internal' because its base function is private or internal") .arg(COMMAND_REIMP).arg(node->name())); } -#endif - // Note: Setting the access to Private hides the documentation, - // but setting the status to Internal makes the node available - // in the XML output when the WebXMLGenerator is used. + #if 0 // Reimplemented functions now reported in separate sections. + /* + Note: Setting the access to Private hides the documentation, + but setting the status to Internal makes the node available + in the XML output when the WebXMLGenerator is used. + */ func->setAccess(Node::Private); func->setStatus(Node::Internal); #endif diff --git a/tools/qdoc3/htmlgenerator.cpp b/tools/qdoc3/htmlgenerator.cpp index 8726665..bb96d55 100644 --- a/tools/qdoc3/htmlgenerator.cpp +++ b/tools/qdoc3/htmlgenerator.cpp @@ -316,6 +316,7 @@ void HtmlGenerator::generateTree(const Tree *tree, CodeMarker *marker) nonCompatClasses.clear(); mainClasses.clear(); compatClasses.clear(); + obsoleteClasses.clear(); moduleClassMap.clear(); moduleNamespaceMap.clear(); funcIndex.clear(); @@ -403,7 +404,7 @@ int HtmlGenerator::generateAtom(const Atom *atom, case Atom::AutoLink: if (!inLink && !inContents && !inSectionHeading) { const Node *node = 0; - QString link = getLink(atom, relative, marker, node); + QString link = getLink(atom, relative, marker, &node); if (!link.isEmpty()) { beginLink(link, node, relative, marker); generateLink(atom, relative, marker); @@ -590,6 +591,9 @@ int HtmlGenerator::generateAtom(const Atom *atom, else if (atom->string() == "compatclasses") { generateCompactList(relative, marker, compatClasses); } + else if (atom->string() == "obsoleteclasses") { + generateCompactList(relative, marker, obsoleteClasses); + } else if (atom->string() == "functionindex") { generateFunctionIndex(relative, marker); } @@ -671,11 +675,12 @@ int HtmlGenerator::generateAtom(const Atom *atom, case Atom::Link: { const Node *node = 0; - QString myLink = getLink(atom, relative, marker, node); - if (myLink.isEmpty()) + QString myLink = getLink(atom, relative, marker, &node); + if (myLink.isEmpty()) { relative->doc().location().warning(tr("Cannot link to '%1' in %2") .arg(atom->string()) .arg(marker->plainFullName(relative))); + } beginLink(myLink, node, relative, marker); skipAhead = 1; } @@ -3421,6 +3426,9 @@ void HtmlGenerator::findAllClasses(const InnerNode *node) if ((*c)->status() == Node::Compat) { compatClasses.insert(className, *c); } + else if ((*c)->status() == Node::Obsolete) { + obsoleteClasses.insert(className, *c); + } else { nonCompatClasses.insert(className, *c); if ((*c)->status() == Node::Main) @@ -3609,10 +3617,10 @@ const QPair<QString,QString> HtmlGenerator::anchorForNode(const Node *node) QString HtmlGenerator::getLink(const Atom *atom, const Node *relative, CodeMarker *marker, - const Node *node) + const Node** node) { QString link; - node = 0; + *node = 0; if (atom->string().contains(":") && (atom->string().startsWith("file:") @@ -3636,40 +3644,74 @@ QString HtmlGenerator::getLink(const Atom *atom, QString first = path.first().trimmed(); if (first.isEmpty()) { - node = relative; + *node = relative; } else if (first.endsWith(".html")) { - node = tre->root()->findNode(first, Node::Fake); + *node = tre->root()->findNode(first, Node::Fake); } else { - node = marker->resolveTarget(first, tre, relative); - if (!node) - node = tre->findFakeNodeByTitle(first); - if (!node) - node = tre->findUnambiguousTarget(first, targetAtom); + *node = marker->resolveTarget(first, tre, relative); + if (!*node) + *node = tre->findFakeNodeByTitle(first); + if (!*node) + *node = tre->findUnambiguousTarget(first, targetAtom); } - if (node) { - if (!node->url().isEmpty()) - return node->url(); + if (*node) { + if (!(*node)->url().isEmpty()) + return (*node)->url(); else path.removeFirst(); } else { - node = relative; + *node = relative; + } + + if (*node) { + if ((*node)->status() == Node::Obsolete) { + if (relative) { + if (relative->parent() != *node) { + if (relative->status() != Node::Obsolete) { + relative->doc().location().warning(tr("Link to obsolete item '%1' in %2") + .arg(atom->string()) + .arg(marker->plainFullName(relative))); +#if 0 + qDebug() << "Link to Obsolete entity" + << (*node)->name(); + qDebug() << " relative entity" + << relative->name(); +#endif + } + } + } + else { + qDebug() << "Link to Obsolete entity" + << (*node)->name() << "no relative"; + } + } +#if 0 + else if ((*node)->status() == Node::Deprecated) { + qDebug() << "Link to Deprecated entity"; + } + else if ((*node)->status() == Node::Internal) { + qDebug() << "Link to Internal entity"; + } + //else + //qDebug() << "Node Status:" << (*node)->status(); +#endif } while (!path.isEmpty()) { - targetAtom = tre->findTarget(path.first(), node); + targetAtom = tre->findTarget(path.first(), *node); if (targetAtom == 0) break; path.removeFirst(); } if (path.isEmpty()) { - link = linkForNode(node, relative); + link = linkForNode(*node, relative); if (targetAtom) - link += "#" + refForAtom(targetAtom, node); + link += "#" + refForAtom(targetAtom, *node); } } return link; diff --git a/tools/qdoc3/htmlgenerator.h b/tools/qdoc3/htmlgenerator.h index e4a3ec1..a330d0c 100644 --- a/tools/qdoc3/htmlgenerator.h +++ b/tools/qdoc3/htmlgenerator.h @@ -221,7 +221,7 @@ class HtmlGenerator : public PageGenerator virtual QString getLink(const Atom *atom, const Node *relative, CodeMarker *marker, - const Node *node = 0); + const Node** node); virtual void generateDcf(const QString &fileBase, const QString &startPage, const QString &title, DcfSection &dcfRoot); @@ -275,6 +275,7 @@ class HtmlGenerator : public PageGenerator QMap<QString, const Node *> nonCompatClasses; QMap<QString, const Node *> mainClasses; QMap<QString, const Node *> compatClasses; + QMap<QString, const Node *> obsoleteClasses; QMap<QString, const Node *> namespaceIndex; QMap<QString, const Node *> serviceClasses; #ifdef QDOC_QML diff --git a/tools/qdoc3/qdoc3.pro b/tools/qdoc3/qdoc3.pro index 6c1cfd2..49a16e6 100644 --- a/tools/qdoc3/qdoc3.pro +++ b/tools/qdoc3/qdoc3.pro @@ -7,9 +7,11 @@ DEFINES += QT_NO_CAST_TO_ASCII QT = core xml CONFIG += console CONFIG -= debug_and_release_target +#CONFIG += debug build_all:!build_pass { CONFIG -= build_all CONFIG += release +# CONFIG += debug } mac:CONFIG -= app_bundle HEADERS += apigenerator.h \ diff --git a/tools/qdoc3/test/assistant.qdocconf b/tools/qdoc3/test/assistant.qdocconf index b82507f..44815ff 100644 --- a/tools/qdoc3/test/assistant.qdocconf +++ b/tools/qdoc3/test/assistant.qdocconf @@ -6,14 +6,14 @@ include(qt-defines.qdocconf) project = Qt Assistant description = Qt Assistant Manual -url = http://doc.qtsoftware.com/4.5 +url = http://doc.qtsoftware.com/4.6 indexes = $QT_BUILD_TREE/doc-build/html-qt/qt.index qhp.projects = Assistant qhp.Assistant.file = assistant.qhp -qhp.Assistant.namespace = com.trolltech.assistant.452 +qhp.Assistant.namespace = com.trolltech.assistant.460 qhp.Assistant.virtualFolder = qdoc qhp.Assistant.indexTitle = Qt Assistant Manual qhp.Assistant.extraFiles = classic.css images/qt-logo.png images/trolltech-logo.png diff --git a/tools/qdoc3/test/classic.css b/tools/qdoc3/test/classic.css index 79bcb80..4225a1b 100644 --- a/tools/qdoc3/test/classic.css +++ b/tools/qdoc3/test/classic.css @@ -125,7 +125,7 @@ table.generic, table.annotated } table td.memItemLeft { - width: 160px; + width: 180px; padding: 2px 0px 0px 8px; margin: 4px; border-width: 1px; diff --git a/tools/qdoc3/test/designer.qdocconf b/tools/qdoc3/test/designer.qdocconf index 9c0790e..88f8dc9 100644 --- a/tools/qdoc3/test/designer.qdocconf +++ b/tools/qdoc3/test/designer.qdocconf @@ -6,14 +6,14 @@ include(qt-defines.qdocconf) project = Qt Designer description = Qt Designer Manual -url = http://doc.qtsoftware.com/4.5 +url = http://doc.qtsoftware.com/4.6 indexes = $QT_BUILD_TREE/doc-build/html-qt/qt.index qhp.projects = Designer qhp.Designer.file = designer.qhp -qhp.Designer.namespace = com.trolltech.designer.452 +qhp.Designer.namespace = com.trolltech.designer.460 qhp.Designer.virtualFolder = qdoc qhp.Designer.indexTitle = Qt Designer Manual qhp.Designer.extraFiles = classic.css images/qt-logo.png images/trolltech-logo.png diff --git a/tools/qdoc3/test/linguist.qdocconf b/tools/qdoc3/test/linguist.qdocconf index da49abe..1c0a585 100644 --- a/tools/qdoc3/test/linguist.qdocconf +++ b/tools/qdoc3/test/linguist.qdocconf @@ -6,14 +6,14 @@ include(qt-defines.qdocconf) project = Qt Linguist description = Qt Linguist Manual -url = http://doc.qtsoftware.com/4.5 +url = http://doc.qtsoftware.com/4.6 indexes = $QT_BUILD_TREE/doc-build/html-qt/qt.index qhp.projects = Linguist qhp.Linguist.file = linguist.qhp -qhp.Linguist.namespace = com.trolltech.linguist.452 +qhp.Linguist.namespace = com.trolltech.linguist.460 qhp.Linguist.virtualFolder = qdoc qhp.Linguist.indexTitle = Qt Linguist Manual qhp.Linguist.extraFiles = classic.css images/qt-logo.png images/trolltech-logo.png diff --git a/tools/qdoc3/test/macros.qdocconf b/tools/qdoc3/test/macros.qdocconf index 85fe1db..f7dcdc0 100644 --- a/tools/qdoc3/test/macros.qdocconf +++ b/tools/qdoc3/test/macros.qdocconf @@ -1,14 +1,15 @@ +macro.aacute.HTML = "á" macro.Aring.HTML = "Å" macro.aring.HTML = "å" macro.Auml.HTML = "Ä" macro.author = "\\bold{Author:}" macro.br.HTML = "<br />" macro.BR.HTML = "<br />" -macro.aacute.HTML = "á" +macro.copyright.HTML = "©" macro.eacute.HTML = "é" -macro.iacute.HTML = "í" macro.gui = "\\bold" macro.hr.HTML = "<hr />" +macro.iacute.HTML = "í" macro.key = "\\bold" macro.menu = "\\bold" macro.note = "\\bold{Note:}" diff --git a/tools/qdoc3/test/qmake.qdocconf b/tools/qdoc3/test/qmake.qdocconf index 5e2cac7..0f98132 100644 --- a/tools/qdoc3/test/qmake.qdocconf +++ b/tools/qdoc3/test/qmake.qdocconf @@ -6,14 +6,14 @@ include(qt-defines.qdocconf) project = QMake description = QMake Manual -url = http://doc.qtsoftware.com/4.5 +url = http://doc.qtsoftware.com/4.6 indexes = $QT_BUILD_TREE/doc-build/html-qt/qt.index qhp.projects = qmake qhp.qmake.file = qmake.qhp -qhp.qmake.namespace = com.trolltech.qmake.452 +qhp.qmake.namespace = com.trolltech.qmake.460 qhp.qmake.virtualFolder = qdoc qhp.qmake.indexTitle = QMake Manual qhp.qmake.extraFiles = classic.css images/qt-logo.png images/trolltech-logo.png diff --git a/tools/qdoc3/test/qt-build-docs.qdocconf b/tools/qdoc3/test/qt-build-docs.qdocconf index d427a86..6c7a828 100644 --- a/tools/qdoc3/test/qt-build-docs.qdocconf +++ b/tools/qdoc3/test/qt-build-docs.qdocconf @@ -6,7 +6,7 @@ include(qt-defines.qdocconf) project = Qt description = Qt Reference Documentation -url = http://doc.qtsoftware.com/4.5 +url = http://doc.qtsoftware.com/4.6 edition.Console.modules = QtCore QtDBus QtNetwork QtScript QtSql QtXml \ QtXmlPatterns QtTest @@ -20,7 +20,7 @@ edition.DesktopLight.groups = -graphicsview-api qhp.projects = Qt qhp.Qt.file = qt.qhp -qhp.Qt.namespace = com.trolltech.qt.452 +qhp.Qt.namespace = com.trolltech.qt.460 qhp.Qt.virtualFolder = qdoc qhp.Qt.indexTitle = Qt Reference Documentation qhp.Qt.indexRoot = diff --git a/tools/qdoc3/test/qt-inc.qdocconf b/tools/qdoc3/test/qt-inc.qdocconf index bba8e39..3c8be8c 100644 --- a/tools/qdoc3/test/qt-inc.qdocconf +++ b/tools/qdoc3/test/qt-inc.qdocconf @@ -3,7 +3,7 @@ include(macros.qdocconf) project = Qt description = Qt Reference Documentation -url = http://doc.qtsoftware.com/4.5 +url = http://doc.qtsoftware.com/4.6 edition.Console = QtCore QtNetwork QtSql QtXml QtScript QtTest edition.Desktop = QtCore QtGui QtNetwork QtOpenGL QtSql QtSvg QtXml QtScript \ diff --git a/tools/qdoc3/test/qt.qdocconf b/tools/qdoc3/test/qt.qdocconf index 9c43b4f..3ce323c 100644 --- a/tools/qdoc3/test/qt.qdocconf +++ b/tools/qdoc3/test/qt.qdocconf @@ -8,7 +8,7 @@ project = Qt versionsym = version = %VERSION% description = Qt Reference Documentation -url = http://doc.qtsoftware.com/4.5 +url = http://doc.qtsoftware.com/4.6 edition.Console.modules = QtCore QtDBus QtNetwork QtScript QtSql QtXml \ QtXmlPatterns QtTest @@ -22,7 +22,7 @@ edition.DesktopLight.groups = -graphicsview-api qhp.projects = Qt qhp.Qt.file = qt.qhp -qhp.Qt.namespace = com.trolltech.qt.452 +qhp.Qt.namespace = com.trolltech.qt.460 qhp.Qt.virtualFolder = qdoc qhp.Qt.indexTitle = Qt Reference Documentation qhp.Qt.indexRoot = diff --git a/tools/qtestlib/wince/cetest/bootstrapped.pri b/tools/qtestlib/wince/cetest/bootstrapped.pri index 39f24c2..a31374e 100644 --- a/tools/qtestlib/wince/cetest/bootstrapped.pri +++ b/tools/qtestlib/wince/cetest/bootstrapped.pri @@ -35,4 +35,5 @@ SOURCES += \ $$QT_SOURCE_TREE/src/corelib/tools/qmap.cpp \ $$QT_SOURCE_TREE/src/corelib/tools/qbitarray.cpp \ $$QT_SOURCE_TREE/src/corelib/kernel/qmetatype.cpp \ - $$QT_SOURCE_TREE/src/corelib/kernel/qvariant.cpp + $$QT_SOURCE_TREE/src/corelib/kernel/qvariant.cpp \ + $$QT_SOURCE_TREE/src/corelib/codecs/qutfcodec.cpp diff --git a/tools/tools.pro b/tools/tools.pro index 6cf1760..ecdbcd1 100644 --- a/tools/tools.pro +++ b/tools/tools.pro @@ -26,7 +26,7 @@ embedded:SUBDIRS += kmap2qmap contains(QT_CONFIG, declarative):SUBDIRS += qmlviewer contains(QT_CONFIG, dbus):SUBDIRS += qdbus -!wince*:contains(QT_CONFIG, xmlpatterns): SUBDIRS += xmlpatterns +!wince*:contains(QT_CONFIG, xmlpatterns): SUBDIRS += xmlpatterns xmlpatternsvalidator embedded: SUBDIRS += makeqpf CONFIG+=ordered diff --git a/tools/xmlpatterns/qcoloringmessagehandler.cpp b/tools/xmlpatterns/qcoloringmessagehandler.cpp index 9616097..0ddb246 100644 --- a/tools/xmlpatterns/qcoloringmessagehandler.cpp +++ b/tools/xmlpatterns/qcoloringmessagehandler.cpp @@ -100,12 +100,18 @@ void ColoringMessageHandler::handleMessage(QtMsgType type, } case QtFatalMsg: { - Q_ASSERT(!sourceLocation.isNull()); const QString errorCode(identifier.fragment()); Q_ASSERT(!errorCode.isEmpty()); QUrl uri(identifier); uri.setFragment(QString()); + QString location; + + if(sourceLocation.isNull()) + location = QXmlPatternistCLI::tr("Unknown location"); + else + location = QString::fromLatin1(sourceLocation.uri().toEncoded()); + QString errorId; /* If it's a standard error code, we don't want to output the * whole URI. */ @@ -117,7 +123,7 @@ void ColoringMessageHandler::handleMessage(QtMsgType type, if(hasLine) { writeUncolored(QXmlPatternistCLI::tr("Error %1 in %2, at line %3, column %4: %5").arg(colorify(errorId, ErrorCode), - colorify(QString::fromLatin1(sourceLocation.uri().toEncoded()), Location), + colorify(location, Location), colorify(QString::number(sourceLocation.line()), Location), colorify(QString::number(sourceLocation.column()), Location), colorifyDescription(description))); @@ -125,7 +131,7 @@ void ColoringMessageHandler::handleMessage(QtMsgType type, else { writeUncolored(QXmlPatternistCLI::tr("Error %1 in %2: %3").arg(colorify(errorId, ErrorCode), - colorify(QString::fromLatin1(sourceLocation.uri().toEncoded()), Location), + colorify(location, Location), colorifyDescription(description))); } break; diff --git a/tools/xmlpatternsvalidator/main.cpp b/tools/xmlpatternsvalidator/main.cpp new file mode 100644 index 0000000..75ea8b4 --- /dev/null +++ b/tools/xmlpatternsvalidator/main.cpp @@ -0,0 +1,133 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the Patternist project on Trolltech Labs. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "main.h" + +#include <QtCore/QDebug> +#include <QtCore/QFile> +#include <QtCore/QUrl> +#include <QtXmlPatterns/QXmlSchema> +#include <QtXmlPatterns/QXmlSchemaValidator> + +QT_USE_NAMESPACE + +int main(int argc, char **argv) +{ + enum ExitCode + { + Valid = 0, + Invalid, + ParseError + }; + + enum ExecutionMode + { + InvalidMode, + SchemaOnlyMode, + SchemaAndInstanceMode, + InstanceOnlyMode + }; + + const QCoreApplication app(argc, argv); + QCoreApplication::setApplicationName(QLatin1String("xmlpatternsvalidator")); + + if (argc != 2 && argc != 3) { + qDebug() << QXmlPatternistCLI::tr("usage: xmlpatternsvalidator (<schema url> | <instance url> <schema url> | <instance url>)"); + return ParseError; + } + + // parse command line arguments + ExecutionMode mode = InvalidMode; + + if (argc == 2) { + // either it is a schema or instance document + + QString url = QFile::decodeName(argv[1]); + if (url.toLower().endsWith(QLatin1String(".xsd"))) { + mode = SchemaOnlyMode; + } else { + // as we could validate all types of xml documents, don't check the extension here + mode = InstanceOnlyMode; + } + } else if (argc == 3) { + mode = SchemaAndInstanceMode; + } + + // do validation + QXmlSchema schema; + + if (mode == SchemaOnlyMode) { + const QString schemaUri = QFile::decodeName(argv[1]); + + schema.load(QUrl(schemaUri)); + + if (schema.isValid()) + return Valid; + else + return Invalid; + } else if (mode == SchemaAndInstanceMode) { + const QString instanceUri = QFile::decodeName(argv[1]); + const QString schemaUri = QFile::decodeName(argv[2]); + + schema.load(QUrl(schemaUri)); + + if (!schema.isValid()) + return Invalid; + + QXmlSchemaValidator validator(schema); + if (validator.validate(QUrl(instanceUri))) + return Valid; + else + return Invalid; + } else if (mode == InstanceOnlyMode) { + const QString instanceUri = QFile::decodeName(argv[1]); + + QXmlSchemaValidator validator(schema); + if (validator.validate(QUrl(instanceUri))) + return Valid; + else + return Invalid; + } + + Q_ASSERT(false); + + return Invalid; +} diff --git a/tools/xmlpatternsvalidator/main.h b/tools/xmlpatternsvalidator/main.h new file mode 100644 index 0000000..a0eff3b --- /dev/null +++ b/tools/xmlpatternsvalidator/main.h @@ -0,0 +1,76 @@ +/**************************************************************************** + ** + ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + ** Contact: Qt Software Information (qt-info@nokia.com) + ** + ** This file is part of the Patternist project on Trolltech Labs. * ** + ** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ + ** + ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE + ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + ** + ****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef Patternist_main_h +#define Patternist_main_h + +#include <QtCore/QCoreApplication> + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +class QXmlPatternistCLI +{ +public: + Q_DECLARE_TR_FUNCTIONS(QXmlPatternistCLI) +private: + inline QXmlPatternistCLI(); + Q_DISABLE_COPY(QXmlPatternistCLI) +}; + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif diff --git a/tools/xmlpatternsvalidator/xmlpatternsvalidator.pro b/tools/xmlpatternsvalidator/xmlpatternsvalidator.pro new file mode 100644 index 0000000..dd5bd37 --- /dev/null +++ b/tools/xmlpatternsvalidator/xmlpatternsvalidator.pro @@ -0,0 +1,19 @@ +TEMPLATE = app +TARGET = xmlpatternsvalidator +DESTDIR = ../../bin +QT -= gui +QT += xmlpatterns + +target.path = $$[QT_INSTALL_BINS] +INSTALLS += target + +# This ensures we get stderr and stdout on Windows. +CONFIG += console + +# This ensures that this is a command-line program on OS X and not a GUI application. +CONFIG -= app_bundle + +SOURCES = main.cpp +HEADERS = main.h + +include(../src/common.pri) diff --git a/translations/qt_de.ts b/translations/qt_de.ts index 0d3686c..0212ae5 100644 --- a/translations/qt_de.ts +++ b/translations/qt_de.ts @@ -7232,7 +7232,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <message> <location line="+29"/> <source>The value of attribute %1 must of type %2, which %3 isn't.</source> - <translation>Der Wert des Attributs mit %1 muss vom Typ %2 sein. %3 ist kein gültiger Wert.</translation> + <translation>Der Wert des Attributs %1 muss vom Typ %2 sein. %3 ist kein gültiger Wert.</translation> </message> <message> <location line="+387"/> @@ -7302,7 +7302,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <message> <location line="+267"/> <source>Each name of a template parameter must be unique; %1 is duplicated.</source> - <translation>Die Namen von Vorlagenparameter müssen eindeutig sein, %1 existiert bereits.</translation> + <translation>Die Namen von Vorlagenparametern müssen eindeutig sein, %1 existiert bereits.</translation> </message> <message> <location line="-5750"/> @@ -7454,7 +7454,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <message> <location line="-3576"/> <source>A construct was encountered which only is allowed in XQuery.</source> - <translation>Dieses Konstrukt ist zur in XQuery zulässig.</translation> + <translation>Dieses Konstrukt ist nur in XQuery zulässig.</translation> </message> <message> <location line="+118"/> @@ -7563,17 +7563,17 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <message> <location line="+62"/> <source>The value of the XSL-T version attribute must be a value of type %1, which %2 isn't.</source> - <translation>Der Wert eines XSL-T Versionsattributes muss vom Typ %1 sein, was bei %2 nicht der Fall ist.</translation> + <translation>Der Wert eines XSL-T-Versionsattributes muss vom Typ %1 sein, was bei %2 nicht der Fall ist.</translation> </message> <message> <location line="+20"/> <source>Running an XSL-T 1.0 stylesheet with a 2.0 processor.</source> - <translation>Es wird ein XSL-T 1.0-Stylesheet mit einem Prozessor der Version 2.0 verarbeitet.</translation> + <translation>Es wird ein XSL-T-1.0-Stylesheet mit einem Prozessor der Version 2.0 verarbeitet.</translation> </message> <message> <location line="+108"/> <source>Unknown XSL-T attribute %1.</source> - <translation>Unbekanntes XSL-T Attribut: %1.</translation> + <translation>Unbekanntes XSL-T-Attribut: %1.</translation> </message> <message> <location line="+23"/> @@ -7588,7 +7588,7 @@ Bitte wählen Sie einen anderen Dateinamen.</translation> <message> <location line="+72"/> <source>If element %1 has no attribute %2, it cannot have attribute %3 or %4.</source> - <translation>Das Element %1 darf keines der Attribute %3 order %4 haben, solange es nicht das Attribut %2 hat.</translation> + <translation>Das Element %1 darf keines der Attribute %3 oder %4 haben, solange es nicht das Attribut %2 hat.</translation> </message> <message> <location line="+9"/> |